1
2
3
4
5
6
7
8
9
10
11 package org.mule.routing.correlation;
12
13 import java.util.Arrays;
14 import java.util.Comparator;
15
16 import org.mule.DefaultMuleEvent;
17 import org.mule.DefaultMuleMessage;
18 import org.mule.api.MuleContext;
19 import org.mule.api.MuleEvent;
20 import org.mule.api.ThreadSafeAccess;
21 import org.mule.api.store.ObjectStoreException;
22 import org.mule.routing.AggregationException;
23 import org.mule.routing.EventGroup;
24 import org.mule.routing.Resequencer;
25
26
27
28
29
30
31
32 public class ResequenceMessagesCorrelatorCallback extends CollectionCorrelatorCallback
33 {
34 protected Comparator eventComparator;
35 protected MuleContext muleContext;
36
37 public ResequenceMessagesCorrelatorCallback(Comparator eventComparator,
38 MuleContext muleContext,
39 boolean persistantStore,
40 String storePrefix)
41 {
42 super(muleContext, persistantStore, storePrefix);
43 this.eventComparator = eventComparator;
44 this.muleContext = muleContext;
45 }
46
47
48
49
50
51
52
53
54
55
56
57
58 @Override
59 public MuleEvent aggregateEvents(EventGroup events) throws AggregationException
60 {
61 MuleEvent[] results;
62 try
63 {
64 results = (events == null) ? new MuleEvent[0] : events.toArray();
65 }
66 catch (ObjectStoreException e)
67 {
68 throw new AggregationException(events, null, e);
69 }
70 Arrays.sort(results, eventComparator);
71
72
73 for (int i = 0; i < results.length; i++)
74 {
75 if (results[i] instanceof ThreadSafeAccess)
76 {
77 results[i] = (MuleEvent)((ThreadSafeAccess)results[i]).newThreadCopy();
78 }
79 }
80 return new DefaultMuleEvent(new DefaultMuleMessage(results, muleContext), results[0]);
81 }
82
83 }