View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
6    */
7   package org.mule.routing;
8   
9   import org.mule.DefaultMessageCollection;
10  import org.mule.DefaultMuleEvent;
11  import org.mule.DefaultMuleMessage;
12  import org.mule.api.MuleEvent;
13  import org.mule.api.MuleException;
14  import org.mule.api.MuleMessage;
15  import org.mule.api.MuleMessageCollection;
16  import org.mule.api.processor.MessageProcessor;
17  import org.mule.tck.junit4.AbstractMuleContextTestCase;
18  import org.mule.tck.testmodels.fruit.Apple;
19  import org.mule.tck.testmodels.fruit.Banana;
20  import org.mule.tck.testmodels.fruit.Fruit;
21  import org.mule.tck.testmodels.fruit.FruitBowl;
22  import org.mule.tck.testmodels.fruit.Orange;
23  
24  import java.util.ArrayList;
25  import java.util.List;
26  
27  import org.junit.Test;
28  
29  import static org.junit.Assert.assertEquals;
30  import static org.junit.Assert.assertTrue;
31  
32  public class AbstractSplitterTestCase extends AbstractMuleContextTestCase
33  {
34  
35      @Test
36      public void testSimpleSplitter() throws Exception
37      {
38          TestSplitter splitter = new TestSplitter();
39          MultipleEventSensingMessageProcessor listener = new MultipleEventSensingMessageProcessor();
40          splitter.setListener(listener);
41          splitter.setMuleContext(muleContext);
42  
43          Apple apple = new Apple();
44          Banana banana = new Banana();
45          Orange orange = new Orange();
46          FruitBowl fruitBowl = new FruitBowl();
47          fruitBowl.addFruit(apple);
48          fruitBowl.addFruit(banana);
49          fruitBowl.addFruit(orange);
50  
51          MuleEvent inEvent = new DefaultMuleEvent(new DefaultMuleMessage(fruitBowl, muleContext),
52              getTestEvent(""));
53  
54          MuleEvent resultEvent = splitter.process(inEvent);
55  
56          assertEquals(3, listener.events.size());
57          assertTrue(listener.events.get(0).getMessage().getPayload() instanceof Fruit);
58          assertTrue(listener.events.get(1).getMessage().getPayload() instanceof Fruit);
59          assertTrue(listener.events.get(2).getMessage().getPayload() instanceof Fruit);
60  
61          assertEquals(DefaultMessageCollection.class, resultEvent.getMessage().getClass());
62          assertEquals(3, ((MuleMessageCollection) resultEvent.getMessage()).size());
63          assertTrue(((MuleMessageCollection) resultEvent.getMessage()).getMessage(0).getPayload() instanceof Fruit);
64          assertTrue(((MuleMessageCollection) resultEvent.getMessage()).getMessage(1).getPayload() instanceof Fruit);
65          assertTrue(((MuleMessageCollection) resultEvent.getMessage()).getMessage(2).getPayload() instanceof Fruit);
66      }
67  
68      private static class MultipleEventSensingMessageProcessor implements MessageProcessor
69      {
70          List<MuleEvent> events = new ArrayList<MuleEvent>();
71  
72          public MuleEvent process(MuleEvent event) throws MuleException
73          {
74              events.add(event);
75              return event;
76          }
77      }
78  
79      private static class TestSplitter extends AbstractSplitter
80      {
81          @Override
82          protected List<MuleMessage> splitMessage(MuleEvent event)
83          {
84              FruitBowl bowl = (FruitBowl) event.getMessage().getPayload();
85              List<MuleMessage> parts = new ArrayList<MuleMessage>();
86              for (Fruit fruit : bowl.getFruit())
87              {
88                  parts.add(new DefaultMuleMessage(fruit, muleContext));
89              }
90              return parts;
91          }
92      }
93  
94  }