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/03/19 13:22:21 UTC
svn commit: r519925 - in /activemq/camel/trunk/camel-core/src:
main/java/org/apache/camel/ main/java/org/apache/camel/builder/
main/java/org/apache/camel/impl/ main/java/org/apache/camel/util/
test/java/org/apache/camel/
Author: jstrachan
Date: Mon Mar 19 05:22:20 2007
New Revision: 519925
URL: http://svn.apache.org/viewvc?view=rev&rev=519925
Log:
improved the test case and fixed the predicate based routes
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/FilterProcessor.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Predicates.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ConfiguredDestinationBuilder.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DestinationBuilder.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/ProcessorBuilder.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpoint.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/RouteBuilderTest.java
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/FilterProcessor.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/FilterProcessor.java?view=diff&rev=519925&r1=519924&r2=519925
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/FilterProcessor.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/FilterProcessor.java Mon Mar 19 05:22:20 2007
@@ -39,4 +39,12 @@
public String toString() {
return "if (" + predicate + ") " + processor;
}
+
+ public Predicate<E> getPredicate() {
+ return predicate;
+ }
+
+ public Processor<E> getProcessor() {
+ return processor;
+ }
}
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Predicates.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Predicates.java?view=diff&rev=519925&r1=519924&r2=519925
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Predicates.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/Predicates.java Mon Mar 19 05:22:20 2007
@@ -16,25 +16,20 @@
*/
package org.apache.camel;
+import org.apache.camel.util.ObjectHelper;
+
/**
* A helper class for working with predicates
*
* @version $Revision$
*/
public class Predicates {
-
- public static void notNull(Object value, String name) {
- if (value == null) {
- throw new NullPointerException("No " + name + " specified");
- }
- }
-
/**
* A helper method to combine multiple predicates by a logical AND
*/
public static <E> Predicate<E> and(final Predicate<E> left, final Predicate<E> right) {
- notNull(left, "left");
- notNull(right, "right");
+ ObjectHelper.notNull(left, "left");
+ ObjectHelper.notNull(right, "right");
return new Predicate<E>() {
public boolean evaluate(E exchange) {
return left.evaluate(exchange) && right.evaluate(exchange);
@@ -46,8 +41,8 @@
* A helper method to combine multiple predicates by a logical OR
*/
public static <E> Predicate<E> or(final Predicate<E> left, final Predicate<E> right) {
- notNull(left, "left");
- notNull(right, "right");
+ ObjectHelper.notNull(left, "left");
+ ObjectHelper.notNull(right, "right");
return new Predicate<E>() {
public boolean evaluate(E exchange) {
return left.evaluate(exchange) || right.evaluate(exchange);
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ConfiguredDestinationBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ConfiguredDestinationBuilder.java?view=diff&rev=519925&r1=519924&r2=519925
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ConfiguredDestinationBuilder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ConfiguredDestinationBuilder.java Mon Mar 19 05:22:20 2007
@@ -34,7 +34,7 @@
}
@Override
- public Processor<E> createProcessor() {
- return new SendProcessor<E>(destination);
+ public void createProcessors() {
+ getParent().addProcessor(new SendProcessor<E>(destination));
}
}
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DestinationBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DestinationBuilder.java?view=diff&rev=519925&r1=519924&r2=519925
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DestinationBuilder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DestinationBuilder.java Mon Mar 19 05:22:20 2007
@@ -17,30 +17,34 @@
package org.apache.camel.builder;
import org.apache.camel.Endpoint;
-import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.Exchange;
import org.apache.camel.Predicate;
import org.apache.camel.Processor;
-import org.apache.camel.builder.ProcessorBuilder;
-import java.util.List;
import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
/**
* @version $Revision$
*/
public class DestinationBuilder<E extends Exchange> implements ProcessorBuilder<E> {
+ private DestinationBuilder<E> parent;
private RouteBuilder<E> builder;
private Endpoint<E> from;
+ private List<Processor<E>> processors = new ArrayList<Processor<E>>();
private List<ProcessorBuilder<E>> processBuilders = new ArrayList<ProcessorBuilder<E>>();
- public DestinationBuilder(DestinationBuilder<E> parent) {
- this(parent.getBuilder(), parent.getFrom());
- }
-
public DestinationBuilder(RouteBuilder builder, Endpoint<E> from) {
this.builder = builder;
this.from = from;
+ this.parent = this;
+ }
+
+ public DestinationBuilder(DestinationBuilder<E> parent) {
+ this.parent = parent;
+ this.builder = parent.getBuilder();
+ this.from = parent.getFrom();
}
/**
@@ -50,6 +54,10 @@
return getBuilder().endpoint(uri);
}
+ public DestinationBuilder<E> getParent() {
+ return parent;
+ }
+
/**
* Sends the exchange to the given endpoint URI
*/
@@ -62,7 +70,7 @@
*/
public ProcessorBuilder<E> to(Endpoint<E> endpoint) {
ConfiguredDestinationBuilder<E> answer = new ConfiguredDestinationBuilder<E>(this, endpoint);
- builder.addRoute(answer);
+ parent.addProcessBuilder(answer);
return answer;
}
@@ -95,5 +103,19 @@
public Processor<E> createProcessor() {
throw new UndefinedDestinationException();
+ }
+
+ public void addProcessor(Processor<E> processor) {
+ processors.add(processor);
+ }
+
+ public void createProcessors() {
+ for (ProcessorBuilder<E> processBuilder : processBuilders) {
+ processBuilder.createProcessors();
+ }
+ }
+
+ public List<Processor<E>> getProcessors() {
+ return processors;
}
}
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=519925&r1=519924&r2=519925
==============================================================================
--- 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 Mon Mar 19 05:22:20 2007
@@ -19,6 +19,8 @@
import org.apache.camel.Predicate;
import org.apache.camel.Exchange;
import org.apache.camel.Predicates;
+import org.apache.camel.Processor;
+import org.apache.camel.FilterProcessor;
/**
* @version $Revision$
@@ -49,5 +51,9 @@
public Predicate<E> getPredicate() {
return predicate;
+ }
+
+ public void addProcessor(Processor<E> processor) {
+ getParent().addProcessor(new FilterProcessor(predicate, processor));
}
}
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ProcessorBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ProcessorBuilder.java?view=diff&rev=519925&r1=519924&r2=519925
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ProcessorBuilder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ProcessorBuilder.java Mon Mar 19 05:22:20 2007
@@ -16,17 +16,11 @@
*/
package org.apache.camel.builder;
-import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
-import org.apache.camel.Predicate;
-import org.apache.camel.Processor;
-import org.apache.camel.Predicates;
-import org.apache.camel.builder.DestinationBuilder;
/**
* @version $Revision$
*/
public interface ProcessorBuilder<E extends Exchange> {
-
- public Processor<E> createProcessor();
+ public void createProcessors();
}
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java?view=diff&rev=519925&r1=519924&r2=519925
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java Mon Mar 19 05:22:20 2007
@@ -20,12 +20,14 @@
import org.apache.camel.EndpointResolver;
import org.apache.camel.Exchange;
import org.apache.camel.Predicate;
-import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.Processor;
import org.apache.camel.impl.DefaultEndpointResolver;
-import org.apache.camel.builder.DestinationBuilder;
+import org.apache.camel.util.ObjectHelper;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
/**
@@ -34,10 +36,10 @@
* @version $Revision$
*/
public abstract class RouteBuilder<E extends Exchange> {
-
private EndpointResolver<E> endpointResolver;
private List<DestinationBuilder<E>> destinationBuilders = new ArrayList<DestinationBuilder<E>>();
private AtomicBoolean initalized = new AtomicBoolean(false);
+ private Map<Endpoint<E>, List<Processor<E>>> routeMap = new HashMap<Endpoint<E>, List<Processor<E>>>();
/**
* Called on initialisation to to build the required destinationBuilders
@@ -56,14 +58,11 @@
}
public DestinationBuilder<E> from(Endpoint<E> endpoint) {
- return new DestinationBuilder<E>(this, endpoint);
- }
-
- public void addRoute(DestinationBuilder<E> destinationBuilder) {
- destinationBuilders.add(destinationBuilder);
+ DestinationBuilder<E> answer = new DestinationBuilder<E>(this, endpoint);
+ destinationBuilders.add(answer);
+ return answer;
}
-
// Helper methods
//-----------------------------------------------------------------------
public Predicate<E> headerEquals(final String header, final Object value) {
@@ -71,6 +70,11 @@
public boolean evaluate(E exchange) {
return ObjectHelper.equals(value, exchange.getHeader(header));
}
+
+ @Override
+ public String toString() {
+ return "header[" + header + "] == " + value;
+ }
};
}
@@ -78,9 +82,17 @@
//-----------------------------------------------------------------------
/**
+ * Returns the routing map from inbound endpoints to processors
+ */
+ public Map<Endpoint<E>, List<Processor<E>>> getRouteMap() {
+ checkInitialized();
+ return routeMap;
+ }
+
+ /**
* Returns the destinationBuilders which have been created
*/
- public List<DestinationBuilder<E>> getRoutes() {
+ public List<DestinationBuilder<E>> getDestinationBuilders() {
checkInitialized();
return destinationBuilders;
}
@@ -105,7 +117,16 @@
protected void checkInitialized() {
if (initalized.compareAndSet(false, true)) {
configure();
+ populateRouteMap(routeMap);
}
}
+ protected void populateRouteMap(Map<Endpoint<E>, List<Processor<E>>> routeMap) {
+ for (DestinationBuilder<E> destinationBuilder : destinationBuilders) {
+ Endpoint<E> from = destinationBuilder.getFrom();
+ destinationBuilder.createProcessors();
+ List<Processor<E>> processors = destinationBuilder.getProcessors();
+ routeMap.put(from, processors);
+ }
+ }
}
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpoint.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpoint.java?view=diff&rev=519925&r1=519924&r2=519925
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpoint.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultEndpoint.java Mon Mar 19 05:22:20 2007
@@ -19,6 +19,7 @@
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.ExchangeConverter;
+import org.apache.camel.util.ObjectHelper;
/**
* @version $Revision$
@@ -30,6 +31,24 @@
protected DefaultEndpoint(String endpointUri, ExchangeConverter exchangeConverter) {
this.endpointUri = endpointUri;
this.exchangeConverter = exchangeConverter;
+ }
+
+ public int hashCode() {
+ return endpointUri.hashCode() * 37 + 1;
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (object instanceof DefaultEndpoint) {
+ DefaultEndpoint that = (DefaultEndpoint) object;
+ return ObjectHelper.equals(this.endpointUri, that.endpointUri);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return "Endpoint[" + endpointUri + "]";
}
public String getEndpointUri() {
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java?view=diff&rev=519925&r1=519924&r2=519925
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java Mon Mar 19 05:22:20 2007
@@ -26,4 +26,10 @@
}
return a != null && b != null && a.equals(b);
}
+
+ public static void notNull(Object value, String name) {
+ if (value == null) {
+ throw new NullPointerException("No " + name + " specified");
+ }
+ }
}
Modified: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/RouteBuilderTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/RouteBuilderTest.java?view=diff&rev=519925&r1=519924&r2=519925
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/RouteBuilderTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/RouteBuilderTest.java Mon Mar 19 05:22:20 2007
@@ -21,6 +21,8 @@
import org.apache.camel.builder.RouteBuilder;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
/**
* @version $Revision$
@@ -28,19 +30,27 @@
public class RouteBuilderTest extends TestCase {
public void testSimpleRoute() throws Exception {
- RouteBuilder builder = new RouteBuilder() {
+ RouteBuilder<Exchange> builder = new RouteBuilder<Exchange>() {
public void configure() {
from("seda://a").to("seda://b");
}
};
- List<DestinationBuilder> destinationBuilders = builder.getRoutes();
- assertEquals("Number or destinationBuilders created", 1, destinationBuilders.size());
- DestinationBuilder destinationBuilder = destinationBuilders.get(0);
- Processor processor = destinationBuilder.createProcessor();
- assertTrue("Processor should be a SendProcessor but was: " + processor + " with type: " + processor.getClass().getName(), processor instanceof SendProcessor);
- SendProcessor sendProcessor = (SendProcessor) processor;
- assertEquals("Endpoint URI", "seda://b", sendProcessor.getDestination().getEndpointUri());
+ Map<Endpoint<Exchange>, List<Processor<Exchange>>> routeMap = builder.getRouteMap();
+ Set<Map.Entry<Endpoint<Exchange>, List<Processor<Exchange>>>> routes = routeMap.entrySet();
+ assertEquals("Number routes created", 1, routes.size());
+ for (Map.Entry<Endpoint<Exchange>, List<Processor<Exchange>>> route : routes) {
+ Endpoint<Exchange> key = route.getKey();
+ assertEquals("From endpoint", "seda://a", key.getEndpointUri());
+ List<Processor<Exchange>> processors = route.getValue();
+
+ assertEquals("Number of processors", 1, processors.size());
+ Processor processor = processors.get(0);
+
+ assertTrue("Processor should be a SendProcessor but was: " + processor + " with type: " + processor.getClass().getName(), processor instanceof SendProcessor);
+ SendProcessor sendProcessor = (SendProcessor) processor;
+ assertEquals("Endpoint URI", "seda://b", sendProcessor.getDestination().getEndpointUri());
+ }
}
@@ -50,6 +60,26 @@
from("seda://a").filter(headerEquals("foo", "bar")).to("seda://b");
}
};
+
+ Map<Endpoint<Exchange>, List<Processor<Exchange>>> routeMap = builder.getRouteMap();
+ Set<Map.Entry<Endpoint<Exchange>, List<Processor<Exchange>>>> routes = routeMap.entrySet();
+ assertEquals("Number routes created", 1, routes.size());
+ for (Map.Entry<Endpoint<Exchange>, List<Processor<Exchange>>> route : routes) {
+ Endpoint<Exchange> key = route.getKey();
+ assertEquals("From endpoint", "seda://a", key.getEndpointUri());
+ List<Processor<Exchange>> processors = route.getValue();
+
+ assertEquals("Number of processors", 1, processors.size());
+ Processor processor = processors.get(0);
+
+ assertTrue("Processor should be a FilterProcessor but was: " + processor + " with type: " + processor.getClass().getName(), processor instanceof FilterProcessor);
+ FilterProcessor filterProcessor = (FilterProcessor) processor;
+
+ SendProcessor sendProcessor = (SendProcessor) filterProcessor.getProcessor();
+ assertEquals("Endpoint URI", "seda://b", sendProcessor.getDestination().getEndpointUri());
+ }
+
+ System.out.println("Created map: " + routeMap);
}
public void testSimpleRouteWithChoice() throws Exception {