Skip to content

Commit

Permalink
Addressing review comments, minor fixes and javax.validation removal …
Browse files Browse the repository at this point in the history
…from POMs and docs
  • Loading branch information
Fabio Burzigotti committed Sep 12, 2022
1 parent f1b8298 commit 150ddf6
Show file tree
Hide file tree
Showing 14 changed files with 98 additions and 122 deletions.
6 changes: 2 additions & 4 deletions doc/java-generation-from-CRD.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,10 +101,8 @@ The generated code depends on a few dependencies to succesfully compile:
<artifactId>kubernetes-client</artifactId>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
<scope>provided</scope>
<groupId>io.fabric8</groupId>
<artifactId>generator-annotations</artifactId>
</dependency>
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,16 +82,16 @@ protected String getClassType() {
}

protected AbstractJSONSchema2Pojo(Config config, String description, final boolean isNullable, JsonNode defaultValue,
final Optional<ValidationProperties> validationProperties) {
final ValidationProperties validationProperties) {
this.config = config;
this.description = description;
this.isNullable = isNullable;
this.defaultValue = defaultValue;
validationProperties.ifPresent(values -> {
this.maximum = values.getMaximum();
this.minimum = values.getMinimum();
this.pattern = values.getPattern();
});
if (validationProperties != null) {
this.maximum = validationProperties.getMaximum();
this.minimum = validationProperties.getMinimum();
this.pattern = validationProperties.getPattern();
}
}

/** Takes a random string and manipulate it to be a valid Java identifier */
Expand Down Expand Up @@ -209,11 +209,11 @@ private static AbstractJSONSchema2Pojo fromJsonSchema(
prop.getDescription(),
isNullable,
prop.getDefault(),
Optional.of(ValidationProperties.Builder.getInstance()
ValidationProperties.Builder.getInstance()
.withMaximum(prop.getMaximum())
.withMinimum(prop.getMinimum())
.withPattern(prop.getPattern())
.build()));
.build());
case ARRAY:
return new JArray(
fromJsonSchema(
Expand Down Expand Up @@ -266,63 +266,4 @@ private static AbstractJSONSchema2Pojo fromJsonSchema(
throw new JavaGeneratorException("Unreachable " + nt.getType());
}
}

/**
* This stores the values for a generic JSON schema validation related properties, like `minimum`, `maximum`, etc.
*/
public static class ValidationProperties {
private final Double maximum;
private final Double minimum;
private final String pattern;

private ValidationProperties(final Double maximum, final Double minimum, final String pattern) {
this.maximum = maximum;
this.minimum = minimum;
this.pattern = pattern;
}

public Double getMaximum() {
return maximum;
}

public Double getMinimum() {
return minimum;
}

public String getPattern() {
return pattern;
}

public static final class Builder {
private Double maximum;
private Double minimum;
private String pattern;

private Builder() {
}

public static Builder getInstance() {
return new Builder();
}

public Builder withMaximum(final Double maximum) {
this.maximum = maximum;
return this;
}

public Builder withMinimum(final Double minimum) {
this.minimum = minimum;
return this;
}

public Builder withPattern(final String pattern) {
this.pattern = pattern;
return this;
}

public ValidationProperties build() {
return new ValidationProperties(maximum, minimum, pattern);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@
import com.github.javaparser.ast.type.ClassOrInterfaceType;
import io.fabric8.java.generator.Config;

import java.util.Optional;

import static io.fabric8.java.generator.nodes.Keywords.JAVA_UTIL_LIST;

public class JArray extends AbstractJSONSchema2Pojo {
Expand All @@ -30,7 +28,7 @@ public class JArray extends AbstractJSONSchema2Pojo {

public JArray(AbstractJSONSchema2Pojo nested, Config config, String description, final boolean isNullable,
JsonNode defaultValue) {
super(config, description, isNullable, defaultValue, Optional.empty());
super(config, description, isNullable, defaultValue, null);
this.type = new ClassOrInterfaceType()
.setName(JAVA_UTIL_LIST)
.setTypeArguments(new ClassOrInterfaceType().setName(nested.getType()))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
import io.fabric8.java.generator.Config;

import java.util.Collections;
import java.util.Optional;

public class JCRObject extends AbstractJSONSchema2Pojo implements JObjectExtraAnnotations {

Expand Down Expand Up @@ -54,7 +53,7 @@ public JCRObject(
boolean storage,
boolean served,
Config config) {
super(config, null, false, null, Optional.empty());
super(config, null, false, null, null);

this.pkg = (pkg == null) ? "" : pkg.trim();
this.type = (this.pkg.isEmpty()) ? type : pkg + "." + type;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.Optional;
import java.util.stream.Collectors;

import static io.fabric8.java.generator.nodes.Keywords.JAVA_LANG_STRING;
Expand All @@ -41,7 +40,7 @@ public class JEnum extends AbstractJSONSchema2Pojo {

public JEnum(String type, List<JsonNode> values, Config config, String description, final boolean isNullable,
JsonNode defaultValue) {
super(config, description, isNullable, defaultValue, Optional.empty());
super(config, description, isNullable, defaultValue, null);
this.type = AbstractJSONSchema2Pojo.sanitizeString(
type.substring(0, 1).toUpperCase() + type.substring(1));
this.values = values.stream().map(JsonNode::asText).collect(Collectors.toList());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@
import com.github.javaparser.ast.type.ClassOrInterfaceType;
import io.fabric8.java.generator.Config;

import java.util.Optional;

import static io.fabric8.java.generator.nodes.Keywords.JAVA_LANG_STRING;
import static io.fabric8.java.generator.nodes.Keywords.JAVA_UTIL_MAP;

Expand All @@ -33,7 +31,7 @@ public class JMap extends AbstractJSONSchema2Pojo {

public JMap(AbstractJSONSchema2Pojo nested, Config config, String description, final boolean isNullable,
JsonNode defaultValue) {
super(config, description, isNullable, defaultValue, Optional.empty());
super(config, description, isNullable, defaultValue, null);
this.type = new ClassOrInterfaceType()
.setName(JAVA_UTIL_MAP)
.setTypeArguments(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
import io.fabric8.kubernetes.client.utils.Serialization;
import io.fabric8.kubernetes.client.utils.Utils;

import java.io.InputStream;
import java.util.*;
import java.util.stream.Collectors;

Expand Down Expand Up @@ -66,7 +65,7 @@ public JObject(
Config config,
String description,
final boolean isNullable, JsonNode defaultValue) {
super(config, description, isNullable, defaultValue, Optional.empty());
super(config, description, isNullable, defaultValue, null);
this.required = new HashSet<>(Optional.ofNullable(required).orElse(Collections.emptyList()));
this.fields = new HashMap<>();
this.preserveUnknownFields = preserveUnknownFields;
Expand Down Expand Up @@ -247,7 +246,6 @@ public GeneratorResult generateJava() {
new SingleMemberAnnotationExpr(
new Name("com.fasterxml.jackson.annotation.JsonSetter"),
new NameExpr("nulls = com.fasterxml.jackson.annotation.Nulls.SET")));
// let's also add Fabric8 specific `Nullable` annotation, which will be reflected on generated CRD
objField.addAnnotation("io.fabric8.generator.annotation.Nullable");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,14 @@
import io.fabric8.java.generator.Config;

import java.util.ArrayList;
import java.util.Optional;

public class JPrimitive extends AbstractJSONSchema2Pojo {
private final String type;

private static final GeneratorResult empty = new GeneratorResult(new ArrayList<>(), new ArrayList<>());

public JPrimitive(String type, Config config, String description, final boolean isNullable, JsonNode defaultValue,
final Optional<ValidationProperties> validationProperties) {
final ValidationProperties validationProperties) {
super(config, description, isNullable, defaultValue, validationProperties);
this.type = type;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/**
* Copyright (C) 2015 Red Hat, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.fabric8.java.generator.nodes;

/**
* This stores the values for a generic JSON schema validation related properties, like `minimum`, `maximum`, etc.
*/
public class ValidationProperties {
private final Double maximum;
private final Double minimum;
private final String pattern;

private ValidationProperties(final Double maximum, final Double minimum, final String pattern) {
this.maximum = maximum;
this.minimum = minimum;
this.pattern = pattern;
}

public Double getMaximum() {
return maximum;
}

public Double getMinimum() {
return minimum;
}

public String getPattern() {
return pattern;
}

public static final class Builder {
private Double maximum;
private Double minimum;
private String pattern;

private Builder() {
}

public static Builder getInstance() {
return new Builder();
}

public Builder withMaximum(final Double maximum) {
this.maximum = maximum;
return this;
}

public Builder withMinimum(final Double minimum) {
this.minimum = minimum;
return this;
}

public Builder withPattern(final String pattern) {
this.pattern = pattern;
return this;
}

public ValidationProperties build() {
return new ValidationProperties(maximum, minimum, pattern);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ void testPrimitive() {
null,
Boolean.FALSE,
null,
Optional.empty());
null);

// Act
GeneratorResult res = primitive.generateJava();
Expand All @@ -130,7 +130,7 @@ void testPrimitiveWithNumericValidationConstraints() {
// Arrange
final Double expectedMaximum = 3.14;
final Double expectedMinimum = 0.0;
AbstractJSONSchema2Pojo.ValidationProperties validationProperties = AbstractJSONSchema2Pojo.ValidationProperties.Builder
ValidationProperties validationProperties = ValidationProperties.Builder
.getInstance()
.withMaximum(expectedMaximum)
.withMinimum(expectedMinimum)
Expand All @@ -141,7 +141,7 @@ void testPrimitiveWithNumericValidationConstraints() {
null,
Boolean.FALSE,
null,
Optional.of(validationProperties));
validationProperties);

// Act
GeneratorResult res = primitive.generateJava();
Expand All @@ -158,7 +158,7 @@ void testPrimitiveWithNumericValidationConstraints() {
void testPrimitiveWithAlphanumericValidationConstraints() {
// Arrange
final String expectedPattern = ".*whatever.*";
AbstractJSONSchema2Pojo.ValidationProperties validationProperties = AbstractJSONSchema2Pojo.ValidationProperties.Builder
ValidationProperties validationProperties = ValidationProperties.Builder
.getInstance()
.withPattern(expectedPattern)
.build();
Expand All @@ -168,7 +168,7 @@ void testPrimitiveWithAlphanumericValidationConstraints() {
null,
Boolean.FALSE,
null,
Optional.of(validationProperties));
validationProperties);

// Act
GeneratorResult res = primitive.generateJava();
Expand All @@ -191,7 +191,7 @@ void testArrayOfPrimitives() {
null,
Boolean.FALSE,
null,
Optional.empty()),
null),
defaultConfig,
null,
Boolean.FALSE,
Expand All @@ -215,7 +215,7 @@ void testMapOfPrimitives() {
null,
Boolean.FALSE,
null,
Optional.empty()),
null),
defaultConfig,
null,
Boolean.FALSE,
Expand Down
5 changes: 0 additions & 5 deletions java-generator/it/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,6 @@
<artifactId>java-diff-utils</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.sundr</groupId>
<artifactId>builder-annotations</artifactId>
Expand Down
6 changes: 0 additions & 6 deletions java-generator/it/src/it/cert-manager/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,6 @@
<version>@lombok.version@</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>@validation-api.version@</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
Expand Down

0 comments on commit 150ddf6

Please sign in to comment.