You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by js...@apache.org on 2007/06/07 07:56:06 UTC
svn commit: r545076 - in
/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel:
builder/ExpressionBuilder.java builder/FromBuilder.java
builder/ResequencerBuilder.java processor/Resequencer.java
util/ExpressionListComparator.java
Author: jstrachan
Date: Wed Jun 6 22:56:05 2007
New Revision: 545076
URL: http://svn.apache.org/viewvc?view=rev&rev=545076
Log:
allow the resequencer and comparator to take a list of expressions
Added:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExpressionListComparator.java
- copied, changed from r541717, activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExpressionComparator.java
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FromBuilder.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ResequencerBuilder.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Resequencer.java
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java?view=diff&rev=545076&r1=545075&r2=545076
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java Wed Jun 6 22:56:05 2007
@@ -47,6 +47,7 @@
}
return header;
}
+
@Override
public String toString() {
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FromBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FromBuilder.java?view=diff&rev=545076&r1=545075&r2=545076
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FromBuilder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FromBuilder.java Wed Jun 6 22:56:05 2007
@@ -36,6 +36,7 @@
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
/**
@@ -220,11 +221,40 @@
* @param expression the expression on which to compare messages in order
* @return the builder
*/
+ public ResequencerBuilder resequencer(Expression<Exchange> expression) {
+ return resequencer(Collections.<Expression<Exchange>>singletonList(expression));
+ }
+
+ /**
+ * A builder for the <a href="http://activemq.apache.org/camel/resequencer.html">Resequencer</a> pattern
+ * where a list of expressions are evaluated to be able to compare the message exchanges to reorder them. e.g. you
+ * may wish to sort by some headers
+ *
+ * @param expressions the expressions on which to compare messages in order
+ * @return the builder
+ */
@Fluent
- public ResequencerBuilder resequencer(@FluentArg(value = "expression")Expression expression) {
- ResequencerBuilder answer = new ResequencerBuilder(this, expression);
- setRouteBuilder(answer);
+ public ResequencerBuilder resequencer(@FluentArg(value = "expressions")List<Expression<Exchange>> expressions) {
+ ResequencerBuilder answer = new ResequencerBuilder(this, expressions);
+ setRouteBuilder(answer);
return answer;
+ }
+
+ /**
+ * A builder for the <a href="http://activemq.apache.org/camel/resequencer.html">Resequencer</a> pattern
+ * where a list of expressions are evaluated to be able to compare the message exchanges to reorder them. e.g. you
+ * may wish to sort by some headers
+ *
+ * @param expressions the expressions on which to compare messages in order
+ * @return the builder
+ */
+ @Fluent
+ public ResequencerBuilder resequencer(Expression<Exchange>... expressions) {
+ List<Expression<Exchange>> list = new ArrayList<Expression<Exchange>>();
+ for (Expression<Exchange> expression : expressions) {
+ list.add(expression);
+ }
+ return resequencer(list);
}
/**
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ResequencerBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ResequencerBuilder.java?view=diff&rev=545076&r1=545075&r2=545076
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ResequencerBuilder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ResequencerBuilder.java Wed Jun 6 22:56:05 2007
@@ -30,19 +30,19 @@
* @version $Revision: 1.1 $
*/
public class ResequencerBuilder extends FromBuilder {
- private final Expression expression;
+ private final List<Expression<Exchange>> expressions;
private long batchTimeout = 1000L;
private int batchSize = 100;
- public ResequencerBuilder(FromBuilder builder, Expression expression) {
+ public ResequencerBuilder(FromBuilder builder, List<Expression<Exchange>> expressions) {
super(builder);
- this.expression = expression;
+ this.expressions = expressions;
}
@Override
public Route createRoute() throws Exception {
final Processor processor = super.createProcessor();
- final Resequencer resequencer = new Resequencer(getFrom(), processor, expression);
+ final Resequencer resequencer = new Resequencer(getFrom(), processor, expressions);
return new Route<Exchange>(getFrom()) {
protected void addServices(List<Service> list) throws Exception {
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Resequencer.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Resequencer.java?view=diff&rev=545076&r1=545075&r2=545076
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Resequencer.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Resequencer.java Wed Jun 6 22:56:05 2007
@@ -26,12 +26,14 @@
import org.apache.camel.impl.ServiceSupport;
import org.apache.camel.spi.ExceptionHandler;
import org.apache.camel.util.ExpressionComparator;
+import org.apache.camel.util.ExpressionListComparator;
import org.apache.camel.util.ServiceHelper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.Comparator;
import java.util.Iterator;
+import java.util.List;
import java.util.Set;
import java.util.TreeSet;
@@ -54,6 +56,10 @@
this(endpoint, processor, createSet(expression));
}
+ public Resequencer(Endpoint endpoint, Processor processor, List<Expression<Exchange>> expressions) {
+ this(endpoint, processor, createSet(expressions));
+ }
+
public Resequencer(Endpoint endpoint, Processor processor, Set<Exchange> set) {
this.endpoint = endpoint;
this.processor = processor;
@@ -155,7 +161,17 @@
}
protected static Set<Exchange> createSet(Expression<Exchange> expression) {
- Comparator<? super Exchange> comparator = new ExpressionComparator<Exchange>(expression);
+ return createSet(new ExpressionComparator<Exchange>(expression));
+ }
+
+ protected static Set<Exchange> createSet(List<Expression<Exchange>> expressions) {
+ if (expressions.size() == 1) {
+ return createSet(expressions.get(0));
+ }
+ return createSet(new ExpressionListComparator<Exchange>(expressions));
+ }
+
+ protected static Set<Exchange> createSet(Comparator<? super Exchange> comparator) {
return new TreeSet<Exchange>(comparator);
}
}
Copied: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExpressionListComparator.java (from r541717, activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExpressionComparator.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExpressionListComparator.java?view=diff&rev=545076&p1=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExpressionComparator.java&r1=541717&p2=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExpressionListComparator.java&r2=545076
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExpressionComparator.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExpressionListComparator.java Wed Jun 6 22:56:05 2007
@@ -21,23 +21,31 @@
import org.apache.camel.Expression;
import java.util.Comparator;
+import java.util.List;
/**
- * An implementation of {@link Comparator} which takes an {@link Expression} which is evaluated
- * on each exchange to compare
- *
+ * An implementation of {@link java.util.Comparator} which takes a list of
+ * {@link org.apache.camel.Expression} objects which is evaluated
+ * on each exchange to compare them
+ *
* @version $Revision: 1.1 $
*/
-public class ExpressionComparator<E extends Exchange> implements Comparator<E> {
- private final Expression<E> expression;
+public class ExpressionListComparator<E extends Exchange> implements Comparator<E> {
+ private final List<Expression<E>> expressions;
- public ExpressionComparator(Expression<E> expression) {
- this.expression = expression;
+ public ExpressionListComparator(List<Expression<E>> expressions) {
+ this.expressions = expressions;
}
public int compare(E e1, E e2) {
- Object o1 = expression.evaluate(e1);
- Object o2 = expression.evaluate(e2);
- return ObjectHelper.compare(o1, o2);
+ for (Expression<E> expression : expressions) {
+ Object o1 = expression.evaluate(e1);
+ Object o2 = expression.evaluate(e2);
+ int answer = ObjectHelper.compare(o1, o2);
+ if (answer != 0) {
+ return answer;
+ }
+ }
+ return 0;
}
-}
+}
\ No newline at end of file