Author: norman
Date: Thu Feb 22 04:00:19 2007
New Revision: 510469

URL: http://svn.apache.org/viewvc?view=rev&rev=510469
Log:
Add simple write support.

Modified:
    james/mime4j/trunk/src/main/java/org/mime4j/message/BodyPart.java
    james/mime4j/trunk/src/main/java/org/mime4j/message/Message.java
    james/mime4j/trunk/src/main/java/org/mime4j/message/Multipart.java
    james/mime4j/trunk/src/test/java/org/mime4j/message/MessageTest.java

Modified: james/mime4j/trunk/src/main/java/org/mime4j/message/BodyPart.java
URL: 
http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/mime4j/message/BodyPart.java?view=diff&rev=510469&r1=510468&r2=510469
==============================================================================
--- james/mime4j/trunk/src/main/java/org/mime4j/message/BodyPart.java (original)
+++ james/mime4j/trunk/src/main/java/org/mime4j/message/BodyPart.java Thu Feb 
22 04:00:19 2007
@@ -31,10 +31,11 @@
 public class BodyPart extends Entity {
     
     /**
-     * TODO: Implement me
      * 
      * @see org.mime4j.message.Entity#writeTo(java.io.OutputStream)
      */
     public void writeTo(OutputStream out) throws IOException {
+       out.write(getHeader().toString().getBytes());
+       getBody().writeTo(out);
     }
 }

Modified: james/mime4j/trunk/src/main/java/org/mime4j/message/Message.java
URL: 
http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/mime4j/message/Message.java?view=diff&rev=510469&r1=510468&r2=510469
==============================================================================
--- james/mime4j/trunk/src/main/java/org/mime4j/message/Message.java (original)
+++ james/mime4j/trunk/src/main/java/org/mime4j/message/Message.java Thu Feb 22 
04:00:19 2007
@@ -66,6 +66,7 @@
         parser.setContentHandler(new MessageBuilder());
         parser.parse(is);
     }
+
     
     /**
      * Gets the <code>Subject</code> field.
@@ -78,12 +79,23 @@
     }
 
     /**
-     * TODO: Implement me
-     * '//
+     * 
      * @see org.mime4j.message.Entity#writeTo(java.io.OutputStream)
      */
     public void writeTo(OutputStream out) throws IOException {
+       
+       out.write(getHeader().toString().getBytes());
+       out.write("\r\n".getBytes());
+       Body body = getBody();
+       
+       if (body instanceof Multipart) {
+           Multipart mp = (Multipart) body;
+           mp.writeTo(out);
+       } else {
+           body.writeTo(out);
+       }
     }
+    
     
     private class MessageBuilder implements ContentHandler {
         private Stack stack = new Stack();

Modified: james/mime4j/trunk/src/main/java/org/mime4j/message/Multipart.java
URL: 
http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/mime4j/message/Multipart.java?view=diff&rev=510469&r1=510468&r2=510469
==============================================================================
--- james/mime4j/trunk/src/main/java/org/mime4j/message/Multipart.java 
(original)
+++ james/mime4j/trunk/src/main/java/org/mime4j/message/Multipart.java Thu Feb 
22 04:00:19 2007
@@ -26,6 +26,9 @@
 import java.util.LinkedList;
 import java.util.List;
 
+import org.mime4j.field.ContentTypeField;
+import org.mime4j.field.Field;
+
 /**
  * Represents a MIME multipart body (see RFC 2045).A multipart body has a 
  * ordered list of body parts. The multipart body also has a preamble and
@@ -156,10 +159,28 @@
     }
 
     /**
-     * TODO: Implement me
      * 
      * @see org.mime4j.message.Body#writeTo(java.io.OutputStream)
      */
     public void writeTo(OutputStream out) throws IOException {
+       String boundary = getBoundary();
+       List bodyParts = getBodyParts();
+       
+       out.write((getPreamble() + "\r\n").getBytes());
+       
+       for (int i = 0; i < bodyParts.size();i++) {
+           out.write((boundary + "\r\n").getBytes());
+           ((BodyPart)bodyParts.get(i)).writeTo(out);
+       }
+       
+       out.write((getEpilogue() + "\r\n").getBytes());
+       out.write((boundary + "--" + "\r\n").getBytes());
+
+    }
+    
+    private String getBoundary() {
+       Entity e = getParent();
+       ContentTypeField cField = (ContentTypeField) 
e.getHeader().getField(Field.CONTENT_TYPE);
+       return cField.getBoundary();
     }
 }

Modified: james/mime4j/trunk/src/test/java/org/mime4j/message/MessageTest.java
URL: 
http://svn.apache.org/viewvc/james/mime4j/trunk/src/test/java/org/mime4j/message/MessageTest.java?view=diff&rev=510469&r1=510468&r2=510469
==============================================================================
--- james/mime4j/trunk/src/test/java/org/mime4j/message/MessageTest.java 
(original)
+++ james/mime4j/trunk/src/test/java/org/mime4j/message/MessageTest.java Thu 
Feb 22 04:00:19 2007
@@ -19,6 +19,15 @@
 
 package org.mime4j.message;
 
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.List;
+
+import org.apache.commons.io.IOUtils;
 import org.mime4j.field.Field;
 import org.mime4j.message.Header;
 import org.mime4j.message.Message;
@@ -114,6 +123,62 @@
         
         m.setHeader(headerMultipartMixed);
         assertTrue("multipart/mixed", m.isMultipart());
+    }
+    
+    public void testWriteTo() throws IOException {
+       byte[] inputByte = getRawMessageAsByteArray();
+
+       Message m = new Message(new ByteArrayInputStream(inputByte));
+       ByteArrayOutputStream out = new  ByteArrayOutputStream();
+       
+       m.writeTo(out);
+       
+       InputStream output = new ByteArrayInputStream(out.toByteArray());
+       
+       int b = -1;
+       int i = 0;
+       while ((b = output.read() ) != -1) {
+           assertEquals("same byte", b, inputByte[i]);
+           i++;
+       }
+    }
+    
+    public void testAddHeaderWriteTo() throws IOException {
+       String headerName = "testheader";
+       String headerValue = "testvalue";
+       String testheader = headerName + ": " + headerValue;
+
+       byte[] inputByte = getRawMessageAsByteArray();
+       
+       Message m = new Message(new ByteArrayInputStream(inputByte));
+       m.getHeader().addField(Field.parse(testheader));
+       
+       assertEquals("header 
added",m.getHeader().getField(headerName).getBody(),headerValue);
+       
+       ByteArrayOutputStream out = new  ByteArrayOutputStream();
+       m.writeTo(out);
+       List lines = IOUtils.readLines((new BufferedReader(new 
InputStreamReader(new ByteArrayInputStream(out.toByteArray())))));
+       
+       assertTrue("header added",lines.contains(testheader));
+    }
+    
+    private byte[] getRawMessageAsByteArray() {
+       StringBuffer header = new StringBuffer();
+       StringBuffer body = new StringBuffer();
+       StringBuffer complete = new StringBuffer();
+       
+       header.append("Date: Wed, 21 Feb 2007 11:09:27 +0100\r\n");
+       header.append("From: Test <[EMAIL PROTECTED]>\r\n");
+       header.append("To: Norman Maurer <[EMAIL PROTECTED]>\r\n");
+       header.append("Subject: Testmail\r\n");
+       header.append("Content-Type: text/plain; charset=ISO-8859-15; 
format=flowed\r\n");
+       header.append("Content-Transfer-Encoding: 8bit\r\n");
+       body.append("\r\n");
+       body.append("testbody\r\n");
+       complete.append(header);
+       complete.append(body);
+       
+       return complete.toString().getBytes();
     }
 
 }



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

Reply via email to