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