Author: niklas
Date: Mon Jul 21 03:20:00 2008
New Revision: 678383

URL: http://svn.apache.org/viewvc?rev=678383&view=rev
Log:
Resolved MIME4J-59: The TextBody instances created when parsing a message will 
now handle the decoding/encoding of qp and base64 bodies automatically as it 
was done in Mime4j 0.3.

Added:
    james/mime4j/trunk/src/test/resources/testmsgs/qp-body.msg
    james/mime4j/trunk/src/test/resources/testmsgs/qp-body.xml
    james/mime4j/trunk/src/test/resources/testmsgs/qp-body_decoded.xml
    james/mime4j/trunk/src/test/resources/testmsgs/qp-body_decoded_1.txt
Modified:
    
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Message.java
    
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/TempFileTextBody.java

Modified: 
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Message.java
URL: 
http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Message.java?rev=678383&r1=678382&r2=678383&view=diff
==============================================================================
--- 
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Message.java 
(original)
+++ 
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Message.java 
Mon Jul 21 03:20:00 2008
@@ -184,7 +184,7 @@
             
             final Body body;
             if (bd.getMimeType().startsWith("text/")) {
-                body = new TempFileTextBody(is, bd.getCharset());
+                body = new TempFileTextBody(is, bd.getCharset(), enc);
             } else {
                 body = new TempFileBinaryBody(is, enc);
             }

Modified: 
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/TempFileTextBody.java
URL: 
http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/TempFileTextBody.java?rev=678383&r1=678382&r2=678383&view=diff
==============================================================================
--- 
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/TempFileTextBody.java
 (original)
+++ 
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/TempFileTextBody.java
 Mon Jul 21 03:20:00 2008
@@ -28,8 +28,11 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.james.mime4j.decoder.Base64InputStream;
+import org.apache.james.mime4j.decoder.QuotedPrintableInputStream;
 import org.apache.james.mime4j.util.CharsetUtil;
 import org.apache.james.mime4j.util.CodecUtil;
+import org.apache.james.mime4j.util.MimeUtil;
 import org.apache.james.mime4j.util.TempFile;
 import org.apache.james.mime4j.util.TempPath;
 import org.apache.james.mime4j.util.TempStorage;
@@ -46,21 +49,30 @@
     
     private String mimeCharset = null;
     private TempFile tempFile = null;
+    private final String transferEncoding;
 
     public TempFileTextBody(InputStream is) throws IOException {
-        this(is, null);
+        this(is, null, null);
     }
     
-    public TempFileTextBody(InputStream is, String mimeCharset) 
-            throws IOException {
+    public TempFileTextBody(final InputStream is, final String mimeCharset, 
+            final String transferEncoding) throws IOException {
         
         this.mimeCharset = mimeCharset;
-        
+        this.transferEncoding = transferEncoding;        
         TempPath tempPath = TempStorage.getInstance().getRootTempPath();
         tempFile = tempPath.createTempFile("attachment", ".txt");
         
         OutputStream out = tempFile.getOutputStream();
-        CodecUtil.copy(is, out);
+        final InputStream decodedStream;
+        if (MimeUtil.ENC_BASE64.equals(transferEncoding)) {
+            decodedStream = new Base64InputStream(is);
+        } else if (MimeUtil.ENC_QUOTED_PRINTABLE.equals(transferEncoding)) {
+            decodedStream = new QuotedPrintableInputStream(is);
+        } else {
+            decodedStream = is;
+        }
+        CodecUtil.copy(decodedStream, out);
         out.close();
     }
     
@@ -110,6 +122,15 @@
      * @see org.apache.james.mime4j.message.Body#writeTo(java.io.OutputStream, 
int)
      */
     public void writeTo(OutputStream out, int mode) throws IOException {
-        CodecUtil.copy(tempFile.getInputStream(), out);        
+        final InputStream inputStream = tempFile.getInputStream();
+        if (MimeUtil.ENC_BASE64.equals(transferEncoding)) {
+            CodecUtil.encodeBase64(inputStream, out);
+            out.write(CodecUtil.CRLF_CRLF);
+        } else if (MimeUtil.ENC_QUOTED_PRINTABLE.equals(transferEncoding)) {
+            CodecUtil.encodeQuotedPrintableBinary(inputStream,out);
+            out.write(CodecUtil.CRLF_CRLF);
+        } else {
+            CodecUtil.copy(inputStream,out);
+        }
     }
 }

Added: james/mime4j/trunk/src/test/resources/testmsgs/qp-body.msg
URL: 
http://svn.apache.org/viewvc/james/mime4j/trunk/src/test/resources/testmsgs/qp-body.msg?rev=678383&view=auto
==============================================================================
--- james/mime4j/trunk/src/test/resources/testmsgs/qp-body.msg (added)
+++ james/mime4j/trunk/src/test/resources/testmsgs/qp-body.msg Mon Jul 21 
03:20:00 2008
@@ -0,0 +1,6 @@
+Mime-Version: 1.0
+Subject: subject
+Content-Type: text/plain; charset="iso-8859-15"
+Content-Transfer-Encoding: quoted-printable
+
+7bit content with euro =A4 symbol=20

Added: james/mime4j/trunk/src/test/resources/testmsgs/qp-body.xml
URL: 
http://svn.apache.org/viewvc/james/mime4j/trunk/src/test/resources/testmsgs/qp-body.xml?rev=678383&view=auto
==============================================================================
--- james/mime4j/trunk/src/test/resources/testmsgs/qp-body.xml (added)
+++ james/mime4j/trunk/src/test/resources/testmsgs/qp-body.xml Mon Jul 21 
03:20:00 2008
@@ -0,0 +1,15 @@
+<message>
+<header>
+<field>
+Mime-Version: 1.0</field>
+<field>
+Subject: subject</field>
+<field>
+Content-Type: text/plain; charset="iso-8859-15"</field>
+<field>
+Content-Transfer-Encoding: quoted-printable</field>
+</header>
+<body>
+7bit content with euro =A4 symbol=20
+</body>
+</message>

Added: james/mime4j/trunk/src/test/resources/testmsgs/qp-body_decoded.xml
URL: 
http://svn.apache.org/viewvc/james/mime4j/trunk/src/test/resources/testmsgs/qp-body_decoded.xml?rev=678383&view=auto
==============================================================================
--- james/mime4j/trunk/src/test/resources/testmsgs/qp-body_decoded.xml (added)
+++ james/mime4j/trunk/src/test/resources/testmsgs/qp-body_decoded.xml Mon Jul 
21 03:20:00 2008
@@ -0,0 +1,13 @@
+<message>
+<header>
+<field>
+Mime-Version: 1.0</field>
+<field>
+Subject: subject</field>
+<field>
+Content-Type: text/plain; charset="iso-8859-15"</field>
+<field>
+Content-Transfer-Encoding: quoted-printable</field>
+</header>
+<text-body name="qp-body_decoded_1.txt"/>
+</message>

Added: james/mime4j/trunk/src/test/resources/testmsgs/qp-body_decoded_1.txt
URL: 
http://svn.apache.org/viewvc/james/mime4j/trunk/src/test/resources/testmsgs/qp-body_decoded_1.txt?rev=678383&view=auto
==============================================================================
--- james/mime4j/trunk/src/test/resources/testmsgs/qp-body_decoded_1.txt (added)
+++ james/mime4j/trunk/src/test/resources/testmsgs/qp-body_decoded_1.txt Mon 
Jul 21 03:20:00 2008
@@ -0,0 +1 @@
+7bit content with euro ยค symbol 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to