View Javadoc

1   /*
2    * $Id: ResponseCorrelationAggregator.java 7963 2007-08-21 08:53:15Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.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  
11  package org.mule.routing.response;
12  
13  import org.mule.routing.inbound.EventGroup;
14  import org.mule.umo.UMOEvent;
15  
16  /**
17   * <code>ResponseCorrelationAggregator</code> Correlates one or more events on a
18   * response flow using the Correlation Id to group events.
19   */
20  
21  public abstract class ResponseCorrelationAggregator extends AbstractResponseAggregator
22  {
23      /**
24       * Determines if the event group is ready to be aggregated. if the group is ready
25       * to be aggregated (this is entirely up to the application. it could be
26       * determined by volume, last modified time or some oher criteria based on the
27       * last event received)
28       * 
29       * @param events
30       * @return true if the event group is ready of aggregation
31       */
32      protected boolean shouldAggregateEvents(EventGroup events)
33      {
34          int expected = events.expectedSize();
35          int current = events.size();
36  
37          if (expected == -1)
38          {
39              logger.warn("Correlation Group Size not set, but CorrelationAggregator is being used.  Message is being forwarded");
40              return true;
41          }
42  
43          if (logger.isDebugEnabled())
44          {
45              logger.debug("Correlation size is " + expected + ", current event group size is " + current
46                           + " for correlation group " + events.getGroupId());
47          }
48  
49          return expected == current;
50      }
51  
52      /**
53       * Creates the event group with a specific correlation size based on the Mule
54       * Correlation support
55       * 
56       * @param id The group id
57       * @param event the current event
58       * @return a new event group of a fixed size
59       */
60      // @Override
61      protected EventGroup createEventGroup(UMOEvent event, Object id)
62      {
63          return new EventGroup(id, event.getMessage().getCorrelationGroupSize());
64      }
65  
66  }