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