This is an automated email from the ASF dual-hosted git repository.

zhfeng pushed a commit to branch 3.15.x
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git

commit 40844906cffa8facc0662c44b76713e6f3bc1a90
Author: Zheng Feng <zh.f...@gmail.com>
AuthorDate: Thu Oct 31 06:50:32 2024 +0800

    Introduce additionProperties in rest-openapi codegen and fix some known 
issues with mustache template files (#6726)
---
 .../pages/reference/extensions/rest-openapi.adoc    |  6 ++++++
 .../CamelQuarkusSwaggerCodegenProvider.java         | 21 ++++++++++++++++++---
 .../handlebars/Quarkus/generatedAnnotation.mustache |  2 --
 .../resources/handlebars/Quarkus/modelEnum.mustache |  2 +-
 .../handlebars/Quarkus/modelInnerEnum.mustache      |  4 ++--
 .../main/resources/handlebars/Quarkus/pojo.mustache |  4 ++++
 .../openapi/runtime/RestOpenApiBuildTimeConfig.java |  9 +++++++++
 .../src/main/resources/application.properties       |  1 +
 8 files changed, 41 insertions(+), 8 deletions(-)

diff --git a/docs/modules/ROOT/pages/reference/extensions/rest-openapi.adoc 
b/docs/modules/ROOT/pages/reference/extensions/rest-openapi.adoc
index 05e8a63cf3..fee26616da 100644
--- a/docs/modules/ROOT/pages/reference/extensions/rest-openapi.adoc
+++ b/docs/modules/ROOT/pages/reference/extensions/rest-openapi.adoc
@@ -171,6 +171,12 @@ If `true`, use NON_NULL Jackson annotation in the 
generated model classes.
 If `true`, use JsonIgnoreProperties(ignoreUnknown = true) annotation in the 
generated model classes.
 | `boolean`
 | `false`
+
+|icon:lock[title=Fixed at build time] 
[[quarkus.camel.openapi.codegen.additional-properties.-additional-properties]]`link:#quarkus.camel.openapi.codegen.additional-properties.-additional-properties[quarkus.camel.openapi.codegen.additional-properties."additional-properties"]`
+
+Additional properties to be used in the mustache templates.
+| `Map<String,String>`
+| 
 |===
 
 [.configuration-legend]
diff --git 
a/extensions/rest-openapi/deployment/src/main/java/org/apache/camel/quarkus/component/rest/openapi/deployment/CamelQuarkusSwaggerCodegenProvider.java
 
b/extensions/rest-openapi/deployment/src/main/java/org/apache/camel/quarkus/component/rest/openapi/deployment/CamelQuarkusSwaggerCodegenProvider.java
index 23f86e0e4c..546af5455f 100644
--- 
a/extensions/rest-openapi/deployment/src/main/java/org/apache/camel/quarkus/component/rest/openapi/deployment/CamelQuarkusSwaggerCodegenProvider.java
+++ 
b/extensions/rest-openapi/deployment/src/main/java/org/apache/camel/quarkus/component/rest/openapi/deployment/CamelQuarkusSwaggerCodegenProvider.java
@@ -84,6 +84,7 @@ public class CamelQuarkusSwaggerCodegenProvider implements 
CodeGenProvider {
             boolean notNullJackson = 
config.getValue("quarkus.camel.openapi.codegen.not-null-jackson", 
Boolean.class);
             boolean ignoreUnknownProperties = 
config.getValue("quarkus.camel.openapi.codegen.ignore-unknown-properties",
                     Boolean.class);
+
             for (String specFile : specFiles) {
                 CodegenConfigurator configurator = new CodegenConfigurator();
                 configurator.setLang("quarkus");
@@ -97,14 +98,28 @@ public class CamelQuarkusSwaggerCodegenProvider implements 
CodeGenProvider {
                 configurator.getCodegenArguments()
                         .add(new 
CodegenArgument().option(CodegenConstants.MODEL_DOCS_OPTION).type("boolean").value("false"));
                 if (useBeanValidation) {
-                    
configurator.getAdditionalProperties().put(USE_BEANVALIDATION, "true");
+                    
configurator.getAdditionalProperties().put(USE_BEANVALIDATION, true);
                 }
                 if (notNullJackson) {
-                    
configurator.getAdditionalProperties().put(NOT_NULL_JACKSON_ANNOTATION, "true");
+                    
configurator.getAdditionalProperties().put(NOT_NULL_JACKSON_ANNOTATION, true);
                 }
                 if (ignoreUnknownProperties) {
-                    
configurator.getAdditionalProperties().put("ignoreUnknownProperties", "true");
+                    
configurator.getAdditionalProperties().put("ignoreUnknownProperties", true);
                 }
+                config.getPropertyNames().forEach(name -> {
+                    if 
(name.startsWith("quarkus.camel.openapi.codegen.additional-properties")) {
+                        String key = 
name.substring("quarkus.camel.openapi.codegen.additional-properties.".length());
+                        String value = config.getValue(name, String.class);
+                        if 
(configurator.getAdditionalProperties().containsKey(key)) {
+                            LOG.warn("Overriding existing property: " + key + 
" with value: " + value);
+                        }
+                        if (value.equals("true") || value.equals("false")) {
+                            configurator.getAdditionalProperties().put(key, 
Boolean.parseBoolean(value));
+                        } else {
+                            configurator.getAdditionalProperties().put(key, 
value);
+                        }
+                    }
+                });
 
                 final ClientOptInput input = configurator.toClientOptInput();
                 new DefaultGenerator().opts(input).generate();
diff --git 
a/extensions/rest-openapi/deployment/src/main/resources/handlebars/Quarkus/generatedAnnotation.mustache
 
b/extensions/rest-openapi/deployment/src/main/resources/handlebars/Quarkus/generatedAnnotation.mustache
index 6aa9a052e9..071df2fc88 100644
--- 
a/extensions/rest-openapi/deployment/src/main/resources/handlebars/Quarkus/generatedAnnotation.mustache
+++ 
b/extensions/rest-openapi/deployment/src/main/resources/handlebars/Quarkus/generatedAnnotation.mustache
@@ -15,5 +15,3 @@
     limitations under the License.
 }}
 
{{^hideGenerationTimestamp}}@{{#jakarta}}jakarta{{/jakarta}}{{^jakarta}}javax{{/jakarta}}.annotation.Generated(value
 = "{{generatorClass}}", date = "{{generatedDate}}"){{/hideGenerationTimestamp}}
-@RegisterForReflection{{#serializableModel}}(serialization = 
true){{/serializableModel}}
-{{#ignoreUnknownProperties}}@JsonIgnoreProperties(ignoreUnknown = 
true){{/ignoreUnknownProperties}}
diff --git 
a/extensions/rest-openapi/deployment/src/main/resources/handlebars/Quarkus/modelEnum.mustache
 
b/extensions/rest-openapi/deployment/src/main/resources/handlebars/Quarkus/modelEnum.mustache
index a86cf7ff4c..9f975db070 100644
--- 
a/extensions/rest-openapi/deployment/src/main/resources/handlebars/Quarkus/modelEnum.mustache
+++ 
b/extensions/rest-openapi/deployment/src/main/resources/handlebars/Quarkus/modelEnum.mustache
@@ -71,7 +71,7 @@ public enum 
{{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum
         return b;
       }
     }
-    {{^errorOnUnknownEnum}}return 
null;{{/errorOnUnknownEnum}}{{#errorOnUnknownEnum}}throw new 
IllegalArgumentException("Unexpected value '" + text + "' for '{{{classname}}}' 
enum.");{{/errorOnUnknownEnum}}
+    {{^errorOnUnknownEnum}}return 
null;{{/errorOnUnknownEnum}}{{#errorOnUnknownEnum}}throw new 
IllegalArgumentException("Unexpected value '" + input + "' for 
'{{{classname}}}' enum.");{{/errorOnUnknownEnum}}
   }
 {{#gson}}
 
diff --git 
a/extensions/rest-openapi/deployment/src/main/resources/handlebars/Quarkus/modelInnerEnum.mustache
 
b/extensions/rest-openapi/deployment/src/main/resources/handlebars/Quarkus/modelInnerEnum.mustache
index 9b13af047a..4690242474 100644
--- 
a/extensions/rest-openapi/deployment/src/main/resources/handlebars/Quarkus/modelInnerEnum.mustache
+++ 
b/extensions/rest-openapi/deployment/src/main/resources/handlebars/Quarkus/modelInnerEnum.mustache
@@ -55,7 +55,7 @@
           return b;
         }
       }
-      {{^errorOnUnknownEnum}}return 
null;{{/errorOnUnknownEnum}}{{#errorOnUnknownEnum}}throw new 
IllegalArgumentException("Unexpected value '" + text + "' for '{{{classname}}}' 
enum.");{{/errorOnUnknownEnum}}
+      {{^errorOnUnknownEnum}}return 
null;{{/errorOnUnknownEnum}}{{#errorOnUnknownEnum}}throw new 
IllegalArgumentException("Unexpected value '" + input + "' for 
'{{{classname}}}' enum.");{{/errorOnUnknownEnum}}
     }
     {{#gson}}
     public static class Adapter extends 
TypeAdapter<{{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}>
 {
@@ -70,4 +70,4 @@
         return 
{{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}.fromValue(({{{datatype}}})(value));
       }
     }{{/gson}}
-  }
\ No newline at end of file
+  }
diff --git 
a/extensions/rest-openapi/deployment/src/main/resources/handlebars/Quarkus/pojo.mustache
 
b/extensions/rest-openapi/deployment/src/main/resources/handlebars/Quarkus/pojo.mustache
index fc8b7d72f2..f03c1e3980 100644
--- 
a/extensions/rest-openapi/deployment/src/main/resources/handlebars/Quarkus/pojo.mustache
+++ 
b/extensions/rest-openapi/deployment/src/main/resources/handlebars/Quarkus/pojo.mustache
@@ -22,6 +22,10 @@
 {{#notNullJacksonAnnotation}}
 @JsonInclude(JsonInclude.Include.NON_NULL)
 {{/notNullJacksonAnnotation}}
+@RegisterForReflection{{#serializableModel}}(serialization = 
true){{/serializableModel}}
+{{#ignoreUnknownProperties}}
+@JsonIgnoreProperties(ignoreUnknown = true)
+{{/ignoreUnknownProperties}}
 
 public class {{classname}} {{#parent}}extends {{{parent}}} 
{{/parent}}{{#parcelableModel}}implements Parcelable {{#serializableModel}}, 
Serializable {{/serializableModel}}{{#interfaceModels}}{{#@first}}, 
{{/@first}}{{classname}}{{^@last}}, {{/@last}}{{#@last}} 
{{/@last}}{{/interfaceModels}}{{/parcelableModel}}{{^parcelableModel}}{{#serializableModel}}implements
 Serializable{{#interfaceModels}}{{#@first}}, 
{{/@first}}{{classname}}{{^@last}}, {{/@last}}{{#@last}} 
{{/@last}}{{/interfaceMode [...]
 {{#serializableModel}}
diff --git 
a/extensions/rest-openapi/runtime/src/main/java/org/apache/camel/quarkus/rest/openapi/runtime/RestOpenApiBuildTimeConfig.java
 
b/extensions/rest-openapi/runtime/src/main/java/org/apache/camel/quarkus/rest/openapi/runtime/RestOpenApiBuildTimeConfig.java
index 1d087cf701..fcebc9e0a5 100644
--- 
a/extensions/rest-openapi/runtime/src/main/java/org/apache/camel/quarkus/rest/openapi/runtime/RestOpenApiBuildTimeConfig.java
+++ 
b/extensions/rest-openapi/runtime/src/main/java/org/apache/camel/quarkus/rest/openapi/runtime/RestOpenApiBuildTimeConfig.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.quarkus.rest.openapi.runtime;
 
+import java.util.Map;
 import java.util.Optional;
 
 import io.quarkus.runtime.annotations.ConfigGroup;
@@ -71,6 +72,14 @@ public class RestOpenApiBuildTimeConfig {
          */
         @ConfigItem(defaultValue = "false")
         public boolean ignoreUnknownProperties;
+
+        /**
+         * Additional properties to be used in the mustache templates.
+         *
+         * @asciidoclet
+         */
+        @ConfigItem
+        public Map<String, String> additionalProperties;
     }
 
 }
diff --git 
a/integration-tests/rest-openapi/src/main/resources/application.properties 
b/integration-tests/rest-openapi/src/main/resources/application.properties
index a16f53a6ab..01f7a2133a 100644
--- a/integration-tests/rest-openapi/src/main/resources/application.properties
+++ b/integration-tests/rest-openapi/src/main/resources/application.properties
@@ -18,5 +18,6 @@ 
quarkus.native.resources.includes=openapi.json,petstore.json,example.yaml
 
quarkus.camel.openapi.codegen.model-package=org.apache.camel.quarkus.component.rest.openapi.it.model
 quarkus.camel.openapi.codegen.not-null-jackson=true
 quarkus.camel.openapi.codegen.ignore-unknown-properties=true
+quarkus.camel.openapi.codegen.additional-properties.errorOnUnknownEnum=true
 camel.rest.bindingMode=json
 camel.rest.bindingPackageScan=${quarkus.camel.openapi.codegen.model-package}

Reply via email to