From 1770b2ef2e8c7ad8e1c34cd72a08cb67039cc391 Mon Sep 17 00:00:00 2001 From: Samuel Hawker Date: Fri, 10 Apr 2020 18:00:03 +0100 Subject: [PATCH] feat: Add JsonPropertyOrder annotation to all classes Stage 1 of Issue 2779 Validate @JsonPropertyOrder present for all CRD classes and subclasses with exception of Java primitive `Object` Added test class to validate this new functionality and added Exception: InvalidCrdException Followup PRs will see the check that JsonPropertyOrder contains exactly all of the classes fields and these fields will be ordered for each individual class Contributes to: #2779 Signed-off-by: Samuel Hawker --- .../io/strimzi/api/kafka/model/AclRule.java | 2 + .../api/kafka/model/AclRuleResource.java | 2 + .../kafka/model/CertAndKeySecretSource.java | 2 + .../api/kafka/model/CertSecretSource.java | 2 + .../api/kafka/model/ContainerEnvVar.java | 2 + .../api/kafka/model/GenericSecretSource.java | 2 + .../strimzi/api/kafka/model/JvmOptions.java | 2 + .../api/kafka/model/KafkaAuthorization.java | 2 + .../kafka/model/KafkaBridgeConsumerSpec.java | 2 + .../kafka/model/KafkaBridgeHttpConfig.java | 2 + .../kafka/model/KafkaBridgeProducerSpec.java | 2 + .../api/kafka/model/KafkaBridgeTls.java | 2 + .../api/kafka/model/KafkaConnectTls.java | 2 + .../kafka/model/KafkaJmxAuthentication.java | 2 + .../api/kafka/model/KafkaJmxOptions.java | 2 + .../api/kafka/model/KafkaMirrorMaker2Tls.java | 2 + .../api/kafka/model/KafkaMirrorMakerTls.java | 2 + .../kafka/model/KafkaUserAuthentication.java | 2 + .../kafka/model/KafkaUserAuthorization.java | 2 + .../api/kafka/model/KafkaUserQuotas.java | 4 +- .../io/strimzi/api/kafka/model/Logging.java | 2 + .../api/kafka/model/PasswordSecretSource.java | 2 + .../io/strimzi/api/kafka/model/Probe.java | 2 + .../java/io/strimzi/api/kafka/model/Rack.java | 2 + .../api/kafka/model/SystemProperty.java | 2 + .../strimzi/api/kafka/model/TlsSidecar.java | 2 + .../KafkaClientAuthentication.java | 2 + .../KafkaClientAuthenticationOAuth.java | 2 + .../KafkaClientAuthenticationPlain.java | 2 + .../KafkaClientAuthenticationScramSha512.java | 2 + .../KafkaClientAuthenticationTls.java | 2 + .../connect/ExternalConfigurationEnv.java | 2 + .../ExternalConfigurationEnvVarSource.java | 2 + .../ExternalConfigurationVolumeSource.java | 2 + .../ExternalListenerBootstrapOverride.java | 2 + ...IngressListenerBootstrapConfiguration.java | 2 + .../listener/KafkaListenerAuthentication.java | 2 + .../KafkaListenerAuthenticationOAuth.java | 2 + ...afkaListenerAuthenticationScramSha512.java | 2 + .../KafkaListenerAuthenticationTls.java | 5 +- .../model/listener/KafkaListenerExternal.java | 2 + .../model/listener/KafkaListenerPlain.java | 2 + .../model/listener/KafkaListenerTls.java | 2 + ...LoadBalancerListenerBootstrapOverride.java | 2 + .../NodePortListenerBootstrapOverride.java | 2 + .../RouteListenerBootstrapOverride.java | 2 + .../api/kafka/model/status/Status.java | 2 + .../kafka/model/storage/EphemeralStorage.java | 2 + .../model/storage/SingleVolumeStorage.java | 2 + .../api/kafka/model/storage/Storage.java | 2 + .../model/template/ContainerTemplate.java | 2 + .../api/kafka/model/tracing/Tracing.java | 2 + .../io/strimzi/crdgenerator/CrdGenerator.java | 7 + .../crdgenerator/InvalidCrdException.java | 12 + .../crdgenerator/CrdGeneratorTest.java | 30 +- .../crdgenerator/DocGeneratorTest.java | 4 +- .../io/strimzi/crdgenerator/ExampleCrd.java | 280 ---------------- .../io/strimzi/crdgenerator/PropertyTest.java | 114 +++---- .../io/strimzi/crdgenerator/TestCrds.java | 317 ++++++++++++++++++ .../io/strimzi/crdgenerator/simpleTest.adoc | 18 +- 60 files changed, 532 insertions(+), 359 deletions(-) create mode 100644 crd-generator/src/main/java/io/strimzi/crdgenerator/InvalidCrdException.java delete mode 100644 crd-generator/src/test/java/io/strimzi/crdgenerator/ExampleCrd.java create mode 100644 crd-generator/src/test/java/io/strimzi/crdgenerator/TestCrds.java diff --git a/api/src/main/java/io/strimzi/api/kafka/model/AclRule.java b/api/src/main/java/io/strimzi/api/kafka/model/AclRule.java index f0eaf51fdf9..5ac588640e6 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/AclRule.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/AclRule.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.crdgenerator.annotations.Description; import io.sundr.builder.annotations.Buildable; import io.vertx.core.cli.annotations.DefaultValue; @@ -23,6 +24,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class AclRule implements UnknownPropertyPreserving, Serializable { diff --git a/api/src/main/java/io/strimzi/api/kafka/model/AclRuleResource.java b/api/src/main/java/io/strimzi/api/kafka/model/AclRuleResource.java index f8c2c7e775d..2deba61f2d7 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/AclRuleResource.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/AclRuleResource.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import io.strimzi.crdgenerator.annotations.Description; @@ -27,6 +28,7 @@ @JsonSubTypes.Type(name = AclRuleTransactionalIdResource.TYPE_TRANSACTIONAL_ID, value = AclRuleTransactionalIdResource.class), }) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public abstract class AclRuleResource implements UnknownPropertyPreserving, Serializable { diff --git a/api/src/main/java/io/strimzi/api/kafka/model/CertAndKeySecretSource.java b/api/src/main/java/io/strimzi/api/kafka/model/CertAndKeySecretSource.java index 451ed4e0da0..c6738e7c742 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/CertAndKeySecretSource.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/CertAndKeySecretSource.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.crdgenerator.annotations.Description; import io.sundr.builder.annotations.Buildable; import lombok.EqualsAndHashCode; @@ -18,6 +19,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode(callSuper = true) public class CertAndKeySecretSource extends CertSecretSource { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/CertSecretSource.java b/api/src/main/java/io/strimzi/api/kafka/model/CertSecretSource.java index 2502b923c58..3ea99a922fa 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/CertSecretSource.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/CertSecretSource.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.crdgenerator.annotations.Description; import io.sundr.builder.annotations.Buildable; import lombok.EqualsAndHashCode; @@ -22,6 +23,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class CertSecretSource implements UnknownPropertyPreserving, Serializable { diff --git a/api/src/main/java/io/strimzi/api/kafka/model/ContainerEnvVar.java b/api/src/main/java/io/strimzi/api/kafka/model/ContainerEnvVar.java index cc18827e092..e374828309b 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/ContainerEnvVar.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/ContainerEnvVar.java @@ -6,6 +6,7 @@ package io.strimzi.api.kafka.model; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.crdgenerator.annotations.Description; import io.sundr.builder.annotations.Buildable; import lombok.EqualsAndHashCode; @@ -22,6 +23,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_DEFAULT) +@JsonPropertyOrder({}) @EqualsAndHashCode public class ContainerEnvVar implements UnknownPropertyPreserving, Serializable { diff --git a/api/src/main/java/io/strimzi/api/kafka/model/GenericSecretSource.java b/api/src/main/java/io/strimzi/api/kafka/model/GenericSecretSource.java index 525aa22bbdd..86c393555db 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/GenericSecretSource.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/GenericSecretSource.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.crdgenerator.annotations.Description; import io.sundr.builder.annotations.Buildable; import lombok.EqualsAndHashCode; @@ -22,6 +23,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder() @EqualsAndHashCode public class GenericSecretSource implements UnknownPropertyPreserving, Serializable { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/JvmOptions.java b/api/src/main/java/io/strimzi/api/kafka/model/JvmOptions.java index 0046d126197..ea84dfbab26 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/JvmOptions.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/JvmOptions.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.crdgenerator.annotations.Description; import io.strimzi.crdgenerator.annotations.Pattern; import io.sundr.builder.annotations.Buildable; @@ -24,6 +25,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_DEFAULT) +@JsonPropertyOrder({}) @EqualsAndHashCode public class JvmOptions implements UnknownPropertyPreserving, Serializable { diff --git a/api/src/main/java/io/strimzi/api/kafka/model/KafkaAuthorization.java b/api/src/main/java/io/strimzi/api/kafka/model/KafkaAuthorization.java index ea38d8e9577..6050cae030f 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/KafkaAuthorization.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/KafkaAuthorization.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import io.strimzi.crdgenerator.annotations.Description; @@ -25,6 +26,7 @@ @JsonSubTypes.Type(name = KafkaAuthorizationKeycloak.TYPE_KEYCLOAK, value = KafkaAuthorizationKeycloak.class) }) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public abstract class KafkaAuthorization implements UnknownPropertyPreserving, Serializable { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/KafkaBridgeConsumerSpec.java b/api/src/main/java/io/strimzi/api/kafka/model/KafkaBridgeConsumerSpec.java index d2aa6a61ca4..c17deebc251 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/KafkaBridgeConsumerSpec.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/KafkaBridgeConsumerSpec.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.crdgenerator.annotations.Description; import io.sundr.builder.annotations.Buildable; import lombok.EqualsAndHashCode; @@ -16,6 +17,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode(callSuper = true) public class KafkaBridgeConsumerSpec extends KafkaBridgeClientSpec { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/KafkaBridgeHttpConfig.java b/api/src/main/java/io/strimzi/api/kafka/model/KafkaBridgeHttpConfig.java index fa984d61ef7..2cf89e529d5 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/KafkaBridgeHttpConfig.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/KafkaBridgeHttpConfig.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.crdgenerator.annotations.Description; import io.strimzi.crdgenerator.annotations.Minimum; import io.sundr.builder.annotations.Buildable; @@ -23,6 +24,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class KafkaBridgeHttpConfig implements UnknownPropertyPreserving, Serializable { diff --git a/api/src/main/java/io/strimzi/api/kafka/model/KafkaBridgeProducerSpec.java b/api/src/main/java/io/strimzi/api/kafka/model/KafkaBridgeProducerSpec.java index 6f50947ff7a..54695c8e951 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/KafkaBridgeProducerSpec.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/KafkaBridgeProducerSpec.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.crdgenerator.annotations.Description; import io.sundr.builder.annotations.Buildable; import lombok.EqualsAndHashCode; @@ -16,6 +17,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode(callSuper = true) public class KafkaBridgeProducerSpec extends KafkaBridgeClientSpec { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/KafkaBridgeTls.java b/api/src/main/java/io/strimzi/api/kafka/model/KafkaBridgeTls.java index ff8327b69f4..ed76fa87e07 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/KafkaBridgeTls.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/KafkaBridgeTls.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.crdgenerator.annotations.Description; import io.sundr.builder.annotations.Buildable; import lombok.EqualsAndHashCode; @@ -24,6 +25,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class KafkaBridgeTls implements UnknownPropertyPreserving, Serializable { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/KafkaConnectTls.java b/api/src/main/java/io/strimzi/api/kafka/model/KafkaConnectTls.java index 674b69f00f9..4e4e6f8e930 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/KafkaConnectTls.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/KafkaConnectTls.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.crdgenerator.annotations.Description; import io.sundr.builder.annotations.Buildable; import lombok.EqualsAndHashCode; @@ -24,6 +25,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class KafkaConnectTls implements UnknownPropertyPreserving, Serializable { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/KafkaJmxAuthentication.java b/api/src/main/java/io/strimzi/api/kafka/model/KafkaJmxAuthentication.java index fce679ee747..32ba4ccf1a0 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/KafkaJmxAuthentication.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/KafkaJmxAuthentication.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import io.strimzi.crdgenerator.annotations.Description; @@ -21,6 +22,7 @@ include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "type") @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode @JsonSubTypes({ @JsonSubTypes.Type(name = KafkaJmxAuthenticationPassword.TYPE_PASSWORD, value = KafkaJmxAuthenticationPassword.class) diff --git a/api/src/main/java/io/strimzi/api/kafka/model/KafkaJmxOptions.java b/api/src/main/java/io/strimzi/api/kafka/model/KafkaJmxOptions.java index 954ed358779..7dfa734224d 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/KafkaJmxOptions.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/KafkaJmxOptions.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.crdgenerator.annotations.Description; import io.sundr.builder.annotations.Buildable; import lombok.EqualsAndHashCode; @@ -19,6 +20,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class KafkaJmxOptions implements UnknownPropertyPreserving, Serializable { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/KafkaMirrorMaker2Tls.java b/api/src/main/java/io/strimzi/api/kafka/model/KafkaMirrorMaker2Tls.java index c67234b5a46..21572cf6d49 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/KafkaMirrorMaker2Tls.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/KafkaMirrorMaker2Tls.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.crdgenerator.annotations.Description; import io.sundr.builder.annotations.Buildable; import lombok.EqualsAndHashCode; @@ -24,6 +25,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class KafkaMirrorMaker2Tls implements UnknownPropertyPreserving, Serializable { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/KafkaMirrorMakerTls.java b/api/src/main/java/io/strimzi/api/kafka/model/KafkaMirrorMakerTls.java index 8ac1423ee9a..1c6594789c5 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/KafkaMirrorMakerTls.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/KafkaMirrorMakerTls.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.crdgenerator.annotations.Description; import io.strimzi.crdgenerator.annotations.DescriptionFile; import io.sundr.builder.annotations.Buildable; @@ -26,6 +27,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class KafkaMirrorMakerTls implements UnknownPropertyPreserving, Serializable { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/KafkaUserAuthentication.java b/api/src/main/java/io/strimzi/api/kafka/model/KafkaUserAuthentication.java index cdc9080cbf1..013384c889d 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/KafkaUserAuthentication.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/KafkaUserAuthentication.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import io.strimzi.crdgenerator.annotations.Description; @@ -22,6 +23,7 @@ @JsonSubTypes.Type(name = KafkaUserScramSha512ClientAuthentication.TYPE_SCRAM_SHA_512, value = KafkaUserScramSha512ClientAuthentication.class), }) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public abstract class KafkaUserAuthentication implements UnknownPropertyPreserving, Serializable { diff --git a/api/src/main/java/io/strimzi/api/kafka/model/KafkaUserAuthorization.java b/api/src/main/java/io/strimzi/api/kafka/model/KafkaUserAuthorization.java index d106080cbc9..d51e3709d41 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/KafkaUserAuthorization.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/KafkaUserAuthorization.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import io.strimzi.crdgenerator.annotations.Description; @@ -21,6 +22,7 @@ @JsonSubTypes.Type(name = KafkaUserAuthorizationSimple.TYPE_SIMPLE, value = KafkaUserAuthorizationSimple.class), }) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public abstract class KafkaUserAuthorization implements UnknownPropertyPreserving, Serializable { diff --git a/api/src/main/java/io/strimzi/api/kafka/model/KafkaUserQuotas.java b/api/src/main/java/io/strimzi/api/kafka/model/KafkaUserQuotas.java index 2c39b6853b4..e89cb080a7c 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/KafkaUserQuotas.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/KafkaUserQuotas.java @@ -6,11 +6,12 @@ package io.strimzi.api.kafka.model; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import io.strimzi.crdgenerator.annotations.Description; import io.strimzi.crdgenerator.annotations.DescriptionFile; import io.strimzi.crdgenerator.annotations.Minimum; import io.sundr.builder.annotations.Buildable; import lombok.EqualsAndHashCode; -import io.strimzi.crdgenerator.annotations.Description; import java.io.Serializable; import java.util.HashMap; @@ -27,6 +28,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class KafkaUserQuotas implements UnknownPropertyPreserving, Serializable { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/Logging.java b/api/src/main/java/io/strimzi/api/kafka/model/Logging.java index 9c2b362fd2c..ac6567fc1a6 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/Logging.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/Logging.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import io.strimzi.crdgenerator.annotations.Description; @@ -25,6 +26,7 @@ @JsonSubTypes.Type(name = ExternalLogging.TYPE_EXTERNAL, value = ExternalLogging.class), }) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public abstract class Logging implements UnknownPropertyPreserving, Serializable { diff --git a/api/src/main/java/io/strimzi/api/kafka/model/PasswordSecretSource.java b/api/src/main/java/io/strimzi/api/kafka/model/PasswordSecretSource.java index 883cc25beac..62397567093 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/PasswordSecretSource.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/PasswordSecretSource.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.crdgenerator.annotations.Description; import io.sundr.builder.annotations.Buildable; import lombok.EqualsAndHashCode; @@ -22,6 +23,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class PasswordSecretSource implements UnknownPropertyPreserving, Serializable { diff --git a/api/src/main/java/io/strimzi/api/kafka/model/Probe.java b/api/src/main/java/io/strimzi/api/kafka/model/Probe.java index c2d04a16e46..ea17acf63d0 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/Probe.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/Probe.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.crdgenerator.annotations.Description; import io.strimzi.crdgenerator.annotations.Minimum; import io.sundr.builder.annotations.Buildable; @@ -23,6 +24,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class Probe implements UnknownPropertyPreserving, Serializable { diff --git a/api/src/main/java/io/strimzi/api/kafka/model/Rack.java b/api/src/main/java/io/strimzi/api/kafka/model/Rack.java index 005652bfbac..806cf9472e4 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/Rack.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/Rack.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.crdgenerator.annotations.Description; import io.strimzi.crdgenerator.annotations.Example; import io.sundr.builder.annotations.Buildable; @@ -23,6 +24,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class Rack implements UnknownPropertyPreserving, Serializable { diff --git a/api/src/main/java/io/strimzi/api/kafka/model/SystemProperty.java b/api/src/main/java/io/strimzi/api/kafka/model/SystemProperty.java index c59a063114f..155bbdd0dc5 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/SystemProperty.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/SystemProperty.java @@ -6,6 +6,7 @@ package io.strimzi.api.kafka.model; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.crdgenerator.annotations.Description; import io.sundr.builder.annotations.Buildable; import lombok.EqualsAndHashCode; @@ -22,6 +23,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_DEFAULT) +@JsonPropertyOrder({}) @EqualsAndHashCode public class SystemProperty implements UnknownPropertyPreserving, Serializable { diff --git a/api/src/main/java/io/strimzi/api/kafka/model/TlsSidecar.java b/api/src/main/java/io/strimzi/api/kafka/model/TlsSidecar.java index b9540b03531..ccc8f74201c 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/TlsSidecar.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/TlsSidecar.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.crdgenerator.annotations.Description; import io.sundr.builder.annotations.Buildable; import io.vertx.core.cli.annotations.DefaultValue; @@ -21,6 +22,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode(callSuper = true) public class TlsSidecar extends Sidecar { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/authentication/KafkaClientAuthentication.java b/api/src/main/java/io/strimzi/api/kafka/model/authentication/KafkaClientAuthentication.java index 1f1945ba258..a5cb98da518 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/authentication/KafkaClientAuthentication.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/authentication/KafkaClientAuthentication.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model.authentication; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import io.strimzi.api.kafka.model.UnknownPropertyPreserving; @@ -28,6 +29,7 @@ @JsonSubTypes.Type(name = KafkaClientAuthenticationOAuth.TYPE_OAUTH, value = KafkaClientAuthenticationOAuth.class), }) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public abstract class KafkaClientAuthentication implements UnknownPropertyPreserving, Serializable { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/authentication/KafkaClientAuthenticationOAuth.java b/api/src/main/java/io/strimzi/api/kafka/model/authentication/KafkaClientAuthenticationOAuth.java index 5fee2717ecd..599e394e870 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/authentication/KafkaClientAuthenticationOAuth.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/authentication/KafkaClientAuthenticationOAuth.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model.authentication; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.api.kafka.model.CertSecretSource; import io.strimzi.api.kafka.model.Constants; import io.strimzi.api.kafka.model.GenericSecretSource; @@ -24,6 +25,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class KafkaClientAuthenticationOAuth extends KafkaClientAuthentication { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/authentication/KafkaClientAuthenticationPlain.java b/api/src/main/java/io/strimzi/api/kafka/model/authentication/KafkaClientAuthenticationPlain.java index ad84f8a7c53..d57cc203879 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/authentication/KafkaClientAuthenticationPlain.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/authentication/KafkaClientAuthenticationPlain.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model.authentication; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.api.kafka.model.Constants; import io.strimzi.api.kafka.model.PasswordSecretSource; import io.strimzi.crdgenerator.annotations.Description; @@ -21,6 +22,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class KafkaClientAuthenticationPlain extends KafkaClientAuthentication { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/authentication/KafkaClientAuthenticationScramSha512.java b/api/src/main/java/io/strimzi/api/kafka/model/authentication/KafkaClientAuthenticationScramSha512.java index 91d7e7f0ddd..ab9360c66aa 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/authentication/KafkaClientAuthenticationScramSha512.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/authentication/KafkaClientAuthenticationScramSha512.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model.authentication; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.api.kafka.model.Constants; import io.strimzi.api.kafka.model.PasswordSecretSource; import io.strimzi.crdgenerator.annotations.Description; @@ -21,6 +22,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class KafkaClientAuthenticationScramSha512 extends KafkaClientAuthentication { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/authentication/KafkaClientAuthenticationTls.java b/api/src/main/java/io/strimzi/api/kafka/model/authentication/KafkaClientAuthenticationTls.java index 295edd1f75e..5aac744327f 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/authentication/KafkaClientAuthenticationTls.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/authentication/KafkaClientAuthenticationTls.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model.authentication; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.api.kafka.model.CertAndKeySecretSource; import io.strimzi.api.kafka.model.Constants; import io.strimzi.crdgenerator.annotations.Description; @@ -21,6 +22,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class KafkaClientAuthenticationTls extends KafkaClientAuthentication { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/connect/ExternalConfigurationEnv.java b/api/src/main/java/io/strimzi/api/kafka/model/connect/ExternalConfigurationEnv.java index 3533d2b0c25..2c9aa8503f9 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/connect/ExternalConfigurationEnv.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/connect/ExternalConfigurationEnv.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.api.kafka.model.Constants; import io.strimzi.api.kafka.model.UnknownPropertyPreserving; import io.strimzi.crdgenerator.annotations.Description; @@ -24,6 +25,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_DEFAULT) +@JsonPropertyOrder({}) @EqualsAndHashCode public class ExternalConfigurationEnv implements Serializable, UnknownPropertyPreserving { diff --git a/api/src/main/java/io/strimzi/api/kafka/model/connect/ExternalConfigurationEnvVarSource.java b/api/src/main/java/io/strimzi/api/kafka/model/connect/ExternalConfigurationEnvVarSource.java index a3caea238be..f21b877d6fc 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/connect/ExternalConfigurationEnvVarSource.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/connect/ExternalConfigurationEnvVarSource.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model.connect; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.fabric8.kubernetes.api.model.ConfigMapKeySelector; import io.fabric8.kubernetes.api.model.SecretKeySelector; import io.strimzi.api.kafka.model.Constants; @@ -26,6 +27,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_DEFAULT) +@JsonPropertyOrder({}) @EqualsAndHashCode public class ExternalConfigurationEnvVarSource implements Serializable, UnknownPropertyPreserving { diff --git a/api/src/main/java/io/strimzi/api/kafka/model/connect/ExternalConfigurationVolumeSource.java b/api/src/main/java/io/strimzi/api/kafka/model/connect/ExternalConfigurationVolumeSource.java index 8bf59d5800c..e63f0c12f2c 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/connect/ExternalConfigurationVolumeSource.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/connect/ExternalConfigurationVolumeSource.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.fabric8.kubernetes.api.model.ConfigMapVolumeSource; import io.fabric8.kubernetes.api.model.SecretVolumeSource; import io.strimzi.api.kafka.model.Constants; @@ -27,6 +28,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_DEFAULT) +@JsonPropertyOrder({}) @EqualsAndHashCode public class ExternalConfigurationVolumeSource implements Serializable, UnknownPropertyPreserving { diff --git a/api/src/main/java/io/strimzi/api/kafka/model/listener/ExternalListenerBootstrapOverride.java b/api/src/main/java/io/strimzi/api/kafka/model/listener/ExternalListenerBootstrapOverride.java index a9ba1dcf1e0..3e594e7e656 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/listener/ExternalListenerBootstrapOverride.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/listener/ExternalListenerBootstrapOverride.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model.listener; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.api.kafka.model.Constants; import io.strimzi.api.kafka.model.UnknownPropertyPreserving; import io.strimzi.crdgenerator.annotations.Description; @@ -23,6 +24,7 @@ editableEnabled = false, builderPackage = Constants.FABRIC8_KUBERNETES_API ) +@JsonPropertyOrder({}) @EqualsAndHashCode public class ExternalListenerBootstrapOverride implements Serializable, UnknownPropertyPreserving { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/listener/IngressListenerBootstrapConfiguration.java b/api/src/main/java/io/strimzi/api/kafka/model/listener/IngressListenerBootstrapConfiguration.java index a3ce757567e..649aa599e2c 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/listener/IngressListenerBootstrapConfiguration.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/listener/IngressListenerBootstrapConfiguration.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.api.kafka.model.Constants; import io.strimzi.crdgenerator.annotations.Description; import io.sundr.builder.annotations.Buildable; @@ -22,6 +23,7 @@ editableEnabled = false, builderPackage = Constants.FABRIC8_KUBERNETES_API ) +@JsonPropertyOrder({}) @EqualsAndHashCode(callSuper = true) public class IngressListenerBootstrapConfiguration extends ExternalListenerBootstrapOverride { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerAuthentication.java b/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerAuthentication.java index 160072d12a3..6c33b2165d0 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerAuthentication.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerAuthentication.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model.listener; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import io.strimzi.api.kafka.model.Constants; @@ -33,6 +34,7 @@ editableEnabled = false, builderPackage = Constants.FABRIC8_KUBERNETES_API ) +@JsonPropertyOrder({}) @EqualsAndHashCode public abstract class KafkaListenerAuthentication implements UnknownPropertyPreserving, Serializable { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerAuthenticationOAuth.java b/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerAuthenticationOAuth.java index 2fb5d1b6a50..55c061fd686 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerAuthenticationOAuth.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerAuthenticationOAuth.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model.listener; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.api.kafka.model.CertSecretSource; import io.strimzi.api.kafka.model.Constants; import io.strimzi.api.kafka.model.GenericSecretSource; @@ -24,6 +25,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class KafkaListenerAuthenticationOAuth extends KafkaListenerAuthentication { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerAuthenticationScramSha512.java b/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerAuthenticationScramSha512.java index 59fc594db16..5d992610b72 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerAuthenticationScramSha512.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerAuthenticationScramSha512.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model.listener; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.api.kafka.model.Constants; import io.strimzi.crdgenerator.annotations.Description; import io.sundr.builder.annotations.Buildable; @@ -18,6 +19,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class KafkaListenerAuthenticationScramSha512 extends KafkaListenerAuthentication { diff --git a/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerAuthenticationTls.java b/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerAuthenticationTls.java index 8188624101c..666a6b2f278 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerAuthenticationTls.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerAuthenticationTls.java @@ -4,10 +4,10 @@ */ package io.strimzi.api.kafka.model.listener; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.api.kafka.model.Constants; import io.strimzi.crdgenerator.annotations.Description; - -import com.fasterxml.jackson.annotation.JsonInclude; import io.sundr.builder.annotations.Buildable; import lombok.EqualsAndHashCode; @@ -19,6 +19,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class KafkaListenerAuthenticationTls extends KafkaListenerAuthentication { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerExternal.java b/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerExternal.java index ddba8ac606e..d1a4ed4297d 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerExternal.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerExternal.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import io.fabric8.kubernetes.api.model.networking.NetworkPolicyPeer; @@ -32,6 +33,7 @@ @JsonSubTypes.Type(name = KafkaListenerExternalIngress.TYPE_INGRESS, value = KafkaListenerExternalIngress.class), }) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public abstract class KafkaListenerExternal implements UnknownPropertyPreserving, Serializable { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerPlain.java b/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerPlain.java index 2f4104fa750..75cb50e4579 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerPlain.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerPlain.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.fabric8.kubernetes.api.model.networking.NetworkPolicyPeer; import io.strimzi.api.kafka.model.Constants; import io.strimzi.api.kafka.model.UnknownPropertyPreserving; @@ -29,6 +30,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class KafkaListenerPlain implements UnknownPropertyPreserving, Serializable { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerTls.java b/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerTls.java index b423acf2159..233b7171c34 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerTls.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/listener/KafkaListenerTls.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.fabric8.kubernetes.api.model.networking.NetworkPolicyPeer; import io.strimzi.api.kafka.model.Constants; import io.strimzi.api.kafka.model.UnknownPropertyPreserving; @@ -29,6 +30,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class KafkaListenerTls implements UnknownPropertyPreserving, Serializable { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/listener/LoadBalancerListenerBootstrapOverride.java b/api/src/main/java/io/strimzi/api/kafka/model/listener/LoadBalancerListenerBootstrapOverride.java index ddd0033d514..d59c9b19749 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/listener/LoadBalancerListenerBootstrapOverride.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/listener/LoadBalancerListenerBootstrapOverride.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model.listener; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.api.kafka.model.Constants; import io.strimzi.crdgenerator.annotations.Description; import io.sundr.builder.annotations.Buildable; @@ -21,6 +22,7 @@ editableEnabled = false, builderPackage = Constants.FABRIC8_KUBERNETES_API ) +@JsonPropertyOrder({}) @EqualsAndHashCode(callSuper = true) public class LoadBalancerListenerBootstrapOverride extends ExternalListenerBootstrapOverride { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/listener/NodePortListenerBootstrapOverride.java b/api/src/main/java/io/strimzi/api/kafka/model/listener/NodePortListenerBootstrapOverride.java index a65bcbca617..55808d0be8e 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/listener/NodePortListenerBootstrapOverride.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/listener/NodePortListenerBootstrapOverride.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model.listener; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.api.kafka.model.Constants; import io.strimzi.crdgenerator.annotations.Description; import io.sundr.builder.annotations.Buildable; @@ -24,6 +25,7 @@ editableEnabled = false, builderPackage = Constants.FABRIC8_KUBERNETES_API ) +@JsonPropertyOrder({}) @EqualsAndHashCode(callSuper = true) public class NodePortListenerBootstrapOverride extends ExternalListenerBootstrapOverride { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/listener/RouteListenerBootstrapOverride.java b/api/src/main/java/io/strimzi/api/kafka/model/listener/RouteListenerBootstrapOverride.java index 890d278ba2d..1ae21ae1ca3 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/listener/RouteListenerBootstrapOverride.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/listener/RouteListenerBootstrapOverride.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model.listener; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.api.kafka.model.Constants; import io.strimzi.crdgenerator.annotations.Description; import io.sundr.builder.annotations.Buildable; @@ -18,6 +19,7 @@ editableEnabled = false, builderPackage = Constants.FABRIC8_KUBERNETES_API ) +@JsonPropertyOrder({}) @EqualsAndHashCode(callSuper = true) public class RouteListenerBootstrapOverride extends ExternalListenerBootstrapOverride { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/status/Status.java b/api/src/main/java/io/strimzi/api/kafka/model/status/Status.java index a9d40d72cdf..e8baccfe4db 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/status/Status.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/status/Status.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model.status; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.api.kafka.model.Constants; import io.strimzi.api.kafka.model.UnknownPropertyPreserving; import io.strimzi.crdgenerator.annotations.Description; @@ -29,6 +30,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode @ToString public abstract class Status implements UnknownPropertyPreserving, Serializable { diff --git a/api/src/main/java/io/strimzi/api/kafka/model/storage/EphemeralStorage.java b/api/src/main/java/io/strimzi/api/kafka/model/storage/EphemeralStorage.java index c906a3c8e55..8fd22196aeb 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/storage/EphemeralStorage.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/storage/EphemeralStorage.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model.storage; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.strimzi.api.kafka.model.Constants; import io.strimzi.crdgenerator.annotations.Description; import io.strimzi.crdgenerator.annotations.Minimum; @@ -20,6 +21,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class EphemeralStorage extends SingleVolumeStorage { diff --git a/api/src/main/java/io/strimzi/api/kafka/model/storage/SingleVolumeStorage.java b/api/src/main/java/io/strimzi/api/kafka/model/storage/SingleVolumeStorage.java index bd154ca0ad3..3200094b0ed 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/storage/SingleVolumeStorage.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/storage/SingleVolumeStorage.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model.storage; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import io.strimzi.crdgenerator.annotations.Description; @@ -21,6 +22,7 @@ @JsonSubTypes.Type(value = PersistentClaimStorage.class, name = Storage.TYPE_PERSISTENT_CLAIM)} ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public abstract class SingleVolumeStorage extends Storage { diff --git a/api/src/main/java/io/strimzi/api/kafka/model/storage/Storage.java b/api/src/main/java/io/strimzi/api/kafka/model/storage/Storage.java index 6df36a8c4f7..aee5229e384 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/storage/Storage.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/storage/Storage.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model.storage; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import io.strimzi.api.kafka.model.UnknownPropertyPreserving; @@ -29,6 +30,7 @@ @JsonSubTypes.Type(value = JbodStorage.class, name = Storage.TYPE_JBOD)} ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public abstract class Storage implements UnknownPropertyPreserving, Serializable { diff --git a/api/src/main/java/io/strimzi/api/kafka/model/template/ContainerTemplate.java b/api/src/main/java/io/strimzi/api/kafka/model/template/ContainerTemplate.java index 82d2b9ab1d7..b679130aa84 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/template/ContainerTemplate.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/template/ContainerTemplate.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model.template; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.fabric8.kubernetes.api.model.SecurityContext; import io.strimzi.api.kafka.model.Constants; import io.strimzi.api.kafka.model.ContainerEnvVar; @@ -27,6 +28,7 @@ builderPackage = Constants.FABRIC8_KUBERNETES_API ) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public class ContainerTemplate implements Serializable, UnknownPropertyPreserving { private static final long serialVersionUID = 1L; diff --git a/api/src/main/java/io/strimzi/api/kafka/model/tracing/Tracing.java b/api/src/main/java/io/strimzi/api/kafka/model/tracing/Tracing.java index 5c5f82e0206..3dd26d9d7bd 100644 --- a/api/src/main/java/io/strimzi/api/kafka/model/tracing/Tracing.java +++ b/api/src/main/java/io/strimzi/api/kafka/model/tracing/Tracing.java @@ -5,6 +5,7 @@ package io.strimzi.api.kafka.model.tracing; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import io.strimzi.api.kafka.model.UnknownPropertyPreserving; @@ -25,6 +26,7 @@ @JsonSubTypes.Type(name = JaegerTracing.TYPE_JAEGER, value = JaegerTracing.class), }) @JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({}) @EqualsAndHashCode public abstract class Tracing implements UnknownPropertyPreserving, Serializable { private static final long serialVersionUID = 1L; diff --git a/crd-generator/src/main/java/io/strimzi/crdgenerator/CrdGenerator.java b/crd-generator/src/main/java/io/strimzi/crdgenerator/CrdGenerator.java index 384d714818d..f403d0fb77c 100644 --- a/crd-generator/src/main/java/io/strimzi/crdgenerator/CrdGenerator.java +++ b/crd-generator/src/main/java/io/strimzi/crdgenerator/CrdGenerator.java @@ -427,9 +427,16 @@ private Collection unionOfSubclassProperties(Class crdClass) { } result.putAll(properties(crdClass)); JsonPropertyOrder order = crdClass.getAnnotation(JsonPropertyOrder.class); + if (order == null && !isExemptClass(crdClass)) { + throw new InvalidCrdException(crdClass.getName() + " missing @JsonPropertyOrder annotation"); + } return sortedProperties(order != null ? order.value() : null, result).values(); } + private boolean isExemptClass(Class crdClass) { + return crdClass == Object.class; + } + private ArrayNode buildSchemaRequired(Class crdClass) { ArrayNode result = nf.arrayNode(); diff --git a/crd-generator/src/main/java/io/strimzi/crdgenerator/InvalidCrdException.java b/crd-generator/src/main/java/io/strimzi/crdgenerator/InvalidCrdException.java new file mode 100644 index 00000000000..41f2cdb1d29 --- /dev/null +++ b/crd-generator/src/main/java/io/strimzi/crdgenerator/InvalidCrdException.java @@ -0,0 +1,12 @@ +/* + * Copyright Strimzi authors. + * License: Apache License 2.0 (see the file LICENSE or http://apache.org/licenses/LICENSE-2.0.html). + */ +package io.strimzi.crdgenerator; + +public class InvalidCrdException extends RuntimeException { + + public InvalidCrdException(String message) { + super(message); + } +} diff --git a/crd-generator/src/test/java/io/strimzi/crdgenerator/CrdGeneratorTest.java b/crd-generator/src/test/java/io/strimzi/crdgenerator/CrdGeneratorTest.java index 9329c7c52b4..01ad854e01f 100644 --- a/crd-generator/src/test/java/io/strimzi/crdgenerator/CrdGeneratorTest.java +++ b/crd-generator/src/test/java/io/strimzi/crdgenerator/CrdGeneratorTest.java @@ -10,24 +10,26 @@ import java.io.IOException; import java.io.StringWriter; -import java.net.URISyntaxException; import java.util.LinkedHashMap; import java.util.Map; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.is; +import static org.junit.jupiter.api.Assertions.assertThrows; public class CrdGeneratorTest { @Test - public void simpleTest() throws IOException, URISyntaxException { + public void testGeneratorCrdGoldenPath() throws IOException { CrdGenerator crdGenerator = new CrdGenerator(new YAMLMapper().configure(YAMLGenerator.Feature.WRITE_DOC_START_MARKER, false)); StringWriter w = new StringWriter(); - crdGenerator.generate(ExampleCrd.class, w); + crdGenerator.generate(TestCrds.ExampleCrd.class, w); String s = w.toString(); - assertEquals(CrdTestUtils.readResource("simpleTest.yaml"), s); + assertThat(s, is(CrdTestUtils.readResource("simpleTest.yaml"))); } @Test - public void generateHelmMetadataLabels() throws IOException { + public void testGeneratorCrdWithHelmMetadataLabels() throws IOException { Map labels = new LinkedHashMap<>(); labels.put("app", "{{ template \"strimzi.name\" . }}"); labels.put("chart", "{{ template \"strimzi.chart\" . }}"); @@ -36,8 +38,20 @@ public void generateHelmMetadataLabels() throws IOException { labels.put("heritage", "{{ .Release.Service }}"); CrdGenerator crdGenerator = new CrdGenerator(new YAMLMapper().configure(YAMLGenerator.Feature.WRITE_DOC_START_MARKER, false), labels); StringWriter w = new StringWriter(); - crdGenerator.generate(ExampleCrd.class, w); + crdGenerator.generate(TestCrds.ExampleCrd.class, w); String s = w.toString(); - assertEquals(CrdTestUtils.readResource("simpleTestHelmMetadata.yaml"), s); + assertThat(s, is(CrdTestUtils.readResource("simpleTestHelmMetadata.yaml"))); + } + + @Test + public void testGeneratorCrdMissingJsonPropertyAnnotationThrowsInvalidCrdException() { + CrdGenerator crdGenerator = new CrdGenerator(new YAMLMapper().configure(YAMLGenerator.Feature.WRITE_DOC_START_MARKER, false)); + StringWriter w = new StringWriter(); + InvalidCrdException invalidCrd = assertThrows(InvalidCrdException.class, () -> + crdGenerator.generate(TestCrds.ExampleWithMissingJsonPropertyOrderAnnotationCrd.class, w)); + + assertThat(invalidCrd.getMessage(), + containsString("ExampleWithMissingJsonPropertyOrderAnnotationCrd missing @JsonPropertyOrder annotation")); + } } diff --git a/crd-generator/src/test/java/io/strimzi/crdgenerator/DocGeneratorTest.java b/crd-generator/src/test/java/io/strimzi/crdgenerator/DocGeneratorTest.java index a08a545860b..60b95d5748a 100644 --- a/crd-generator/src/test/java/io/strimzi/crdgenerator/DocGeneratorTest.java +++ b/crd-generator/src/test/java/io/strimzi/crdgenerator/DocGeneratorTest.java @@ -22,8 +22,8 @@ public class DocGeneratorTest { public void simpleTest() throws IOException, ClassNotFoundException, URISyntaxException { assertThat(classInherits(Class.forName("io.strimzi.crdgenerator.KubeLinker"), Linker.class), is(notNullValue())); StringWriter w = new StringWriter(); - DocGenerator crdGenerator = new DocGenerator(1, singletonList(ExampleCrd.class), w, new KubeLinker("{KubeApiReferenceBase}")); - crdGenerator.generate(ExampleCrd.class); + DocGenerator crdGenerator = new DocGenerator(1, singletonList(TestCrds.ExampleCrd.class), w, new KubeLinker("{KubeApiReferenceBase}")); + crdGenerator.generate(TestCrds.ExampleCrd.class); String s = w.toString(); assertThat(CrdTestUtils.readResource("simpleTest.adoc"), is(s)); } diff --git a/crd-generator/src/test/java/io/strimzi/crdgenerator/ExampleCrd.java b/crd-generator/src/test/java/io/strimzi/crdgenerator/ExampleCrd.java deleted file mode 100644 index c13796c0d0a..00000000000 --- a/crd-generator/src/test/java/io/strimzi/crdgenerator/ExampleCrd.java +++ /dev/null @@ -1,280 +0,0 @@ -/* - * Copyright Strimzi authors. - * License: Apache License 2.0 (see the file LICENSE or http://apache.org/licenses/LICENSE-2.0.html). - */ -package io.strimzi.crdgenerator; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonSubTypes; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import io.fabric8.kubernetes.api.model.Affinity; -import io.fabric8.kubernetes.client.CustomResource; -import io.strimzi.crdgenerator.annotations.Crd; -import io.strimzi.crdgenerator.annotations.Description; -import io.strimzi.crdgenerator.annotations.Example; -import io.strimzi.crdgenerator.annotations.KubeLink; -import io.strimzi.crdgenerator.annotations.Minimum; -import io.strimzi.crdgenerator.annotations.OneOf; -import io.strimzi.crdgenerator.annotations.Pattern; - -import java.util.List; -import java.util.Map; - -@Crd( - apiVersion = "apiextensions.k8s.io/v1beta1", - spec = @Crd.Spec( - group = "crdgenerator.strimzi.io", - names = @Crd.Spec.Names( - kind = "Example", - plural = "examples", - categories = {"strimzi"}), - scope = "Namespaced", - version = "v1alpha1", - versions = { - @Crd.Spec.Version(name = "v1alpha1", served = true, storage = true), - @Crd.Spec.Version(name = "v1beta1", served = true, storage = false) - }, - additionalPrinterColumns = { - @Crd.Spec.AdditionalPrinterColumn( - name = "Foo", - description = "The foo", - jsonPath = "...", - type = "integer" - ) - } - )) -@OneOf({@OneOf.Alternative(@OneOf.Alternative.Property("either")), @OneOf.Alternative(@OneOf.Alternative.Property("or"))}) -public class ExampleCrd extends CustomResource { - - private String ignored; - - private String string; - - private int intProperty; - - private long longProperty; - - private boolean booleanProperty; - - public NormalEnum normalEnum; - - public CustomisedEnum customisedEnum; - - private ObjectProperty objectProperty; - - private Affinity affinity; - - @Description("Example of field property.") - public String fieldProperty; - - public String[] arrayProperty; - - public String[][] arrayProperty2; - - public List listOfInts; - - public List> listOfInts2; - - public List listOfObjects; - - public List listOfPolymorphic; - - public List rawList; - - public List listOfRawList; - - public List[] arrayOfList; - - public List[] arrayOfRawList; - - public List listOfArray; - - public T[] arrayOfTypeVar; - - public List listOfTypeVar; - - public U[] arrayOfBoundTypeVar; - - public List listOfBoundTypeVar; - - public V[] arrayOfBoundTypeVar2; - - public List listOfBoundTypeVar2; - - public List listOfWildcardTypeVar1; - - public List listOfWildcardTypeVar2; - - public List listOfWildcardTypeVar3; - - public List> listOfWildcardTypeVar4; - - public List> listOfMaps; - - private String either; - private String or; - - - @Description("Example of complex type.") - public static class ObjectProperty { - private String foo; - private String bar; - - public String getFoo() { - return foo; - } - - public void setFoo(String foo) { - this.foo = foo; - } - - public String getBar() { - return bar; - } - - public void setBar(String bar) { - this.bar = bar; - } - } - - private Map mapProperty; - - private PolymorphicTop polymorphicProperty; - - @Description("Example of a polymorphic type") - @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "discrim") - @JsonSubTypes({ - @JsonSubTypes.Type(value = PolymorphicLeft.class, name = "left"), - @JsonSubTypes.Type(value = PolymorphicRight.class, name = "right") - }) - public static class PolymorphicTop { - private String discrim; - private String commonProperty; - - public String getDiscrim() { - return discrim; - } - - public void setDiscrim(String discrim) { - this.discrim = discrim; - } - - public String getCommonProperty() { - return commonProperty; - } - - public void setCommonProperty(String commonProperty) { - this.commonProperty = commonProperty; - } - } - - public static class PolymorphicLeft extends PolymorphicTop { - private String leftProperty; - - @Description("when descrim=left, the left-hand property") - public String getLeftProperty() { - return leftProperty; - } - - public void setLeftProperty(String leftProperty) { - this.leftProperty = leftProperty; - } - } - - public static class PolymorphicRight extends PolymorphicTop { - private String rightProperty; - - @Description("when descrim=right, the right-hand property") - public String getRightProperty() { - return rightProperty; - } - - public void setRightProperty(String rightProperty) { - this.rightProperty = rightProperty; - } - } - - @JsonIgnore - public String getIgnored() { - return ignored; - } - - public void setIgnored(String ignored) { - this.ignored = ignored; - } - - @JsonProperty(value = "stringProperty", required = true) - @Pattern(".*") - public String getString() { - return string; - } - - public void setString(String string) { - this.string = string; - } - - @Deprecated - @Description("An example int property") - @Example("42") - @Minimum(42) - public int getIntProperty() { - return intProperty; - } - - public void setIntProperty(int intProperty) { - this.intProperty = intProperty; - } - - @Description("An example long property") - @Example("42") - @Minimum(42) - public long getLongProperty() { - return longProperty; - } - - public void setLongProperty(long longProperty) { - this.longProperty = longProperty; - } - - public boolean isBooleanProperty() { - return booleanProperty; - } - - public void setBooleanProperty(boolean booleanProperty) { - this.booleanProperty = booleanProperty; - } - - public ObjectProperty getObjectProperty() { - return objectProperty; - } - - public void setObjectProperty(ObjectProperty objectProperty) { - this.objectProperty = objectProperty; - } - - public Map getMapProperty() { - return mapProperty; - } - - public void setMapProperty(Map mapProperty) { - this.mapProperty = mapProperty; - } - - public PolymorphicTop getPolymorphicProperty() { - return polymorphicProperty; - } - - public void setPolymorphicProperty(PolymorphicTop polymorphicProperty) { - this.polymorphicProperty = polymorphicProperty; - } - - @KubeLink(group = "core", version = "v1", kind = "affinity") - public Affinity getAffinity() { - return affinity; - } - - public void setAffinity(Affinity affinity) { - this.affinity = affinity; - } -} diff --git a/crd-generator/src/test/java/io/strimzi/crdgenerator/PropertyTest.java b/crd-generator/src/test/java/io/strimzi/crdgenerator/PropertyTest.java index 48e2078cf8c..c097f28ae37 100644 --- a/crd-generator/src/test/java/io/strimzi/crdgenerator/PropertyTest.java +++ b/crd-generator/src/test/java/io/strimzi/crdgenerator/PropertyTest.java @@ -6,12 +6,12 @@ import org.junit.jupiter.api.Test; +import java.util.Map; + import static io.strimzi.crdgenerator.Property.properties; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; -import java.util.Map; - public class PropertyTest { private static PropertyType propertyType(Class cls, String propertyNAme) { @@ -21,69 +21,69 @@ private static PropertyType propertyType(Class cls, String propertyNAme) { @Test public void testIsArray() { - assertThat(propertyType(ExampleCrd.class, "arrayProperty").isArray(), is(true)); - assertThat(propertyType(ExampleCrd.class, "arrayProperty2").isArray(), is(true)); - assertThat(propertyType(ExampleCrd.class, "listOfInts").isArray(), is(true)); - assertThat(propertyType(ExampleCrd.class, "listOfInts2").isArray(), is(true)); - assertThat(propertyType(ExampleCrd.class, "listOfObjects").isArray(), is(true)); - assertThat(propertyType(ExampleCrd.class, "listOfPolymorphic").isArray(), is(true)); - assertThat(propertyType(ExampleCrd.class, "rawList").isArray(), is(true)); - assertThat(propertyType(ExampleCrd.class, "listOfRawList").isArray(), is(true)); - assertThat(propertyType(ExampleCrd.class, "arrayOfList").isArray(), is(true)); - assertThat(propertyType(ExampleCrd.class, "arrayOfRawList").isArray(), is(true)); - assertThat(propertyType(ExampleCrd.class, "listOfArray").isArray(), is(true)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "arrayProperty").isArray(), is(true)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "arrayProperty2").isArray(), is(true)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfInts").isArray(), is(true)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfInts2").isArray(), is(true)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfObjects").isArray(), is(true)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfPolymorphic").isArray(), is(true)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "rawList").isArray(), is(true)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfRawList").isArray(), is(true)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "arrayOfList").isArray(), is(true)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "arrayOfRawList").isArray(), is(true)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfArray").isArray(), is(true)); } @Test public void testArrayDimension() { - assertThat(propertyType(ExampleCrd.class, "arrayProperty").arrayDimension(), is(1)); - assertThat(propertyType(ExampleCrd.class, "arrayProperty2").arrayDimension(), is(2)); - assertThat(propertyType(ExampleCrd.class, "listOfInts").arrayDimension(), is(1)); - assertThat(propertyType(ExampleCrd.class, "listOfInts2").arrayDimension(), is(2)); - assertThat(propertyType(ExampleCrd.class, "listOfObjects").arrayDimension(), is(1)); - assertThat(propertyType(ExampleCrd.class, "listOfPolymorphic").arrayDimension(), is(1)); - assertThat(propertyType(ExampleCrd.class, "rawList").arrayDimension(), is(1)); - assertThat(propertyType(ExampleCrd.class, "listOfRawList").arrayDimension(), is(2)); - assertThat(propertyType(ExampleCrd.class, "arrayOfList").arrayDimension(), is(2)); - assertThat(propertyType(ExampleCrd.class, "arrayOfRawList").arrayDimension(), is(2)); - assertThat(propertyType(ExampleCrd.class, "listOfArray").arrayDimension(), is(2)); - assertThat(propertyType(ExampleCrd.class, "arrayOfTypeVar").arrayDimension(), is(1)); - assertThat(propertyType(ExampleCrd.class, "listOfTypeVar").arrayDimension(), is(1)); - assertThat(propertyType(ExampleCrd.class, "arrayOfBoundTypeVar").arrayDimension(), is(1)); - assertThat(propertyType(ExampleCrd.class, "listOfBoundTypeVar").arrayDimension(), is(1)); - assertThat(propertyType(ExampleCrd.class, "arrayOfBoundTypeVar2").arrayDimension(), is(1)); - assertThat(propertyType(ExampleCrd.class, "listOfBoundTypeVar2").arrayDimension(), is(1)); - assertThat(propertyType(ExampleCrd.class, "listOfWildcardTypeVar1").arrayDimension(), is(1)); - assertThat(propertyType(ExampleCrd.class, "listOfWildcardTypeVar2").arrayDimension(), is(1)); - assertThat(propertyType(ExampleCrd.class, "listOfWildcardTypeVar3").arrayDimension(), is(1)); - assertThat(propertyType(ExampleCrd.class, "listOfWildcardTypeVar4").arrayDimension(), is(2)); - assertThat(propertyType(ExampleCrd.class, "listOfMaps").arrayDimension(), is(1)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "arrayProperty").arrayDimension(), is(1)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "arrayProperty2").arrayDimension(), is(2)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfInts").arrayDimension(), is(1)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfInts2").arrayDimension(), is(2)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfObjects").arrayDimension(), is(1)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfPolymorphic").arrayDimension(), is(1)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "rawList").arrayDimension(), is(1)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfRawList").arrayDimension(), is(2)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "arrayOfList").arrayDimension(), is(2)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "arrayOfRawList").arrayDimension(), is(2)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfArray").arrayDimension(), is(2)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "arrayOfTypeVar").arrayDimension(), is(1)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfTypeVar").arrayDimension(), is(1)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "arrayOfBoundTypeVar").arrayDimension(), is(1)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfBoundTypeVar").arrayDimension(), is(1)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "arrayOfBoundTypeVar2").arrayDimension(), is(1)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfBoundTypeVar2").arrayDimension(), is(1)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfWildcardTypeVar1").arrayDimension(), is(1)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfWildcardTypeVar2").arrayDimension(), is(1)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfWildcardTypeVar3").arrayDimension(), is(1)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfWildcardTypeVar4").arrayDimension(), is(2)); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfMaps").arrayDimension(), is(1)); } @Test public void testArrayComponentType() { - assertThat(propertyType(ExampleCrd.class, "arrayProperty").arrayBase().getName(), is(String.class.getName())); - assertThat(propertyType(ExampleCrd.class, "arrayProperty2").arrayBase().getName(), is(String.class.getName())); - assertThat(propertyType(ExampleCrd.class, "listOfInts").arrayBase().getName(), is(Integer.class.getName())); - assertThat(propertyType(ExampleCrd.class, "listOfInts2").arrayBase().getName(), is(Integer.class.getName())); - assertThat(propertyType(ExampleCrd.class, "listOfObjects").arrayBase().getName(), is(ExampleCrd.ObjectProperty.class.getName())); - assertThat(propertyType(ExampleCrd.class, "listOfPolymorphic").arrayBase().getName(), is(ExampleCrd.PolymorphicTop.class.getName())); - assertThat(propertyType(ExampleCrd.class, "rawList").arrayBase().getName(), is(Object.class.getName())); - assertThat(propertyType(ExampleCrd.class, "listOfRawList").arrayBase().getName(), is(Object.class.getName())); - assertThat(propertyType(ExampleCrd.class, "arrayOfList").arrayBase().getName(), is(String.class.getName())); - assertThat(propertyType(ExampleCrd.class, "arrayOfRawList").arrayBase().getName(), is(Object.class.getName())); - assertThat(propertyType(ExampleCrd.class, "listOfArray").arrayBase().getName(), is(String.class.getName())); - assertThat(propertyType(ExampleCrd.class, "arrayOfTypeVar").arrayBase().getName(), is(Object.class.getName())); - assertThat(propertyType(ExampleCrd.class, "listOfTypeVar").arrayBase().getName(), is(Object.class.getName())); - assertThat(propertyType(ExampleCrd.class, "arrayOfBoundTypeVar").arrayBase().getName(), is(Number.class.getName())); - assertThat(propertyType(ExampleCrd.class, "listOfBoundTypeVar").arrayBase().getName(), is(Number.class.getName())); - assertThat(propertyType(ExampleCrd.class, "arrayOfBoundTypeVar2").arrayBase().getName(), is(Number.class.getName())); - assertThat(propertyType(ExampleCrd.class, "listOfBoundTypeVar2").arrayBase().getName(), is(Number.class.getName())); - assertThat(propertyType(ExampleCrd.class, "listOfWildcardTypeVar1").arrayBase().getName(), is(String.class.getName())); - assertThat(propertyType(ExampleCrd.class, "listOfWildcardTypeVar2").arrayBase().getName(), is(Number.class.getName())); - assertThat(propertyType(ExampleCrd.class, "listOfWildcardTypeVar3").arrayBase().getName(), is(Number.class.getName())); - assertThat(propertyType(ExampleCrd.class, "listOfWildcardTypeVar4").arrayBase().getName(), is(Number.class.getName())); - assertThat(propertyType(ExampleCrd.class, "listOfMaps").arrayBase().getName(), is(Map.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "arrayProperty").arrayBase().getName(), is(String.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "arrayProperty2").arrayBase().getName(), is(String.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfInts").arrayBase().getName(), is(Integer.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfInts2").arrayBase().getName(), is(Integer.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfObjects").arrayBase().getName(), is(TestCrds.ExampleCrd.ObjectProperty.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfPolymorphic").arrayBase().getName(), is(TestCrds.ExampleCrd.PolymorphicTop.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "rawList").arrayBase().getName(), is(Object.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfRawList").arrayBase().getName(), is(Object.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "arrayOfList").arrayBase().getName(), is(String.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "arrayOfRawList").arrayBase().getName(), is(Object.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfArray").arrayBase().getName(), is(String.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "arrayOfTypeVar").arrayBase().getName(), is(Object.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfTypeVar").arrayBase().getName(), is(Object.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "arrayOfBoundTypeVar").arrayBase().getName(), is(TestCrds.ValidCrdNumber.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfBoundTypeVar").arrayBase().getName(), is(TestCrds.ValidCrdNumber.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "arrayOfBoundTypeVar2").arrayBase().getName(), is(TestCrds.ValidCrdNumber.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfBoundTypeVar2").arrayBase().getName(), is(TestCrds.ValidCrdNumber.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfWildcardTypeVar1").arrayBase().getName(), is(String.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfWildcardTypeVar2").arrayBase().getName(), is(TestCrds.ValidCrdNumber.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfWildcardTypeVar3").arrayBase().getName(), is(TestCrds.ValidCrdNumber.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfWildcardTypeVar4").arrayBase().getName(), is(TestCrds.ValidCrdNumber.class.getName())); + assertThat(propertyType(TestCrds.ExampleCrd.class, "listOfMaps").arrayBase().getName(), is(Map.class.getName())); } } diff --git a/crd-generator/src/test/java/io/strimzi/crdgenerator/TestCrds.java b/crd-generator/src/test/java/io/strimzi/crdgenerator/TestCrds.java new file mode 100644 index 00000000000..5201d0b19c9 --- /dev/null +++ b/crd-generator/src/test/java/io/strimzi/crdgenerator/TestCrds.java @@ -0,0 +1,317 @@ +/* + * Copyright Strimzi authors. + * License: Apache License 2.0 (see the file LICENSE or http://apache.org/licenses/LICENSE-2.0.html). + */ +package io.strimzi.crdgenerator; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import io.fabric8.kubernetes.api.model.Affinity; +import io.fabric8.kubernetes.client.CustomResource; +import io.strimzi.crdgenerator.annotations.Crd; +import io.strimzi.crdgenerator.annotations.Description; +import io.strimzi.crdgenerator.annotations.Example; +import io.strimzi.crdgenerator.annotations.KubeLink; +import io.strimzi.crdgenerator.annotations.Minimum; +import io.strimzi.crdgenerator.annotations.OneOf; +import io.strimzi.crdgenerator.annotations.Pattern; + +import java.util.List; +import java.util.Map; + +public class TestCrds { + + @Crd( + apiVersion = "apiextensions.k8s.io/v1beta1", + spec = @Crd.Spec( + group = "crdgenerator.strimzi.io", + names = @Crd.Spec.Names( + kind = "Example", + plural = "examples", + categories = {"strimzi"}), + scope = "Namespaced", + version = "v1alpha1", + versions = { + @Crd.Spec.Version(name = "v1alpha1", served = true, storage = true), + @Crd.Spec.Version(name = "v1beta1", served = true, storage = false) + }, + additionalPrinterColumns = { + @Crd.Spec.AdditionalPrinterColumn( + name = "Foo", + description = "The foo", + jsonPath = "...", + type = "integer" + ) + } + )) + @OneOf({@OneOf.Alternative(@OneOf.Alternative.Property("either")), @OneOf.Alternative(@OneOf.Alternative.Property("or"))}) + @JsonPropertyOrder({}) + public static class ExampleCrd extends CustomResource { + + private String ignored; + + private String string; + + private int intProperty; + + private long longProperty; + + private boolean booleanProperty; + + public NormalEnum normalEnum; + + public CustomisedEnum customisedEnum; + + private ObjectProperty objectProperty; + + private Affinity affinity; + + @Description("Example of field property.") + public String fieldProperty; + + public String[] arrayProperty; + + public String[][] arrayProperty2; + + public List listOfInts; + + public List> listOfInts2; + + public List listOfObjects; + + public List listOfPolymorphic; + + public List rawList; + + public List listOfRawList; + + public List[] arrayOfList; + + public List[] arrayOfRawList; + + public List listOfArray; + + public T[] arrayOfTypeVar; + + public List listOfTypeVar; + + public U[] arrayOfBoundTypeVar; + + public List listOfBoundTypeVar; + + public V[] arrayOfBoundTypeVar2; + + public List listOfBoundTypeVar2; + + public List listOfWildcardTypeVar1; + + public List listOfWildcardTypeVar2; + + public List listOfWildcardTypeVar3; + + public List> listOfWildcardTypeVar4; + + public List> listOfMaps; + + private String either; + private String or; + + + @JsonPropertyOrder({}) + @Description("Example of complex type.") + public static class ObjectProperty { + private String foo; + private String bar; + + public String getFoo() { + return foo; + } + + public void setFoo(String foo) { + this.foo = foo; + } + + public String getBar() { + return bar; + } + + public void setBar(String bar) { + this.bar = bar; + } + } + + private Map mapProperty; + + private PolymorphicTop polymorphicProperty; + + @Description("Example of a polymorphic type") + @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "discrim") + @JsonSubTypes({ + @JsonSubTypes.Type(value = PolymorphicLeft.class, name = "left"), + @JsonSubTypes.Type(value = PolymorphicRight.class, name = "right") + }) + @JsonPropertyOrder({}) + public static class PolymorphicTop { + private String discrim; + private String commonProperty; + + public String getDiscrim() { + return discrim; + } + + public void setDiscrim(String discrim) { + this.discrim = discrim; + } + + public String getCommonProperty() { + return commonProperty; + } + + public void setCommonProperty(String commonProperty) { + this.commonProperty = commonProperty; + } + } + + @JsonPropertyOrder({}) + public static class PolymorphicLeft extends PolymorphicTop { + private String leftProperty; + + @Description("when descrim=left, the left-hand property") + public String getLeftProperty() { + return leftProperty; + } + + public void setLeftProperty(String leftProperty) { + this.leftProperty = leftProperty; + } + } + + public static class PolymorphicRight extends PolymorphicTop { + private String rightProperty; + + @Description("when descrim=right, the right-hand property") + public String getRightProperty() { + return rightProperty; + } + + public void setRightProperty(String rightProperty) { + this.rightProperty = rightProperty; + } + } + + @JsonIgnore + public String getIgnored() { + return ignored; + } + + public void setIgnored(String ignored) { + this.ignored = ignored; + } + + @JsonProperty(value = "stringProperty", required = true) + @Pattern(".*") + public String getString() { + return string; + } + + public void setString(String string) { + this.string = string; + } + + @Deprecated + @Description("An example int property") + @Example("42") + @Minimum(42) + public int getIntProperty() { + return intProperty; + } + + public void setIntProperty(int intProperty) { + this.intProperty = intProperty; + } + + @Description("An example long property") + @Example("42") + @Minimum(42) + public long getLongProperty() { + return longProperty; + } + + public void setLongProperty(long longProperty) { + this.longProperty = longProperty; + } + + public boolean isBooleanProperty() { + return booleanProperty; + } + + public void setBooleanProperty(boolean booleanProperty) { + this.booleanProperty = booleanProperty; + } + + public ObjectProperty getObjectProperty() { + return objectProperty; + } + + public void setObjectProperty(ObjectProperty objectProperty) { + this.objectProperty = objectProperty; + } + + public Map getMapProperty() { + return mapProperty; + } + + public void setMapProperty(Map mapProperty) { + this.mapProperty = mapProperty; + } + + public PolymorphicTop getPolymorphicProperty() { + return polymorphicProperty; + } + + public void setPolymorphicProperty(PolymorphicTop polymorphicProperty) { + this.polymorphicProperty = polymorphicProperty; + } + + @KubeLink(group = "core", version = "v1", kind = "affinity") + public Affinity getAffinity() { + return affinity; + } + + public void setAffinity(Affinity affinity) { + this.affinity = affinity; + } + } + + @Crd( + apiVersion = "apiextensions.k8s.io/v1beta1", + spec = @Crd.Spec( + group = "crdgenerator.strimzi.io", + names = @Crd.Spec.Names( + kind = "Example", + plural = "examples", + categories = {"strimzi"}), + scope = "Namespaced", + version = "v1alpha1", + versions = { + @Crd.Spec.Version(name = "v1alpha1", served = true, storage = true), + @Crd.Spec.Version(name = "v1beta1", served = true, storage = false) + }, + additionalPrinterColumns = { + @Crd.Spec.AdditionalPrinterColumn( + name = "Foo", + description = "The foo", + jsonPath = "...", + type = "integer" + ) + } + )) + public class ExampleWithMissingJsonPropertyOrderAnnotationCrd extends CustomResource { } + + @JsonPropertyOrder({}) + public abstract class ValidCrdNumber extends Number { } +} + diff --git a/crd-generator/src/test/resources/io/strimzi/crdgenerator/simpleTest.adoc b/crd-generator/src/test/resources/io/strimzi/crdgenerator/simpleTest.adoc index 2437a341d10..0ad170f6efb 100644 --- a/crd-generator/src/test/resources/io/strimzi/crdgenerator/simpleTest.adoc +++ b/crd-generator/src/test/resources/io/strimzi/crdgenerator/simpleTest.adoc @@ -10,9 +10,9 @@ |{KubeApiReferenceBase}#affinity-v1-core[Affinity] |arrayOfBoundTypeVar 1.2+<.<| -|xref:type-Number-{context}[`Number`] array +|xref:type-ValidCrdNumber-{context}[`ValidCrdNumber`] array |arrayOfBoundTypeVar2 1.2+<.<| -|xref:type-Number-{context}[`Number`] array +|xref:type-ValidCrdNumber-{context}[`ValidCrdNumber`] array |arrayOfList 1.2+<.<| |string array of dimension 2 |arrayOfRawList 1.2+<.<| @@ -34,9 +34,9 @@ |listOfArray 1.2+<.<| |string array of dimension 2 |listOfBoundTypeVar 1.2+<.<| -|xref:type-Number-{context}[`Number`] array +|xref:type-ValidCrdNumber-{context}[`ValidCrdNumber`] array |listOfBoundTypeVar2 1.2+<.<| -|xref:type-Number-{context}[`Number`] array +|xref:type-ValidCrdNumber-{context}[`ValidCrdNumber`] array |listOfInts 1.2+<.<| |integer array |listOfInts2 1.2+<.<| @@ -54,11 +54,11 @@ |listOfWildcardTypeVar1 1.2+<.<| |string array |listOfWildcardTypeVar2 1.2+<.<| -|xref:type-Number-{context}[`Number`] array +|xref:type-ValidCrdNumber-{context}[`ValidCrdNumber`] array |listOfWildcardTypeVar3 1.2+<.<| -|xref:type-Number-{context}[`Number`] array +|xref:type-ValidCrdNumber-{context}[`ValidCrdNumber`] array |listOfWildcardTypeVar4 1.2+<.<| -|xref:type-Number-{context}[`Number`] array of dimension 2 +|xref:type-ValidCrdNumber-{context}[`ValidCrdNumber`] array of dimension 2 |longProperty 1.2+<.<|An example long property. |integer |mapProperty 1.2+<.<| @@ -75,8 +75,8 @@ |string |==== -[id='type-Number-{context}'] -# `Number` schema reference +[id='type-ValidCrdNumber-{context}'] +# `ValidCrdNumber` schema reference Used in: xref:type-ExampleCrd-{context}[`ExampleCrd`]