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/05 09:25:21 UTC

camel git commit: CAMEL-10572: Ref language now supports predicate as well.

Repository: camel
Updated Branches:
  refs/heads/master acb8fa087 -> f58f08e03


CAMEL-10572: Ref language now supports predicate as well.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/f58f08e0
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f58f08e0
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f58f08e0

Branch: refs/heads/master
Commit: f58f08e037118f14935590e0193be6508bb33adc
Parents: acb8fa0
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Jan 5 10:24:55 2017 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Jan 5 10:25:16 2017 +0100

----------------------------------------------------------------------
 camel-core/src/main/docs/ref-language.adoc      |  4 +-
 .../apache/camel/language/ref/RefLanguage.java  | 21 +++++--
 .../camel/model/language/RefExpression.java     |  2 +-
 .../apache/camel/language/RefPredicateTest.java | 60 ++++++++++++++++++++
 .../java/org/apache/camel/language/RefTest.java |  2 +-
 .../springboot/RefLanguageConfiguration.java    |  2 +-
 6 files changed, 81 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/f58f08e0/camel-core/src/main/docs/ref-language.adoc
----------------------------------------------------------------------
diff --git a/camel-core/src/main/docs/ref-language.adoc b/camel-core/src/main/docs/ref-language.adoc
index bc48d3c..c610e0d 100644
--- a/camel-core/src/main/docs/ref-language.adoc
+++ b/camel-core/src/main/docs/ref-language.adoc
@@ -5,7 +5,7 @@ Ref Expression Language
 *Available as of Camel 2.8*
 
 The Ref Expression Language is really just a way to lookup a custom
-link:expression.html[Expression] from the link:registry.html[Registry].
+link:expression.html[Expression] or link:predicate.html[Predicate] from the link:registry.html[Registry].
 
 This is particular useable in XML DSLs.
 
@@ -65,4 +65,4 @@ from("seda:a").split().ref("myExpression").to("seda:b");
 Dependencies
 ^^^^^^^^^^^^
 
-The Constant language is part of *camel-core*.
+The Ref language is part of *camel-core*.

http://git-wip-us.apache.org/repos/asf/camel/blob/f58f08e0/camel-core/src/main/java/org/apache/camel/language/ref/RefLanguage.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/language/ref/RefLanguage.java b/camel-core/src/main/java/org/apache/camel/language/ref/RefLanguage.java
index a600cf5..afd5305 100644
--- a/camel-core/src/main/java/org/apache/camel/language/ref/RefLanguage.java
+++ b/camel-core/src/main/java/org/apache/camel/language/ref/RefLanguage.java
@@ -24,9 +24,10 @@ import org.apache.camel.builder.ExpressionBuilder;
 import org.apache.camel.spi.Language;
 import org.apache.camel.support.ExpressionAdapter;
 import org.apache.camel.util.ExpressionToPredicateAdapter;
+import org.apache.camel.util.PredicateToExpressionAdapter;
 
 /**
- * A language for referred expressions.
+ * A language for referred expressions or predicates.
  */
 public class RefLanguage implements Language, IsSingleton {
 
@@ -43,11 +44,21 @@ public class RefLanguage implements Language, IsSingleton {
         final Expression exp = RefLanguage.ref(expression);
         return new ExpressionAdapter() {
             public Object evaluate(Exchange exchange) {
-                Expression lookup = exp.evaluate(exchange, Expression.class);
-                if (lookup != null) {
-                    return lookup.evaluate(exchange, Object.class);
+                Expression target = null;
+
+                Object lookup = exp.evaluate(exchange, Object.class);
+
+                // must favor expression over predicate
+                if (lookup != null && lookup instanceof Expression) {
+                    target = (Expression) lookup;
+                } else if (lookup != null && lookup instanceof Predicate) {
+                    target = PredicateToExpressionAdapter.toExpression((Predicate) lookup);
+                }
+
+                if (target != null) {
+                    return target.evaluate(exchange, Object.class);
                 } else {
-                    throw new IllegalArgumentException("Cannot find expression in registry with ref: " + expression);
+                    throw new IllegalArgumentException("Cannot find expression or predicate in registry with ref: " + expression);
                 }
             }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/f58f08e0/camel-core/src/main/java/org/apache/camel/model/language/RefExpression.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/language/RefExpression.java b/camel-core/src/main/java/org/apache/camel/model/language/RefExpression.java
index 1ce4cf7..69ff530 100644
--- a/camel-core/src/main/java/org/apache/camel/model/language/RefExpression.java
+++ b/camel-core/src/main/java/org/apache/camel/model/language/RefExpression.java
@@ -23,7 +23,7 @@ import javax.xml.bind.annotation.XmlRootElement;
 import org.apache.camel.spi.Metadata;
 
 /**
- * For using a custom expression
+ * For using a custom expression or predicate
  */
 @Metadata(label = "language,core", title = "Ref")
 @XmlRootElement(name = "ref")

http://git-wip-us.apache.org/repos/asf/camel/blob/f58f08e0/camel-core/src/test/java/org/apache/camel/language/RefPredicateTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/language/RefPredicateTest.java b/camel-core/src/test/java/org/apache/camel/language/RefPredicateTest.java
new file mode 100644
index 0000000..065bb90
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/language/RefPredicateTest.java
@@ -0,0 +1,60 @@
+/**
+ * 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.language;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.LanguageTestSupport;
+import org.apache.camel.Predicate;
+import org.apache.camel.impl.JndiRegistry;
+
+public class RefPredicateTest extends LanguageTestSupport {
+
+    @Override
+    protected JndiRegistry createRegistry() throws Exception {
+        JndiRegistry jndi = super.createRegistry();
+        jndi.bind("myPredicate", new MyPredicate());
+        return jndi;
+    }
+
+    public void testExpression() throws Exception {
+        exchange.getIn().setBody("Hello World");
+        assertExpression("myPredicate", "true");
+
+        exchange.getIn().setBody("Bye World");
+        assertExpression("myPredicate", "false");
+    }
+ 
+    public void testPredicates() throws Exception {
+        exchange.getIn().setBody("Hello World");
+        assertPredicate("myPredicate", true);
+
+        exchange.getIn().setBody("Bye World");
+        assertPredicate("myPredicate", false);
+    }
+
+    protected String getLanguageName() {
+        return "ref";
+    }
+
+    private static class MyPredicate implements Predicate {
+
+        @Override
+        public boolean matches(Exchange exchange) {
+            return exchange.getIn().getBody().equals("Hello World");
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/f58f08e0/camel-core/src/test/java/org/apache/camel/language/RefTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/language/RefTest.java b/camel-core/src/test/java/org/apache/camel/language/RefTest.java
index 3f05a3a..2e005ca 100644
--- a/camel-core/src/test/java/org/apache/camel/language/RefTest.java
+++ b/camel-core/src/test/java/org/apache/camel/language/RefTest.java
@@ -39,7 +39,7 @@ public class RefTest extends LanguageTestSupport {
             assertExpression("foo", "Hello World");
             fail("Should have thrown exception");
         } catch (IllegalArgumentException e) {
-            assertEquals("Cannot find expression in registry with ref: foo", e.getMessage());
+            assertEquals("Cannot find expression or predicate in registry with ref: foo", e.getMessage());
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/f58f08e0/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/ref/springboot/RefLanguageConfiguration.java
----------------------------------------------------------------------
diff --git a/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/ref/springboot/RefLanguageConfiguration.java b/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/ref/springboot/RefLanguageConfiguration.java
index 29500c5..7893b91 100644
--- a/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/ref/springboot/RefLanguageConfiguration.java
+++ b/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/ref/springboot/RefLanguageConfiguration.java
@@ -19,7 +19,7 @@ package org.apache.camel.language.ref.springboot;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
- * For using a custom expression
+ * For using a custom expression or predicate
  * 
  * Generated by camel-package-maven-plugin - do not edit this file!
  */