View Javadoc

1   /*
2    * $Id: Rfc822ByteArraytoMimeMessage.java 20321 2010-11-24 15:21:24Z dfeist $
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  
11  package org.mule.transport.email.transformers;
12  
13  import org.mule.api.transformer.TransformerException;
14  import org.mule.api.transport.Connector;
15  import org.mule.config.i18n.CoreMessages;
16  import org.mule.transformer.AbstractTransformer;
17  import org.mule.transformer.types.DataTypeFactory;
18  import org.mule.transport.email.AbstractMailConnector;
19  
20  import java.io.ByteArrayInputStream;
21  import java.io.InputStream;
22  import java.io.UnsupportedEncodingException;
23  
24  import javax.mail.MessagingException;
25  import javax.mail.Session;
26  import javax.mail.internet.MimeMessage;
27  
28  public class Rfc822ByteArraytoMimeMessage extends AbstractTransformer
29  {
30  
31      public Rfc822ByteArraytoMimeMessage()
32      {
33          registerSourceType(DataTypeFactory.BYTE_ARRAY);
34          registerSourceType(DataTypeFactory.INPUT_STREAM);
35          setReturnDataType(DataTypeFactory.create(MimeMessage.class));
36      }
37  
38      @Override
39      protected Object doTransform(Object src, String encoding) throws TransformerException
40      {
41          try
42          {
43              if (src instanceof byte[])
44              {
45                  byte[] bytes = (byte[]) src;
46                  return new MimeMessage(getSession(), new ByteArrayInputStream(bytes));
47              }
48              else if (src instanceof InputStream)
49              {
50                  return new MimeMessage(getSession(), (InputStream)src);
51              }
52              else
53              {
54                  throw new TransformerException(
55                      CoreMessages.transformOnObjectUnsupportedTypeOfEndpoint(this.getName(), src.getClass(), endpoint));
56              }
57          }
58          catch (MessagingException e)
59          {
60              throw new TransformerException(this, e);
61          }
62      }
63  
64      protected Session getSession() throws TransformerException
65      {
66          if (null == endpoint)
67          {
68              throw new TransformerException(this,
69                      new IllegalStateException("The transformer is no associated with an endpoint."));
70          }
71          Connector connector = endpoint.getConnector();
72          if (!(connector instanceof AbstractMailConnector))
73          {
74              throw new TransformerException(this,
75                      new IllegalStateException("The transformer is not associated with an email endpoint."));
76          }
77          try
78          {
79              return ((AbstractMailConnector) connector).getSessionDetails(endpoint).getSession();
80          }
81          catch (UnsupportedEncodingException e)
82          {
83              throw new TransformerException(this, e);
84          }
85      }
86  
87  }