Author: rdonkin
Date: Mon Jul  7 13:23:15 2008
New Revision: 674620

URL: http://svn.apache.org/viewvc?rev=674620&view=rev
Log:
Added new recursion mode.

Modified:
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeEntity.java
    
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeTokenStream.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/RecursionMode.java
    james/mime4j/trunk/src/test/java/org/apache/james/mime4j/ExampleMail.java

Modified: 
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeEntity.java
URL: 
http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeEntity.java?rev=674620&r1=674619&r2=674620&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeEntity.java 
(original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeEntity.java 
Mon Jul  7 13:23:15 2008
@@ -93,7 +93,9 @@
             break;
         case EntityStates.T_END_HEADER:
             String mimeType = body.getMimeType();
-            if (MimeUtil.isMultipart(mimeType)) {
+            if (recursionMode == RecursionMode.M_FLAT) {
+                state = EntityStates.T_BODY;
+            } else if (MimeUtil.isMultipart(mimeType)) {
                 state = EntityStates.T_START_MULTIPART;
                 clearMimeStream();
             } else if (recursionMode != RecursionMode.M_NO_RECURSE 

Modified: 
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeTokenStream.java
URL: 
http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeTokenStream.java?rev=674620&r1=674619&r2=674620&view=diff
==============================================================================
--- 
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeTokenStream.java 
(original)
+++ 
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeTokenStream.java 
Mon Jul  7 13:23:15 2008
@@ -156,6 +156,7 @@
             currentStateMachine = rawentity;
             break;
         case M_NO_RECURSE:
+        case M_FLAT:
             // expected to be called only at start of paring
         case M_RECURSE:
             MimeEntity mimeentity = new MimeEntity(

Modified: 
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/RecursionMode.java
URL: 
http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/RecursionMode.java?rev=674620&r1=674619&r2=674620&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/RecursionMode.java 
(original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/RecursionMode.java 
Mon Jul  7 13:23:15 2008
@@ -39,5 +39,11 @@
      * @see #getRecursionMode() 
      */
     public static final int M_RAW = 2;
+    /**
+     * Do not recurse <code>message/rfc822</code> parts
+     * and treat multiparts as a single flat body. 
+     * @see #getRecursionMode()
+     */
+    public static final int M_FLAT = 3;
     
 }

Modified: 
james/mime4j/trunk/src/test/java/org/apache/james/mime4j/ExampleMail.java
URL: 
http://svn.apache.org/viewvc/james/mime4j/trunk/src/test/java/org/apache/james/mime4j/ExampleMail.java?rev=674620&r1=674619&r2=674620&view=diff
==============================================================================
--- james/mime4j/trunk/src/test/java/org/apache/james/mime4j/ExampleMail.java 
(original)
+++ james/mime4j/trunk/src/test/java/org/apache/james/mime4j/ExampleMail.java 
Mon Jul  7 13:23:15 2008
@@ -23,12 +23,112 @@
 
 public class ExampleMail {
     
+    public static final String 
MIME_MULTIPART_EMBEDDED_MESSAGES_INNER_MULTIPART_MIXED = 
"--4.66920160910299\r\n" + 
+            "Content-Type: image/gif\r\n" + 
+            "Content-Transfer-Encoding: base64\r\n" + 
+            "MIME-Version: 1.0\r\n" + 
+            "Content-ID: 238478934723847238947892374\r\n" + 
+            "Content-Description: Bogus Image Data\r\n" + 
+            "\r\n" + 
+            "ABCDFEGHIJKLMNO\r\n" + 
+            "\r\n" + 
+            "--4.66920160910299\r\n" + 
+            "Content-Type: message/rfc822\r\n" + 
+            "\r\n" + 
+            "From: Timothy Tayler <[EMAIL PROTECTED]>\r\n" + 
+            "To: John Smith <[EMAIL PROTECTED]>\r\n" + 
+            "Date: Sat, 16 Feb 2008 12:00:00 +0000 (GMT)\r\n" + 
+            "Subject: Another Example Email\r\n" + 
+            "Content-Type: multipart/mixed;boundary=2.50290787509\r\n" + 
+            "\r\n" + 
+            "Yet another preamble\r\n" + 
+            "\r\n" + 
+            "--2.50290787509\r\n" + 
+            "Content-Type: text/plain\r\n" + 
+            "\r\n" + 
+            "Rhubard AND Custard!\r\n" + 
+            "\r\n" + 
+            "--2.50290787509\r\n" + 
+            "Content-Type: 
multipart/alternative;boundary=3.243F6A8885A308D3\r\n" + 
+            "\r\n" + 
+            "--3.243F6A8885A308D3\r\n" + 
+            "Content-Type: text/plain\r\n" + 
+            "\r\n" + 
+            "Rhubard?Custard?\r\n" + 
+            "\r\n" + 
+            "--3.243F6A8885A308D3\r\n" + 
+            "\r\n" + 
+            "Content-Type: text/richtext\r\n" + 
+            "\r\n" + 
+            "Rhubard?Custard?\r\n" + 
+            "\r\n" + 
+            "--3.243F6A8885A308D3--\r\n" + 
+            "\r\n" + 
+            "--2.50290787509--\r\n" + 
+            "\r\n" + 
+            "--4.66920160910299--";
+
+    public static final String MIME_MULTIPART_EMBEDDED_MESSAGES_INNER_MAIL = 
"From: Timothy Tayler <[EMAIL PROTECTED]>\r\n" + 
+            "To: Samual Smith <[EMAIL PROTECTED]>\r\n" + 
+            "Date: Thu, 14 Feb 2008 12:00:00 +0000 (GMT)\r\n" + 
+            "Subject: A Multipart Alternative Email\r\n" + 
+            "Content-Type: multipart/alternative;boundary=42\r\n" + 
+            "\r\n" + 
+            "This message has a premable\r\n" + 
+            "\r\n" + 
+            "--42\r\n" + 
+            "Content-Type: text/plain; charset=US-ASCII\r\n" + 
+            "\r\n" + 
+            "Custard!\r\n" + 
+            "\r\n" + 
+            "--42\r\n" + 
+            "Content-Type: application/octet-stream\r\n" + 
+            "\r\n" + 
+            "CUSTARDCUSTARDCUSTARD\r\n" + 
+            "\r\n" + 
+            "--42--\r\n";
+
+    public static final String MIME_MULTIPART_EMBEDDED_MESSAGES_BODY = "Start 
with a preamble\r\n" + 
+            "\r\n" + 
+            "--1729\r\n" + 
+            "Content-Type: text/plain; charset=US-ASCII\r\n" + 
+            "\r\n" + 
+            "Rhubarb!\r\n" + 
+            "\r\n" + 
+            "--1729\r\n" + 
+            "Content-Type: application/octet-stream\r\n" + 
+            "Content-Transfer-Encoding: base64\r\n" + 
+            "\r\n" + 
+            "987654321AHPLA\r\n" + 
+            "\r\n" + 
+            "--1729\r\n" + 
+            "Content-Type: message/rfc822\r\n" + 
+            "\r\n" + 
+            MIME_MULTIPART_EMBEDDED_MESSAGES_INNER_MAIL + 
+            "\r\n" + 
+            "--1729\r\n" + 
+            "Content-Type: multipart/mixed; boundary=4.66920160910299\r\n" + 
+            "\r\n" + 
+            MIME_MULTIPART_EMBEDDED_MESSAGES_INNER_MULTIPART_MIXED + "\r\n" +
+            "--1729--\r\n" + 
+            "\r\n";
+    
     public static final String MD5_CONTENT = "Q2hlY2sgSW50ZWdyaXR5IQ==";
     public static final String CONTENT_DESCRIPTION = "Blah blah blah";
     public static final String CONTENT_ID = "<[EMAIL PROTECTED]>";
     public static final Charset US_ASCII = Charset.forName("US-ASCII");
     public static final Charset LATIN1 = Charset.forName("ISO-8859-1");
     
+    public static final String MIME_MULTIPART_EMBEDDED_MESSAGES = 
+        "From: Timothy Tayler <[EMAIL PROTECTED]>\r\n" + 
+        "To: Samual Smith <[EMAIL PROTECTED]>\r\n" + 
+        "Date: Thu, 14 Feb 2008 12:00:00 +0000 (GMT)\r\n" + 
+        "Subject: A Multipart Email\r\n" + 
+        "Content-Type: multipart/mixed;boundary=1729\r\n" + 
+        "\r\n" + 
+        MIME_MULTIPART_EMBEDDED_MESSAGES_BODY; 
+
+    
     public static final String MULTIPART_WITH_CONTENT_LOCATION = 
         "From: Timothy Tayler <[EMAIL PROTECTED]>\r\n" +
         "To: Samual Smith <[EMAIL PROTECTED]>\r\n" +
@@ -524,7 +624,8 @@
     public static final byte[] 
ONE_PART_MIME_ASCII_COMMENT_IN_MIME_VERSION_BYTES = 
US_ASCII.encode(ONE_PART_MIME_ASCII_COMMENT_IN_MIME_VERSION).array();
     public static final byte[] 
ONE_PART_MIME_ASCII_MIME_VERSION_SPANS_TWO_LINES_BYTES = 
US_ASCII.encode(ONE_PART_MIME_ASCII_MIME_VERSION_SPANS_TWO_LINES).array();
     public static final byte[] MAIL_WITH_RFC822_PART_BYTES = 
ascii(MAIL_WITH_RFC822_PART);
-
+    public static final byte[] MIME_MULTIPART_EMBEDDED_MESSAGES_BYTES = 
ascii(MIME_MULTIPART_EMBEDDED_MESSAGES);
+    
     public static final byte[] ascii(String text) {
         
         return US_ASCII.encode(text).array();



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

Reply via email to