You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2017/01/11 21:10:33 UTC
camel git commit: CAMEL-10698: Add information in DSL whether an
expression is to be used as expression or predicate. This allows us to
understand this for eg the validate goal of camel-maven-plugin or others.
Repository: camel
Updated Branches:
refs/heads/master 96ee31409 -> dce92c8d7
CAMEL-10698: Add information in DSL whether an expression is to be used as expression or predicate. This allows us to understand this for eg the validate goal of camel-maven-plugin or others.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/dce92c8d
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/dce92c8d
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/dce92c8d
Branch: refs/heads/master
Commit: dce92c8d77dc098cbf879efaa5e290a5cb5e2470
Parents: 96ee314
Author: Claus Ibsen <da...@apache.org>
Authored: Wed Jan 11 22:09:44 2017 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Jan 11 22:09:44 2017 +0100
----------------------------------------------------------------------
.../apache/camel/model/AggregateDefinition.java | 4 ++
.../org/apache/camel/model/CatchDefinition.java | 5 ++
.../apache/camel/model/ChoiceDefinition.java | 3 ++
.../apache/camel/model/FilterDefinition.java | 2 +-
.../InterceptSendToEndpointDefinition.java | 1 +
.../camel/model/OnCompletionDefinition.java | 2 +
.../camel/model/OnExceptionDefinition.java | 11 +++++
.../apache/camel/model/ProcessorDefinition.java | 9 ++++
.../org/apache/camel/model/TryDefinition.java | 3 ++
.../apache/camel/model/ValidateDefinition.java | 2 +-
.../org/apache/camel/model/WhenDefinition.java | 2 +-
.../model/WhenSkipSendToEndpointDefinition.java | 2 +-
.../org/apache/camel/parser/ParserResult.java | 12 +++++
.../apache/camel/parser/RouteBuilderParser.java | 19 ++++---
.../parser/helper/CamelJavaParserHelper.java | 52 +++++++++++++++++++-
.../RoasterSimpleRouteBuilderConfigureTest.java | 2 +
.../org/apache/camel/maven/ValidateMojo.java | 11 ++++-
.../java/org/apache/camel/spi/Metadata.java | 17 +++++++
18 files changed, 145 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/AggregateDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/AggregateDefinition.java b/camel-core/src/main/java/org/apache/camel/model/AggregateDefinition.java
index 2b5b97c..f97a459 100644
--- a/camel-core/src/main/java/org/apache/camel/model/AggregateDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/AggregateDefinition.java
@@ -61,6 +61,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
@XmlElement(name = "correlationExpression", required = true)
private ExpressionSubElementDefinition correlationExpression;
@XmlElement(name = "completionPredicate")
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
private ExpressionSubElementDefinition completionPredicate;
@XmlElement(name = "completionTimeout")
private ExpressionSubElementDefinition completionTimeoutExpression;
@@ -889,6 +890,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
/**
* Sets the predicate used to determine if the aggregation is completed
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public AggregateDefinition completionPredicate(Predicate predicate) {
checkNoCompletedPredicate();
setCompletionPredicate(new ExpressionSubElementDefinition(predicate));
@@ -901,6 +903,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
*
* @return the builder
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public PredicateClause<AggregateDefinition> completionPredicate() {
PredicateClause<AggregateDefinition> clause = new PredicateClause<>(this);
completionPredicate(clause);
@@ -913,6 +916,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
*
* @return the builder
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public PredicateClause<AggregateDefinition> completion() {
return completionPredicate();
}
http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/CatchDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/CatchDefinition.java b/camel-core/src/main/java/org/apache/camel/model/CatchDefinition.java
index 92837a0..96b849a 100644
--- a/camel-core/src/main/java/org/apache/camel/model/CatchDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/CatchDefinition.java
@@ -47,8 +47,10 @@ public class CatchDefinition extends ProcessorDefinition<CatchDefinition> {
@XmlElement(name = "exception")
private List<String> exceptions = new ArrayList<String>();
@XmlElement(name = "onWhen")
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
private WhenDefinition onWhen;
@XmlElement(name = "handled")
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
private ExpressionSubElementDefinition handled;
@XmlElementRef
private List<ProcessorDefinition<?>> outputs = new ArrayList<ProcessorDefinition<?>>();
@@ -173,6 +175,7 @@ public class CatchDefinition extends ProcessorDefinition<CatchDefinition> {
* @param predicate predicate that determines true or false
* @return the builder
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public CatchDefinition onWhen(Predicate predicate) {
setOnWhen(new WhenDefinition(predicate));
return this;
@@ -201,6 +204,7 @@ public class CatchDefinition extends ProcessorDefinition<CatchDefinition> {
* from a {@link Processor} or use the {@link ProcessorDefinition#throwException(Exception)}
*/
@Deprecated
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public CatchDefinition handled(Predicate handled) {
setHandledPolicy(handled);
return this;
@@ -215,6 +219,7 @@ public class CatchDefinition extends ProcessorDefinition<CatchDefinition> {
* from a {@link Processor} or use the {@link ProcessorDefinition#throwException(Exception)}
*/
@Deprecated
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public CatchDefinition handled(Expression handled) {
setHandledPolicy(ExpressionToPredicateAdapter.toPredicate(handled));
return this;
http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java b/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
index 60370cc..ef7f1f0 100644
--- a/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
@@ -45,6 +45,7 @@ import org.apache.camel.util.ObjectHelper;
@XmlAccessorType(XmlAccessType.FIELD)
public class ChoiceDefinition extends ProcessorDefinition<ChoiceDefinition> {
@XmlElementRef
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
private List<WhenDefinition> whenClauses = new ArrayList<WhenDefinition>();
@XmlElement
private OtherwiseDefinition otherwise;
@@ -179,6 +180,7 @@ public class ChoiceDefinition extends ProcessorDefinition<ChoiceDefinition> {
* @param predicate the predicate
* @return the builder
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public ChoiceDefinition when(Predicate predicate) {
addClause(new WhenDefinition(predicate));
return this;
@@ -189,6 +191,7 @@ public class ChoiceDefinition extends ProcessorDefinition<ChoiceDefinition> {
*
* @return expression to be used as builder to configure the when node
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public ExpressionClause<ChoiceDefinition> when() {
ExpressionClause<ChoiceDefinition> clause = new ExpressionClause<ChoiceDefinition>(this);
addClause(new WhenDefinition(clause));
http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/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..e5a18fd 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
@@ -32,7 +32,7 @@ import org.apache.camel.spi.RouteContext;
*
* @version
*/
-@Metadata(label = "eip,routing")
+@Metadata(label = "eip,routing", expressionMode = Metadata.ExpressionMode.predicate)
@XmlRootElement(name = "filter")
@XmlAccessorType(XmlAccessType.FIELD)
public class FilterDefinition extends ExpressionNode {
http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/InterceptSendToEndpointDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/InterceptSendToEndpointDefinition.java b/camel-core/src/main/java/org/apache/camel/model/InterceptSendToEndpointDefinition.java
index a79401d..e751182 100644
--- a/camel-core/src/main/java/org/apache/camel/model/InterceptSendToEndpointDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/InterceptSendToEndpointDefinition.java
@@ -149,6 +149,7 @@ public class InterceptSendToEndpointDefinition extends OutputDefinition<Intercep
* @param predicate the predicate
* @return the builder
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public InterceptSendToEndpointDefinition when(Predicate predicate) {
WhenDefinition when = new WhenDefinition(predicate);
addOutput(when);
http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java b/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java
index a37e912..cf8f104 100644
--- a/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java
@@ -54,6 +54,7 @@ public class OnCompletionDefinition extends ProcessorDefinition<OnCompletionDefi
@XmlAttribute
private Boolean onFailureOnly;
@XmlElement(name = "onWhen")
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
private WhenDefinition onWhen;
@XmlAttribute
private Boolean parallelProcessing;
@@ -249,6 +250,7 @@ public class OnCompletionDefinition extends ProcessorDefinition<OnCompletionDefi
* @param predicate predicate that determines true or false
* @return the builder
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public OnCompletionDefinition onWhen(Predicate predicate) {
setOnWhen(new WhenDefinition(predicate));
return this;
http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java b/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
index 9ed6ebe..d8d0de8 100644
--- a/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
@@ -59,16 +59,20 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
@XmlElement(name = "exception", required = true)
private List<String> exceptions = new ArrayList<String>();
@XmlElement(name = "onWhen")
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
private WhenDefinition onWhen;
@XmlElement(name = "retryWhile")
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
private ExpressionSubElementDefinition retryWhile;
@XmlElement(name = "redeliveryPolicy")
private RedeliveryPolicyDefinition redeliveryPolicyType;
@XmlAttribute(name = "redeliveryPolicyRef")
private String redeliveryPolicyRef;
@XmlElement(name = "handled")
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
private ExpressionSubElementDefinition handled;
@XmlElement(name = "continued")
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
private ExpressionSubElementDefinition continued;
@XmlAttribute(name = "onRedeliveryRef")
private String onRedeliveryRef;
@@ -295,6 +299,7 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
* @param handled predicate that determines true or false
* @return the builder
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public OnExceptionDefinition handled(Predicate handled) {
setHandledPolicy(handled);
return this;
@@ -306,6 +311,7 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
* @param handled expression that determines true or false
* @return the builder
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public OnExceptionDefinition handled(Expression handled) {
setHandledPolicy(ExpressionToPredicateAdapter.toPredicate(handled));
return this;
@@ -319,6 +325,7 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
* @param continued continued or not
* @return the builder
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public OnExceptionDefinition continued(boolean continued) {
Expression expression = ExpressionBuilder.constantExpression(Boolean.toString(continued));
return continued(expression);
@@ -332,6 +339,7 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
* @param continued predicate that determines true or false
* @return the builder
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public OnExceptionDefinition continued(Predicate continued) {
setContinuedPolicy(continued);
return this;
@@ -345,6 +353,7 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
* @param continued expression that determines true or false
* @return the builder
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public OnExceptionDefinition continued(Expression continued) {
setContinuedPolicy(ExpressionToPredicateAdapter.toPredicate(continued));
return this;
@@ -359,6 +368,7 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
* @param predicate predicate that determines true or false
* @return the builder
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public OnExceptionDefinition onWhen(Predicate predicate) {
setOnWhen(new WhenDefinition(predicate));
return this;
@@ -372,6 +382,7 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
* @param retryWhile predicate that determines when to stop retrying
* @return the builder
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public OnExceptionDefinition retryWhile(Predicate retryWhile) {
setRetryWhilePolicy(retryWhile);
return this;
http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java b/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
index bf2b315..641d3fd 100644
--- a/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
@@ -70,6 +70,7 @@ import org.apache.camel.spi.IdAware;
import org.apache.camel.spi.IdempotentRepository;
import org.apache.camel.spi.InterceptStrategy;
import org.apache.camel.spi.LifecycleStrategy;
+import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.Policy;
import org.apache.camel.spi.RouteContext;
import org.slf4j.Logger;
@@ -1460,6 +1461,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
*
* @return the clause used to create the filter expression
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public ExpressionClause<? extends FilterDefinition> filter() {
FilterDefinition filter = new FilterDefinition();
addOutput(filter);
@@ -1474,6 +1476,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
* @param predicate predicate to use
* @return the builder
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public FilterDefinition filter(Predicate predicate) {
FilterDefinition filter = new FilterDefinition(predicate);
addOutput(filter);
@@ -1488,6 +1491,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
* @param expression the predicate expression to use
* @return the builder
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public FilterDefinition filter(ExpressionDefinition expression) {
FilterDefinition filter = new FilterDefinition(expression);
addOutput(filter);
@@ -1503,6 +1507,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
* @param expression the expression
* @return the builder
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public FilterDefinition filter(String language, String expression) {
return filter(new LanguageExpression(language, expression));
}
@@ -1515,6 +1520,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
* @param expression the expression
* @return the builder
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public ValidateDefinition validate(Expression expression) {
ValidateDefinition answer = new ValidateDefinition(expression);
addOutput(answer);
@@ -1529,6 +1535,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
* @param predicate the predicate
* @return the builder
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public ValidateDefinition validate(Predicate predicate) {
ValidateDefinition answer = new ValidateDefinition(predicate);
addOutput(answer);
@@ -1542,6 +1549,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
*
* @return the builder
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public ExpressionClause<ValidateDefinition> validate() {
ValidateDefinition answer = new ValidateDefinition();
addOutput(answer);
@@ -2236,6 +2244,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
* @param predicate the while loop predicate
* @return the builder
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public LoopDefinition loopDoWhile(Predicate predicate) {
LoopDefinition loop = new LoopDefinition(predicate);
addOutput(loop);
http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/TryDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/TryDefinition.java b/camel-core/src/main/java/org/apache/camel/model/TryDefinition.java
index 3b9158b..b34b190 100644
--- a/camel-core/src/main/java/org/apache/camel/model/TryDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/TryDefinition.java
@@ -148,6 +148,7 @@ public class TryDefinition extends OutputDefinition<TryDefinition> {
* @param predicate predicate that determines true or false
* @return the builder
*/
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public TryDefinition onWhen(Predicate predicate) {
// we must use a delegate so we can use the fluent builder based on TryDefinition
// to configure all with try .. catch .. finally
@@ -183,6 +184,7 @@ public class TryDefinition extends OutputDefinition<TryDefinition> {
* from a {@link Processor} or use the {@link ProcessorDefinition#throwException(Exception)}
*/
@Deprecated
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public TryDefinition handled(Predicate handled) {
// we must use a delegate so we can use the fluent builder based on TryDefinition
// to configure all with try .. catch .. finally
@@ -204,6 +206,7 @@ public class TryDefinition extends OutputDefinition<TryDefinition> {
* from a {@link Processor} or use the {@link ProcessorDefinition#throwException(Exception)}
*/
@Deprecated
+ @Metadata(expressionMode = Metadata.ExpressionMode.predicate)
public TryDefinition handled(Expression handled) {
return handled(ExpressionToPredicateAdapter.toPredicate(handled));
}
http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/ValidateDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/ValidateDefinition.java b/camel-core/src/main/java/org/apache/camel/model/ValidateDefinition.java
index 532e9c6..5ac9924 100644
--- a/camel-core/src/main/java/org/apache/camel/model/ValidateDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/ValidateDefinition.java
@@ -32,7 +32,7 @@ import org.apache.camel.spi.RouteContext;
*
* @version
*/
-@Metadata(label = "eip,transformation")
+@Metadata(label = "eip,transformation", expressionMode = Metadata.ExpressionMode.predicate)
@XmlRootElement(name = "validate")
@XmlAccessorType(XmlAccessType.FIELD)
public class ValidateDefinition extends NoOutputExpressionNode {
http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/WhenDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/WhenDefinition.java b/camel-core/src/main/java/org/apache/camel/model/WhenDefinition.java
index e0f1494..aca3933 100644
--- a/camel-core/src/main/java/org/apache/camel/model/WhenDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/WhenDefinition.java
@@ -29,7 +29,7 @@ import org.apache.camel.spi.RouteContext;
*
* @version
*/
-@Metadata(label = "eip,routing")
+@Metadata(label = "eip,routing", expressionMode = Metadata.ExpressionMode.predicate)
@XmlRootElement(name = "when")
public class WhenDefinition extends ExpressionNode {
http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/camel-core/src/main/java/org/apache/camel/model/WhenSkipSendToEndpointDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/WhenSkipSendToEndpointDefinition.java b/camel-core/src/main/java/org/apache/camel/model/WhenSkipSendToEndpointDefinition.java
index b607da2..ff124f7 100644
--- a/camel-core/src/main/java/org/apache/camel/model/WhenSkipSendToEndpointDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/WhenSkipSendToEndpointDefinition.java
@@ -27,7 +27,7 @@ import org.apache.camel.spi.RouteContext;
/**
* Predicate to determine if the message should be sent or not to the endpoint, when using interceptSentToEndpoint.
*/
-@Metadata(label = "configuration")
+@Metadata(label = "configuration", expressionMode = Metadata.ExpressionMode.predicate)
@XmlRootElement(name = "whenSkipSendToEndpoint")
public class WhenSkipSendToEndpointDefinition extends WhenDefinition {
http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/ParserResult.java
----------------------------------------------------------------------
diff --git a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/ParserResult.java b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/ParserResult.java
index 4ef2fc4..71088d2 100644
--- a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/ParserResult.java
+++ b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/ParserResult.java
@@ -25,6 +25,7 @@ public class ParserResult {
private boolean parsed;
private int position;
private String element;
+ private Boolean predicate;
public ParserResult(String node, int position, String element) {
this(node, position, element, true);
@@ -66,6 +67,17 @@ public class ParserResult {
return node;
}
+ public Boolean getPredicate() {
+ return predicate;
+ }
+
+ /**
+ * Tells if it was an expression which is intended to be used as a predicate (determined from camel-core mode)
+ */
+ public void setPredicate(Boolean predicate) {
+ this.predicate = predicate;
+ }
+
public String toString() {
return element;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java
----------------------------------------------------------------------
diff --git a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java
index 36fc443..dd15697 100644
--- a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java
+++ b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java
@@ -249,17 +249,22 @@ public final class RouteBuilderParser {
fileName = fileName.substring(baseDir.length() + 1);
}
- CamelSimpleExpressionDetails details = new CamelSimpleExpressionDetails();
- details.setFileName(fileName);
- details.setClassName(clazz.getQualifiedName());
- details.setMethodName("configure");
+ CamelSimpleExpressionDetails detail = new CamelSimpleExpressionDetails();
+ detail.setFileName(fileName);
+ detail.setClassName(clazz.getQualifiedName());
+ detail.setMethodName("configure");
int line = findLineNumber(fullyQualifiedFileName, result.getPosition());
if (line > -1) {
- details.setLineNumber("" + line);
+ detail.setLineNumber("" + line);
}
- details.setSimple(result.getElement());
+ detail.setSimple(result.getElement());
+
+ boolean predicate = result.getPredicate() != null ? result.getPredicate() : false;
+ boolean expression = !predicate;
+ detail.setPredicate(predicate);
+ detail.setExpression(expression);
- simpleExpressions.add(details);
+ simpleExpressions.add(detail);
}
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java
----------------------------------------------------------------------
diff --git a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java
index 92452b6..a1f7b59 100644
--- a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java
+++ b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java
@@ -32,6 +32,8 @@ import org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.ClassInstanceCrea
import org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.Expression;
import org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.ExpressionStatement;
import org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.FieldDeclaration;
+import org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.IAnnotationBinding;
+import org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.ITypeBinding;
import org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.InfixExpression;
import org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.MemberValuePair;
import org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.MethodDeclaration;
@@ -429,8 +431,37 @@ public final class CamelJavaParserHelper {
Object arg = args.get(0);
String simple = getLiteralValue(clazz, block, (Expression) arg);
if (!Strings.isBlank(simple)) {
+ // is this a simple expression that is called as a predicate or expression
+ boolean predicate = false;
+ Expression parent = mi.getExpression();
+ if (parent == null) {
+ // maybe its an argument
+ // simple maybe be passed in as an argument
+ List list = mi.arguments();
+ // must be a single argument
+ if (list != null && list.size() == 1) {
+ ASTNode o = (ASTNode) list.get(0);
+ ASTNode p = o.getParent();
+ if (p instanceof MethodInvocation) {
+ // this is simple
+ String pName = ((MethodInvocation) p).getName().getIdentifier();
+ if ("simple".equals(pName)) {
+ // okay find the parent of simple which is the method that uses simple
+ parent = (Expression) p.getParent();
+ }
+ }
+ }
+ }
+ if (parent != null && parent instanceof MethodInvocation) {
+ MethodInvocation emi = (MethodInvocation) parent;
+ String parentName = emi.getName().getIdentifier();
+ predicate = isSimplePredicate(parentName);
+ }
+
int position = ((Expression) arg).getStartPosition();
- expressions.add(new ParserResult(node, position, simple));
+ ParserResult result = new ParserResult(node, position, simple);
+ result.setPredicate(predicate);
+ expressions.add(result);
}
}
}
@@ -447,6 +478,25 @@ public final class CamelJavaParserHelper {
}
}
+ /**
+ * Using simple expressions in the Java DSL may be used in certain places as predicate only
+ */
+ private static boolean isSimplePredicate(String name) {
+ if (name == null) {
+ return false;
+ }
+ if (name.equals("completionPredicate") || name.equals("completion")) {
+ return true;
+ }
+ if (name.equals("onWhen") || name.equals("when") || name.equals("handled") || name.equals("continued")) {
+ return true;
+ }
+ if (name.equals("retryWhile") || name.equals("filter") || name.equals("validate") || name.equals("loopDoWhile")) {
+ return true;
+ }
+ return false;
+ }
+
@SuppressWarnings("unchecked")
private static FieldSource<JavaClassSource> getField(JavaClassSource clazz, Block block, SimpleName ref) {
String fieldName = ref.getIdentifier();
http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterSimpleRouteBuilderConfigureTest.java
----------------------------------------------------------------------
diff --git a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterSimpleRouteBuilderConfigureTest.java b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterSimpleRouteBuilderConfigureTest.java
index 14d63af..a3f6f55 100644
--- a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterSimpleRouteBuilderConfigureTest.java
+++ b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterSimpleRouteBuilderConfigureTest.java
@@ -46,8 +46,10 @@ public class RoasterSimpleRouteBuilderConfigureTest {
LOG.info(" Line: " + findLineNumber(simple.getPosition()));
}
Assert.assertEquals("${body} > 100", list.get(0).getElement());
+ Assert.assertEquals(true, list.get(0).getPredicate());
Assert.assertEquals(27, findLineNumber(list.get(0).getPosition()));
Assert.assertEquals("${body} > 200", list.get(1).getElement());
+ Assert.assertEquals(true, list.get(1).getPredicate());
Assert.assertEquals(30, findLineNumber(list.get(1).getPosition()));
}
http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/ValidateMojo.java
----------------------------------------------------------------------
diff --git a/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/ValidateMojo.java b/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/ValidateMojo.java
index 9d41a9d..3c8eca2 100644
--- a/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/ValidateMojo.java
+++ b/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/ValidateMojo.java
@@ -400,8 +400,15 @@ public class ValidateMojo extends AbstractExecMojo {
int simpleErrors = 0;
for (CamelSimpleExpressionDetails detail : simpleExpressions) {
- getLog().debug("Validating simple expression: " + detail.getSimple());
- SimpleValidationResult result = catalog.validateSimpleExpression(detail.getSimple());
+ SimpleValidationResult result;
+ boolean predicate = detail.isPredicate();
+ if (predicate) {
+ getLog().debug("Validating simple predicate: " + detail.getSimple());
+ result = catalog.validateSimplePredicate(detail.getSimple());
+ } else {
+ getLog().debug("Validating simple expression: " + detail.getSimple());
+ result = catalog.validateSimpleExpression(detail.getSimple());
+ }
if (!result.isSuccess()) {
simpleErrors++;
http://git-wip-us.apache.org/repos/asf/camel/blob/dce92c8d/tooling/spi-annotations/src/main/java/org/apache/camel/spi/Metadata.java
----------------------------------------------------------------------
diff --git a/tooling/spi-annotations/src/main/java/org/apache/camel/spi/Metadata.java b/tooling/spi-annotations/src/main/java/org/apache/camel/spi/Metadata.java
index 241361e..03efe2a 100644
--- a/tooling/spi-annotations/src/main/java/org/apache/camel/spi/Metadata.java
+++ b/tooling/spi-annotations/src/main/java/org/apache/camel/spi/Metadata.java
@@ -33,6 +33,15 @@ import java.lang.annotation.Target;
public @interface Metadata {
/**
+ * The expression mode to use as either expression or predicate.
+ */
+ enum ExpressionMode {
+
+ expression, predicate;
+
+ }
+
+ /**
* To define one or more labels.
* <p/>
* Multiple labels can be defined as a comma separated value.
@@ -76,4 +85,12 @@ public @interface Metadata {
*/
boolean secret() default false;
+ /**
+ * Used by EIPs to mark whether an expression is used as expression or predicate.
+ * <p/>
+ * For example a message transformer uses the {@link ExpressionMode#expression} mode,
+ * while a content based router uses {@link ExpressionMode#predicate}.
+ */
+ ExpressionMode expressionMode() default ExpressionMode.expression;
+
}