Skip to content

Commit

Permalink
fix fabric8io#4540: adding generic and raw as buildable
Browse files Browse the repository at this point in the history
  • Loading branch information
shawkins committed Nov 28, 2022
1 parent 55394f3 commit 09e1c59
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 56 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -11,6 +11,7 @@
* Fix #4535: The shell command string will now have single quotes sanitized
* Fix #4543: (Java Generator) additionalProperties JsonAny setter method generated as setAdditionalProperty
* Fix #4547: preventing timing issues with leader election cancel
* Fix #4540: treating GenericKubernetesResource and RawExtension as buildable
* Fix #4569: fixing jdk httpclient regression with 0 timeouts

#### Improvements
Expand Down
Expand Up @@ -16,12 +16,12 @@

package io.fabric8.kubernetes.jsonschema2pojo;

import com.sun.codemodel.JAnnotationArrayMember;
import com.sun.codemodel.JClassAlreadyExistsException;
import com.sun.codemodel.JCodeModel;
import com.sun.codemodel.JDefinedClass;
import io.sundr.builder.annotations.BuildableReference;
import org.jsonschema2pojo.GenerationConfig;

import java.util.List;

/**
* Adds more {@link BuildableReference}s to regular annotator to minimize
* the code changes in the built-in types from combining annotators.
Expand All @@ -33,15 +33,11 @@ public ExtensionTypeAnnotator(GenerationConfig generationConfig) {
}

@Override
protected void addBuildableTypes(JAnnotationArrayMember arrayMember) throws JClassAlreadyExistsException {
arrayMember.annotate(BuildableReference.class).param(BUILDABLE_REFERENCE_VALUE,
new JCodeModel()._class("io.fabric8.kubernetes.api.model.EnvVar"));
arrayMember.annotate(BuildableReference.class).param(BUILDABLE_REFERENCE_VALUE,
new JCodeModel()._class("io.fabric8.kubernetes.api.model.ContainerPort"));
arrayMember.annotate(BuildableReference.class).param(BUILDABLE_REFERENCE_VALUE,
new JCodeModel()._class("io.fabric8.kubernetes.api.model.Volume"));
arrayMember.annotate(BuildableReference.class).param(BUILDABLE_REFERENCE_VALUE,
new JCodeModel()._class("io.fabric8.kubernetes.api.model.VolumeMount"));
protected void addBuildableTypes(JDefinedClass clazz, List<String> types) {
types.add("io.fabric8.kubernetes.api.model.EnvVar");
types.add("io.fabric8.kubernetes.api.model.ContainerPort");
types.add("io.fabric8.kubernetes.api.model.Volume");
types.add("io.fabric8.kubernetes.api.model.VolumeMount");
}

}
Expand Up @@ -23,6 +23,9 @@
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.sun.codemodel.JAnnotationArrayMember;
import com.sun.codemodel.JAnnotationUse;
import com.sun.codemodel.JClassAlreadyExistsException;
import com.sun.codemodel.JCodeModel;
import com.sun.codemodel.JDefinedClass;
import com.sun.codemodel.JExpressionImpl;
import com.sun.codemodel.JFieldVar;
Expand All @@ -31,6 +34,7 @@
import io.fabric8.kubernetes.model.annotation.Version;
import io.fabric8.kubernetes.model.jackson.JsonUnwrappedDeserializer;
import io.sundr.builder.annotations.Buildable;
import io.sundr.builder.annotations.BuildableReference;
import io.sundr.transform.annotations.TemplateTransformation;
import io.sundr.transform.annotations.TemplateTransformations;
import lombok.EqualsAndHashCode;
Expand All @@ -41,13 +45,18 @@
import org.jsonschema2pojo.Jackson2Annotator;

import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class KubernetesCoreTypeAnnotator extends Jackson2Annotator {

public static final String BUILDABLE_REFERENCE_VALUE = "value";

protected static final String ANNOTATION_VALUE = "value";
protected static final String API_VERSION = "apiVersion";
protected static final String METADATA = "metadata";
Expand Down Expand Up @@ -185,12 +194,34 @@ public void propertyField(JFieldVar field, JDefinedClass clazz, String propertyN
}

protected void processBuildable(JDefinedClass clazz) {
clazz.annotate(Buildable.class)
JAnnotationUse buildable = clazz.annotate(Buildable.class)
.param("editableEnabled", false)
.param("validationEnabled", false)
.param("generateBuilderPackage", true)
.param("generateBuilderPackage", generateBuilderPackage())
.param("lazyCollectionInitEnabled", false)
.param("builderPackage", "io.fabric8.kubernetes.api.builder");

List<String> types = new ArrayList<>();
addBuildableTypes(clazz, types);
if (!types.isEmpty()) {
JAnnotationArrayMember arrayMember = buildable.paramArray("refs");
types.stream().forEach(s -> {
try {
arrayMember.annotate(BuildableReference.class).param(BUILDABLE_REFERENCE_VALUE,
new JCodeModel()._class(s));
} catch (JClassAlreadyExistsException e) {
e.printStackTrace();
}
});
}
}

protected boolean generateBuilderPackage() {
return true;
}

protected void addBuildableTypes(JDefinedClass clazz, List<String> types) {

}

private boolean hasInterfaceFields(JsonNode propertiesNode) {
Expand Down
Expand Up @@ -15,60 +15,40 @@
*/
package io.fabric8.kubernetes.jsonschema2pojo;

import com.sun.codemodel.JAnnotationArrayMember;
import com.sun.codemodel.JAnnotationUse;
import com.sun.codemodel.JClassAlreadyExistsException;
import com.sun.codemodel.JCodeModel;
import com.sun.codemodel.JDefinedClass;
import io.sundr.builder.annotations.Buildable;
import io.sundr.builder.annotations.BuildableReference;
import org.jsonschema2pojo.GenerationConfig;

public class KubernetesTypeAnnotator extends KubernetesCoreTypeAnnotator {
import java.util.List;

public static final String BUILDABLE_REFERENCE_VALUE = "value";
public class KubernetesTypeAnnotator extends KubernetesCoreTypeAnnotator {

public KubernetesTypeAnnotator(GenerationConfig generationConfig) {
super(generationConfig);
}

@Override
public void processBuildable(JDefinedClass clazz) {
try {
JAnnotationUse buildable = clazz.annotate(Buildable.class)
.param("editableEnabled", false)
.param("validationEnabled", false)
.param("generateBuilderPackage", false)
.param("lazyCollectionInitEnabled", false)
.param("builderPackage", "io.fabric8.kubernetes.api.builder");

JAnnotationArrayMember arrayMember = buildable.paramArray("refs");
arrayMember.annotate(BuildableReference.class).param(BUILDABLE_REFERENCE_VALUE,
new JCodeModel()._class("io.fabric8.kubernetes.api.model.ObjectMeta"));
arrayMember.annotate(BuildableReference.class).param(BUILDABLE_REFERENCE_VALUE,
new JCodeModel()._class("io.fabric8.kubernetes.api.model.LabelSelector"));
arrayMember.annotate(BuildableReference.class).param(BUILDABLE_REFERENCE_VALUE,
new JCodeModel()._class("io.fabric8.kubernetes.api.model.Container"));
arrayMember.annotate(BuildableReference.class).param(BUILDABLE_REFERENCE_VALUE,
new JCodeModel()._class("io.fabric8.kubernetes.api.model.PodTemplateSpec"));
arrayMember.annotate(BuildableReference.class).param(BUILDABLE_REFERENCE_VALUE,
new JCodeModel()._class("io.fabric8.kubernetes.api.model.ResourceRequirements"));
arrayMember.annotate(BuildableReference.class).param(BUILDABLE_REFERENCE_VALUE,
new JCodeModel()._class("io.fabric8.kubernetes.api.model.IntOrString"));
arrayMember.annotate(BuildableReference.class).param(BUILDABLE_REFERENCE_VALUE,
new JCodeModel()._class("io.fabric8.kubernetes.api.model.ObjectReference"));
arrayMember.annotate(BuildableReference.class).param(BUILDABLE_REFERENCE_VALUE,
new JCodeModel()._class("io.fabric8.kubernetes.api.model.LocalObjectReference"));
arrayMember.annotate(BuildableReference.class).param(BUILDABLE_REFERENCE_VALUE,
new JCodeModel()._class("io.fabric8.kubernetes.api.model.PersistentVolumeClaim"));
addBuildableTypes(arrayMember);
} catch (JClassAlreadyExistsException e) {
e.printStackTrace();
}
protected boolean generateBuilderPackage() {
return false;
}

protected void addBuildableTypes(JAnnotationArrayMember arrayMember) throws JClassAlreadyExistsException {

@Override
protected void addBuildableTypes(JDefinedClass clazz, List<String> types) {
types.add("io.fabric8.kubernetes.api.model.ObjectMeta");
types.add("io.fabric8.kubernetes.api.model.LabelSelector");
types.add("io.fabric8.kubernetes.api.model.Container");
types.add("io.fabric8.kubernetes.api.model.PodTemplateSpec");
types.add("io.fabric8.kubernetes.api.model.ResourceRequirements");
types.add("io.fabric8.kubernetes.api.model.IntOrString");
types.add("io.fabric8.kubernetes.api.model.ObjectReference");
types.add("io.fabric8.kubernetes.api.model.LocalObjectReference");
types.add("io.fabric8.kubernetes.api.model.PersistentVolumeClaim");
if (clazz.fields().values().stream()
.anyMatch(f -> f.type().fullName().contains("io.fabric8.kubernetes.api.model.KubernetesResource")
|| f.type().fullName().contains("io.fabric8.kubernetes.api.model.HasMetadata")
|| f.type().fullName().contains("io.fabric8.kubernetes.api.model.RawExtension"))) {
types.add("io.fabric8.kubernetes.api.model.GenericKubernetesResource");
types.add("io.fabric8.kubernetes.api.model.runtime.RawExtension");
}
}

}

0 comments on commit 09e1c59

Please sign in to comment.