You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2014/12/30 11:42:44 UTC

[28/29] camel git commit: CAMEL-7999: apt compiler to generate json schema documentation for the model, whcih we later use to enrich the xml xsd to include documentation. Work in progress.

CAMEL-7999: apt compiler to generate json schema documentation for the model, whcih we later use to enrich the xml xsd to include documentation. Work in progress.


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

Branch: refs/heads/master
Commit: f4673d5a02f7e56f443b06b1f56658d18aa38ff0
Parents: f2373be
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Dec 30 09:50:34 2014 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Dec 30 10:56:48 2014 +0100

----------------------------------------------------------------------
 .../java/org/apache/camel/CamelContext.java     |   2 +-
 .../mbean/ManagedCamelContextMBean.java         |   2 +-
 .../commands/AbstractLocalCamelController.java  |   8 ++
 .../apache/camel/commands/CamelController.java  |  11 ++
 .../camel/commands/EipExplainCommand.java       | 113 +++++++++++++++++++
 .../jolokia/DefaultJolokiaCamelController.java  |  18 +++
 .../commands/jolokia/JolokiaCommandsTest.java   |  14 +++
 .../commands/jolokia/JolokiaRemoteTest.java     |   9 ++
 .../apache/camel/karaf/commands/EipExplain.java |  42 +++++++
 .../OSGI-INF/blueprint/camel-commands.xml       |   9 ++
 10 files changed, 226 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/f4673d5a/camel-core/src/main/java/org/apache/camel/CamelContext.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/CamelContext.java b/camel-core/src/main/java/org/apache/camel/CamelContext.java
index 5cd61b3..050ff05 100644
--- a/camel-core/src/main/java/org/apache/camel/CamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/CamelContext.java
@@ -1410,7 +1410,7 @@ public interface CamelContext extends SuspendableService, RuntimeConfiguration {
     /**
      * Returns a JSON schema representation of the EIP parameters for the given EIP by its id.
      *
-     * @param nameOrId the name of the EIP ({@link NamedNode#getShortName()} or a node id to refer to a specific node in the routes.
+     * @param nameOrId the name of the EIP ({@link NamedNode#getShortName()} or a node id to refer to a specific node from the routes.
      * @param includeAllOptions whether to include non configured options also (eg default options)
      * @return the json or <tt>null</tt> if the eipName or the id was not found
      */

http://git-wip-us.apache.org/repos/asf/camel/blob/f4673d5a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
index ba6ce75..fd2ebbb 100644
--- a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
+++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
@@ -252,7 +252,7 @@ public interface ManagedCamelContextMBean extends ManagedPerformanceCounterMBean
     /**
      * Returns a JSON schema representation of the EIP parameters for the given EIP by its id.
      *
-     * @param nameOrId the name of the EIP ({@link org.apache.camel.NamedNode#getShortName()} or a node id to refer to a specific node in the routes.
+     * @param nameOrId the name of the EIP ({@link org.apache.camel.NamedNode#getShortName()} or a node id to refer to a specific node from the routes.
      * @param includeAllOptions whether to include non configured options also (eg default options)
      * @return the json or <tt>null</tt> if the eipName or the id was not found
      */

http://git-wip-us.apache.org/repos/asf/camel/blob/f4673d5a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
index 0407871..9ea4dc3 100644
--- a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
@@ -413,6 +413,14 @@ public abstract class AbstractLocalCamelController extends AbstractCamelControll
         return context.explainEndpointJson(uri, allOptions);
     }
 
+    public String explainEipAsJSon(String camelContextName, String nameOrId, boolean allOptions) throws Exception {
+        CamelContext context = this.getLocalCamelContext(camelContextName);
+        if (context == null) {
+            return null;
+        }
+        return context.explainEipJson(nameOrId, allOptions);
+    }
+
     public List<Map<String, String>> listComponents(String camelContextName) throws Exception {
         CamelContext context = this.getLocalCamelContext(camelContextName);
         if (context == null) {

http://git-wip-us.apache.org/repos/asf/camel/blob/f4673d5a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CamelController.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CamelController.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CamelController.java
index f35d302..dd07768 100644
--- a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CamelController.java
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CamelController.java
@@ -209,6 +209,17 @@ public interface CamelController {
     String explainEndpointAsJSon(String camelContextName, String uri, boolean allOptions) throws Exception;
 
     /**
+     * Explains an EIP
+     *
+     * @param camelContextName the Camel context.
+     * @param nameOrId         the name of the EIP ({@link org.apache.camel.NamedNode#getShortName()} or a node id to refer to a specific node from the routes.
+     * @param allOptions       whether to explain all options, or only the explicit configured options from the uri
+     * @return a JSON schema with explanation of the options
+     * @throws java.lang.Exception can be thrown
+     */
+    String explainEipAsJSon(String camelContextName, String nameOrId, boolean allOptions) throws Exception;
+
+    /**
      * Lists Components which are in use or available on the classpath and include information
      *
      * @param camelContextName the Camel context.

http://git-wip-us.apache.org/repos/asf/camel/blob/f4673d5a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/EipExplainCommand.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/EipExplainCommand.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/EipExplainCommand.java
new file mode 100644
index 0000000..b94002c
--- /dev/null
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/EipExplainCommand.java
@@ -0,0 +1,113 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.commands;
+
+import java.io.PrintStream;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.camel.util.JsonSchemaHelper;
+
+/**
+ * Explain the Camel EIP.
+ */
+public class EipExplainCommand extends AbstractContextCommand {
+
+    private String nameOrId;
+    private boolean verbose;
+
+    public EipExplainCommand(String name, String nameOrId, boolean verbose) {
+        super(name);
+        this.verbose = verbose;
+        this.nameOrId = nameOrId;
+    }
+
+    @Override
+    protected Object performContextCommand(CamelController camelController, String contextName, PrintStream out, PrintStream err) throws Exception {
+        String json = camelController.explainEipAsJSon(context, nameOrId, verbose);
+        if (json == null) {
+            return null;
+        }
+
+        out.println("Context:       " + context);
+
+        // use a basic json parser
+        List<Map<String, String>> options = JsonSchemaHelper.parseJsonSchema("properties", json, true);
+
+        // lets sort the options by name
+        Collections.sort(options, new Comparator<Map<String, String>>() {
+            @Override
+            public int compare(Map<String, String> o1, Map<String, String> o2) {
+                // sort by kind first (need to -1 as we want path on top), then name
+                String kind1 = o1.get("kind");
+                String kind2 = o2.get("kind");
+                int answer = 0;
+                if (kind1 != null && kind2 != null) {
+                    answer = -1 * kind1.compareTo(kind2);
+                }
+                if (answer == 0) {
+                    answer = o1.get("name").compareTo(o2.get("name"));
+                }
+                return answer;
+            }
+        });
+
+        for (Map<String, String> option : options) {
+            out.print("Option:        ");
+            out.println(option.get("name"));
+            String kind = option.get("kind");
+            if (kind != null) {
+                out.print("Kind:          ");
+                out.println(kind);
+            }
+            String type = option.get("type");
+            if (type != null) {
+                out.print("Type:          ");
+                out.println(type);
+            }
+            String javaType = option.get("javaType");
+            if (javaType != null) {
+                out.print("Java Type:     ");
+                out.println(javaType);
+            }
+            String value = option.get("value");
+            if (value != null) {
+                out.print("Value:         ");
+                out.println(value);
+            }
+            String defaultValue = option.get("defaultValue");
+            if (defaultValue != null) {
+                out.print("Default Value: ");
+                out.println(defaultValue);
+            }
+            String description = option.get("description");
+            if (description != null) {
+                out.print("Description:   ");
+                out.println(description);
+            }
+            out.println();
+        }
+
+        if (options.isEmpty()) {
+            out.println();
+        }
+
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/f4673d5a/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java b/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java
index a9ee5c2..9d95c38 100644
--- a/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java
+++ b/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java
@@ -572,6 +572,24 @@ public class DefaultJolokiaCamelController extends AbstractCamelController imple
     }
 
     @Override
+    public String explainEipAsJSon(String camelContextName, String nameOrId, boolean allOptions) throws Exception {
+        if (jolokia == null) {
+            throw new IllegalStateException("Need to connect to remote jolokia first");
+        }
+
+        ObjectName found = lookupCamelContext(camelContextName);
+        if (found != null) {
+            J4pExecResponse response = jolokia.execute(new J4pExecRequest(found, "explainEipJson(java.lang.String,boolean)", nameOrId, allOptions));
+            if (response != null) {
+                String json = response.getValue();
+                return json;
+            }
+        }
+
+        return null;
+    }
+
+    @Override
     public List<Map<String, String>> listComponents(String camelContextName) throws Exception {
         if (jolokia == null) {
             throw new IllegalStateException("Need to connect to remote jolokia first");

http://git-wip-us.apache.org/repos/asf/camel/blob/f4673d5a/platforms/commands/commands-jolokia/src/test/java/org/apache/camel/commands/jolokia/JolokiaCommandsTest.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-jolokia/src/test/java/org/apache/camel/commands/jolokia/JolokiaCommandsTest.java b/platforms/commands/commands-jolokia/src/test/java/org/apache/camel/commands/jolokia/JolokiaCommandsTest.java
index 1308f39..cd94979 100644
--- a/platforms/commands/commands-jolokia/src/test/java/org/apache/camel/commands/jolokia/JolokiaCommandsTest.java
+++ b/platforms/commands/commands-jolokia/src/test/java/org/apache/camel/commands/jolokia/JolokiaCommandsTest.java
@@ -18,6 +18,7 @@ package org.apache.camel.commands.jolokia;
 
 import org.apache.camel.commands.ContextInfoCommand;
 import org.apache.camel.commands.ContextListCommand;
+import org.apache.camel.commands.EipExplainCommand;
 import org.apache.camel.commands.EndpointExplainCommand;
 import org.apache.camel.commands.EndpointListCommand;
 import org.junit.Ignore;
@@ -83,4 +84,17 @@ public class JolokiaCommandsTest {
         cmd.execute(controller, System.out, System.err);
     }
 
+    @Test
+    public void testEipExplain() throws Exception {
+        controller = new DefaultJolokiaCamelController();
+        controller.connect(url, null, null);
+
+        if (!controller.ping()) {
+            throw new IllegalArgumentException("Error connecting to " + url);
+        }
+
+        EipExplainCommand cmd = new EipExplainCommand("myCamel", "transform", true);
+        cmd.execute(controller, System.out, System.err);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/f4673d5a/platforms/commands/commands-jolokia/src/test/java/org/apache/camel/commands/jolokia/JolokiaRemoteTest.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-jolokia/src/test/java/org/apache/camel/commands/jolokia/JolokiaRemoteTest.java b/platforms/commands/commands-jolokia/src/test/java/org/apache/camel/commands/jolokia/JolokiaRemoteTest.java
index 57cc919..95e1c7f 100644
--- a/platforms/commands/commands-jolokia/src/test/java/org/apache/camel/commands/jolokia/JolokiaRemoteTest.java
+++ b/platforms/commands/commands-jolokia/src/test/java/org/apache/camel/commands/jolokia/JolokiaRemoteTest.java
@@ -187,6 +187,15 @@ public class JolokiaRemoteTest {
     }
 
     @Test
+    public void testExplainEipJson() throws Exception {
+        controller = new DefaultJolokiaCamelController();
+        controller.connect(url, null, null);
+
+        String data = controller.explainEipAsJSon("myCamel", "transform", true);
+        System.out.println(data);
+    }
+
+    @Test
     public void testListComponents() throws Exception {
         controller = new DefaultJolokiaCamelController();
         controller.connect(url, null, null);

http://git-wip-us.apache.org/repos/asf/camel/blob/f4673d5a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EipExplain.java
----------------------------------------------------------------------
diff --git a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EipExplain.java b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EipExplain.java
new file mode 100644
index 0000000..1f35486
--- /dev/null
+++ b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EipExplain.java
@@ -0,0 +1,42 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.karaf.commands;
+
+import org.apache.camel.commands.EipExplainCommand;
+import org.apache.felix.gogo.commands.Argument;
+import org.apache.felix.gogo.commands.Command;
+import org.apache.felix.gogo.commands.Option;
+
+@Command(scope = "camel", name = "eip-explain", description = "Explain the EIP in the CamelContext")
+public class EipExplain extends CamelCommandSupport {
+
+    @Argument(index = 0, name = "name", description = "The name of the Camel context", required = true, multiValued = false)
+    String name;
+
+    @Argument(index = 1, name = "nameOrId", description = "The name of the EIP or a node id to refer to a specific node from the routes", required = true, multiValued = false)
+    String nameOrId;
+
+    @Option(name = "--verbose", aliases = "-v", description = "Verbose output to explain all options",
+            required = false, multiValued = false, valueToShowInHelp = "false")
+    boolean verbose;
+
+    protected Object doExecute() throws Exception {
+        EipExplainCommand command = new EipExplainCommand(name, nameOrId, verbose);
+        return command.execute(camelController, System.out, System.err);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/f4673d5a/platforms/karaf/commands/src/main/resources/OSGI-INF/blueprint/camel-commands.xml
----------------------------------------------------------------------
diff --git a/platforms/karaf/commands/src/main/resources/OSGI-INF/blueprint/camel-commands.xml b/platforms/karaf/commands/src/main/resources/OSGI-INF/blueprint/camel-commands.xml
index 6721938..ec77fb6 100644
--- a/platforms/karaf/commands/src/main/resources/OSGI-INF/blueprint/camel-commands.xml
+++ b/platforms/karaf/commands/src/main/resources/OSGI-INF/blueprint/camel-commands.xml
@@ -152,6 +152,15 @@
         <null/>
       </completers>
     </command>
+    <command name="camel/eip-explain">
+      <action class="org.apache.camel.karaf.commands.EipExplain">
+        <property name="camelController" ref="camelController"/>
+      </action>
+      <completers>
+        <ref component-id="camelContextCompleter"/>
+        <null/>
+      </completers>
+    </command>
     <command name="camel/endpoint-list">
       <action class="org.apache.camel.karaf.commands.EndpointList">
         <property name="camelController" ref="camelController"/>