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 }