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; + } }
