Camel apt improved html doc generation. And working on generating json schema 
as well.


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

Branch: refs/heads/master
Commit: ae8dc87006e069a9214ac1bd1797f6f2fa198cde
Parents: 7bba465
Author: Claus Ibsen <davscl...@apache.org>
Authored: Thu Nov 6 10:52:12 2014 +0100
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Fri Nov 7 13:25:18 2014 +0100

----------------------------------------------------------------------
 .../tools/apt/EndpointAnnotationProcessor.java  | 45 +++++++++++----
 .../camel/tools/apt/util/JsonSchemaHelper.java  | 59 +++++++++-----------
 2 files changed, 60 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/ae8dc870/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 a4bd197..548387e 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
@@ -25,9 +25,7 @@ import java.io.Writer;
 import java.net.URI;
 import java.util.LinkedHashSet;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
-import java.util.SortedMap;
 import javax.annotation.processing.AbstractProcessor;
 import javax.annotation.processing.Filer;
 import javax.annotation.processing.RoundEnvironment;
@@ -35,6 +33,7 @@ import javax.annotation.processing.SupportedAnnotationTypes;
 import javax.annotation.processing.SupportedSourceVersion;
 import javax.lang.model.SourceVersion;
 import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
 import javax.lang.model.element.ExecutableElement;
 import javax.lang.model.element.TypeElement;
 import javax.lang.model.element.VariableElement;
@@ -101,7 +100,6 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
                         return null;
                     }
                 };
-//                packageName = "META-INF.services.org.apache.camel.schema";
                 processFile(packageName, scheme, fileName, handler);
             }
         }
@@ -151,9 +149,7 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
 
         String classDoc = 
processingEnv.getElementUtils().getDocComment(classElement);
         if (!Strings.isNullOrEmpty(classDoc)) {
-            // remove dodgy @version that we may have in class javadoc
-            classDoc = classDoc.replaceFirst("\\@version", "");
-            classDoc = classDoc.trim();
+            classDoc = JsonSchemaHelper.sanitizeDescription(classDoc);
         }
 
         // TODO: add some top details about component scheme name, and 
documentation
@@ -170,14 +166,14 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
     public String createParameterJsonSchema(Set<EndpointOption> options) {
         StringBuilder buffer = new StringBuilder("{\n  \"properties\": {");
         boolean first = true;
-        for (EndpointOption entry :  options) {
+        for (EndpointOption entry : options) {
             if (first) {
                 first = false;
             } else {
                 buffer.append(",");
             }
             buffer.append("\n    ");
-            buffer.append(JsonSchemaHelper.toJson(entry.getName(), 
entry.getType(), entry.getDocumentation()));
+            buffer.append(JsonSchemaHelper.toJson(entry.getName(), 
entry.getType(), entry.getDocumentation(), entry.isEnumType(), 
entry.getEnums()));
         }
         buffer.append("\n  }\n}\n");
         return buffer.toString();
@@ -267,7 +263,24 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
                             docComment = "";
                         }
 
-                        EndpointOption option = new EndpointOption(name, 
fieldTypeName, docComment.trim());
+                        // 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);
+                                }
+                            }
+                        }
+
+                        // we could likely detect if the type is collection 
based?
+
+                        EndpointOption option = new EndpointOption(name, 
fieldTypeName, docComment.trim(), isEnum, enums);
                         endpointOptions.add(option);
                     }
                 }
@@ -368,11 +381,15 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
         private String name;
         private String type;
         private String documentation;
+        private boolean enumType;
+        private Set<String> enums;
 
-        private EndpointOption(String name, String type, String documentation) 
{
+        private EndpointOption(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() {
@@ -387,6 +404,14 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
             return documentation;
         }
 
+        public boolean isEnumType() {
+            return enumType;
+        }
+
+        public Set<String> getEnums() {
+            return enums;
+        }
+
         @Override
         public boolean equals(Object o) {
             if (this == o) {

http://git-wip-us.apache.org/repos/asf/camel/blob/ae8dc870/tooling/apt/src/main/java/org/apache/camel/tools/apt/util/JsonSchemaHelper.java
----------------------------------------------------------------------
diff --git 
a/tooling/apt/src/main/java/org/apache/camel/tools/apt/util/JsonSchemaHelper.java
 
b/tooling/apt/src/main/java/org/apache/camel/tools/apt/util/JsonSchemaHelper.java
index 9f8ad26..5d17118 100644
--- 
a/tooling/apt/src/main/java/org/apache/camel/tools/apt/util/JsonSchemaHelper.java
+++ 
b/tooling/apt/src/main/java/org/apache/camel/tools/apt/util/JsonSchemaHelper.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.tools.apt.util;
 
+import java.util.Set;
+
 import static org.apache.camel.tools.apt.util.Strings.doubleQuote;
 
 /**
@@ -26,17 +28,30 @@ public final class JsonSchemaHelper {
     private JsonSchemaHelper() {
     }
 
-    public static String toJson(String name, String type, String description) {
-        String typeName = JsonSchemaHelper.getType(type);
-
-        // TODO: add support for enum and array
+    public static String toJson(String name, String type, String description, 
boolean enumType, Set<String> enums) {
+        String typeName = JsonSchemaHelper.getType(type, enumType);
 
         StringBuilder sb = new StringBuilder();
         sb.append(doubleQuote(name));
         sb.append(": { \"type\":");
-        sb.append(doubleQuote(typeName));
+
+        if ("enum".equals(typeName)) {
+            sb.append(doubleQuote("string"));
+            CollectionStringBuffer enumValues = new CollectionStringBuffer();
+            for (Object value : enums) {
+                enumValues.append(doubleQuote(value.toString()));
+            }
+            sb.append(", \"enum\": [ ");
+            sb.append(enumValues.toString());
+            sb.append(" ]");
+        } else if ("array".equals(typeName)) {
+            sb.append(doubleQuote("array"));
+        } else {
+            sb.append(doubleQuote(typeName));
+        }
+
         if (!Strings.isNullOrEmpty(description)) {
-            sb.append(", \"description\":");
+            sb.append(", \"description\": ");
             String text = sanitizeDescription(description);
             sb.append(doubleQuote(text));
         }
@@ -47,27 +62,6 @@ public final class JsonSchemaHelper {
         }
         sb.append(" }");
         return sb.toString();
-
-//        if (type.isEnum()) {
-//            String typeName = "string";
-//            CollectionStringBuffer sb = new CollectionStringBuffer();
-//            for (Object value : parameterType.getEnumConstants()) {
-//                sb.append(doubleQuote(value.toString()));
-//            }
-//            return doubleQuote(name) + ": { \"type\": " + doubleQuote(type) 
+ ", \"enum\": [ " + sb.toString() + " ] }";
-//        } else if (parameterType.isArray()) {
-//            String typeName = "array";
-//            return doubleQuote(name) + ": { \"type\": " + doubleQuote(type) 
+ " }";
-//        } else {
-//        if ("object".equals(typeName)) {
-//            for object then include the javaType as a description so we know 
that
-//            return doubleQuote(name) + ": { \"type\": " + 
doubleQuote(typeName)
-//                    + ", \"properties\": { \"javaType\": { \"description\": 
\"" + type + "\", \"type\": \"string\" } } }";
-//        } else {
-//            return doubleQuote(name) + ": { \"type\": " + 
doubleQuote(typeName) + " }";
-//        }
-//        }
-
     }
 
     /**
@@ -76,13 +70,10 @@ public final class JsonSchemaHelper {
      * @param   type the java type
      * @return  the json schema type, is never null, but returns 
<tt>object</tt> as the generic type
      */
-    public static String getType(String type) {
-        // TODO:
-//        if (type.isEnum()) {
-//            return "enum";
-//        } else if (type.isArray()) {
-//            return "array";
-//        }
+    public static String getType(String type, boolean enumType) {
+        if (enumType) {
+            return "enum";
+        }
 
         String primitive = getPrimitiveType(type);
         if (primitive != null) {

Reply via email to