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"/>