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

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit a32518526672d0ad50445e043e34a4833facad30
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Apr 8 11:00:11 2022 +0200

    CAMEL-17930: camel-yaml-dsl - Yaml schema - generate enums for logging 
levels
---
 .../maven/dsl/yaml/GenerateYamlDeserializersMojo.java      | 13 +++++++++++++
 .../camel/maven/dsl/yaml/GenerateYamlSupportMojo.java      | 14 ++++++++++++++
 2 files changed, 27 insertions(+)

diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlDeserializersMojo.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlDeserializersMojo.java
index d44eae64dbf..e98ea40eacf 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlDeserializersMojo.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlDeserializersMojo.java
@@ -840,6 +840,19 @@ public class GenerateYamlDeserializersMojo extends 
GenerateYamlSupportMojo {
                 builder.addMember("required", "$L", isRequired(field));
             }
 
+            annotations.add(builder.build());
+        } else if (isEnum(field)) {
+            // this is a fake enum where the model is text based by have enum 
values to represent the user to choose between
+            cb.addStatement("String val = asText(node)");
+            cb.addStatement("target.set$L(val)", 
StringHelper.capitalize(field.name()));
+            cb.addStatement("break");
+
+            AnnotationSpec.Builder builder = 
AnnotationSpec.builder(CN_YAML_PROPERTY);
+            builder.addMember("name", "$S", fieldName);
+            builder.addMember("type", "$S", "enum:" + getEnums(field));
+            if (isRequired(field)) {
+                builder.addMember("required", "$L", isRequired(field));
+            }
             annotations.add(builder.build());
         } else {
             switch (field.type().name().toString()) {
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSupportMojo.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSupportMojo.java
index 4fb10bbc198..89f626edbd8 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSupportMojo.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSupportMojo.java
@@ -603,6 +603,20 @@ public abstract class GenerateYamlSupportMojo extends 
AbstractMojo {
                                 .orElse(false);
     }
 
+    protected String getEnums(FieldInfo fi) {
+        return annotationValue(fi, METADATA_ANNOTATION_CLASS, "enums")
+                        .map(AnnotationValue::asString).orElse("");
+    }
+
+    protected String getJavaType(FieldInfo fi) {
+        return annotationValue(fi, METADATA_ANNOTATION_CLASS, "javaType")
+                        .map(AnnotationValue::asString).orElse("");
+    }
+
+    protected boolean isEnum(FieldInfo fi) {
+        return !getEnums(fi).isBlank();
+    }
+
     protected boolean isDeprecated(FieldInfo fi) {
         return fi.hasAnnotation(DEPRECATED_ANNOTATION_CLASS);
     }

Reply via email to