CAMEL-8992: EIP mbeans should output better expression/preidcate. Make sure to unwrap when using ValueBuilder so we have access the to actual easier.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/7c0cc37b Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/7c0cc37b Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/7c0cc37b Branch: refs/heads/master Commit: 7c0cc37bd7e5c91cfda68350cbf69aa5755d61d7 Parents: d663114 Author: Claus Ibsen <[email protected]> Authored: Wed Jul 22 17:34:43 2015 +0200 Committer: Claus Ibsen <[email protected]> Committed: Wed Jul 22 19:54:18 2015 +0200 ---------------------------------------------------------------------- .../api/management/mbean/ManagedFilterMBean.java | 3 +++ .../java/org/apache/camel/builder/ValueBuilder.java | 1 + .../management/DefaultManagementObjectStrategy.java | 2 +- .../apache/camel/management/mbean/ManagedFilter.java | 15 +++++++++++++-- .../org/apache/camel/model/ExpressionNodeHelper.java | 8 ++++++++ .../org/apache/camel/model/FilterDefinition.java | 1 + .../apache/camel/management/ManagedFilterTest.java | 5 ++++- 7 files changed, 31 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/7c0cc37b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedFilterMBean.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedFilterMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedFilterMBean.java index 71218d5..bf3145f 100644 --- a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedFilterMBean.java +++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedFilterMBean.java @@ -20,6 +20,9 @@ import org.apache.camel.api.management.ManagedAttribute; public interface ManagedFilterMBean extends ManagedProcessorMBean { + @ManagedAttribute(description = "The language used for the predicate to determine if the message should be filtered or not") + String getPredicateLanguage(); + @ManagedAttribute(description = "Predicate to determine if the message should be filtered or not") String getPredicate(); http://git-wip-us.apache.org/repos/asf/camel/blob/7c0cc37b/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java index a8faf61..e9fca82 100644 --- a/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java +++ b/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java @@ -24,6 +24,7 @@ import org.apache.camel.Exchange; import org.apache.camel.Expression; import org.apache.camel.Predicate; import org.apache.camel.builder.xml.Namespaces; +import org.apache.camel.model.language.ExpressionDefinition; import org.apache.camel.spi.NamespaceAware; import org.apache.camel.util.ExpressionToPredicateAdapter; http://git-wip-us.apache.org/repos/asf/camel/blob/7c0cc37b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java index 983eb7d..b2e55b1 100644 --- a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java +++ b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java @@ -276,7 +276,7 @@ public class DefaultManagementObjectStrategy implements ManagementObjectStrategy } else if (target instanceof RoutingSlip) { answer = new ManagedRoutingSlip(context, (RoutingSlip) target, definition); } else if (target instanceof FilterProcessor) { - answer = new ManagedFilter(context, (FilterProcessor) target, definition); + answer = new ManagedFilter(context, (FilterProcessor) target, (org.apache.camel.model.FilterDefinition) definition); } else if (target instanceof LogProcessor) { answer = new ManagedLog(context, (LogProcessor) target, definition); } else if (target instanceof LoopProcessor) { http://git-wip-us.apache.org/repos/asf/camel/blob/7c0cc37b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedFilter.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedFilter.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedFilter.java index edd89f2..d84b40f 100644 --- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedFilter.java +++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedFilter.java @@ -19,6 +19,7 @@ package org.apache.camel.management.mbean; import org.apache.camel.CamelContext; import org.apache.camel.api.management.ManagedResource; import org.apache.camel.api.management.mbean.ManagedFilterMBean; +import org.apache.camel.model.FilterDefinition; import org.apache.camel.model.ProcessorDefinition; import org.apache.camel.processor.FilterProcessor; @@ -29,12 +30,17 @@ import org.apache.camel.processor.FilterProcessor; public class ManagedFilter extends ManagedProcessor implements ManagedFilterMBean { private final FilterProcessor processor; - public ManagedFilter(CamelContext context, FilterProcessor processor, ProcessorDefinition<?> definition) { + public ManagedFilter(CamelContext context, FilterProcessor processor, FilterDefinition definition) { super(context, processor, definition); this.processor = processor; } @Override + public FilterDefinition getDefinition() { + return (FilterDefinition) super.getDefinition(); + } + + @Override public synchronized void reset() { processor.reset(); super.reset(); @@ -42,7 +48,12 @@ public class ManagedFilter extends ManagedProcessor implements ManagedFilterMBea @Override public String getPredicate() { - return processor.getPredicate().toString(); + return getDefinition().getExpression().getExpression(); + } + + @Override + public String getPredicateLanguage() { + return getDefinition().getExpression().getLanguage(); } @Override http://git-wip-us.apache.org/repos/asf/camel/blob/7c0cc37b/camel-core/src/main/java/org/apache/camel/model/ExpressionNodeHelper.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/ExpressionNodeHelper.java b/camel-core/src/main/java/org/apache/camel/model/ExpressionNodeHelper.java index a3a3d48..914bc0d 100644 --- a/camel-core/src/main/java/org/apache/camel/model/ExpressionNodeHelper.java +++ b/camel-core/src/main/java/org/apache/camel/model/ExpressionNodeHelper.java @@ -58,6 +58,7 @@ public final class ExpressionNodeHelper { answer.setResultType(builder.getResultType()); return answer; } else if (expression instanceof ValueBuilder) { + // ValueBuilder wraps the actual expression so unwrap ValueBuilder builder = (ValueBuilder) expression; expression = builder.getExpression(); } @@ -90,6 +91,13 @@ public final class ExpressionNodeHelper { XPathExpression answer = new XPathExpression(builder); answer.setExpression(builder.getText()); return answer; + } else if (predicate instanceof ValueBuilder) { + // ValueBuilder wraps the actual predicate so unwrap + ValueBuilder builder = (ValueBuilder) predicate; + Expression expression = builder.getExpression(); + if (expression instanceof Predicate) { + predicate = (Predicate) expression; + } } if (predicate instanceof ExpressionDefinition) { http://git-wip-us.apache.org/repos/asf/camel/blob/7c0cc37b/camel-core/src/main/java/org/apache/camel/model/FilterDefinition.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/FilterDefinition.java b/camel-core/src/main/java/org/apache/camel/model/FilterDefinition.java index 01bcdce..9c2d13b 100644 --- a/camel-core/src/main/java/org/apache/camel/model/FilterDefinition.java +++ b/camel-core/src/main/java/org/apache/camel/model/FilterDefinition.java @@ -20,6 +20,7 @@ import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; +import org.apache.camel.Expression; import org.apache.camel.Predicate; import org.apache.camel.Processor; import org.apache.camel.model.language.ExpressionDefinition; http://git-wip-us.apache.org/repos/asf/camel/blob/7c0cc37b/camel-core/src/test/java/org/apache/camel/management/ManagedFilterTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedFilterTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedFilterTest.java index 29082e6..d96a921 100644 --- a/camel-core/src/test/java/org/apache/camel/management/ManagedFilterTest.java +++ b/camel-core/src/test/java/org/apache/camel/management/ManagedFilterTest.java @@ -61,8 +61,11 @@ public class ManagedFilterTest extends ManagementTestSupport { Long count = (Long) mbeanServer.getAttribute(on, "FilteredCount"); assertEquals(1, count.longValue()); + String lan = (String) mbeanServer.getAttribute(on, "PredicateLanguage"); + assertEquals("header", lan); + String uri = (String) mbeanServer.getAttribute(on, "Predicate"); - assertEquals("header{header(foo)}", uri); + assertEquals("foo", uri); TabularData data = (TabularData) mbeanServer.invoke(on, "explain", new Object[]{false}, new String[]{"boolean"}); assertNotNull(data);
