1
2
3
4
5
6
7
8
9
10 package org.mule;
11
12 import org.mule.api.MuleContext;
13 import org.mule.api.MuleEvent;
14 import org.mule.api.MuleMessage;
15 import org.mule.api.MuleMessageCollection;
16 import org.mule.api.ThreadSafeAccess;
17 import org.mule.api.transformer.DataType;
18 import org.mule.api.transformer.TransformerException;
19 import org.mule.transformer.types.DataTypeFactory;
20
21 import java.util.ArrayList;
22 import java.util.Iterator;
23 import java.util.List;
24
25 import edu.emory.mathcs.backport.java.util.concurrent.CopyOnWriteArrayList;
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 public class DefaultMessageCollection extends DefaultMuleMessage implements MuleMessageCollection
41 {
42 private List messageList = new CopyOnWriteArrayList();
43
44 public DefaultMessageCollection(MuleContext muleContext)
45 {
46
47 super(new CopyOnWriteArrayList(), muleContext);
48 }
49
50
51
52
53
54
55 public DefaultMessageCollection(DefaultMessageCollection msg, MuleContext muleContext)
56 {
57 this(muleContext);
58 for (int i = 0; i < msg.getMessagesAsArray().length; i++)
59 {
60 addMessage(msg.getMessagesAsArray()[i]);
61 }
62 }
63
64 public void addMessage(MuleMessage message)
65 {
66 getMessageList().add(message);
67 getPayloadList().add(message.getPayload());
68 }
69
70 public MuleMessage[] getMessagesAsArray()
71 {
72 List list = getMessageList();
73 MuleMessage[] messages = new MuleMessage[list.size()];
74 messages = (MuleMessage[])list.toArray(messages);
75 return messages;
76 }
77
78 public Object[] getPayloadsAsArray()
79 {
80 List list = getPayloadList();
81 Object[] payloads = new Object[list.size()];
82 payloads = list.toArray(payloads);
83 return payloads;
84 }
85
86 public void removedMessage(MuleMessage message)
87 {
88 getMessageList().remove(message);
89 getPayloadList().remove(message.getPayload());
90 }
91
92 public void addMessage(MuleMessage message, int index)
93 {
94 getMessageList().add(index, message);
95 getPayloadList().add(index, message.getPayload());
96 }
97
98 public void addMessages(MuleEvent[] events)
99 {
100 for (int i = 0; i < events.length; i++)
101 {
102 MuleEvent event = events[i];
103 addMessage(event.getMessage());
104 }
105 }
106
107 public void addMessages(List messages)
108 {
109 for (Iterator iterator = messages.iterator(); iterator.hasNext();)
110 {
111 MuleMessage message = (MuleMessage) iterator.next();
112 addMessage(message);
113 }
114 }
115
116 public void addMessages(MuleMessage[] messages)
117 {
118 for (int i = 0; i < messages.length; i++)
119 {
120 addMessage(messages[i]);
121 }
122 }
123
124 public MuleMessage getMessage(int index)
125 {
126 return (MuleMessage)getMessageList().get(index);
127 }
128
129 protected List getMessageList()
130 {
131 return messageList;
132 }
133
134 protected List getPayloadList()
135 {
136 return (List)getPayload();
137 }
138
139
140
141
142
143
144
145 @Override
146 public Object getPayload(Class outputType) throws TransformerException
147 {
148 DataType outputDataType = DataTypeFactory.create(outputType);
149 List results = new ArrayList(getMessageList().size());
150 for (Iterator iterator = getMessageList().iterator(); iterator.hasNext();)
151 {
152 MuleMessage message = (MuleMessage) iterator.next();
153 results.add(message.getPayload(outputDataType));
154 }
155 return results;
156 }
157
158 public int size()
159 {
160 return getMessageList().size();
161 }
162
163
164
165
166 @Override
167 public byte[] getPayloadAsBytes() throws Exception
168 {
169 throw new UnsupportedOperationException("getPayloadAsBytes(), use getPayload(DataType.BYTE_ARRAY_DATA_TYPE)");
170 }
171
172
173
174
175 @Override
176 public String getPayloadAsString(String encoding) throws Exception
177 {
178 throw new UnsupportedOperationException("getPayloadAsString(), use getPayload(DataType.STRING_DATA_TYPE)");
179
180 }
181
182
183
184
185 @Override
186 public String getPayloadForLogging(String encoding)
187 {
188 return "[This is a message collection]";
189 }
190
191
192
193
194 @Override
195 public String getPayloadForLogging()
196 {
197 return "[This is a message collection]";
198 }
199
200
201
202
203
204 public ThreadSafeAccess newThreadCopy()
205 {
206 return new DefaultMessageCollection(this, muleContext);
207 }
208
209
210
211
212 @Override
213 public MuleMessage createInboundMessage() throws Exception
214 {
215 DefaultMessageCollection newMessage = new DefaultMessageCollection(getMuleContext());
216 MuleMessage[] messages = getMessagesAsArray();
217 for (MuleMessage message : messages)
218 {
219 newMessage.addMessage(message.createInboundMessage());
220 }
221 return newMessage;
222 }
223 }