Author: davsclaus
Date: Sun Jul 10 09:24:54 2011
New Revision: 1144796

URL: http://svn.apache.org/viewvc?rev=1144796&view=rev
Log:
CAMEL-4205: Added whenDoneByIndex to NotifyBuilder.

Added:
    
camel/trunk/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderWhenDoneByIndexTest.java
   (contents, props changed)
      - copied, changed from r1144788, 
camel/trunk/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderTest.java
Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NotifyBuilder.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NotifyBuilder.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NotifyBuilder.java?rev=1144796&r1=1144795&r2=1144796&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NotifyBuilder.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NotifyBuilder.java
 Sun Jul 10 09:24:54 2011
@@ -316,6 +316,65 @@ public class NotifyBuilder {
     }
 
     /**
+     * Sets a condition when tne <tt>n'th</tt> (by index) {@link Exchange} is 
done being processed.
+     * <p/>
+     * The difference between <i>done</i> and <i>completed</i> is that done 
can also include failed
+     * messages, where as completed is only successful processed messages.
+     *
+     * @param index the message by index to be done
+     * @return the builder
+     */
+    public NotifyBuilder whenDoneByIndex(final int index) {
+        stack.add(new EventPredicateSupport() {
+            private int current;
+            private String id;
+            private boolean done;
+
+            @Override
+            public boolean onExchangeCreated(Exchange exchange) {
+                if (current == index) {
+                    id = exchange.getExchangeId();
+                }
+                current++;
+                return true;
+            }
+
+            @Override
+            public boolean onExchangeCompleted(Exchange exchange) {
+                if (exchange.getExchangeId().equals(id)) {
+                    done = true;
+                }
+                return true;
+            }
+
+            @Override
+            public boolean onExchangeFailed(Exchange exchange) {
+                if (exchange.getExchangeId().equals(id)) {
+                    done = true;
+                }
+                return true;
+            }
+
+            public boolean matches() {
+                return done;
+            }
+
+            @Override
+            public void reset() {
+                current = 0;
+                id = null;
+                done = false;
+            }
+
+            @Override
+            public String toString() {
+                return "whenDoneByIndex(" + index + ")";
+            }
+        });
+        return this;
+    }
+
+    /**
      * Sets a condition when <tt>number</tt> of {@link Exchange} has been 
completed.
      * <p/>
      * The number matching is <i>at least</i> based which means that if more 
messages received

Copied: 
camel/trunk/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderWhenDoneByIndexTest.java
 (from r1144788, 
camel/trunk/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderTest.java)
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderWhenDoneByIndexTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderWhenDoneByIndexTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderTest.java&r1=1144788&r2=1144796&rev=1144796&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderWhenDoneByIndexTest.java
 Sun Jul 10 09:24:54 2011
@@ -16,848 +16,38 @@
  */
 package org.apache.camel.builder;
 
+import java.util.concurrent.atomic.AtomicInteger;
+
 import org.apache.camel.ContextTestSupport;
-import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
 
 /**
  * @version 
  */
-public class NotifyBuilderTest extends ContextTestSupport {
-
-    public void testMustBeCreated() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context).whenDone(1);
-
-        try {
-            notify.matches();
-            fail("Should have thrown an exception");
-        } catch (IllegalStateException e) {
-            assertEquals("NotifyBuilder has not been created. Invoke the 
create() method before matching.", e.getMessage());
-        }
-    }
-
-    public void testDirectWhenExchangeDoneSimple() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .from("direct:foo").whenDone(1)
-                .create();
-
-        assertEquals("from(direct:foo).whenDone(1)", notify.toString());
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "A");
-
-        assertEquals(true, notify.matches());
-    }
-
-    public void testDirectBeerWhenExchangeDoneSimple() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .from("direct:beer").whenDone(1)
-                .create();
-
-        assertEquals("from(direct:beer).whenDone(1)", notify.toString());
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:beer", "A");
-
-        assertEquals(true, notify.matches());
-    }
-
-    public void testDirectFromRoute() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .fromRoute("foo").whenDone(1)
-                .create();
-
-        assertEquals("fromRoute(foo).whenDone(1)", notify.toString());
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:bar", "A");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "B");
-        assertEquals(true, notify.matches());
-    }
-
-    public void testDirectFromRouteReceived() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .fromRoute("foo").whenReceived(1)
-                .create();
-
-        assertEquals("fromRoute(foo).whenReceived(1)", notify.toString());
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:bar", "A");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "B");
-        assertEquals(true, notify.matches());
-    }
-
-    public void testWhenExchangeDone() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .from("direct:foo").whenDone(5)
-                .create();
-
-        assertEquals("from(direct:foo).whenDone(5)", notify.toString());
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "A");
-        template.sendBody("direct:foo", "B");
-        template.sendBody("direct:foo", "C");
-
-        template.sendBody("direct:bar", "D");
-        template.sendBody("direct:bar", "E");
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "F");
-        template.sendBody("direct:bar", "G");
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "H");
-        template.sendBody("direct:bar", "I");
-
-        assertEquals(true, notify.matches());
-    }
-
-    public void testWhenExchangeDoneAnd() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .from("direct:foo").whenDone(5)
-                .and().from("direct:bar").whenDone(7)
-                .create();
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "A");
-        template.sendBody("direct:foo", "B");
-        template.sendBody("direct:foo", "C");
-
-        template.sendBody("direct:bar", "D");
-        template.sendBody("direct:bar", "E");
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "F");
-        template.sendBody("direct:bar", "G");
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "H");
-        template.sendBody("direct:bar", "I");
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:bar", "J");
-        template.sendBody("direct:bar", "K");
-        template.sendBody("direct:bar", "L");
-
-        assertEquals(true, notify.matches());
-    }
-
-    public void testFromRouteWhenExchangeDoneAnd() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .fromRoute("foo").whenDone(5)
-                .and().fromRoute("bar").whenDone(7)
-                .create();
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "A");
-        template.sendBody("direct:foo", "B");
-        template.sendBody("direct:foo", "C");
-
-        template.sendBody("direct:bar", "D");
-        template.sendBody("direct:bar", "E");
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "F");
-        template.sendBody("direct:bar", "G");
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "H");
-        template.sendBody("direct:bar", "I");
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:bar", "J");
-        template.sendBody("direct:bar", "K");
-        template.sendBody("direct:bar", "L");
-
-        assertEquals(true, notify.matches());
-    }
-
-    public void testFromRouteAndNot() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .fromRoute("foo").whenDone(2)
-                .and().fromRoute("bar").whenReceived(1)
-                .not().fromRoute("cake").whenDone(1)
-                .create();
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "A");
-        template.sendBody("direct:foo", "B");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:bar", "C");
-        assertEquals(true, notify.matches());
-
-        template.sendBody("direct:foo", "D");
-        template.sendBody("direct:bar", "E");
-        assertEquals(true, notify.matches());
-
-        // and now the cake to make it false
-        template.sendBody("direct:cake", "F");
-        assertEquals(false, notify.matches());
-    }
-
-    public void testWhenExchangeDoneOr() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .from("direct:foo").whenDone(5)
-                .or().from("direct:bar").whenDone(7)
-                .create();
-
-        
assertEquals("from(direct:foo).whenDone(5).or().from(direct:bar).whenDone(7)", 
notify.toString());
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "A");
-        template.sendBody("direct:foo", "B");
-        template.sendBody("direct:foo", "C");
-
-        template.sendBody("direct:bar", "D");
-        template.sendBody("direct:bar", "E");
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:bar", "G");
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:bar", "I");
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:bar", "J");
-        template.sendBody("direct:bar", "K");
-        template.sendBody("direct:bar", "L");
-
-        assertEquals(true, notify.matches());
-    }
-
-    public void testWhenExchangeDoneNot() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .from("direct:foo").whenDone(5)
-                .not().from("direct:bar").whenDone(1)
-                .create();
-
-        
assertEquals("from(direct:foo).whenDone(5).not().from(direct:bar).whenDone(1)", 
notify.toString());
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "A");
-        template.sendBody("direct:foo", "B");
-        template.sendBody("direct:foo", "C");
-        template.sendBody("direct:foo", "D");
-
-        assertEquals(false, notify.matches());
-        template.sendBody("direct:foo", "E");
-        assertEquals(true, notify.matches());
-
-        template.sendBody("direct:foo", "F");
-        assertEquals(true, notify.matches());
-
-        template.sendBody("direct:bar", "G");
-        assertEquals(false, notify.matches());
-    }
-
-    public void testWhenExchangeDoneOrFailure() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .whenDone(5)
-                .or().whenFailed(1)
-                .create();
-
-        assertEquals("whenDone(5).or().whenFailed(1)", notify.toString());
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "A");
-        template.sendBody("direct:foo", "B");
-        template.sendBody("direct:foo", "D");
-
-        assertEquals(false, notify.matches());
-
-        try {
-            template.sendBody("direct:fail", "E");
-        } catch (Exception e) {
-            // ignore
-        }
-
-        assertEquals(true, notify.matches());
-    }
-
-    public void testWhenExchangeDoneNotFailure() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .whenDone(5)
-                .not().whenFailed(1)
-                .create();
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "A");
-        template.sendBody("direct:foo", "B");
-        template.sendBody("direct:foo", "D");
-        template.sendBody("direct:bar", "E");
-        template.sendBody("direct:bar", "F");
-
-        assertEquals(true, notify.matches());
-
-        try {
-            template.sendBody("direct:fail", "G");
-        } catch (Exception e) {
-            // ignore
-        }
-
-        assertEquals(false, notify.matches());
-    }
-
-    public void testFilterWhenExchangeDone() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .filter(body().contains("World")).whenDone(3)
-                .create();
-
-        assertEquals("filter(body contains World).whenDone(3)", 
notify.toString());
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Hello World");
-        template.sendBody("direct:foo", "Hi World");
-        template.sendBody("direct:foo", "A");
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:bar", "B");
-        template.sendBody("direct:bar", "C");
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:bar", "Bye World");
-
-        assertEquals(true, notify.matches());
-
-        template.sendBody("direct:foo", "D");
-        template.sendBody("direct:bar", "Hey World");
-
-        assertEquals(true, notify.matches());
-    }
-
-    public void testFromFilterWhenExchangeDone() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                
.from("direct:foo").filter(body().contains("World")).whenDone(3)
-                .create();
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Hello World");
-        template.sendBody("direct:foo", "Hi World");
-        template.sendBody("direct:foo", "A");
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:bar", "B");
-        template.sendBody("direct:foo", "C");
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:bar", "Bye World");
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:bar", "D");
-        template.sendBody("direct:foo", "Hey World");
-
-        assertEquals(true, notify.matches());
-
-        template.sendBody("direct:bar", "E");
-        template.sendBody("direct:foo", "Hi Again World");
-
-        assertEquals(true, notify.matches());
-    }
-
-    public void testFromFilterBuilderWhenExchangeDone() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .filter().xpath("/person[@name='James']").whenDone(1)
-                .create();
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "<person name='Claus'/>");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "<person name='Jonathan'/>");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "<person name='James'/>");
-        assertEquals(true, notify.matches());
-
-        template.sendBody("direct:foo", "<person name='Hadrian'/>");
-        assertEquals(true, notify.matches());
-    }
-
-    public void testWhenExchangeCompleted() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .whenCompleted(5)
-                .create();
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "A");
-        template.sendBody("direct:foo", "B");
-        template.sendBody("direct:bar", "C");
-
-        try {
-            template.sendBody("direct:fail", "D");
-        } catch (Exception e) {
-            // ignore
-        }
-
-        try {
-            template.sendBody("direct:fail", "E");
-        } catch (Exception e) {
-            // ignore
-        }
-
-        // should NOT be completed as it only counts successful exchanges
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:bar", "F");
-        template.sendBody("direct:foo", "G");
-        template.sendBody("direct:bar", "H");
+public class NotifyBuilderWhenDoneByIndexTest extends ContextTestSupport {
 
-        // now it should match
-        assertEquals(true, notify.matches());
-    }
-
-    public void testWhenExchangeExactlyDone() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .whenExactlyDone(5)
-                .create();
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "A");
-        template.sendBody("direct:foo", "B");
-        template.sendBody("direct:foo", "C");
-
-        template.sendBody("direct:bar", "D");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:bar", "E");
-        assertEquals(true, notify.matches());
-
-        template.sendBody("direct:foo", "F");
-        assertEquals(false, notify.matches());
-    }
-
-    public void testWhenExchangeExactlyComplete() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .whenExactlyCompleted(5)
-                .create();
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "A");
-        template.sendBody("direct:foo", "B");
-        template.sendBody("direct:foo", "C");
-
-        template.sendBody("direct:bar", "D");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:bar", "E");
-        assertEquals(true, notify.matches());
-
-        template.sendBody("direct:foo", "F");
-        assertEquals(false, notify.matches());
-    }
-
-    public void testWhenExchangeExactlyFailed() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .whenExactlyFailed(2)
-                .create();
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "A");
-        template.sendBody("direct:foo", "B");
-        template.sendBody("direct:foo", "C");
-
-        try {
-            template.sendBody("direct:fail", "D");
-        } catch (Exception e) {
-            // ignore
-        }
-
-        template.sendBody("direct:bar", "E");
-        assertEquals(false, notify.matches());
-
-        try {
-            template.sendBody("direct:fail", "F");
-        } catch (Exception e) {
-            // ignore
-        }
-        assertEquals(true, notify.matches());
-
-        template.sendBody("direct:bar", "G");
-        assertEquals(true, notify.matches());
-
-        try {
-            template.sendBody("direct:fail", "H");
-        } catch (Exception e) {
-            // ignore
-        }
-        assertEquals(false, notify.matches());
-    }
-
-    public void testWhenAnyReceivedMatches() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .whenAnyReceivedMatches(body().contains("Camel"))
-                .create();
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Hello World");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Bye World");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:bar", "Hello Camel");
-        assertEquals(true, notify.matches());
-    }
-
-    public void testWhenAllReceivedMatches() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .whenAllReceivedMatches(body().contains("Camel"))
-                .create();
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Hello Camel");
-        assertEquals(true, notify.matches());
-
-        template.sendBody("direct:foo", "Bye Camel");
-        assertEquals(true, notify.matches());
-
-        template.sendBody("direct:bar", "Hello World");
-        assertEquals(false, notify.matches());
-    }
-
-    public void testWhenAnyDoneMatches() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .whenAnyDoneMatches(body().contains("Bye"))
-                .create();
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Hi World");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:cake", "Camel");
-        assertEquals(true, notify.matches());
-
-        template.sendBody("direct:foo", "Damn World");
-        assertEquals(true, notify.matches());
-    }
-
-    public void testWhenAllDoneMatches() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .whenAllDoneMatches(body().contains("Bye"))
-                .create();
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:cake", "Camel");
-        assertEquals(true, notify.matches());
-
-        template.sendBody("direct:cake", "World");
-        assertEquals(true, notify.matches());
-
-        template.sendBody("direct:foo", "Hi World");
-        assertEquals(false, notify.matches());
-    }
-
-    public void testWhenBodiesReceived() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .whenBodiesReceived("Hi World", "Hello World")
-                .create();
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Hi World");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Hello World");
-        assertEquals(true, notify.matches());
-
-        // should keep being true
-        template.sendBody("direct:foo", "Bye World");
-        assertEquals(true, notify.matches());
-
-        template.sendBody("direct:foo", "Damn World");
-        assertEquals(true, notify.matches());
-    }
-
-    public void testWhenBodiesDone() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .whenBodiesDone("Bye World", "Bye Camel")
-                .create();
-
-        assertEquals(false, notify.matches());
-
-        template.requestBody("direct:cake", "World");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:cake", "Camel");
-        assertEquals(true, notify.matches());
-
-        // should keep being true
-        template.sendBody("direct:foo", "Damn World");
-        assertEquals(true, notify.matches());
-    }
-
-    public void testWhenExactBodiesReceived() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .whenExactBodiesReceived("Hi World", "Hello World")
-                .create();
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Hi World");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Hello World");
-        assertEquals(true, notify.matches());
-
-        // should not keep being true
-        template.sendBody("direct:foo", "Bye World");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Damn World");
-        assertEquals(false, notify.matches());
-    }
-
-    public void testWhenExactBodiesDone() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .whenExactBodiesDone("Bye World", "Bye Camel")
-                .create();
-
-        assertEquals(false, notify.matches());
-
-        template.requestBody("direct:cake", "World");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:cake", "Camel");
-        assertEquals(true, notify.matches());
-
-        // should NOT keep being true
-        template.sendBody("direct:foo", "Damn World");
-        assertEquals(false, notify.matches());
-    }
-
-    public void testWhenReceivedSatisfied() throws Exception {
-        // lets use a mock to set the expressions as it got many great 
assertions for that
-        // notice we use mock:assert which does NOT exist in the route, its 
just a pseudo name
-        MockEndpoint mock = getMockEndpoint("mock:assert");
-        mock.expectedBodiesReceivedInAnyOrder("Hello World", "Bye World", "Hi 
World");
-
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .from("direct:foo").whenDoneSatisfied(mock)
-                .create();
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Bye World");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Hello World");
-        assertEquals(false, notify.matches());
-
-        // the notify  is based on direct:foo so sending to bar should not 
trigger match
-        template.sendBody("direct:bar", "Hi World");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Hi World");
-        assertEquals(true, notify.matches());
-    }
-
-    public void testWhenReceivedNotSatisfied() throws Exception {
-        // lets use a mock to set the expressions as it got many great 
assertions for that
-        // notice we use mock:assert which does NOT exist in the route, its 
just a pseudo name
-        MockEndpoint mock = getMockEndpoint("mock:assert");
-        mock.expectedMessageCount(2);
-        mock.message(1).body().contains("Camel");
-
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .from("direct:foo").whenReceivedNotSatisfied(mock)
-                .create();
-
-        // is always false to start with
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Bye World");
-        assertEquals(true, notify.matches());
-
-        template.sendBody("direct:foo", "Hello Camel");
-        assertEquals(false, notify.matches());
-    }
-
-    public void testWhenNotSatisfiedUsingSatisfied() throws Exception {
-        // lets use a mock to set the expressions as it got many great 
assertions for that
-        // notice we use mock:assert which does NOT exist in the route, its 
just a pseudo name
-        MockEndpoint mock = getMockEndpoint("mock:assert");
-        mock.expectedMessageCount(2);
-        mock.message(1).body().contains("Camel");
-
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .from("direct:foo").whenReceivedSatisfied(mock)
-                .create();
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Bye World");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Hello Camel");
-        assertEquals(true, notify.matches());
-    }
-
-    public void testComplexOrCamel() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:assert");
-        mock.expectedBodiesReceivedInAnyOrder("Hello World", "Bye World", "Hi 
World");
-
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .from("direct:foo").whenReceivedSatisfied(mock)
-                
.and().from("direct:bar").whenExactlyDone(5).whenAnyReceivedMatches(body().contains("Camel"))
-                .create();
-
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Bye World");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Hello World");
-        assertEquals(false, notify.matches());
-
-        // the notify  is based on direct:foo so sending to bar should not 
trigger match
-        template.sendBody("direct:bar", "Hi World");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Hi World");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:bar", "Hi Camel");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:bar", "A");
-        template.sendBody("direct:bar", "B");
-        template.sendBody("direct:bar", "C");
-        assertEquals(true, notify.matches());
-    }
-
-    public void testWhenDoneSatisfied() throws Exception {
-        // lets use a mock to set the expressions as it got many great 
assertions for that
-        // notice we use mock:assert which does NOT exist in the route, its 
just a pseudo name
-        MockEndpoint mock = getMockEndpoint("mock:assert");
-        mock.expectedBodiesReceived("Bye World", "Bye Camel");
-
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .whenDoneSatisfied(mock)
-                .create();
-
-        // is always false to start with
-        assertEquals(false, notify.matches());
-
-        template.requestBody("direct:cake", "World");
-        assertEquals(false, notify.matches());
-
-        template.requestBody("direct:cake", "Camel");
-        assertEquals(true, notify.matches());
-
-        template.requestBody("direct:cake", "Damn");
-        // will still be true as the mock has been completed
-        assertEquals(true, notify.matches());
-    }
-
-    public void testWhenDoneNotSatisfied() throws Exception {
-        // lets use a mock to set the expressions as it got many great 
assertions for that
-        // notice we use mock:assert which does NOT exist in the route, its 
just a pseudo name
-        MockEndpoint mock = getMockEndpoint("mock:assert");
-        mock.expectedBodiesReceived("Bye World", "Bye Camel");
-
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .whenDoneNotSatisfied(mock)
-                .create();
-
-        // is always false to start with
-        assertEquals(false, notify.matches());
-
-        template.requestBody("direct:cake", "World");
-        assertEquals(true, notify.matches());
-
-        template.requestBody("direct:cake", "Camel");
-        assertEquals(false, notify.matches());
-
-        template.requestBody("direct:cake", "Damn");
-        // will still be false as the mock has been completed
-        assertEquals(false, notify.matches());
-    }
+    public void testDoneByIndex() throws Exception {
+        final AtomicInteger counter = new AtomicInteger();
+        getMockEndpoint("mock:split").whenAnyExchangeReceived(new Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                counter.incrementAndGet();
+            }
+        });
 
-    public void testReset() throws Exception {
+        // notify when the 1st exchange is done (by index)
         NotifyBuilder notify = new NotifyBuilder(context)
-                .whenExactlyDone(1)
+                .whenDoneByIndex(0)
                 .create();
 
-        template.sendBody("direct:foo", "Hello World");
-        assertEquals(true, notify.matches());
-
-        template.sendBody("direct:foo", "Bye World");
         assertEquals(false, notify.matches());
 
-        // reset
-        notify.reset();
-        assertEquals(false, notify.matches());
+        template.sendBody("seda:foo", "A,B,C");
 
-        template.sendBody("direct:foo", "Hello World");
-        assertEquals(true, notify.matches());
+        assertEquals(true, notify.matchesMockWaitTime());
 
-        template.sendBody("direct:foo", "Bye World");
-        assertEquals(false, notify.matches());
-    }
-
-    public void testResetBodiesReceived() throws Exception {
-        NotifyBuilder notify = new NotifyBuilder(context)
-                .whenBodiesReceived("Hello World", "Bye World")
-                .create();
-
-        template.sendBody("direct:foo", "Hello World");
-        template.sendBody("direct:foo", "Bye World");
-        assertEquals(true, notify.matches());
-
-        // reset
-        notify.reset();
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Hello World");
-        assertEquals(false, notify.matches());
-
-        template.sendBody("direct:foo", "Bye World");
-        assertEquals(true, notify.matches());
+        assertEquals(3, counter.get());
     }
 
     @Override
@@ -865,15 +55,12 @@ public class NotifyBuilderTest extends C
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("direct:foo").routeId("foo").to("mock:foo");
-
-                from("direct:bar").routeId("bar").to("mock:bar");
-
-                from("direct:fail").routeId("fail").throwException(new 
IllegalArgumentException("Damn"));
-
-                
from("direct:cake").routeId("cake").transform(body().prepend("Bye 
")).to("log:cake");
-
-                
from("direct:beer").routeId("beer").to("log:beer").to("mock:beer");
+                from("seda:foo").routeId("foo")
+                    .delay(500)
+                    .split(body().tokenize(","))
+                        .to("mock:split")
+                    .end()
+                    .to("mock:foo");
             }
         };
     }

Propchange: 
camel/trunk/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderWhenDoneByIndexTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderWhenDoneByIndexTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date


Reply via email to