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 2013/08/15 15:30:33 UTC
[2/3] git commit: CAMEL-6639: Added statis methods to simple language
for predicate vs expression.
CAMEL-6639: Added statis methods to simple language for predicate vs expression.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/dd836f75
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/dd836f75
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/dd836f75
Branch: refs/heads/camel-2.11.x
Commit: dd836f75088bdb30e5b7caf854c38d34cb9ee73a
Parents: b158d8d
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Aug 15 12:15:09 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Aug 15 15:27:54 2013 +0200
----------------------------------------------------------------------
.../camel/language/simple/SimpleLanguage.java | 38 +++++++++++++++-
.../util/PredicateToExpressionAdapter.java | 48 ++++++++++++++++++++
.../camel/language/simple/SimpleTest.java | 26 +++++++++++
3 files changed, 110 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/dd836f75/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java b/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
index ff0a9e2..76db93a 100644
--- a/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
+++ b/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
@@ -21,6 +21,7 @@ import org.apache.camel.Predicate;
import org.apache.camel.builder.ExpressionBuilder;
import org.apache.camel.support.LanguageSupport;
import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.PredicateToExpressionAdapter;
/**
* A <a href="http://camel.apache.org/simple.html">simple language</a>
@@ -158,14 +159,47 @@ public class SimpleLanguage extends LanguageSupport {
return answer;
}
+ /**
+ * Creates a new {@link Expression}.
+ * <p/>
+ * <b>Important:</b> If you need to use a predicate (function to return true|false) then use
+ * {@link #predicate(String)} instead.
+ */
public static Expression simple(String expression) {
- return SIMPLE.createExpression(expression);
+ return expression(expression);
}
+ /**
+ * Creates a new {@link Expression} (or {@link Predicate}
+ * if the resultType is a <tt>Boolean</tt>, or <tt>boolean</tt> type).
+ */
public static Expression simple(String expression, Class<?> resultType) {
SimpleLanguage answer = new SimpleLanguage();
answer.setResultType(resultType);
- return answer.createExpression(expression);
+ if (resultType == Boolean.class || resultType == boolean.class) {
+ // if its a boolean as result then its a predicate
+ Predicate predicate = answer.createPredicate(expression);
+ return PredicateToExpressionAdapter.toExpression(predicate);
+ } else {
+ return answer.createExpression(expression);
+ }
+ }
+
+ /**
+ * Creates a new {@link Expression}.
+ * <p/>
+ * <b>Important:</b> If you need to use a predicate (function to return true|false) then use
+ * {@link #predicate(String)} instead.
+ */
+ public static Expression expression(String expression) {
+ return SIMPLE.createExpression(expression);
+ }
+
+ /**
+ * Creates a new {@link Predicate}.
+ */
+ public static Predicate predicate(String predicate) {
+ return SIMPLE.createPredicate(predicate);
}
/**
http://git-wip-us.apache.org/repos/asf/camel/blob/dd836f75/camel-core/src/main/java/org/apache/camel/util/PredicateToExpressionAdapter.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/util/PredicateToExpressionAdapter.java b/camel-core/src/main/java/org/apache/camel/util/PredicateToExpressionAdapter.java
new file mode 100644
index 0000000..8f76abf
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/util/PredicateToExpressionAdapter.java
@@ -0,0 +1,48 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.util;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Expression;
+import org.apache.camel.Predicate;
+
+public final class PredicateToExpressionAdapter implements Expression {
+ private final Predicate predicate;
+
+ public PredicateToExpressionAdapter(Predicate predicate) {
+ this.predicate = predicate;
+ }
+
+ @Override
+ public <T> T evaluate(Exchange exchange, Class<T> type) {
+ boolean matches = predicate.matches(exchange);
+ return exchange.getContext().getTypeConverter().convertTo(type, exchange, matches);
+ }
+
+ @Override
+ public String toString() {
+ return predicate.toString();
+ }
+
+ /**
+ * Converts the given predicate into an {@link org.apache.camel.Expression}
+ */
+ public static Expression toExpression(final Predicate predicate) {
+ return new PredicateToExpressionAdapter(predicate);
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/camel/blob/dd836f75/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java b/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
index 0dcba7f8..bc85a0f 100644
--- a/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
+++ b/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
@@ -33,6 +33,7 @@ import org.apache.camel.Expression;
import org.apache.camel.ExpressionIllegalSyntaxException;
import org.apache.camel.InvalidPayloadException;
import org.apache.camel.LanguageTestSupport;
+import org.apache.camel.Predicate;
import org.apache.camel.component.bean.MethodNotFoundException;
import org.apache.camel.impl.JndiRegistry;
import org.apache.camel.language.bean.RuntimeBeanExpressionException;
@@ -52,6 +53,31 @@ public class SimpleTest extends LanguageTestSupport {
return jndi;
}
+ public void testSimpleExpressionOrPredicate() throws Exception {
+ Predicate predicate = SimpleLanguage.predicate("${header.bar} == 123");
+ assertTrue(predicate.matches(exchange));
+
+ predicate = SimpleLanguage.predicate("${header.bar} == 124");
+ assertFalse(predicate.matches(exchange));
+
+ Expression expression = SimpleLanguage.expression("${body}");
+ assertEquals("<hello id='m123'>world!</hello>", expression.evaluate(exchange, String.class));
+
+ expression = SimpleLanguage.simple("${body}");
+ assertEquals("<hello id='m123'>world!</hello>", expression.evaluate(exchange, String.class));
+ expression = SimpleLanguage.simple("${body}", String.class);
+ assertEquals("<hello id='m123'>world!</hello>", expression.evaluate(exchange, String.class));
+
+ expression = SimpleLanguage.simple("${header.bar} == 123", boolean.class);
+ assertEquals(Boolean.TRUE, expression.evaluate(exchange, Object.class));
+ expression = SimpleLanguage.simple("${header.bar} == 124", boolean.class);
+ assertEquals(Boolean.FALSE, expression.evaluate(exchange, Object.class));
+ expression = SimpleLanguage.simple("${header.bar} == 123", Boolean.class);
+ assertEquals(Boolean.TRUE, expression.evaluate(exchange, Object.class));
+ expression = SimpleLanguage.simple("${header.bar} == 124", Boolean.class);
+ assertEquals(Boolean.FALSE, expression.evaluate(exchange, Object.class));
+ }
+
public void testResultType() throws Exception {
assertEquals(123, SimpleLanguage.simple("${header.bar}", int.class).evaluate(exchange, Object.class));
assertEquals("123", SimpleLanguage.simple("${header.bar}", String.class).evaluate(exchange, Object.class));