View Javadoc

1   /*
2    * $Id: ObjectToXmppPacket.java 10489 2008-01-23 17:53:38Z dfeist $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.transport.xmpp.transformers;
12  
13  import org.mule.api.MuleMessage;
14  import org.mule.api.transformer.TransformerException;
15  import org.mule.transformer.AbstractMessageAwareTransformer;
16  import org.mule.transport.xmpp.XmppConnector;
17  
18  import java.util.Iterator;
19  
20  import org.jivesoftware.smack.packet.Message;
21  import org.jivesoftware.smack.packet.XMPPError;
22  
23  /**
24   * Creates an Xmpp message packet from a MuleMessage
25   */
26  public class ObjectToXmppPacket extends AbstractMessageAwareTransformer
27  {
28      public ObjectToXmppPacket()
29      {
30          this.registerSourceType(String.class);
31          this.registerSourceType(Message.class);
32          setReturnClass(Message.class);
33      }
34  
35      public Object transform(MuleMessage msg, String outputEncoding) throws TransformerException
36      {
37          Object src = msg.getPayload();
38          
39          // Make the transformer match its wiki documentation: we accept Messages and Strings.
40          // No special treatment for Messages is needed
41          if (src instanceof Message)
42          {
43              return src;
44          }
45          
46          Message result = new Message();
47  
48          if (msg.getExceptionPayload() != null)
49          {
50              result.setError(new XMPPError(503, msg.getExceptionPayload().getMessage()));
51          }
52  
53          for (Iterator iterator = msg.getPropertyNames().iterator(); iterator.hasNext();)
54          {
55              String name = (String) iterator.next();
56              if (name.equals(XmppConnector.XMPP_THREAD))
57              {
58                  result.setThread((String) msg.getProperty(name));
59              }
60              else if (name.equals(XmppConnector.XMPP_SUBJECT))
61              {
62                  result.setSubject((String) msg.getProperty(name));
63              }
64              else if (name.equals(XmppConnector.XMPP_FROM))
65              {
66                  result.setFrom((String) msg.getProperty(name));
67              }
68              else if (name.equals(XmppConnector.XMPP_TO))
69              {
70                  result.setTo((String) msg.getProperty(name));
71              }
72              else
73              {
74                  result.setProperty(name, msg.getProperty(name));
75              }
76          }
77  
78          // copy the payload. Since it can only be a String (other objects wouldn't be passed in through
79          // AbstractTransformer) the following is safe.
80          result.setBody((String) src);
81          
82          return result;
83      }
84  }