Repository: camel
Updated Branches:
  refs/heads/master 25cfae1f3 -> 950b1fc7a


CAMEL-7999: apt plugin include enums from other JARs in the options when 
extending other components in other JARs. Added kind attribute to the options 
so we know if its from url path or query parameter.


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

Branch: refs/heads/master
Commit: dd856841c79f743bf7a2ce3d2a3a6ef1a9a46a51
Parents: 25cfae1
Author: Claus Ibsen <davscl...@apache.org>
Authored: Wed Nov 12 14:17:17 2014 +0100
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Wed Nov 12 14:17:17 2014 +0100

----------------------------------------------------------------------
 .../management/mbean/CamelOpenMBeanTypes.java   |  8 +-
 .../apache/camel/impl/DefaultCamelContext.java  | 22 +++--
 .../camel/management/mbean/ManagedEndpoint.java |  7 +-
 .../camel/karaf/commands/EndpointExplain.java   |  9 ++-
 .../camel/karaf/commands/EndpointList.java      | 15 +++-
 .../tools/apt/EndpointAnnotationProcessor.java  | 84 ++++++++++----------
 .../camel/tools/apt/JsonSchemaHelper.java       |  6 +-
 7 files changed, 88 insertions(+), 63 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/dd856841/camel-core/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java
 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java
index 239e690..5e3160c 100644
--- 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java
+++ 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java
@@ -66,13 +66,13 @@ public final class CamelOpenMBeanTypes {
 
     public static TabularType explainEndpointTabularType() throws 
OpenDataException {
         CompositeType ct = explainEndpointsCompositeType();
-        return new TabularType("explainEndpoint", "Explain how this endpoint 
is configured", ct, new String[]{"option", "type", "java type", "value", 
"default value", "description"});
+        return new TabularType("explainEndpoint", "Explain how this endpoint 
is configured", ct, new String[]{"option", "kind", "type", "java type", 
"value", "default value", "description"});
     }
 
     public static CompositeType explainEndpointsCompositeType() throws 
OpenDataException {
-        return new CompositeType("endpoint", "Explain Endpoint", new 
String[]{"option", "type", "java type", "value", "default value", 
"description"},
-                new String[]{"Option", "Type", "Java Type", "Value", "Default 
Value", "Description"},
-                new OpenType[]{SimpleType.STRING, SimpleType.STRING, 
SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING});
+        return new CompositeType("endpoint", "Explain Endpoint", new 
String[]{"option", "kind", "type", "java type", "value", "default value", 
"description"},
+                new String[]{"Option", "Kind", "Type", "Java Type", "Value", 
"Default Value", "Description"},
+                new OpenType[]{SimpleType.STRING, SimpleType.STRING, 
SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, 
SimpleType.STRING});
     }
 
     public static TabularType listComponentsTabularType() throws 
OpenDataException {

http://git-wip-us.apache.org/repos/asf/camel/blob/dd856841/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java 
b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
index 4d48355..138d69d 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
@@ -1085,6 +1085,7 @@ public class DefaultCamelContext extends ServiceSupport 
implements ModelCamelCon
 
     public String resolveComponentDefaultName(String javaType) {
         // special for some components
+        // TODO: ActiveMQ 5.11 will include this out of the box, so not needed 
when its released
         if 
("org.apache.activemq.camel.component.ActiveMQComponent".equals(javaType)) {
             return "jms";
         }
@@ -1210,12 +1211,14 @@ public class DefaultCamelContext extends ServiceSupport 
implements ModelCamelCon
 
                 // find type and description from the json schema
                 String type = null;
+                String kind = null;
                 String javaType = null;
                 String defaultValue = null;
                 String description = null;
                 for (Map<String, String> row : rows) {
                     if (name.equals(row.get("name"))) {
                         type = row.get("type");
+                        kind = row.get("kind");
                         javaType = row.get("javaType");
                         defaultValue = row.get("defaultValue");
                         description = row.get("description");
@@ -1224,13 +1227,14 @@ public class DefaultCamelContext extends ServiceSupport 
implements ModelCamelCon
                 }
 
                 // add as selected row
-                selected.put(name, new String[]{name, type, javaType, value, 
defaultValue, description});
+                selected.put(name, new String[]{name, kind, type, javaType, 
value, defaultValue, description});
             }
 
             if (includeAllOptions) {
                 // include other rows
                 for (Map<String, String> row : rows) {
                     String name = row.get("name");
+                    String kind = row.get("kind");
                     String value = row.get("value");
                     String defaultValue = row.get("defaultValue");
                     String type = row.get("type");
@@ -1240,7 +1244,7 @@ public class DefaultCamelContext extends ServiceSupport 
implements ModelCamelCon
 
                     // add as selected row
                     if (!selected.containsKey(name)) {
-                        selected.put(name, new String[]{name, type, javaType, 
value, defaultValue, description});
+                        selected.put(name, new String[]{name, kind, type, 
javaType, value, defaultValue, description});
                     }
                 }
             }
@@ -1257,15 +1261,19 @@ public class DefaultCamelContext extends ServiceSupport 
implements ModelCamelCon
                 buffer.append("\n    ");
 
                 String name = row[0];
-                String type = row[1];
-                String javaType = row[2];
-                String value = row[3];
-                String defaultValue = row[4];
-                String description = row[5];
+                String kind = row[1];
+                String type = row[2];
+                String javaType = row[3];
+                String value = row[4];
+                String defaultValue = row[5];
+                String description = row[6];
 
                 // add json of the option
                 buffer.append(doubleQuote(name) + ": { ");
                 CollectionStringBuffer csb = new CollectionStringBuffer();
+                if (kind != null) {
+                    csb.append("\"kind\": \"" + kind + "\"");
+                }
                 if (type != null) {
                     csb.append("\"type\": \"" + type + "\"");
                 }

http://git-wip-us.apache.org/repos/asf/camel/blob/dd856841/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java
 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java
index 2f2d281..4871206 100644
--- 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java
+++ 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java
@@ -92,7 +92,8 @@ public class ManagedEndpoint implements ManagedInstance, 
ManagedEndpointMBean {
             TabularData answer = new 
TabularDataSupport(CamelOpenMBeanTypes.explainEndpointTabularType());
 
             for (Map<String, String> row : rows) {
-                String option = row.get("name");
+                String name = row.get("name");
+                String kind = row.get("kind");
                 String type = row.get("type");
                 String javaType = row.get("javaType");
                 String value = row.get("value") != null ? row.get("value") : 
"";
@@ -101,8 +102,8 @@ public class ManagedEndpoint implements ManagedInstance, 
ManagedEndpointMBean {
 
                 CompositeType ct = 
CamelOpenMBeanTypes.explainEndpointsCompositeType();
                 CompositeData data = new CompositeDataSupport(ct,
-                        new String[]{"option", "type", "java type", "value", 
"default value", "description"},
-                        new Object[]{option, type, javaType, value, 
defaultValue, description});
+                        new String[]{"option", "kind", "type", "java type", 
"value", "default value", "description"},
+                        new Object[]{name, kind, type, javaType, value, 
defaultValue, description});
                 answer.put(data);
             }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/dd856841/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointExplain.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointExplain.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointExplain.java
index 02725d0..93bed6b 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointExplain.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointExplain.java
@@ -89,13 +89,20 @@ public class EndpointExplain extends CamelCommandSupport {
             Collections.sort(options, new Comparator<Map<String, String>>() {
                 @Override
                 public int compare(Map<String, String> o1, Map<String, String> 
o2) {
-                    return o1.get("name").compareTo(o2.get("name"));
+                    // sort by kind first, then name
+                    int answer = o1.get("kind").compareTo(o2.get("kind"));
+                    if (answer == 0) {
+                        answer = o1.get("name").compareTo(o2.get("name"));
+                    }
+                    return answer;
                 }
             });
 
             for (Map<String, String> option : options) {
                 out.print("Option:\t\t");
                 out.println(option.get("name"));
+                out.print("Kind:\t\t");
+                out.println(option.get("kind"));
                 String type = option.get("type");
                 if (type != null) {
                     out.print("Type:\t\t");

http://git-wip-us.apache.org/repos/asf/camel/blob/dd856841/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointList.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointList.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointList.java
index 89017e6..6777df1 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointList.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointList.java
@@ -102,12 +102,18 @@ public class EndpointList extends CamelCommandSupport {
                     Collections.sort(options, new Comparator<Map<String, 
String>>() {
                         @Override
                         public int compare(Map<String, String> o1, Map<String, 
String> o2) {
-                            return o1.get("name").compareTo(o2.get("name"));
+                            // sort by kind first, then name
+                            int answer = 
o1.get("kind").compareTo(o2.get("kind"));
+                            if (answer == 0) {
+                                answer = 
o1.get("name").compareTo(o2.get("name"));
+                            }
+                            return answer;
                         }
                     });
 
                     for (Map<String, String> option : options) {
                         String key = option.get("name");
+                        String kind = option.get("kind");
                         String type = option.get("type");
                         String javaType = option.get("javaType");
                         String value = option.get("value");
@@ -120,7 +126,12 @@ public class EndpointList extends CamelCommandSupport {
                                 out.println();
                                 first = false;
                             }
-                            String line = "\t" + key + "=" + value;
+                            String line;
+                            if ("path".equals(kind)) {
+                                line = "\t" + key + " (endpoint path) = " + 
value;
+                            } else {
+                                line = "\t" + key + " = " + value;
+                            }
                             out.println(String.format(rowFormat, "", line, 
""));
 
                             if (type != null) {

http://git-wip-us.apache.org/repos/asf/camel/blob/dd856841/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 222e913..0e26f42 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
@@ -180,9 +180,9 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
         buffer.append("\n  \"componentProperties\": {");
         buffer.append("\n  },");
 
-        // endpoint paths
-        buffer.append("\n  \"endpointPaths\": {");
+        buffer.append("\n  \"properties\": {");
         boolean first = true;
+        // include paths in the top
         for (EndpointPath path : paths) {
             if (first) {
                 first = false;
@@ -190,13 +190,10 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
                 buffer.append(",");
             }
             buffer.append("\n    ");
-            buffer.append(JsonSchemaHelper.toJson(path.getName(), 
path.getType(), "", path.getDocumentation(), false, null));
+            buffer.append(JsonSchemaHelper.toJson(path.getName(), "path", 
path.getType(), "", path.getDocumentation(), false, null));
         }
-        buffer.append("\n  },");
 
-        // endpoint properties was named properties at first, and hence we 
stick with that naming to be compatible
-        buffer.append("\n  \"properties\": {");
-        first = true;
+        // and then regular parameter options
         for (EndpointOption entry : options) {
             if (first) {
                 first = false;
@@ -207,7 +204,7 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
             // as its json we need to sanitize the docs
             String doc = entry.getDocumentationWithNotes();
             doc = sanitizeDescription(doc, false);
-            buffer.append(JsonSchemaHelper.toJson(entry.getName(), 
entry.getType(), entry.getDefaultValue(), doc, entry.isEnumType(), 
entry.getEnums()));
+            buffer.append(JsonSchemaHelper.toJson(entry.getName(), 
"parameter", entry.getType(), entry.getDefaultValue(), doc, entry.isEnumType(), 
entry.getEnums()));
         }
         buffer.append("\n  }");
 
@@ -227,28 +224,33 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
         Set<EndpointPath> endpointPaths = new LinkedHashSet<>();
         Set<EndpointOption> endpointOptions = new LinkedHashSet<>();
         findClassProperties(writer, roundEnv, endpointPaths, endpointOptions, 
classElement, prefix);
+
         if (!endpointOptions.isEmpty() || !endpointPaths.isEmpty()) {
             writer.println("<table class='table'>");
             writer.println("  <tr>");
             writer.println("    <th>Name</th>");
+            writer.println("    <th>Kind</th>");
             writer.println("    <th>Type</th>");
             writer.println("    <th>Default Value</th>");
             writer.println("    <th>Enum Values</th>");
             writer.println("    <th>Description</th>");
             writer.println("  </tr>");
+            // include paths in the top
             for (EndpointPath path : endpointPaths) {
                 writer.println("  <tr>");
-                writer.println("    <td>" + path.getName() + " (<i>endpoint 
path</i>) " + "</td>");
+                writer.println("    <td>" + path.getName() + "</td>");
                 writer.println("    <td>" + path.getType() + "</td>");
-                writer.println("    <td>" + "</td>");
+                writer.println("    <td>" + "path" + "</td>");
                 writer.println("    <td>" + "</td>");
                 writer.println("    <td>" + path.getDocumentation() + "</td>");
                 writer.println("  </tr>");
             }
+            // and then regular parameter options
             for (EndpointOption option : endpointOptions) {
                 writer.println("  <tr>");
                 writer.println("    <td>" + option.getName() + "</td>");
                 writer.println("    <td>" + option.getType() + "</td>");
+                writer.println("    <td>" + "parameter" + "</td>");
                 writer.println("    <td>" + option.getDefaultValue() + 
"</td>");
                 writer.println("    <td>" + option.getEnumValuesAsHtml() + 
"</td>");
                 writer.println("    <td>" + option.getDocumentationWithNotes() 
+ "</td>");
@@ -436,21 +438,7 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
             TypeMirror superclass = classElement.getSuperclass();
             if (superclass != null) {
                 String superClassName = 
canonicalClassName(superclass.toString());
-                // check the rounding env first
                 baseTypeElement = findTypeElement(roundEnv, superClassName);
-                if (baseTypeElement == null) {
-                    // okay not found in rounding env, that means this 
component extends another component from another JAR
-                    // so we need to find it using the package name instead of 
in the rounding environment
-                    int idx = superClassName.lastIndexOf('.');
-                    String name = superClassName.substring(0, idx);
-                    // skip java.lang package
-                    if (!"java.lang".equals(name)) {
-                        PackageElement pe = 
elementUtils.getPackageElement(name);
-                        if (pe != null) {
-                            baseTypeElement = findTypeElement(pe, 
superClassName);
-                        }
-                    }
-                }
             }
             if (baseTypeElement != null) {
                 classElement = baseTypeElement;
@@ -461,34 +449,42 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
     }
 
     protected TypeElement findTypeElement(RoundEnvironment roundEnv, String 
className) {
-        if (!isNullOrEmpty(className) && 
!"java.lang.Object".equals(className)) {
-            Set<? extends Element> rootElements = roundEnv.getRootElements();
-            for (Element rootElement : rootElements) {
-                if (rootElement instanceof TypeElement) {
-                    TypeElement typeElement = (TypeElement) rootElement;
-                    String aRootName = 
canonicalClassName(typeElement.getQualifiedName().toString());
-                    if (className.equals(aRootName)) {
-                        return typeElement;
-                    }
+        if (isNullOrEmpty(className) || "java.lang.Object".equals(className)) {
+            return null;
+        }
+
+        Set<? extends Element> rootElements = roundEnv.getRootElements();
+        for (Element rootElement : rootElements) {
+            if (rootElement instanceof TypeElement) {
+                TypeElement typeElement = (TypeElement) rootElement;
+                String aRootName = 
canonicalClassName(typeElement.getQualifiedName().toString());
+                if (className.equals(aRootName)) {
+                    return typeElement;
                 }
             }
         }
-        return null;
-    }
 
-    protected TypeElement findTypeElement(PackageElement element, String 
className) {
-        if (!isNullOrEmpty(className) && 
!"java.lang.Object".equals(className)) {
-            List<? extends Element> rootElements = 
element.getEnclosedElements();
-            for (Element rootElement : rootElements) {
-                if (rootElement instanceof TypeElement) {
-                    TypeElement typeElement = (TypeElement) rootElement;
-                    String aRootName = 
canonicalClassName(typeElement.getQualifiedName().toString());
-                    if (className.equals(aRootName)) {
-                        return typeElement;
+        // fallback using package name
+        Elements elementUtils = processingEnv.getElementUtils();
+
+        int idx = className.lastIndexOf('.');
+        if (idx > 0) {
+            String packageName = className.substring(0, idx);
+            PackageElement pe = elementUtils.getPackageElement(packageName);
+            if (pe != null) {
+                List<? extends Element> enclosedElements = 
pe.getEnclosedElements();
+                for (Element rootElement : enclosedElements) {
+                    if (rootElement instanceof TypeElement) {
+                        TypeElement typeElement = (TypeElement) rootElement;
+                        String aRootName = 
canonicalClassName(typeElement.getQualifiedName().toString());
+                        if (className.equals(aRootName)) {
+                            return typeElement;
+                        }
                     }
                 }
             }
         }
+
         return null;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/dd856841/tooling/apt/src/main/java/org/apache/camel/tools/apt/JsonSchemaHelper.java
----------------------------------------------------------------------
diff --git 
a/tooling/apt/src/main/java/org/apache/camel/tools/apt/JsonSchemaHelper.java 
b/tooling/apt/src/main/java/org/apache/camel/tools/apt/JsonSchemaHelper.java
index 96d029e..e4b9f7c 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/JsonSchemaHelper.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/JsonSchemaHelper.java
@@ -30,13 +30,15 @@ final class JsonSchemaHelper {
     private JsonSchemaHelper() {
     }
 
-    public static String toJson(String name, String type, String defaultValue, 
String description, boolean enumType, Set<String> enums) {
+    public static String toJson(String name, String kind, String type, String 
defaultValue, String description, boolean enumType, Set<String> enums) {
         String typeName = JsonSchemaHelper.getType(type, enumType);
 
         StringBuilder sb = new StringBuilder();
         sb.append(Strings.doubleQuote(name));
-        sb.append(": { \"type\": ");
+        sb.append(": { \"kind\": ");
+        sb.append(Strings.doubleQuote(kind));
 
+        sb.append(", \"type\": ");
         if ("enum".equals(typeName)) {
             sb.append(Strings.doubleQuote("string"));
             sb.append(", \"javaType\": \"" + type + "\"");

Reply via email to