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.correlation;
8   
9   import org.mule.api.MuleEvent;
10  import org.mule.api.routing.RoutingException;
11  import org.mule.routing.AggregationException;
12  import org.mule.routing.EventGroup;
13  
14  /**
15   * A callback used to allow pluggable behaviour when correlating events
16   */
17  public interface EventCorrelatorCallback
18  {
19      /**
20       * Determines if the event group is ready to be aggregated. if the group is ready
21       * to be aggregated (this is entirely up to the application. it could be
22       * determined by volume, last modified time or some oher criteria based on the
23       * last event received).
24       *
25       * @param events The current event group received by the correlator
26       * @return true if the group is ready for aggregation
27       */
28      public boolean shouldAggregateEvents(EventGroup events);
29  
30      /**
31       * This method is invoked if the shouldAggregate method is called and returns
32       * true. Once this method returns an aggregated message, the event group is
33       * removed from the router.
34       *
35       * @param events the event group for this request
36       * @return an aggregated message
37       * @throws AggregationException if the aggregation fails. in this scenario the
38       *                              whole event group is removed and passed to the exception handler
39       *                              for this component
40       */
41      public MuleEvent aggregateEvents(EventGroup events) throws RoutingException;
42  
43  
44      /**
45       * Creates the event group with a specific correlation size based on the Mule
46       * Correlation support
47       *
48       * @param id    The group id
49       * @param event the current event
50       * @return a new event group of a fixed size
51       */
52      public EventGroup createEventGroup(MuleEvent event, Object id);
53  }