CAMEL-7999: Add support for enum in @UriPath types.

Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/7acbd5dc
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/7acbd5dc
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/7acbd5dc

Branch: refs/heads/master
Commit: 7acbd5dcf3b1703fe2d2261274c6fb97afe04176
Parents: 4a84f06
Author: Claus Ibsen <davscl...@apache.org>
Authored: Fri Nov 14 16:02:12 2014 +0100
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Fri Nov 14 16:02:12 2014 +0100

----------------------------------------------------------------------
 .../tools/apt/EndpointAnnotationProcessor.java  | 47 ++++++++++++++++++--
 1 file changed, 43 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/7acbd5dc/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
----------------------------------------------------------------------
diff --git 
a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
 
b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
index 0c28119..7176f80 100644
--- 
a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
+++ 
b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
@@ -205,7 +205,7 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
                 buffer.append(",");
             }
             buffer.append("\n    ");
-            buffer.append(JsonSchemaHelper.toJson(path.getName(), "path", 
path.getType(), "", path.getDocumentation(), false, null));
+            buffer.append(JsonSchemaHelper.toJson(path.getName(), "path", 
path.getType(), "", path.getDocumentation(), path.isEnumType(), 
path.getEnums()));
         }
 
         // and then regular parameter options
@@ -256,7 +256,7 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
                 writer.println("    <td>" + path.getName() + "</td>");
                 writer.println("    <td>" + path.getType() + "</td>");
                 writer.println("    <td>" + "path" + "</td>");
-                writer.println("    <td>" + "</td>");
+                writer.println("    <td>" + path.getEnumValuesAsHtml() + 
"</td>");
                 writer.println("    <td>" + path.getDocumentation() + "</td>");
                 writer.println("  </tr>");
             }
@@ -349,6 +349,7 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
                     name = prefix + name;
                     TypeMirror fieldType = fieldElement.asType();
                     String fieldTypeName = fieldType.toString();
+                    TypeElement fieldTypeElement = findTypeElement(roundEnv, 
fieldTypeName);
 
                     String docComment = 
elementUtils.getDocComment(fieldElement);
                     if (isNullOrEmpty(docComment)) {
@@ -373,7 +374,22 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
                         docComment = path.description();
                     }
 
-                    EndpointPath ep = new EndpointPath(name, fieldTypeName, 
docComment);
+                    // gather enums
+                    Set<String> enums = new LinkedHashSet<>();
+                    boolean isEnum = fieldTypeElement != null && 
fieldTypeElement.getKind() == ElementKind.ENUM;
+                    if (isEnum) {
+                        TypeElement enumClass = findTypeElement(roundEnv, 
fieldTypeElement.asType().toString());
+                        // find all the enum constants which has the possible 
enum value that can be used
+                        List<VariableElement> fields = 
ElementFilter.fieldsIn(enumClass.getEnclosedElements());
+                        for (VariableElement var : fields) {
+                            if (var.getKind() == ElementKind.ENUM_CONSTANT) {
+                                String val = var.toString();
+                                enums.add(val);
+                            }
+                        }
+                    }
+
+                    EndpointPath ep = new EndpointPath(name, fieldTypeName, 
docComment, isEnum, enums);
                     endpointPaths.add(ep);
                 }
 
@@ -765,11 +781,16 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
         private String name;
         private String type;
         private String documentation;
+        private boolean enumType;
+        private Set<String> enums;
 
-        private EndpointPath(String name, String type, String documentation) {
+        private EndpointPath(String name, String type, String documentation,
+                             boolean enumType, Set<String> enums) {
             this.name = name;
             this.type = type;
             this.documentation = documentation;
+            this.enumType = enumType;
+            this.enums = enums;
         }
 
         public String getName() {
@@ -783,6 +804,24 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
         public String getDocumentation() {
             return documentation;
         }
+
+        public String getEnumValuesAsHtml() {
+            CollectionStringBuffer csb = new CollectionStringBuffer("<br/>");
+            if (enums != null && enums.size() > 0) {
+                for (String e : enums) {
+                    csb.append(e);
+                }
+            }
+            return csb.toString();
+        }
+
+        public boolean isEnumType() {
+            return enumType;
+        }
+
+        public Set<String> getEnums() {
+            return enums;
+        }
     }
 
 }

Reply via email to