From 22bf92a71f549bbe3299c26f96cee95dfe127084 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Mat=C3=A8rne?= Date: Sat, 23 Nov 2013 22:11:19 +0100 Subject: [PATCH 1/4] CAMEL-6993: Test and implementation: PredicateBuilder.and(Predicate...) --- .../apache/camel/builder/PredicateBuilder.java | 11 +++++++++++ .../camel/builder/PredicateBuilderTest.java | 16 +++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java index 3dc5df265820d..2aeb7c9bab09b 100644 --- a/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java +++ b/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java @@ -441,6 +441,17 @@ public static Predicate and(List predicates) { } return answer; } + + /** + * Concat the given predicates into a single predicate, which + * only matches if all the predicates matches. + * + * @param predicates predicates + * @return a single predicate containing all the predicates + */ + public static Predicate and(Predicate... predicates) { + return and(Arrays.asList(predicates)); + } /** * A constant predicate. diff --git a/camel-core/src/test/java/org/apache/camel/builder/PredicateBuilderTest.java b/camel-core/src/test/java/org/apache/camel/builder/PredicateBuilderTest.java index 1b244f113a18a..9938b4c06060c 100644 --- a/camel-core/src/test/java/org/apache/camel/builder/PredicateBuilderTest.java +++ b/camel-core/src/test/java/org/apache/camel/builder/PredicateBuilderTest.java @@ -16,15 +16,16 @@ */ package org.apache.camel.builder; +import static org.apache.camel.builder.Builder.constant; +import static org.apache.camel.builder.PredicateBuilder.in; +import static org.apache.camel.builder.PredicateBuilder.not; + import org.apache.camel.Exchange; 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.impl.DefaultExchange; -import static org.apache.camel.builder.Builder.constant; -import static org.apache.camel.builder.PredicateBuilder.in; -import static org.apache.camel.builder.PredicateBuilder.not; /** * @version @@ -66,6 +67,15 @@ public void testCompoundAndPredicates() throws Exception { assertMatches(and); } + + public void testCompoundAndPredicatesVarargs() throws Exception { + Predicate p1 = header("name").isEqualTo(constant("James")); + Predicate p2 = header("size").isGreaterThanOrEqualTo(constant(10)); + Predicate p3 = header("location").contains(constant("London")); + Predicate and = PredicateBuilder.and(p1, p2, p3); + + assertMatches(and); + } public void testCompoundAndOrPredicates() throws Exception { Predicate p1 = header("name").isEqualTo(constant("Hiram")); From 546bb2e72d58eee646d1ba2cb86a2b5964b4c191 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Mat=C3=A8rne?= Date: Sun, 24 Nov 2013 22:29:45 +0100 Subject: [PATCH 2/4] code style (tab vs space, import order) --- .../org/apache/camel/builder/PredicateBuilder.java | 12 ++++++------ .../apache/camel/builder/PredicateBuilderTest.java | 13 +++++++------ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java index 2aeb7c9bab09b..da6bc2cfd0dc9 100644 --- a/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java +++ b/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java @@ -125,7 +125,7 @@ public String toString() { } }; } - + public static Predicate isEqualTo(final Expression left, final Expression right) { return new BinaryPredicateSupport(left, right) { @@ -441,16 +441,16 @@ public static Predicate and(List predicates) { } return answer; } - + /** - * Concat the given predicates into a single predicate, which - * only matches if all the predicates matches. - * + * Concat the given predicates into a single predicate, which only matches + * if all the predicates matches. + * * @param predicates predicates * @return a single predicate containing all the predicates */ public static Predicate and(Predicate... predicates) { - return and(Arrays.asList(predicates)); + return and(Arrays.asList(predicates)); } /** diff --git a/camel-core/src/test/java/org/apache/camel/builder/PredicateBuilderTest.java b/camel-core/src/test/java/org/apache/camel/builder/PredicateBuilderTest.java index 9938b4c06060c..338bfa4a61225 100644 --- a/camel-core/src/test/java/org/apache/camel/builder/PredicateBuilderTest.java +++ b/camel-core/src/test/java/org/apache/camel/builder/PredicateBuilderTest.java @@ -16,9 +16,6 @@ */ package org.apache.camel.builder; -import static org.apache.camel.builder.Builder.constant; -import static org.apache.camel.builder.PredicateBuilder.in; -import static org.apache.camel.builder.PredicateBuilder.not; import org.apache.camel.Exchange; import org.apache.camel.Message; @@ -27,6 +24,10 @@ import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.impl.DefaultExchange; +import static org.apache.camel.builder.Builder.constant; +import static org.apache.camel.builder.PredicateBuilder.in; +import static org.apache.camel.builder.PredicateBuilder.not; + /** * @version */ @@ -67,13 +68,13 @@ public void testCompoundAndPredicates() throws Exception { assertMatches(and); } - + public void testCompoundAndPredicatesVarargs() throws Exception { Predicate p1 = header("name").isEqualTo(constant("James")); Predicate p2 = header("size").isGreaterThanOrEqualTo(constant(10)); Predicate p3 = header("location").contains(constant("London")); - Predicate and = PredicateBuilder.and(p1, p2, p3); - + Predicate and = PredicateBuilder.and(p1, p2, p3); + assertMatches(and); } From 4b9f2af46f17772076af3f5e03e889a739341deb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Mat=C3=A8rne?= Date: Sun, 24 Nov 2013 22:34:19 +0100 Subject: [PATCH 3/4] Improve JavaDoc: There is a and(left,right) and a and(...) method. But on the other hand or(left, right) and in(...). So add a note. --- .../main/java/org/apache/camel/builder/PredicateBuilder.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java index da6bc2cfd0dc9..d6434de7e039b 100644 --- a/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java +++ b/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java @@ -86,7 +86,8 @@ public String toString() { } /** - * A helper method to combine multiple predicates by a logical OR + * A helper method to combine two predicates by a logical OR. + * If you want to combine multiple predicates see {@link #in(Predicate...)} */ public static Predicate or(final Predicate left, final Predicate right) { notNull(left, "left"); From 269385c99988391a5a7f85c0706430ecb6571f5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Mat=C3=A8rne?= Date: Sun, 24 Nov 2013 22:41:14 +0100 Subject: [PATCH 4/4] and() is available with List and varargs, so in() should also --- .../apache/camel/builder/PredicateBuilder.java | 7 +++++++ .../camel/builder/PredicateBuilderTest.java | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java index d6434de7e039b..37f3af6a8c1da 100644 --- a/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java +++ b/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java @@ -127,6 +127,13 @@ public String toString() { }; } + /** + * A helper method to return true if any of the predicates matches. + */ + public static Predicate in(List predicates) { + return in(predicates.toArray(new Predicate[0])); + } + public static Predicate isEqualTo(final Expression left, final Expression right) { return new BinaryPredicateSupport(left, right) { diff --git a/camel-core/src/test/java/org/apache/camel/builder/PredicateBuilderTest.java b/camel-core/src/test/java/org/apache/camel/builder/PredicateBuilderTest.java index 338bfa4a61225..6ada574ce6d49 100644 --- a/camel-core/src/test/java/org/apache/camel/builder/PredicateBuilderTest.java +++ b/camel-core/src/test/java/org/apache/camel/builder/PredicateBuilderTest.java @@ -17,6 +17,8 @@ package org.apache.camel.builder; +import java.util.Arrays; + import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.Predicate; @@ -78,6 +80,22 @@ public void testCompoundAndPredicatesVarargs() throws Exception { assertMatches(and); } + public void testOrSignatures() throws Exception { + Predicate p1 = header("name").isEqualTo(constant("does-not-apply")); + Predicate p2 = header("size").isGreaterThanOrEqualTo(constant(10)); + Predicate p3 = header("location").contains(constant("does-not-apply")); + + // check method signature with two parameters + assertMatches(PredicateBuilder.or(p1, p2)); + assertMatches(PredicateBuilder.or(p2, p3)); + + // check method signature with varargs + assertMatches(PredicateBuilder.in(p1, p2, p3)); + + // maybe a list of predicates? + assertMatches(PredicateBuilder.in(Arrays.asList(p1, p2, p3))); + } + public void testCompoundAndOrPredicates() throws Exception { Predicate p1 = header("name").isEqualTo(constant("Hiram")); Predicate p2 = header("size").isGreaterThan(constant(100));