Updated Branches:
  refs/heads/master 868a358ad -> 3ec75ec79

expose the component HTML to the CamelContext and the MBean so it can be 
displayed by tooling


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

Branch: refs/heads/master
Commit: 3ec75ec79f29658b2e840787701e71885a5bdaae
Parents: 868a358
Author: James Strachan <[email protected]>
Authored: Sun Jun 9 09:55:38 2013 -0400
Committer: James Strachan <[email protected]>
Committed: Sun Jun 9 09:58:09 2013 -0400

----------------------------------------------------------------------
 .../java/org/apache/camel/CamelContext.java     |  6 +++++
 .../mbean/ManagedCamelContextMBean.java         |  9 +++++++
 .../apache/camel/impl/DefaultCamelContext.java  | 12 ++++++++++
 .../management/mbean/ManagedCamelContext.java   |  5 ++++
 .../apache/camel/util/CamelContextHelper.java   |  1 +
 .../java/org/apache/camel/util/IOHelper.java    | 25 ++++++++++++++++++++
 .../camel/component/ComponentDiscoveryTest.java |  9 +++++++
 .../camel/blueprint/BlueprintCamelContext.java  |  5 ++++
 .../core/osgi/OsgiDefaultCamelContext.java      |  5 ++++
 .../core/osgi/utils/BundleContextUtils.java     | 19 +++++++++++++++
 10 files changed, 96 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/3ec75ec7/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 5b2b4f6..7f467f1 100644
--- a/camel-core/src/main/java/org/apache/camel/CamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/CamelContext.java
@@ -1205,4 +1205,10 @@ public interface CamelContext extends 
SuspendableService, RuntimeConfiguration {
      * @throws Exception is thrown if error occurred
      */
     Map<String,Properties> findComponents() throws LoadPropertiesException, 
IOException;
+
+
+    /**
+     * Returns the HTML documentation for the given camel component
+     */
+    String getComponentDocumentation(String componentName) throws IOException;
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/3ec75ec7/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 4af6d3d..514fdbe 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
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.api.management.mbean;
 
+import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -219,4 +220,12 @@ public interface ManagedCamelContextMBean extends 
ManagedPerformanceCounterMBean
     @ManagedOperation(description = "Returns the list of available endpoint 
paths for the given component name, endpoint properties and completion text")
     List<String> completeEndpointPath(String componentName, Map<String, 
Object> endpointParameters, String completionText) throws Exception;
 
+    /**
+     * Returns the HTML documentation for the given camel component
+     *
+     * @param componentName  the component name
+     */
+    @ManagedOperation(description = "Returns the HTML documentation for the 
given camel component")
+    String getComponentDocumentation(String componentName) throws IOException;
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/3ec75ec7/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 c61c79f..22fa6e1 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
@@ -18,11 +18,13 @@ package org.apache.camel.impl;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
+import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
@@ -125,6 +127,7 @@ import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.CamelContextHelper;
 import org.apache.camel.util.EndpointHelper;
 import org.apache.camel.util.EventHelper;
+import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.IntrospectionSupport;
 import org.apache.camel.util.LoadPropertiesException;
 import org.apache.camel.util.ObjectHelper;
@@ -1011,6 +1014,15 @@ public class DefaultCamelContext extends ServiceSupport 
implements ModelCamelCon
         return CamelContextHelper.findComponents(this);
     }
 
+    public String getComponentDocumentation(String componentName) throws 
IOException {
+        String path = CamelContextHelper.COMPONENT_DOCUMENTATION_PREFIX + 
componentName + ".html";
+        InputStream inputStream = 
getClassResolver().loadResourceAsStream(path);
+        if (inputStream != null) {
+            return IOHelper.loadText(inputStream);
+        }
+        return null;
+    }
+
     // Helper methods
     // -----------------------------------------------------------------------
 

http://git-wip-us.apache.org/repos/asf/camel/blob/3ec75ec7/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 d01d3d0..eed4cff 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
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.management.mbean;
 
+import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -345,6 +346,10 @@ public class ManagedCamelContext extends 
ManagedPerformanceCounter implements Ti
         return context.findComponents();
     }
 
+    public String getComponentDocumentation(String componentName) throws 
IOException {
+        return context.getComponentDocumentation(componentName);
+    }
+
     public List<String> findComponentNames() throws Exception {
         Map<String, Properties> map = findComponents();
         return new ArrayList<String>(map.keySet());

http://git-wip-us.apache.org/repos/asf/camel/blob/3ec75ec7/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 40d7a1c..fc81164 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
@@ -46,6 +46,7 @@ import static org.apache.camel.util.ObjectHelper.notNull;
  */
 public final class CamelContextHelper {
     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/";
 
     /**
      * Utility classes should not have a public constructor.

http://git-wip-us.apache.org/repos/asf/camel/blob/3ec75ec7/camel-core/src/main/java/org/apache/camel/util/IOHelper.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/util/IOHelper.java 
b/camel-core/src/main/java/org/apache/camel/util/IOHelper.java
index 6799274..ca4b82f 100644
--- a/camel-core/src/main/java/org/apache/camel/util/IOHelper.java
+++ b/camel-core/src/main/java/org/apache/camel/util/IOHelper.java
@@ -24,6 +24,7 @@ import java.io.Closeable;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.io.Reader;
 import java.io.UnsupportedEncodingException;
@@ -413,4 +414,28 @@ public final class IOHelper {
     private static String getDefaultCharsetName() {
         return 
ObjectHelper.getSystemProperty(Exchange.DEFAULT_CHARSET_PROPERTY, "UTF-8");
     }
+
+    /**
+     * Loads the entire stream into memory as a String and returns it.
+     *
+     * Warning, don't use for crazy big streams :)
+     */
+    public static String loadText(InputStream in) throws IOException {
+        StringBuilder builder = new StringBuilder();
+        try {
+            BufferedReader reader = buffered(new InputStreamReader(in));
+            while (true) {
+                String line = reader.readLine();
+                if (line != null) {
+                    builder.append(line);
+                    builder.append("\n");
+                } else {
+                    break;
+                }
+            }
+            return builder.toString();
+        } finally {
+            close(in);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/3ec75ec7/camel-core/src/test/java/org/apache/camel/component/ComponentDiscoveryTest.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/test/java/org/apache/camel/component/ComponentDiscoveryTest.java
 
b/camel-core/src/test/java/org/apache/camel/component/ComponentDiscoveryTest.java
index 5ab56e1..903dff7 100644
--- 
a/camel-core/src/test/java/org/apache/camel/component/ComponentDiscoveryTest.java
+++ 
b/camel-core/src/test/java/org/apache/camel/component/ComponentDiscoveryTest.java
@@ -56,4 +56,13 @@ public class ComponentDiscoveryTest {
             LOG.info("Found component " + entry.getKey() + " with properties: 
" + entry.getValue());
         }
     }
+
+    @Test
+    public void testComponentDocumentation() throws Exception {
+        CamelContext context = new DefaultCamelContext();
+        String html = context.getComponentDocumentation("bean");
+        assertNotNull("Should have found some auto-generated HTML if on Java 
7", html);
+        LOG.info("HTML: " + html);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/3ec75ec7/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/BlueprintCamelContext.java
----------------------------------------------------------------------
diff --git 
a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/BlueprintCamelContext.java
 
b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/BlueprintCamelContext.java
index 8a86bf6..60f0b4d 100644
--- 
a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/BlueprintCamelContext.java
+++ 
b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/BlueprintCamelContext.java
@@ -120,6 +120,11 @@ public class BlueprintCamelContext extends 
DefaultCamelContext implements Servic
     }
 
     @Override
+    public String getComponentDocumentation(String componentName) throws 
IOException {
+        return BundleContextUtils.getComponentDocumentation(bundleContext, 
this, componentName);
+    }
+
+    @Override
     public void blueprintEvent(BlueprintEvent event) {
         // noop as we just needed to enlist the BlueprintListener to have 
events triggered to serviceChanged method
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/3ec75ec7/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiDefaultCamelContext.java
----------------------------------------------------------------------
diff --git 
a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiDefaultCamelContext.java
 
b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiDefaultCamelContext.java
index d049f1c..7329a7b 100644
--- 
a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiDefaultCamelContext.java
+++ 
b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiDefaultCamelContext.java
@@ -49,6 +49,11 @@ public class OsgiDefaultCamelContext extends 
DefaultCamelContext {
     }
 
     @Override
+    public String getComponentDocumentation(String componentName) throws 
IOException {
+        return BundleContextUtils.getComponentDocumentation(bundleContext, 
this, componentName);
+    }
+
+    @Override
     protected Registry createRegistry() {
         if (registry != null) {
             return OsgiCamelContextHelper.wrapRegistry(this, registry, 
bundleContext);

http://git-wip-us.apache.org/repos/asf/camel/blob/3ec75ec7/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/utils/BundleContextUtils.java
----------------------------------------------------------------------
diff --git 
a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/utils/BundleContextUtils.java
 
b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/utils/BundleContextUtils.java
index 85a0961..015f8a6 100644
--- 
a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/utils/BundleContextUtils.java
+++ 
b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/utils/BundleContextUtils.java
@@ -17,6 +17,7 @@
 package org.apache.camel.core.osgi.utils;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.lang.reflect.Method;
 import java.net.URL;
 import java.util.Arrays;
@@ -29,6 +30,7 @@ import java.util.TreeMap;
 import org.apache.camel.CamelContext;
 import org.apache.camel.spi.ComponentResolver;
 import org.apache.camel.util.CamelContextHelper;
+import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.LoadPropertiesException;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
@@ -92,4 +94,21 @@ public final class BundleContextUtils {
         }
         return answer;
     }
+
+    public static String getComponentDocumentation(BundleContext bundleContext,
+                                                   CamelContext camelContext,
+                                                   String componentName) 
throws IOException {
+        String path = CamelContextHelper.COMPONENT_DOCUMENTATION_PREFIX + 
componentName + ".html";
+        Bundle[] bundles = bundleContext.getBundles();
+        for (Bundle bundle : bundles) {
+            URL resource = bundle.getResource(path);
+            if (resource != null) {
+                InputStream inputStream = resource.openStream();
+                if (inputStream != null) {
+                    return IOHelper.loadText(inputStream);
+                }
+            }
+        }
+        return null;
+    }
 }

Reply via email to