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