View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
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  }