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