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 2022/01/10 19:52:26 UTC

[camel] branch main updated: CAMEL-17467: camel-core - Add method to ValueBuilder for java based predicate/expressions

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 1c61e25  CAMEL-17467: camel-core - Add method to ValueBuilder for java based predicate/expressions
1c61e25 is described below

commit 1c61e25ee5eea0f80f2edd61977886b4fb608cfe
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Jan 10 20:38:17 2022 +0100

    CAMEL-17467: camel-core - Add method to ValueBuilder for java based predicate/expressions
---
 .../apache/camel/builder/PredicateBuilderTest.java |  9 +++++++++
 .../camel/support/builder/ExpressionBuilder.java   | 23 ++++++++++++++++++++++
 .../apache/camel/support/builder/ValueBuilder.java | 11 +++++++++++
 3 files changed, 43 insertions(+)

diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/PredicateBuilderTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/PredicateBuilderTest.java
index f8f1f78..badf6d4 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/PredicateBuilderTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/PredicateBuilderTest.java
@@ -23,6 +23,7 @@ import org.apache.camel.Message;
 import org.apache.camel.Predicate;
 import org.apache.camel.TestSupport;
 import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.support.Animal;
 import org.apache.camel.support.DefaultExchange;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -173,6 +174,14 @@ public class PredicateBuilderTest extends TestSupport {
         assertDoesNotMatch(header("name").not().isEqualTo("James"));
     }
 
+    @Test
+    public void testMethod() throws Exception {
+        Animal tiger = new Animal("Tony", true);
+        exchange.getMessage().setBody(tiger);
+
+        assertMatches(PredicateBuilder.isEqualTo(bodyAs(Animal.class).method("getName"), constant("Tony")));
+    }
+
     @Override
     @BeforeEach
     public void setUp() throws Exception {
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java b/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java
index 551e2d2..f305967 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java
@@ -1746,6 +1746,29 @@ public class ExpressionBuilder {
         };
     }
 
+    public static Expression beanExpression(final Expression expression, final String method) {
+        return new ExpressionAdapter() {
+            private Language language;
+
+            @Override
+            public Object evaluate(Exchange exchange) {
+                Object bean = expression.evaluate(exchange, Object.class);
+                Expression exp = language.createExpression(null, new Object[]{bean, method});
+                exp.init(exchange.getContext());
+                return exp.evaluate(exchange, Object.class);
+            }
+
+            @Override
+            public void init(CamelContext context) {
+                this.language = context.resolveLanguage("bean");
+            }
+
+            public String toString() {
+                return "bean(" + expression + ", " + method + ")";
+            }
+        };
+    }
+
     public static Expression propertiesComponentExpression(final String key, final String defaultValue) {
         return new ExpressionAdapter() {
             private Expression exp;
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/builder/ValueBuilder.java b/core/camel-support/src/main/java/org/apache/camel/support/builder/ValueBuilder.java
index 23b770d..f45d4da 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/builder/ValueBuilder.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/builder/ValueBuilder.java
@@ -278,6 +278,17 @@ public class ValueBuilder implements Expression, Predicate {
     }
 
     /**
+     * Invokes the method with the given name (supports OGNL syntax).
+     *
+     * @param  methodName name of method to invoke.
+     * @return            the current builder
+     */
+    public ValueBuilder method(String methodName) {
+        Expression newExp = ExpressionBuilder.beanExpression(expression, methodName);
+        return onNewValueBuilder(newExp);
+    }
+
+    /**
      * Negates the built expression.
      *
      * @return the current builder