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