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);

Reply via email to