1
2
3
4
5
6
7
8
9
10 package org.mule.routing;
11
12 import org.mule.DefaultMessageCollection;
13 import org.mule.api.MuleEvent;
14 import org.mule.api.MuleMessage;
15 import org.mule.api.MuleMessageCollection;
16 import org.mule.routing.inbound.EventGroup;
17
18 import org.apache.commons.logging.Log;
19 import org.apache.commons.logging.LogFactory;
20
21
22
23
24 public class CollectionCorrelatorCallback implements EventCorrelatorCallback
25 {
26
27
28
29 protected transient final Log logger = LogFactory.getLog(CollectionCorrelatorCallback.class);
30
31
32
33
34
35
36
37
38
39
40
41
42
43 public MuleMessage aggregateEvents(EventGroup events) throws AggregationException
44 {
45 MuleMessageCollection message = new DefaultMessageCollection();
46 message.addMessages(events.toArray());
47 return message;
48 }
49
50
51
52
53
54
55 public EventGroup createEventGroup(MuleEvent event, Object groupId)
56 {
57 return new EventGroup(groupId, event.getMessage().getCorrelationGroupSize());
58 }
59
60
61
62
63
64
65 public boolean shouldAggregateEvents(EventGroup events)
66 {
67 int size = events.expectedSize();
68
69 if (size == -1)
70 {
71 logger.warn("Correlation Group Size not set, but CorrelationAggregator is being used."
72 + " Message is being forwarded");
73 return true;
74 }
75
76 if (logger.isDebugEnabled())
77 {
78 logger.debug("Correlation size is " + size + ". Current event group size is " + events.size()
79 + " for correlation " + events.getGroupId());
80 }
81
82 return size == events.size();
83 }
84
85 }