From 7f887eab68c1e26806409caba3e0f3850994f0ed Mon Sep 17 00:00:00 2001 From: I538344 Date: Tue, 4 Mar 2025 10:22:39 +0100 Subject: [PATCH 1/3] fix: [OpenAPI] `@Beta` annotations on generated enums --- .../mustache-templates/modelEnum.mustache | 3 +- .../input/sodastore.yaml | 4 + .../output/test/ColaTemperature.java | 84 ++++++++++++++++++ .../input/sodastore.yaml | 4 + .../output/test/ColaTemperature.java | 85 +++++++++++++++++++ 5 files changed, 179 insertions(+), 1 deletion(-) create mode 100644 datamodel/openapi/openapi-generator/src/test/resources/DataModelGeneratorIntegrationTest/oneof-interfaces-disabled/output/test/ColaTemperature.java create mode 100644 datamodel/openapi/openapi-generator/src/test/resources/DataModelGeneratorIntegrationTest/oneof-interfaces-enabled/output/test/ColaTemperature.java diff --git a/datamodel/openapi/openapi-generator/src/main/resources/openapi-generator/mustache-templates/modelEnum.mustache b/datamodel/openapi/openapi-generator/src/main/resources/openapi-generator/mustache-templates/modelEnum.mustache index af40d5209..b1362f8d6 100644 --- a/datamodel/openapi/openapi-generator/src/main/resources/openapi-generator/mustache-templates/modelEnum.mustache +++ b/datamodel/openapi/openapi-generator/src/main/resources/openapi-generator/mustache-templates/modelEnum.mustache @@ -22,7 +22,8 @@ import java.net.URI; {{#jsonb}} @JsonbTypeSerializer({{datatypeWithEnum}}.Serializer.class) @JsonbTypeDeserializer({{datatypeWithEnum}}.Deserializer.class) -{{/jsonb}} +{{/jsonb}}{{^isReleased}} +@Beta{{/isReleased}} {{>additionalEnumTypeAnnotations}}public enum {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} { {{#allowableValues}}{{#enumVars}} {{#enumDescription}} diff --git a/datamodel/openapi/openapi-generator/src/test/resources/DataModelGeneratorIntegrationTest/oneof-interfaces-disabled/input/sodastore.yaml b/datamodel/openapi/openapi-generator/src/test/resources/DataModelGeneratorIntegrationTest/oneof-interfaces-disabled/input/sodastore.yaml index 470276795..5a2eade43 100644 --- a/datamodel/openapi/openapi-generator/src/test/resources/DataModelGeneratorIntegrationTest/oneof-interfaces-disabled/input/sodastore.yaml +++ b/datamodel/openapi/openapi-generator/src/test/resources/DataModelGeneratorIntegrationTest/oneof-interfaces-disabled/input/sodastore.yaml @@ -46,6 +46,10 @@ components: allOf: - $ref: '#/components/schemas/Cola' - $ref: '#/components/schemas/Fanta' + ColaTemperature: + enum: + - COOL + - WARM Cola: type: object properties: diff --git a/datamodel/openapi/openapi-generator/src/test/resources/DataModelGeneratorIntegrationTest/oneof-interfaces-disabled/output/test/ColaTemperature.java b/datamodel/openapi/openapi-generator/src/test/resources/DataModelGeneratorIntegrationTest/oneof-interfaces-disabled/output/test/ColaTemperature.java new file mode 100644 index 000000000..74c3e852b --- /dev/null +++ b/datamodel/openapi/openapi-generator/src/test/resources/DataModelGeneratorIntegrationTest/oneof-interfaces-disabled/output/test/ColaTemperature.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2025 SAP SE or an SAP affiliate company. All rights reserved. + */ + +/* + * Soda Store API + * API for managing sodas in a soda store + * + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package test; + +import java.util.Objects; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Set; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Gets or Sets ColaTemperature + */ + +public enum ColaTemperature { + + COOL("COOL"), + + WARM("WARM"); + + private final String value; + + ColaTemperature(String value) { + this.value = value; + } + + /** + * @return The enum value. + */ + @JsonValue + public String getValue() { + return value; + } + + /** + * @return The String representation of the enum value. + */ + @Override + @Nonnull public String toString() { + return String.valueOf(value); + } + + /** + * Converts the given value to its enum representation. + * + * @param value The input value. + * + * @return The enum representation of the given value. + */ + @JsonCreator + public static ColaTemperature fromValue(@Nonnull final String value) { + for (final ColaTemperature b : ColaTemperature.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } +} + diff --git a/datamodel/openapi/openapi-generator/src/test/resources/DataModelGeneratorIntegrationTest/oneof-interfaces-enabled/input/sodastore.yaml b/datamodel/openapi/openapi-generator/src/test/resources/DataModelGeneratorIntegrationTest/oneof-interfaces-enabled/input/sodastore.yaml index 19b65ab45..571c17685 100644 --- a/datamodel/openapi/openapi-generator/src/test/resources/DataModelGeneratorIntegrationTest/oneof-interfaces-enabled/input/sodastore.yaml +++ b/datamodel/openapi/openapi-generator/src/test/resources/DataModelGeneratorIntegrationTest/oneof-interfaces-enabled/input/sodastore.yaml @@ -46,6 +46,10 @@ components: allOf: - $ref: '#/components/schemas/Cola' - $ref: '#/components/schemas/Fanta' + ColaTemperature: + enum: + - COOL + - WARM Cola: type: object properties: diff --git a/datamodel/openapi/openapi-generator/src/test/resources/DataModelGeneratorIntegrationTest/oneof-interfaces-enabled/output/test/ColaTemperature.java b/datamodel/openapi/openapi-generator/src/test/resources/DataModelGeneratorIntegrationTest/oneof-interfaces-enabled/output/test/ColaTemperature.java new file mode 100644 index 000000000..41b9b457b --- /dev/null +++ b/datamodel/openapi/openapi-generator/src/test/resources/DataModelGeneratorIntegrationTest/oneof-interfaces-enabled/output/test/ColaTemperature.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2025 SAP SE or an SAP affiliate company. All rights reserved. + */ + +/* + * Soda Store API + * API for managing sodas in a soda store + * + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package test; + +import java.util.Objects; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Set; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.google.common.annotations.Beta; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Gets or Sets ColaTemperature + */ + +@Beta +public enum ColaTemperature { + + COOL("COOL"), + + WARM("WARM"); + + private final String value; + + ColaTemperature(String value) { + this.value = value; + } + + /** + * @return The enum value. + */ + @JsonValue + public String getValue() { + return value; + } + + /** + * @return The String representation of the enum value. + */ + @Override + @Nonnull public String toString() { + return String.valueOf(value); + } + + /** + * Converts the given value to its enum representation. + * + * @param value The input value. + * + * @return The enum representation of the given value. + */ + @JsonCreator + public static ColaTemperature fromValue(@Nonnull final String value) { + for (final ColaTemperature b : ColaTemperature.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } +} + From 44b88ff203f7bd30dfa331685a533a0554f0fdf8 Mon Sep 17 00:00:00 2001 From: I538344 Date: Tue, 4 Mar 2025 10:28:01 +0100 Subject: [PATCH 2/3] release notes --- release_notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release_notes.md b/release_notes.md index 3112514a9..8ad1e88a5 100644 --- a/release_notes.md +++ b/release_notes.md @@ -20,4 +20,4 @@ ### 🐛 Fixed Issues -- +- OpenAPI: When `apiMaturity` is set to `beta`, generated enums will now be `@Beta` annotated. From 7d7da060980650dbb1f2e841c23d085b37142e32 Mon Sep 17 00:00:00 2001 From: I538344 Date: Tue, 4 Mar 2025 12:39:39 +0100 Subject: [PATCH 3/3] fix tests --- .../openapi/generator/DataModelGeneratorIntegrationTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/datamodel/openapi/openapi-generator/src/test/java/com/sap/cloud/sdk/datamodel/openapi/generator/DataModelGeneratorIntegrationTest.java b/datamodel/openapi/openapi-generator/src/test/java/com/sap/cloud/sdk/datamodel/openapi/generator/DataModelGeneratorIntegrationTest.java index 3bfa2ac1c..cdba26a0a 100644 --- a/datamodel/openapi/openapi-generator/src/test/java/com/sap/cloud/sdk/datamodel/openapi/generator/DataModelGeneratorIntegrationTest.java +++ b/datamodel/openapi/openapi-generator/src/test/java/com/sap/cloud/sdk/datamodel/openapi/generator/DataModelGeneratorIntegrationTest.java @@ -73,7 +73,7 @@ private enum TestCase ApiMaturity.RELEASED, false, true, - 8, + 9, Map.of()), ONE_OF_INTERFACES_ENABLED( "oneof-interfaces-enabled", @@ -83,7 +83,7 @@ private enum TestCase ApiMaturity.BETA, true, true, - 9, + 10, Map.of("useOneOfInterfaces", "true", "useOneOfCreators", "true")), INPUT_SPEC_WITH_BUILDER( "input-spec-with-builder",