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