You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2007/02/22 13:00:22 UTC

svn commit: r510469 - in /james/mime4j/trunk/src: main/java/org/mime4j/message/BodyPart.java main/java/org/mime4j/message/Message.java main/java/org/mime4j/message/Multipart.java test/java/org/mime4j/message/MessageTest.java

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 <te...@test>\r\n");
+	header.append("To: Norman Maurer <nm...@byteaction.de>\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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org