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

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

Branch: refs/heads/master
Commit: 0d5a6a6ad243ffce417842177fc39b90269b3982
Parents: 02c1e0b
Author: Claus Ibsen <da...@apache.org>
Authored: Sun Dec 28 12:13:29 2014 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Dec 30 10:56:45 2014 +0100

----------------------------------------------------------------------
 .../java/org/apache/camel/CamelContext.java     |  7 ++
 .../mbean/ManagedCamelContextMBean.java         |  9 +++
 .../apache/camel/impl/DefaultCamelContext.java  | 18 +++++
 .../management/mbean/ManagedCamelContext.java   |  4 +
 .../apache/camel/util/CamelContextHelper.java   |  1 +
 .../apache/camel/impl/EipDocumentationTest.java | 78 ++++++++++++++++++++
 6 files changed, 117 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/0d5a6a6a/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 90edf00..99eefe4 100644
--- a/camel-core/src/main/java/org/apache/camel/CamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/CamelContext.java
@@ -1401,6 +1401,13 @@ public interface CamelContext extends SuspendableService, RuntimeConfiguration {
     String getComponentParameterJsonSchema(String componentName) throws IOException;
 
     /**
+     * Returns the JSON schema representation of the EIP parameters for the given EIP name.
+     *
+     * @return the json or <tt>null</tt> if the EIP does not exist
+     */
+    String getEipParameterJsonSchema(String eipName) throws IOException;
+
+    /**
      * 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/0d5a6a6a/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 fc892b6..bbe2f3d 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
@@ -242,6 +242,15 @@ public interface ManagedCamelContextMBean extends ManagedPerformanceCounterMBean
     String componentParameterJsonSchema(String componentName) throws Exception;
 
     /**
+     * Returns the JSON schema representation with information about the EIP and the parameters it supports
+     *
+     * @param eipName the name of the EIP to lookup
+     * @throws Exception is thrown if error occurred
+     */
+    @ManagedOperation(description = "Returns the JSON schema representation of the EIP parameters for the given EIP name")
+    String eipParameterJsonSchema(String eipName) throws Exception;
+
+    /**
      * 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/0d5a6a6a/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 eb784b6..d1d5369 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
@@ -1161,6 +1161,24 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon
         return null;
     }
 
+    public String getEipParameterJsonSchema(String eipName) throws IOException {
+        String[] subPackages = new String[]{"", "/config", "/dataformat", "/language", "/loadbalancer", "/rest"};
+        for (String sub : subPackages) {
+            String path = CamelContextHelper.MODEL_DOCUMENTATION_PREFIX + sub + "/" + eipName + ".json";
+            ClassResolver resolver = getClassResolver();
+            InputStream inputStream = resolver.loadResourceAsStream(path);
+            log.debug("Loading component JSON Schema for: {} using class resolver: {} -> {}", new Object[]{eipName, resolver, inputStream});
+            if (inputStream != null) {
+                try {
+                    return IOHelper.loadText(inputStream);
+                } finally {
+                    IOHelper.close(inputStream);
+                }
+            }
+        }
+        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/0d5a6a6a/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 f5cf263..e7230d5 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
@@ -569,6 +569,10 @@ public class ManagedCamelContext extends ManagedPerformanceCounter implements Ti
         return json;
     }
 
+    public String eipParameterJsonSchema(String eipName) throws Exception {
+        return context.getEipParameterJsonSchema(eipName);
+    }
+
     public String explainEndpointJson(String uri, boolean includeAllOptions) throws Exception {
         return context.explainEndpointJson(uri, includeAllOptions);
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/0d5a6a6a/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java b/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
index 097ed29..06e0d6f 100644
--- a/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
+++ b/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
@@ -54,6 +54,7 @@ public final class CamelContextHelper {
     public static final String COMPONENT_BASE = "META-INF/services/org/apache/camel/component/";
     public static final String COMPONENT_DESCRIPTOR = "META-INF/services/org/apache/camel/component.properties";
     public static final String COMPONENT_DOCUMENTATION_PREFIX = "org/apache/camel/component/";
+    public static final String MODEL_DOCUMENTATION_PREFIX = "org/apache/camel/model/";
 
     private static final Logger LOG = LoggerFactory.getLogger(CamelContextHelper.class);
 

http://git-wip-us.apache.org/repos/asf/camel/blob/0d5a6a6a/camel-core/src/test/java/org/apache/camel/impl/EipDocumentationTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/impl/EipDocumentationTest.java b/camel-core/src/test/java/org/apache/camel/impl/EipDocumentationTest.java
new file mode 100644
index 0000000..01e5dab
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/impl/EipDocumentationTest.java
@@ -0,0 +1,78 @@
+/**
+ * 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.impl;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ContextTestSupport;
+
+public class EipDocumentationTest extends ContextTestSupport {
+
+    @Override
+    public boolean isUseRouteBuilder() {
+        return false;
+    }
+
+    public void testDocumentation() throws Exception {
+        CamelContext context = new DefaultCamelContext();
+        String json = context.getEipParameterJsonSchema("from");
+        log.info(json);
+        assertNotNull("Should have found json for from", json);
+
+        assertTrue(json.contains("\"name\": \"from\""));
+        assertTrue(json.contains("\"uri\": { \"kind\": \"attribute\""));
+        assertTrue(json.contains("\"ref\": { \"kind\": \"attribute\""));
+    }
+
+    public void testSplitDocumentation() throws Exception {
+        CamelContext context = new DefaultCamelContext();
+        String json = context.getEipParameterJsonSchema("split");
+        log.info(json);
+        assertNotNull("Should have found json for split", json);
+
+        assertTrue(json.contains("\"name\": \"split\""));
+        // there should be javadoc included
+        assertTrue(json.contains("Whether to aggregate using a sequential single thread or allow parallel aggregation"));
+        // and it support outputs
+        assertTrue(json.contains("\"outputs\": { \"kind\": \"element\": \"required\": \"true\", \"type\": \"array\","));
+    }
+
+    public void testSimpleDocumentation() throws Exception {
+        CamelContext context = new DefaultCamelContext();
+        String json = context.getEipParameterJsonSchema("simple");
+        log.info(json);
+        assertNotNull("Should have found json for simple", json);
+
+        assertTrue(json.contains("\"label\": \"language\""));
+        assertTrue(json.contains("\"name\": \"simple\""));
+    }
+
+    public void testFailOverDocumentation() throws Exception {
+        CamelContext context = new DefaultCamelContext();
+        String json = context.getEipParameterJsonSchema("failover");
+        log.info(json);
+        assertNotNull("Should have found json for failover", json);
+
+        assertTrue(json.contains("\"name\": \"failover\""));
+        assertTrue(json.contains("\"exception\": { \"kind\": \"element\": \"required\": \"false\", \"type\": \"array\", \"javaType\": \"java.util.List<java.lang.String>\""));
+    }
+
+    public void testNotFound() throws Exception {
+        CamelContext context = new DefaultCamelContext();
+        String json = context.getEipParameterJsonSchema("unknown");
+        assertNull("Should not have found json for unknown", json);
+    }
+}