You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by Christian Müller <ch...@gmail.com> on 2013/06/10 17:07:33 UTC
Re: git commit: expose the component HTML to the CamelContext and the
MBean so it can be displayed by tooling
The test
org.apache.camel.component.ComponentDiscoveryTest.testComponentDocumentation()
fails on Java 6 [1].
Could you please check it...
[1]
https://builds.apache.org/view/A-D/view/Camel/job/Camel.trunk.fulltest/org.apache.camel$camel-core/1376/testReport/org.apache.camel.component/ComponentDiscoveryTest/testComponentDocumentation/
Best,
Christian Müller
-----------------
Software Integration Specialist
Apache Camel committer: https://camel.apache.org/team
V.P. Apache Camel: https://www.apache.org/foundation/
Apache Member: https://www.apache.org/foundation/members.html
https://www.linkedin.com/pub/christian-mueller/11/551/642
On Sun, Jun 9, 2013 at 3:59 PM, <js...@apache.org> wrote:
> 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 <ja...@gmail.com>
> Authored: Sun Jun 9 09:55:38 2013 -0400
> Committer: James Strachan <ja...@gmail.com>
> 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;
> + }
> }
>
>
Re: git commit: expose the component HTML to the CamelContext and the
MBean so it can be displayed by tooling
Posted by Claus Ibsen <cl...@gmail.com>.
Hi
Thanks for spotting. I have pushed a fix for this.
On Mon, Jun 10, 2013 at 11:07 AM, Christian Müller
<ch...@gmail.com> wrote:
> The test
> org.apache.camel.component.ComponentDiscoveryTest.testComponentDocumentation()
> fails on Java 6 [1].
> Could you please check it...
>
> [1]
> https://builds.apache.org/view/A-D/view/Camel/job/Camel.trunk.fulltest/org.apache.camel$camel-core/1376/testReport/org.apache.camel.component/ComponentDiscoveryTest/testComponentDocumentation/
>
> Best,
>
> Christian Müller
> -----------------
>
> Software Integration Specialist
>
> Apache Camel committer: https://camel.apache.org/team
> V.P. Apache Camel: https://www.apache.org/foundation/
> Apache Member: https://www.apache.org/foundation/members.html
>
> https://www.linkedin.com/pub/christian-mueller/11/551/642
>
>
> On Sun, Jun 9, 2013 at 3:59 PM, <js...@apache.org> wrote:
>
>> 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 <ja...@gmail.com>
>> Authored: Sun Jun 9 09:55:38 2013 -0400
>> Committer: James Strachan <ja...@gmail.com>
>> 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;
>> + }
>> }
>>
>>
--
Claus Ibsen
-----------------
www.camelone.org: The open source integration conference.
Red Hat, Inc.
FuseSource is now part of Red Hat
Email: cibsen@redhat.com
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen