CAMEL-7999: apt plugin should generate component properties also, which currently are assumed as getter/setter pairs as we do not have annotations for those.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/a36021da Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/a36021da Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/a36021da Branch: refs/heads/master Commit: a36021da57814027b3fed14f5e79ecf3ed954774 Parents: 2cfecd6 Author: Claus Ibsen <davscl...@apache.org> Authored: Fri Feb 6 17:52:50 2015 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Fri Feb 6 17:52:50 2015 +0100 ---------------------------------------------------------------------- .../management/mbean/CamelOpenMBeanTypes.java | 11 +++++ .../management/mbean/ManagedComponentMBean.java | 5 +++ .../management/mbean/ManagedEndpointMBean.java | 3 ++ .../apache/camel/impl/DefaultCamelContext.java | 9 +++- .../management/mbean/ManagedComponent.java | 47 +++++++++++++++++++- .../camel/management/mbean/ManagedEndpoint.java | 5 +++ 6 files changed, 78 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/a36021da/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 728e7ef..5ebdb1c 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 @@ -66,6 +66,17 @@ public final class CamelOpenMBeanTypes { new OpenType[]{SimpleType.STRING, SimpleType.BOOLEAN, SimpleType.BOOLEAN}); } + public static TabularType explainComponentTabularType() throws OpenDataException { + CompositeType ct = explainComponentCompositeType(); + return new TabularType("explainComponent", "Explain how this component is configured", ct, new String[]{"option"}); + } + + public static CompositeType explainComponentCompositeType() throws OpenDataException { + return new CompositeType("components", "Components", new String[]{"option", "kind", "type", "java type", "deprecated", "value", "default value", "description"}, + new String[]{"Option", "Kind", "Type", "Java Type", "Deprecated", "Value", "Default Value", "Description"}, + new OpenType[]{SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING}); + } + public static TabularType explainEndpointTabularType() throws OpenDataException { CompositeType ct = explainEndpointsCompositeType(); return new TabularType("explainEndpoint", "Explain how this endpoint is configured", ct, new String[]{"option"}); http://git-wip-us.apache.org/repos/asf/camel/blob/a36021da/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedComponentMBean.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedComponentMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedComponentMBean.java index 8bd42ff..2816f07 100644 --- a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedComponentMBean.java +++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedComponentMBean.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; @@ -36,4 +38,7 @@ public interface ManagedComponentMBean { @ManagedOperation(description = "Component information as JSon") String informationJson(); + @ManagedOperation(description = "Explain how this component is configured") + TabularData explain(boolean allOptions); + } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/a36021da/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java index fa25f43..8166a48 100644 --- a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java +++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java @@ -38,6 +38,9 @@ public interface ManagedEndpointMBean { @ManagedAttribute(description = "Endpoint State") String getState(); + @ManagedOperation(description = "Endpoint information as JSon") + String informationJson(); + @ManagedOperation(description = "Explain how this endpoint is configured") TabularData explain(boolean allOptions); http://git-wip-us.apache.org/repos/asf/camel/blob/a36021da/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 c9060e4..109a0aa 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 @@ -1418,7 +1418,8 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon } } - json = ObjectHelper.before(json, " \"properties\": {"); + // use before componentProperties as we do not want to include component properties when explaining endpoint + json = ObjectHelper.before(json, " \"componentProperties\": {"); StringBuilder buffer = new StringBuilder(" \"properties\": {"); @@ -1507,6 +1508,12 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon for (Map.Entry<String, Object> entry : options.entrySet()) { String name = entry.getKey(); + + // skip unwanted options which is default inherited from DefaultComponent + if ("camelContext".equals(name) || "endpointClass".equals(name)) { + continue; + } + String value = ""; if (entry.getValue() != null) { value = entry.getValue().toString(); http://git-wip-us.apache.org/repos/asf/camel/blob/a36021da/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedComponent.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedComponent.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedComponent.java index cadc021..b9405af 100644 --- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedComponent.java +++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedComponent.java @@ -17,14 +17,24 @@ package org.apache.camel.management.mbean; import java.io.IOException; +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.Component; 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.ManagedComponentMBean; import org.apache.camel.spi.ManagementStrategy; +import org.apache.camel.util.JsonSchemaHelper; import org.apache.camel.util.ObjectHelper; /** @@ -75,7 +85,6 @@ public class ManagedComponent implements ManagedInstance, ManagedComponentMBean return component; } - @Override public String informationJson() { try { // a component may have been given a different name, so resolve its default name by its java type @@ -87,4 +96,40 @@ public class ManagedComponent implements ManagedInstance, ManagedComponentMBean throw ObjectHelper.wrapRuntimeCamelException(e); } } + + public TabularData explain(boolean allOptions) { + try { + // a component may have been given a different name, so resolve its default name by its java type + // as we can find the component json information from the default component name + String defaultName = component.getCamelContext().resolveComponentDefaultName(component.getClass().getName()); + String target = defaultName != null ? defaultName : name; + String json = component.getCamelContext().explainComponentJson(target, allOptions); + + List<Map<String, String>> rows = JsonSchemaHelper.parseJsonSchema("componentProperties", json, true); + + TabularData answer = new TabularDataSupport(CamelOpenMBeanTypes.explainComponentTabularType()); + + 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 deprecated = row.get("deprecated") != null ? row.get("deprecated") : ""; + 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.explainComponentCompositeType(); + CompositeData data = new CompositeDataSupport(ct, + new String[]{"option", "kind", "type", "java type", "deprecated", "value", "default value", "description"}, + new Object[]{name, kind, type, javaType, deprecated, 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/a36021da/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java index 9ad6574..000794a 100644 --- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java +++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java @@ -84,6 +84,11 @@ public class ManagedEndpoint implements ManagedInstance, ManagedEndpointMBean { } @Override + public String informationJson() { + return endpoint.getCamelContext().explainEndpointJson(getEndpointUri(), true); + } + + @Override public TabularData explain(boolean allOptions) { try { String json = endpoint.getCamelContext().explainEndpointJson(getEndpointUri(), allOptions);