1
2
3
4
5
6
7 package org.mule.transport.xmpp.transformers;
8
9 import org.mule.api.MuleMessage;
10 import org.mule.api.transport.PropertyScope;
11 import org.mule.transformer.AbstractMessageTransformer;
12 import org.mule.transformer.types.DataTypeFactory;
13 import org.mule.transport.xmpp.XmppConnector;
14 import org.mule.util.StringUtils;
15
16 import org.jivesoftware.smack.packet.Message;
17
18 public class XmppPacketToObject extends AbstractMessageTransformer
19 {
20 public XmppPacketToObject()
21 {
22 registerSourceType(DataTypeFactory.create(Message.class));
23 setReturnDataType(DataTypeFactory.STRING);
24 }
25
26 @Override
27 public Object transformMessage(MuleMessage muleMessage, String outputEncoding)
28 {
29 Message xmppMessage = (Message) muleMessage.getPayload();
30 copySubject(xmppMessage, muleMessage);
31 copyThread(xmppMessage, muleMessage);
32 copyProperties(xmppMessage, muleMessage);
33 return xmppMessage.getBody();
34 }
35
36 private void copySubject(Message xmppMessage, MuleMessage muleMessage)
37 {
38 String subject = xmppMessage.getSubject();
39 if (StringUtils.isNotEmpty(subject))
40 {
41 muleMessage.setProperty(XmppConnector.XMPP_SUBJECT, subject, PropertyScope.INBOUND);
42 }
43 }
44
45 private void copyThread(Message xmppMessage, MuleMessage muleMessage)
46 {
47 String thread = xmppMessage.getThread();
48 if (StringUtils.isNotEmpty(thread))
49 {
50 muleMessage.setOutboundProperty(XmppConnector.XMPP_THREAD, thread);
51 }
52 }
53
54 private void copyProperties(Message xmppMessage, MuleMessage muleMessage)
55 {
56 for (String propertyName : xmppMessage.getPropertyNames())
57 {
58 muleMessage.setOutboundProperty(propertyName, xmppMessage.getProperty(propertyName));
59 }
60 }
61 }