View Javadoc

1   /*
2    * $Id: MuleResponseMessage.java 19500 2010-09-09 17:29:17Z dzapata $
3    * -------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.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  package org.mule.module.ibeans.spi;
11  
12  import org.mule.api.MuleMessage;
13  import org.mule.api.MuleRuntimeException;
14  import org.mule.api.config.MuleProperties;
15  import org.mule.api.transformer.TransformerException;
16  import org.mule.module.ibeans.spi.support.DataTypeConverter;
17  import org.mule.transport.NullPayload;
18  import org.mule.transport.http.HttpConnector;
19  
20  import java.io.InputStream;
21  import java.util.Set;
22  
23  import javax.activation.DataHandler;
24  import javax.activation.MimeTypeParseException;
25  
26  import org.ibeans.api.DataType;
27  import org.ibeans.api.Response;
28  import org.ibeans.api.channel.MimeTypes;
29  
30  /**
31   * An implementation of an IBeans {@link org.ibeans.api.Response} that adapts to a {@link org.mule.api.MuleMessage}
32   */
33  public class MuleResponseMessage implements Response
34  {
35      private MuleMessage message;
36      private DataType dataType;
37      private String status;
38  
39      public MuleResponseMessage(MuleMessage message) throws MimeTypeParseException
40      {
41          this.message = message;
42          //TODO should DataType ever be null?
43          if(message.getDataType()==null)
44          {
45              //s this is response
46              String mime = message.findPropertyInAnyScope(MuleProperties.CONTENT_TYPE_PROPERTY,null);
47              if (mime == null)
48              {
49                  //case insensitive
50                  mime = message.findPropertyInAnyScope("ContentType", null);
51              }
52              if(mime==null) mime = MimeTypes.ANY.getBaseType();
53  
54              dataType = org.ibeans.impl.support.datatype.DataTypeFactory.create(message.getPayload().getClass(), mime);
55          }
56          else
57          {
58              dataType = DataTypeConverter.convertMuleToIBeans(message.getDataType());
59          }
60          status = message.getInboundProperty(HttpConnector.HTTP_STATUS_PROPERTY);
61      }
62  
63      public String getStatusCode()
64      {
65          //TODO this will be null for non-http
66          return status;
67      }
68  
69      public void setStatusCode(String code)
70      {
71          this.status = code;
72      }
73  
74      public String getMimeType()
75      {
76          return dataType.getMimeType();
77      }
78  
79      public DataType getDataType()
80      {
81          return dataType;
82      }
83  
84      public InputStream getPayloadAsStream()
85      {
86          if(message.getPayload() instanceof NullPayload)
87          {
88              return null;
89          }
90          try
91          {
92              return message.getPayload(InputStream.class);
93          }
94          catch (TransformerException e)
95          {
96              throw new MuleRuntimeException(e);
97          }
98      }
99  
100     public Object getPayload()
101     {
102         if(message.getPayload() instanceof NullPayload)
103         {
104             return null;
105         }
106         return message.getPayload();
107     }
108 
109     public Object getHeader(String name)
110     {
111         return message.getInboundProperty(name);
112     }
113 
114     public Set<String> getHeaderNames()
115     {
116         return message.getInboundPropertyNames();
117     }
118 
119     public DataHandler getAttachment(String name)
120     {
121         return message.getInboundAttachment(name);
122     }
123 
124     public Set<String> getAttachmentNames()
125     {
126         return message.getInboundAttachmentNames();
127     }
128 
129     public MuleMessage getMessage()
130     {
131         return message;
132     }
133 
134     public Throwable getException()
135     {
136         if(message.getExceptionPayload()!=null)
137         {
138             return message.getExceptionPayload().getRootException();
139         }
140         return null;
141     }
142 
143 
144 }
145