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.transformer.DataType;
11  import org.mule.transformer.AbstractMessageTransformer;
12  import org.mule.transformer.types.DataTypeFactory;
13  import org.mule.transport.xmpp.XmppConnector;
14  
15  import org.jivesoftware.smack.packet.Message;
16  import org.jivesoftware.smack.packet.XMPPError;
17  
18  /**
19   * Creates an Xmpp message packet from a MuleMessage
20   */
21  public class ObjectToXmppPacket extends AbstractMessageTransformer
22  {
23      public ObjectToXmppPacket()
24      {
25          DataType<Message> messageDataType = DataTypeFactory.create(Message.class);
26  
27          registerSourceType(DataTypeFactory.STRING);
28          registerSourceType(messageDataType);
29          setReturnDataType(messageDataType);
30      }
31  
32      @Override
33      public Object transformMessage(MuleMessage muleMessage, String outputEncoding)
34      {
35          Object src = muleMessage.getPayload();
36          
37          // Make the transformer match its wiki documentation: we accept Messages and Strings.
38          // No special treatment for Messages is needed
39          if (src instanceof Message)
40          {
41              return src;
42          }
43          
44          Message result = new Message();
45  
46          if (muleMessage.getExceptionPayload() != null)
47          {
48              result.setError(
49                  new XMPPError(XMPPError.Condition.service_unavailable,
50                      muleMessage.getExceptionPayload().getMessage()));
51          }
52  
53          for (String propertyName : muleMessage.getOutboundPropertyNames())
54          {
55              if (propertyName.equals(XmppConnector.XMPP_THREAD))
56              {
57                  result.setThread((String) muleMessage.getOutboundProperty(propertyName));
58              }
59              else if (propertyName.equals(XmppConnector.XMPP_SUBJECT))
60              {
61                  result.setSubject((String) muleMessage.getOutboundProperty(propertyName));
62              }
63              else if (propertyName.equals(XmppConnector.XMPP_FROM))
64              {
65                  result.setFrom((String) muleMessage.getOutboundProperty(propertyName));
66              }
67              else if (propertyName.equals(XmppConnector.XMPP_TO))
68              {
69                  result.setTo((String) muleMessage.getOutboundProperty(propertyName));
70              }
71              else
72              {
73                  result.setProperty(propertyName, muleMessage.<Object>getOutboundProperty(propertyName));
74              }
75          }
76  
77          // copy the payload. Since it can only be a String (other objects wouldn't be passed in through
78          // AbstractTransformer) the following is safe.
79          result.setBody((String) src);
80          
81          return result;
82      }
83  }