View Javadoc

1   /*
2    * $Id: DefaultRouterResultsHandler.java 22818 2011-09-02 01:39:00Z mike.schilling $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  package org.mule.routing;
11  
12  import org.mule.DefaultMessageCollection;
13  import org.mule.DefaultMuleEvent;
14  import org.mule.api.MuleContext;
15  import org.mule.api.MuleEvent;
16  import org.mule.api.MuleMessage;
17  import org.mule.api.MuleMessageCollection;
18  import org.mule.api.routing.RouterResultsHandler;
19  
20  import java.util.List;
21  
22  /**
23   * The default results handler for all outbound endpoint. Depending on the number of messages passed it
24   * the returning message will be different.
25   * If the 'results' param is null or empty, null is returned.
26   * If the 'results' param contains a single {@link org.mule.api.MuleMessage}, than that message is returned.
27   * If the 'results' param contains more than one message a {@link org.mule.api.MuleMessageCollection} instance
28   * is returned.
29   * <p/>
30   * Note that right now (as of Mule 2.0.1) this SPI is not pluggable and this implementation is the default and
31   * only implementation.
32   *
33   * @see org.mule.api.MuleMessageCollection
34   * @see org.mule.api.MuleMessage
35   * @see org.mule.DefaultMessageCollection
36   */
37  public class DefaultRouterResultsHandler implements RouterResultsHandler
38  {
39      public MuleEvent aggregateResults(List<MuleEvent> results, MuleEvent previous, MuleContext muleContext)
40      {
41          MuleMessage aggregate;
42  
43          if (results == null || results.size() == 0)
44          {
45              aggregate = null;
46          }
47          else if (results.size() == 1)
48          {
49              MuleEvent event = results.get(0);
50              aggregate = event == null ? null : event.getMessage();
51          }
52          else
53          {
54              MuleMessageCollection coll = new DefaultMessageCollection(muleContext);
55              coll.propagateRootId(previous.getMessage());
56              for (MuleEvent event : results)
57              {
58                  MuleMessage muleMessage = event == null ? null : event.getMessage();
59                  if(muleMessage!=null)
60                  {
61                      coll.addMessage(muleMessage);
62                  }
63              }
64              aggregate = coll;
65          }
66  
67          return aggregate == null ? null : new DefaultMuleEvent(aggregate, previous);
68      }
69  }