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:42 UTC
[26/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/03067ae6
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/03067ae6
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/03067ae6
Branch: refs/heads/master
Commit: 03067ae66153c5b94d91870bf5a7139d9b57658b
Parents: a371de7
Author: Claus Ibsen <da...@apache.org>
Authored: Mon Dec 29 17:42:12 2014 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Dec 30 10:56:47 2014 +0100
----------------------------------------------------------------------
.../java/org/apache/camel/CamelContext.java | 5 +-
.../mbean/ManagedCamelContextMBean.java | 6 +-
.../apache/camel/impl/DefaultCamelContext.java | 127 ++++++++++++++++++-
.../management/mbean/ManagedCamelContext.java | 4 +-
.../management/mbean/ManagedProcessor.java | 2 +-
5 files changed, 128 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/03067ae6/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 28955c0..5cd61b3 100644
--- a/camel-core/src/main/java/org/apache/camel/CamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/CamelContext.java
@@ -1410,12 +1410,11 @@ public interface CamelContext extends SuspendableService, RuntimeConfiguration {
/**
* Returns a JSON schema representation of the EIP parameters for the given EIP by its id.
*
- * @param eipName the name of the EIP ({@link NamedNode#getShortName()}
- * @param id optional id of an EIP in use from any of the routes to explain
+ * @param nameOrId the name of the EIP ({@link NamedNode#getShortName()} or a node id to refer to a specific node in 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
*/
- String explainEipJson(String eipName, String id, boolean includeAllOptions);
+ String explainEipJson(String nameOrId, boolean includeAllOptions);
/**
* Returns a JSON schema representation of the endpoint parameters for the given endpoint uri.
http://git-wip-us.apache.org/repos/asf/camel/blob/03067ae6/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 448cacd..ba6ce75 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
@@ -21,7 +21,6 @@ import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
-
import javax.management.openmbean.TabularData;
import org.apache.camel.api.management.ManagedAttribute;
@@ -253,13 +252,12 @@ public interface ManagedCamelContextMBean extends ManagedPerformanceCounterMBean
/**
* Returns a JSON schema representation of the EIP parameters for the given EIP by its id.
*
- * @param eipName the name of the EIP ({@link org.apache.camel.NamedNode#getShortName()}
- * @param id optional id of an EIP in use from any of the routes to explain
+ * @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 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
*/
@ManagedOperation(description = "Returns a JSON schema representation of the EIP parameters for the given EIP by its id")
- String explainEipJson(String eipName, String id, boolean includeAllOptions);
+ String explainEipJson(String nameOrId, boolean includeAllOptions);
/**
* Returns a JSON schema representation of the endpoint parameters for the given endpoint uri
http://git-wip-us.apache.org/repos/asf/camel/blob/03067ae6/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 5d8dc95..6a41243 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
@@ -51,6 +51,7 @@ import org.apache.camel.ErrorHandlerFactory;
import org.apache.camel.FailedToStartRouteException;
import org.apache.camel.IsSingleton;
import org.apache.camel.MultipleConsumersSupport;
+import org.apache.camel.NamedNode;
import org.apache.camel.NoFactoryAvailableException;
import org.apache.camel.NoSuchEndpointException;
import org.apache.camel.PollingConsumer;
@@ -82,7 +83,10 @@ import org.apache.camel.management.JmxSystemPropertyKeys;
import org.apache.camel.management.ManagementStrategyFactory;
import org.apache.camel.model.Constants;
import org.apache.camel.model.DataFormatDefinition;
+import org.apache.camel.model.FromDefinition;
import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.model.ProcessorDefinitionHelper;
import org.apache.camel.model.RouteDefinition;
import org.apache.camel.model.RouteDefinitionHelper;
import org.apache.camel.model.RoutesDefinition;
@@ -1180,21 +1184,132 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon
return null;
}
- public String explainEipJson(String eipName, String id, boolean includeAllOptions) {
+ public String explainEipJson(String nameOrId, boolean includeAllOptions) {
try {
- // TODO: if eipName is null, then we can find it from the id if its found
- // and use the getShortName to find the eipName
+ // try to find the id within all known routes and their eips
+ String eipName = nameOrId;
+ NamedNode target = null;
+ for (RouteDefinition route : getRouteDefinitions()) {
+ if (route.getId().equals(nameOrId)) {
+ target = route;
+ break;
+ }
+ for (FromDefinition from : route.getInputs()) {
+ if (nameOrId.equals(from.getId())) {
+ target = route;
+ break;
+ }
+ }
+ Iterator<ProcessorDefinition> it = ProcessorDefinitionHelper.filterTypeInOutputs(route.getOutputs(), ProcessorDefinition.class);
+ while (it.hasNext()) {
+ ProcessorDefinition def = it.next();
+ if (nameOrId.equals(def.getId())) {
+ target = def;
+ break;
+ }
+ }
+ if (target != null) {
+ break;
+ }
+ }
+
+ if (target != null) {
+ eipName = target.getShortName();
+ }
+
String json = getEipParameterJsonSchema(eipName);
if (json == null) {
return null;
}
- return json;
+ // overlay with runtime parameters that id uses at runtime
+ if (target != null) {
+ List<Map<String, String>> rows = JsonSchemaHelper.parseJsonSchema("properties", json, true);
- // TODO: overlay with runtime parameters that id uses at runtime
+ // selected rows to use for answer
+ Map<String, String[]> selected = new LinkedHashMap<String, String[]>();
- //List<Map<String, String>> rows = JsonSchemaHelper.parseJsonSchema("properties", json, true);
+ // extract options from the node
+ Map<String, Object> options = new LinkedHashMap<String, Object>();
+ IntrospectionSupport.getProperties(target, options, "", false);
+ // 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");
+ String javaType = row.get("javaType");
+ String description = row.get("description");
+
+ // find the configured option
+ Object o = options.get(name);
+ if (o != null) {
+ value = o.toString();
+ }
+
+ value = URISupport.sanitizePath(value);
+
+ if (includeAllOptions || o != null) {
+ // add as selected row
+ if (!selected.containsKey(name)) {
+ selected.put(name, new String[]{name, kind, type, javaType, value, defaultValue, description});
+ }
+ }
+ }
+
+ StringBuilder buffer = new StringBuilder("{\n \"properties\": {");
+
+ boolean first = true;
+ for (String[] row : selected.values()) {
+ if (first) {
+ first = false;
+ } else {
+ buffer.append(",");
+ }
+ buffer.append("\n ");
+
+ String name = row[0];
+ 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)).append(": { ");
+ CollectionStringBuffer csb = new CollectionStringBuffer();
+ if (kind != null) {
+ csb.append("\"kind\": \"" + kind + "\"");
+ }
+ if (type != null) {
+ csb.append("\"type\": \"" + type + "\"");
+ }
+ if (javaType != null) {
+ csb.append("\"javaType\": \"" + javaType + "\"");
+ }
+ if (value != null) {
+ csb.append("\"value\": \"" + value + "\"");
+ }
+ if (defaultValue != null) {
+ csb.append("\"defaultValue\": \"" + defaultValue + "\"");
+ }
+ if (description != null) {
+ csb.append("\"description\": \"" + description + "\"");
+ }
+ if (!csb.isEmpty()) {
+ buffer.append(csb.toString());
+ }
+ buffer.append(" }");
+ }
+
+ buffer.append("\n }\n}\n");
+ return buffer.toString();
+ }
+
+ return json;
} catch (Exception e) {
// ignore and return empty response
return null;
http://git-wip-us.apache.org/repos/asf/camel/blob/03067ae6/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
index c8868fe..7ebaeb0 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
@@ -573,8 +573,8 @@ public class ManagedCamelContext extends ManagedPerformanceCounter implements Ti
return context.getEipParameterJsonSchema(eipName);
}
- public String explainEipJson(String eipName, String id, boolean includeAllOptions) {
- return context.explainEipJson(eipName, id, includeAllOptions);
+ public String explainEipJson(String nameOrId, boolean includeAllOptions) {
+ return context.explainEipJson(nameOrId, includeAllOptions);
}
public String explainEndpointJson(String uri, boolean includeAllOptions) throws Exception {
http://git-wip-us.apache.org/repos/asf/camel/blob/03067ae6/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java
index b38a6cc..f2d8804 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java
@@ -139,7 +139,7 @@ public class ManagedProcessor extends ManagedPerformanceCounter implements Manag
public TabularData explain(boolean allOptions) {
try {
- String json = context.explainEipJson(definition.getShortName(), id, allOptions);
+ String json = context.explainEipJson(id, allOptions);
List<Map<String, String>> rows = JsonSchemaHelper.parseJsonSchema("properties", json, true);
TabularData answer = new TabularDataSupport(CamelOpenMBeanTypes.explainEipTabularType());