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:38 UTC

[22/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/e9e16b87
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e9e16b87
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e9e16b87

Branch: refs/heads/master
Commit: e9e16b87f7ac6743315d3c65acabcf66a0ef10d8
Parents: a1e24bd
Author: Claus Ibsen <da...@apache.org>
Authored: Sun Dec 28 12:37:59 2014 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Dec 30 10:56:46 2014 +0100

----------------------------------------------------------------------
 .../java/org/apache/camel/CamelContext.java     | 10 +++++
 .../management/mbean/CamelOpenMBeanTypes.java   | 11 +++++
 .../management/mbean/ManagedProcessorMBean.java |  5 +++
 .../apache/camel/impl/DefaultCamelContext.java  | 19 +++++++++
 .../management/mbean/ManagedProcessor.java      | 44 +++++++++++++++++++-
 .../management/ManagedSendProcessorTest.java    |  5 +++
 6 files changed, 92 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/e9e16b87/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 99eefe4..28955c0 100644
--- a/camel-core/src/main/java/org/apache/camel/CamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/CamelContext.java
@@ -1408,6 +1408,16 @@ public interface CamelContext extends SuspendableService, RuntimeConfiguration {
     String getEipParameterJsonSchema(String eipName) throws IOException;
 
     /**
+     * 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 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);
+
+    /**
      * Returns a JSON schema representation of the endpoint parameters for the given endpoint uri.
      *
      * @param uri the endpoint uri

http://git-wip-us.apache.org/repos/asf/camel/blob/e9e16b87/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 070f5c8..df14e88 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
@@ -77,6 +77,17 @@ public final class CamelOpenMBeanTypes {
                 new OpenType[]{SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING});
     }
 
+    public static TabularType explainEipTabularType() throws OpenDataException {
+        CompositeType ct = explainEipsCompositeType();
+        return new TabularType("explainEip", "Explain how this EIP is configured", ct, new String[]{"option"});
+    }
+
+    public static CompositeType explainEipsCompositeType() throws OpenDataException {
+        return new CompositeType("eips", "EIPs", 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 {
         CompositeType ct = listComponentsCompositeType();
         return new TabularType("listComponents", "Lists all the components", ct, new String[]{"name"});

http://git-wip-us.apache.org/repos/asf/camel/blob/e9e16b87/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedProcessorMBean.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedProcessorMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedProcessorMBean.java
index eaf16d5..f5c43a1 100644
--- a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedProcessorMBean.java
+++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedProcessorMBean.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.api.management.mbean;
 
+import javax.management.openmbean.TabularData;
+
 import org.apache.camel.api.management.ManagedAttribute;
 import org.apache.camel.api.management.ManagedOperation;
 
@@ -45,4 +47,7 @@ public interface ManagedProcessorMBean extends ManagedPerformanceCounterMBean {
     @ManagedOperation(description = "Stop Processor")
     void stop() throws Exception;
 
+    @ManagedOperation(description = "Explain how this processor is configured")
+    TabularData explain(boolean allOptions);
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/e9e16b87/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 d1d5369..c074ece 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
@@ -1179,6 +1179,25 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon
         return null;
     }
 
+    public String explainEipJson(String eipName, String id, boolean includeAllOptions) {
+        try {
+            String json = getEipParameterJsonSchema(eipName);
+            if (json == null) {
+                return null;
+            }
+
+            return json;
+
+            // TODO: overlay with runtime parameters that id uses at runtime
+
+            //List<Map<String, String>> rows = JsonSchemaHelper.parseJsonSchema("properties", json, true);
+
+        } catch (Exception e) {
+            // ignore and return empty response
+            return null;
+        }
+    }
+
     /**
      * Sanitizes the component name by removing dash (-) in the name, when using the component name to load
      * resources from the classpath.

http://git-wip-us.apache.org/repos/asf/camel/blob/e9e16b87/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 c3d6dd3..b38a6cc 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
@@ -16,6 +16,14 @@
  */
 package org.apache.camel.management.mbean;
 
+import java.util.List;
+import java.util.Map;
+import javax.management.openmbean.CompositeData;
+import javax.management.openmbean.CompositeDataSupport;
+import javax.management.openmbean.CompositeType;
+import javax.management.openmbean.TabularData;
+import javax.management.openmbean.TabularDataSupport;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.ManagementStatisticsLevel;
 import org.apache.camel.Processor;
@@ -24,8 +32,11 @@ import org.apache.camel.ServiceStatus;
 import org.apache.camel.StatefulService;
 import org.apache.camel.api.management.ManagedInstance;
 import org.apache.camel.api.management.ManagedResource;
+import org.apache.camel.api.management.mbean.CamelOpenMBeanTypes;
 import org.apache.camel.api.management.mbean.ManagedProcessorMBean;
 import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.util.JsonSchemaHelper;
+import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.ServiceHelper;
 
 /**
@@ -54,6 +65,10 @@ public class ManagedProcessor extends ManagedPerformanceCounter implements Manag
         return context;
     }
 
+    public Object getInstance() {
+        return processor;
+    }
+
     public Processor getProcessor() {
         return processor;
     }
@@ -122,7 +137,32 @@ public class ManagedProcessor extends ManagedPerformanceCounter implements Manag
         ServiceHelper.stopService(getProcessor());
     }
 
-    public Object getInstance() {
-        return processor;
+    public TabularData explain(boolean allOptions) {
+        try {
+            String json = context.explainEipJson(definition.getShortName(), id, allOptions);
+            List<Map<String, String>> rows = JsonSchemaHelper.parseJsonSchema("properties", json, true);
+
+            TabularData answer = new TabularDataSupport(CamelOpenMBeanTypes.explainEipTabularType());
+
+            for (Map<String, String> row : rows) {
+                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") : "";
+                String defaultValue = row.get("defaultValue") != null ? row.get("defaultValue") : "";
+                String description = row.get("description") != null ? row.get("description") : "";
+
+                CompositeType ct = CamelOpenMBeanTypes.explainEipsCompositeType();
+                CompositeData data = new CompositeDataSupport(ct,
+                        new String[]{"option", "kind", "type", "java type", "value", "default value", "description"},
+                        new Object[]{name, kind, type, javaType, value, defaultValue, description});
+                answer.put(data);
+            }
+
+            return answer;
+        } catch (Exception e) {
+            throw ObjectHelper.wrapRuntimeCamelException(e);
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/e9e16b87/camel-core/src/test/java/org/apache/camel/management/ManagedSendProcessorTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedSendProcessorTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedSendProcessorTest.java
index c720bdc..af7d187 100644
--- a/camel-core/src/test/java/org/apache/camel/management/ManagedSendProcessorTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/ManagedSendProcessorTest.java
@@ -18,6 +18,7 @@ package org.apache.camel.management;
 
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
+import javax.management.openmbean.TabularData;
 
 import org.apache.camel.ServiceStatus;
 import org.apache.camel.builder.RouteBuilder;
@@ -64,6 +65,10 @@ public class ManagedSendProcessorTest extends ManagementTestSupport {
 
         String pattern = (String) mbeanServer.getAttribute(on, "MessageExchangePattern");
         assertNull(pattern);
+
+        TabularData data = (TabularData) mbeanServer.invoke(on, "explain", new Object[]{true}, new String[]{"boolean"});
+        assertNotNull(data);
+        assertEquals(7, data.size());
     }
 
     @Override