You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by js...@apache.org on 2007/04/24 13:34:32 UTC
svn commit: r531883 - in /activemq/camel/trunk/camel-core/src:
main/java/org/apache/camel/builder/ test/java/org/apache/camel/
test/java/org/apache/camel/builder/
Author: jstrachan
Date: Tue Apr 24 04:34:31 2007
New Revision: 531883
URL: http://svn.apache.org/viewvc?view=rev&rev=531883
Log:
some refactorings to make it easier to create expressions & predicates outside of the routing DSL for testing
Added:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/Builder.java (with props)
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/TestSupport.java
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/PredicateBuilderTest.java
Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/Builder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/Builder.java?view=auto&rev=531883
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/Builder.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/Builder.java Tue Apr 24 04:34:31 2007
@@ -0,0 +1,95 @@
+/**
+ *
+ * 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.builder;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Expression;
+
+/**
+ * A helper class for including portions of the
+ * <a href="http://activemq.apache.org/camel/expression.html">expression</a> and
+ * <a href="http://activemq.apache.org/camel/predicate.html">predicate</a>
+ * <a href="http://activemq.apache.org/camel/dsl.html">Java DSL</a>
+ *
+ * @version $Revision: 1.1 $
+ */
+public class Builder {
+
+ /**
+ * Returns a constant expression
+ */
+ public static <E extends Exchange> ValueBuilder<E> constant(Object value) {
+ Expression<E> expression = ExpressionBuilder.constantExpression(value);
+ return new ValueBuilder<E>(expression);
+ }
+
+ /**
+ * Returns a predicate and value builder for headers on an exchange
+ */
+ public static <E extends Exchange> ValueBuilder<E> header(@FluentArg("name") String name) {
+ Expression<E> expression = ExpressionBuilder.headerExpression(name);
+ return new ValueBuilder<E>(expression);
+ }
+
+ /**
+ * Returns a predicate and value builder for the inbound body on an exchange
+ */
+ public static <E extends Exchange> ValueBuilder<E> body() {
+ Expression<E> expression = ExpressionBuilder.bodyExpression();
+ return new ValueBuilder<E>(expression);
+ }
+
+ /**
+ * Returns a predicate and value builder for the inbound message body as a specific type
+ */
+ public static <E extends Exchange, T> ValueBuilder<E> bodyAs( Class<T> type) {
+ Expression<E> expression = ExpressionBuilder.<E, T>bodyExpression(type);
+ return new ValueBuilder<E>(expression);
+ }
+
+ /**
+ * Returns a predicate and value builder for the outbound body on an exchange
+ */
+ public static <E extends Exchange> ValueBuilder<E> outBody() {
+ Expression<E> expression = ExpressionBuilder.bodyExpression();
+ return new ValueBuilder<E>(expression);
+ }
+
+ /**
+ * Returns a predicate and value builder for the outbound message body as a specific type
+ */
+ public static <E extends Exchange, T> ValueBuilder<E> outBody(Class<T> type) {
+ Expression<E> expression = ExpressionBuilder.<E, T>bodyExpression(type);
+ return new ValueBuilder<E>(expression);
+ }
+
+
+ /**
+ * Returns an expression for the given system property
+ */
+ public static <E extends Exchange> ValueBuilder<E> systemProperty(final String name) {
+ return systemProperty(name, null);
+ }
+
+ /**
+ * Returns an expression for the given system property
+ */
+ public static <E extends Exchange> ValueBuilder<E> systemProperty(final String name, final String defaultValue) {
+ return new ValueBuilder<E>(ExpressionBuilder.<E>systemProperty(name, defaultValue));
+ }
+}
Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/Builder.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java?view=diff&rev=531883&r1=531882&r2=531883
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java Tue Apr 24 04:34:31 2007
@@ -16,20 +16,20 @@
*/
package org.apache.camel.builder;
-import java.util.ArrayList;
-import java.util.List;
-
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
-import org.apache.camel.Expression;
import org.apache.camel.processor.LoggingLevel;
import org.apache.camel.processor.SendProcessor;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import java.util.ArrayList;
+import java.util.List;
+
/**
- * Base class for implementation inheritance
+ * Base class for implementation inheritance for different clauses in the
+ * <a href="http://activemq.apache.org/camel/dsl.html">Java DSL</a>
*
* @version $Revision: $
*/
@@ -50,87 +50,96 @@
}
}
- // Helper methods
+ // Builder methods
//-------------------------------------------------------------------------
/**
- * Resolves the given URI to an endpoint
+ * Returns a value builder for the given header
*/
@Fluent
- public Endpoint<E> endpoint(@FluentArg("uri") String uri) {
- return getContext().resolveEndpoint(uri);
+ public ValueBuilder<E> header(@FluentArg("name")String name) {
+ return Builder.<E>header(name);
}
/**
- * Resolves the list of URIs into a list of {@link Endpoint} instances
+ * Returns a predicate and value builder for the inbound body on an exchange
*/
@Fluent
- public List<Endpoint<E>> endpoints(@FluentArg("uris") String... uris) {
- List<Endpoint<E>> endpoints = new ArrayList<Endpoint<E>>();
- for (String uri : uris) {
- endpoints.add(endpoint(uri));
- }
- return endpoints;
+ public ValueBuilder<E> body() {
+ return Builder.<E>body();
}
/**
- * Helper method to create a list of {@link Endpoint} instances
+ * Returns a predicate and value builder for the inbound message body as a specific type
*/
@Fluent
- public List<Endpoint<E>> endpoints(@FluentArg("endpoints") Endpoint<E>... endpoints) {
- List<Endpoint<E>> answer = new ArrayList<Endpoint<E>>();
- for (Endpoint<E> endpoint : endpoints) {
- answer.add(endpoint);
- }
- return answer;
+ public <T> ValueBuilder<E> bodyAs(@FluentArg("class")Class<T> type) {
+ return Builder.<E, T>bodyAs(type);
}
- // Builder methods
- //-------------------------------------------------------------------------
+ /**
+ * Returns a predicate and value builder for the outbound body on an exchange
+ */
+ @Fluent
+ public ValueBuilder<E> outBody() {
+ return Builder.<E>outBody();
+ }
/**
- * Returns a predicate and value builder for headers on an exchange
+ * Returns a predicate and value builder for the outbound message body as a specific type
*/
@Fluent
- public ValueBuilder<E> header(@FluentArg("name") String name) {
- Expression<E> expression = ExpressionBuilder.headerExpression(name);
- return new ValueBuilder<E>(expression);
+ public <T> ValueBuilder<E> outBody(@FluentArg("class")Class<T> type) {
+ return Builder.<E, T>outBody(type);
}
/**
- * Returns a predicate and value builder for the inbound body on an exchange
+ * Returns a value builder for the given system property
*/
@Fluent
- public ValueBuilder<E> body() {
- Expression<E> expression = ExpressionBuilder.bodyExpression();
- return new ValueBuilder<E>(expression);
+ public ValueBuilder<E> systemProperty(@FluentArg("name")String name) {
+ return Builder.<E>systemProperty(name);
}
/**
- * Returns a predicate and value builder for the inbound message body as a specific type
+ * Returns a value builder for the given system property
*/
@Fluent
- public <T> ValueBuilder<E> bodyAs(@FluentArg("class") Class<T> type) {
- Expression<E> expression = ExpressionBuilder.bodyExpression(type);
- return new ValueBuilder<E>(expression);
+ public ValueBuilder<E> systemProperty(
+ @FluentArg("name")String name, @FluentArg("defaultValue")String defaultValue) {
+ return Builder.<E>systemProperty(name, defaultValue);
}
/**
- * Returns a predicate and value builder for the outbound body on an exchange
+ * Resolves the given URI to an endpoint
*/
@Fluent
- public ValueBuilder<E> outBody() {
- Expression<E> expression = ExpressionBuilder.bodyExpression();
- return new ValueBuilder<E>(expression);
+ public Endpoint<E> endpoint(@FluentArg("uri")String uri) {
+ return getContext().resolveEndpoint(uri);
}
/**
- * Returns a predicate and value builder for the outbound message body as a specific type
+ * Resolves the list of URIs into a list of {@link Endpoint} instances
*/
@Fluent
- public <T> ValueBuilder<E> outBody(@FluentArg("class") Class<T> type) {
- Expression<E> expression = ExpressionBuilder.bodyExpression(type);
- return new ValueBuilder<E>(expression);
+ public List<Endpoint<E>> endpoints(@FluentArg("uris")String... uris) {
+ List<Endpoint<E>> endpoints = new ArrayList<Endpoint<E>>();
+ for (String uri : uris) {
+ endpoints.add(endpoint(uri));
+ }
+ return endpoints;
+ }
+
+ /**
+ * Helper method to create a list of {@link Endpoint} instances
+ */
+ @Fluent
+ public List<Endpoint<E>> endpoints(@FluentArg("endpoints")Endpoint<E>... endpoints) {
+ List<Endpoint<E>> answer = new ArrayList<Endpoint<E>>();
+ for (Endpoint<E> endpoint : endpoints) {
+ answer.add(endpoint);
+ }
+ return answer;
}
/**
@@ -153,7 +162,7 @@
* Creates an error handler which just logs errors
*/
@Fluent
- public LoggingErrorHandlerBuilder<E> loggingErrorHandler(@FluentArg("log") String log) {
+ public LoggingErrorHandlerBuilder<E> loggingErrorHandler(@FluentArg("log")String log) {
return loggingErrorHandler(LogFactory.getLog(log));
}
@@ -161,7 +170,7 @@
* Creates an error handler which just logs errors
*/
@Fluent
- public LoggingErrorHandlerBuilder<E> loggingErrorHandler(@FluentArg("log") Log log) {
+ public LoggingErrorHandlerBuilder<E> loggingErrorHandler(@FluentArg("log")Log log) {
return new LoggingErrorHandlerBuilder<E>(log);
}
@@ -169,7 +178,8 @@
* Creates an error handler which just logs errors
*/
@Fluent
- public LoggingErrorHandlerBuilder<E> loggingErrorHandler(@FluentArg("log") Log log, @FluentArg("level") LoggingLevel level) {
+ public LoggingErrorHandlerBuilder<E> loggingErrorHandler(
+ @FluentArg("log")Log log, @FluentArg("level")LoggingLevel level) {
return new LoggingErrorHandlerBuilder<E>(log, level);
}
@@ -179,12 +189,12 @@
}
@Fluent
- public DeadLetterChannelBuilder<E> deadLetterChannel(@FluentArg("uri") String deadLetterUri) {
+ public DeadLetterChannelBuilder<E> deadLetterChannel(@FluentArg("uri")String deadLetterUri) {
return deadLetterChannel(endpoint(deadLetterUri));
}
@Fluent
- public DeadLetterChannelBuilder<E> deadLetterChannel(@FluentArg("endpoint") Endpoint<E> deadLetterEndpoint) {
+ public DeadLetterChannelBuilder<E> deadLetterChannel(@FluentArg("endpoint")Endpoint<E> deadLetterEndpoint) {
return new DeadLetterChannelBuilder<E>(new SendProcessor<E>(deadLetterEndpoint));
}
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java?view=diff&rev=531883&r1=531882&r2=531883
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java Tue Apr 24 04:34:31 2007
@@ -162,11 +162,11 @@
}
public static <E extends Exchange> Predicate<E> isNull(final Expression<E> expression) {
- return isEqualTo(expression, (Expression<E>) ExpressionBuilder.constantExpression(null));
+ return isEqualTo(expression, ExpressionBuilder.<E>constantExpression(null));
}
public static <E extends Exchange> Predicate<E> isNotNull(final Expression<E> expression) {
- return isNotEqualTo(expression, (Expression<E>) ExpressionBuilder.constantExpression(null));
+ return isNotEqualTo(expression, ExpressionBuilder.<E>constantExpression(null));
}
public static <E extends Exchange> Predicate<E> isInstanceOf(final Expression<E> expression, final Class type) {
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java?view=diff&rev=531883&r1=531882&r2=531883
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java Tue Apr 24 04:34:31 2007
@@ -31,59 +31,61 @@
public ValueBuilder(Expression<E> expression) {
this.expression = expression;
}
-
+
public Expression<E> getExpression() {
return expression;
}
-
public Expression<E> createExpression() {
return expression;
}
+ // Predicate builders
+ //-------------------------------------------------------------------------
+
@Fluent
- public Predicate<E> isNotEqualTo(@FluentArg("value") Object value) {
- Expression<E> right = ExpressionBuilder.constantExpression(value);
+ public Predicate<E> isNotEqualTo(@FluentArg("value")Object value) {
+ Expression<E> right = asExpression(value);
return onNewPredicate(PredicateBuilder.isNotEqualTo(expression, right));
}
@Fluent
- public Predicate<E> isEqualTo(@FluentArg("value") Object value) {
- Expression<E> right = ExpressionBuilder.constantExpression(value);
+ public Predicate<E> isEqualTo(@FluentArg("value")Object value) {
+ Expression<E> right = asExpression(value);
return onNewPredicate(PredicateBuilder.isEqualTo(expression, right));
}
@Fluent
- public Predicate<E> isLessThan(@FluentArg("value") Object value) {
- Expression<E> right = ExpressionBuilder.constantExpression(value);
+ public Predicate<E> isLessThan(@FluentArg("value")Object value) {
+ Expression<E> right = asExpression(value);
return onNewPredicate(PredicateBuilder.isLessThan(expression, right));
}
@Fluent
- public Predicate<E> isLessThanOrEqualTo(@FluentArg("value") Object value) {
- Expression<E> right = ExpressionBuilder.constantExpression(value);
+ public Predicate<E> isLessThanOrEqualTo(@FluentArg("value")Object value) {
+ Expression<E> right = asExpression(value);
return onNewPredicate(PredicateBuilder.isLessThanOrEqualTo(expression, right));
}
@Fluent
- public Predicate<E> isGreaterThan(@FluentArg("value") Object value) {
- Expression<E> right = ExpressionBuilder.constantExpression(value);
+ public Predicate<E> isGreaterThan(@FluentArg("value")Object value) {
+ Expression<E> right = asExpression(value);
return onNewPredicate(PredicateBuilder.isGreaterThan(expression, right));
}
@Fluent
- public Predicate<E> isGreaterThanOrEqualTo(@FluentArg("value") Object value) {
- Expression<E> right = ExpressionBuilder.constantExpression(value);
+ public Predicate<E> isGreaterThanOrEqualTo(@FluentArg("value")Object value) {
+ Expression<E> right = asExpression(value);
return onNewPredicate(PredicateBuilder.isGreaterThanOrEqualTo(expression, right));
}
@Fluent
- public Predicate<E> isInstanceOf(@FluentArg("class") Class type) {
+ public Predicate<E> isInstanceOf(@FluentArg("class")Class type) {
return onNewPredicate(PredicateBuilder.isInstanceOf(expression, type));
}
@Fluent
- public Predicate<E> matchesRegex(@FluentArg("regex") String regex) {
+ public Predicate<E> matchesRegex(@FluentArg("regex")String regex) {
return onNewPredicate(PredicateBuilder.regex(expression, regex));
}
@@ -97,25 +99,68 @@
return onNewPredicate(PredicateBuilder.isNotNull(expression));
}
+ /**
+ * Creates a predicate which is true if this expression matches the given regular expression
+ *
+ * @param regex the regular expression to match
+ * @return a predicate which evaluates to true if the expression matches the regex
+ */
+ @Fluent
+ public Predicate<E> regex(String regex) {
+ return onNewPredicate(PredicateBuilder.regex(expression, regex));
+ }
+
+
+ // Transformers
+ //-------------------------------------------------------------------------
+
@Fluent
public ValueBuilder<E> tokenize() {
return tokenize("\n");
}
@Fluent
- public ValueBuilder<E> tokenize(@FluentArg("token") String token) {
+ public ValueBuilder<E> tokenize(@FluentArg("token")String token) {
Expression<E> newExp = ExpressionBuilder.tokenizeExpression(expression, token);
return new ValueBuilder<E>(newExp);
}
/**
+ * Tokenizes the string conversion of this expression using the given regular expression
+ */
+ @Fluent
+ public ValueBuilder<E> regexTokenize(@FluentArg("regex")String regex) {
+ Expression<E> newExp = ExpressionBuilder.regexTokenize(expression, regex);
+ return new ValueBuilder<E>(newExp);
+ }
+
+ /**
+ * Replaces all occurrencies of the regular expression with the given replacement
+ */
+ @Fluent
+ public ValueBuilder<E> regexReplaceAll(@FluentArg("regex")String regex, @FluentArg("replacement")String replacement) {
+ Expression<E> newExp = ExpressionBuilder.regexReplaceAll(expression, regex, replacement);
+ return new ValueBuilder<E>(newExp);
+ }
+
+ /**
+ * Replaces all occurrencies of the regular expression with the given replacement
+ */
+ @Fluent
+ public ValueBuilder<E> regexReplaceAll(@FluentArg("regex")String regex, @FluentArg("replacement")Expression<E> replacement) {
+ Expression<E> newExp = ExpressionBuilder.regexReplaceAll(expression, regex, replacement);
+ return new ValueBuilder<E>(newExp);
+ }
+
+
+ /**
* Converts the current value to the given type using the registered type converters
*
* @param type the type to convert the value to
* @return the current builder
*/
@Fluent
- public ValueBuilder<E> convertTo(@FluentArg("type") Class type) {
+ public ValueBuilder<E> convertTo(@FluentArg("type")Class type) {
Expression<E> newExp = ExpressionBuilder.convertTo(expression, type);
return new ValueBuilder<E>(newExp);
}
@@ -130,6 +175,10 @@
return convertTo(String.class);
}
+
+ // Implementation methods
+ //-------------------------------------------------------------------------
+
/**
* A stategy method to allow derived classes to deal with the newly created predicate
* in different ways
@@ -137,4 +186,18 @@
protected Predicate<E> onNewPredicate(Predicate<E> predicate) {
return predicate;
}
+
+ protected Expression<E> asExpression(Object value) {
+ if (value instanceof Expression) {
+ return (Expression<E>) value;
+ }
+ else if (value instanceof ExpressionFactory) {
+ ExpressionFactory expressionFactory = (ExpressionFactory) value;
+ return expressionFactory.createExpression();
+ }
+ else {
+ return ExpressionBuilder.constantExpression(value);
+ }
+ }
+
}
Modified: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/TestSupport.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/TestSupport.java?view=diff&rev=531883&r1=531882&r2=531883
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/TestSupport.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/TestSupport.java Tue Apr 24 04:34:31 2007
@@ -76,12 +76,35 @@
/**
* Asserts that the predicate returns the expected value on the exchange
*/
- protected boolean assertPredicate(Predicate expression, Exchange exchange, boolean expected) {
- boolean value = expression.matches(exchange);
+ protected void assertPredicateMatches(Predicate predicate, Exchange exchange) {
+ assertPredicate(predicate, exchange, true);
+ }
- log.debug("Evaluated predicate: " + expression + " on exchange: " + exchange + " result: " + value);
+ /**
+ * Asserts that the predicate returns the expected value on the exchange
+ */
+ protected void assertPredicateDoesNotMatch(Predicate predicate, Exchange exchange) {
+ try {
+ predicate.assertMatches("Predicate should match", exchange);
+ }
+ catch (AssertionError e) {
+ log.debug("Caught expected assertion error: " + e);
+ }
+ assertPredicate(predicate, exchange, false);
+ }
- assertEquals("Predicate: " + expression + " on Exchange: " + exchange, expected, value);
+ /**
+ * Asserts that the predicate returns the expected value on the exchange
+ */
+ protected boolean assertPredicate(Predicate predicate, Exchange exchange, boolean expected) {
+ if (expected) {
+ predicate.assertMatches("Predicate failed", exchange);
+ }
+ boolean value = predicate.matches(exchange);
+
+ log.debug("Evaluated predicate: " + predicate + " on exchange: " + exchange + " result: " + value);
+
+ assertEquals("Predicate: " + predicate + " on Exchange: " + exchange, expected, value);
return value;
}
Modified: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/PredicateBuilderTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/PredicateBuilderTest.java?view=diff&rev=531883&r1=531882&r2=531883
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/PredicateBuilderTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/PredicateBuilderTest.java Tue Apr 24 04:34:31 2007
@@ -17,16 +17,13 @@
*/
package org.apache.camel.builder;
-import org.apache.camel.TestSupport;
import org.apache.camel.Exchange;
-import org.apache.camel.Expression;
-import org.apache.camel.Predicate;
import org.apache.camel.Message;
-import static org.apache.camel.builder.PredicateBuilder.*;
-import org.apache.camel.impl.DefaultExchange;
+import org.apache.camel.Predicate;
+import org.apache.camel.TestSupport;
+import static org.apache.camel.builder.Builder.*;
import org.apache.camel.impl.DefaultCamelContext;
-
-import java.util.Arrays;
+import org.apache.camel.impl.DefaultExchange;
/**
* @version $Revision$
@@ -34,14 +31,18 @@
public class PredicateBuilderTest extends TestSupport {
protected Exchange exchange = new DefaultExchange(new DefaultCamelContext());
- public void testRegexTokenize() throws Exception {
- Expression<Exchange> locationHeader = ExpressionBuilder.headerExpression("location");
+ public void testRegexPredicates() throws Exception {
+ assertMatches(header("location").regex("[a-zA-Z]+,London,UK"));
+ assertDoesNotMatch(header("location").regex("[a-zA-Z]+,Westminster,[a-zA-Z]+"));
+ }
- Predicate<Exchange> predicate = regex(locationHeader, "[a-zA-Z]+,London,UK");
- assertPredicate(predicate, exchange, true);
+ public void testPredicates() throws Exception {
+ assertMatches(header("name").isEqualTo(constant("James")));
+ }
- predicate = regex(locationHeader, "[a-zA-Z]+,Westminster,[a-zA-Z]+");
- assertPredicate(predicate, exchange, false);
+ public void testFailingPredicates() throws Exception {
+ assertDoesNotMatch(header("name").isEqualTo(constant("Hiram")));
+ assertDoesNotMatch(header("size").isGreaterThan(constant(100)));
}
@Override
@@ -51,5 +52,15 @@
in.setBody("Hello there!");
in.setHeader("name", "James");
in.setHeader("location", "Islington,London,UK");
+ in.setHeader("size", 10);
+ }
+
+ protected void assertMatches(Predicate<Exchange> predicate) {
+ assertPredicateMatches(predicate, exchange);
}
+
+ protected void assertDoesNotMatch(Predicate<Exchange> predicate) {
+ assertPredicateDoesNotMatch(predicate, exchange);
+ }
+
}