Author: mwiederkehr
Date: Tue Jan 20 13:56:31 2009
New Revision: 736123
URL: http://svn.apache.org/viewvc?rev=736123&view=rev
Log:
MIME4J-100: getters and setters for Message-ID, Subject and Date in class
Message.
Modified:
james/mime4j/trunk/examples/src/java/org/apache/james/mime4j/samples/transform/TransformMessage.java
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Entity.java
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Message.java
james/mime4j/trunk/src/test/java/org/apache/james/mime4j/message/MessageTest.java
Modified:
james/mime4j/trunk/examples/src/java/org/apache/james/mime4j/samples/transform/TransformMessage.java
URL:
http://svn.apache.org/viewvc/james/mime4j/trunk/examples/src/java/org/apache/james/mime4j/samples/transform/TransformMessage.java?rev=736123&r1=736122&r2=736123&view=diff
==============================================================================
---
james/mime4j/trunk/examples/src/java/org/apache/james/mime4j/samples/transform/TransformMessage.java
(original)
+++
james/mime4j/trunk/examples/src/java/org/apache/james/mime4j/samples/transform/TransformMessage.java
Tue Jan 20 13:56:31 2009
@@ -21,18 +21,16 @@
import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.util.Date;
import java.util.Random;
-import org.apache.james.mime4j.field.Field;
import org.apache.james.mime4j.message.Body;
import org.apache.james.mime4j.message.BodyFactory;
import org.apache.james.mime4j.message.BodyPart;
-import org.apache.james.mime4j.message.Header;
import org.apache.james.mime4j.message.Message;
import org.apache.james.mime4j.message.Mode;
import org.apache.james.mime4j.message.Multipart;
import org.apache.james.mime4j.message.TextBody;
-import org.apache.james.mime4j.util.MimeUtil;
import org.apache.james.mime4j.storage.DefaultStorageProvider;
import org.apache.james.mime4j.storage.StorageProvider;
import org.apache.james.mime4j.storage.TempFileStorageProvider;
@@ -110,14 +108,10 @@
// it should be disposed of.
removed.dispose();
- // Create a unique message ID for the new message.
- Header header = message.getHeader();
- Field messageId = Field.parse("Message-ID", MimeUtil
- .createUniqueMessageId(HOSTNAME));
- header.setField(messageId);
-
- // Set a new subject; note the usage of setField instead of addField
- header.setField(Field.parse("Subject", "Transformed message"));
+ // Set some headers on the transformed message
+ message.createMessageId(HOSTNAME);
+ message.setSubject("Transformed message");
+ message.setDate(new Date());
return message;
}
@@ -127,9 +121,6 @@
* two binary).
*/
private static Message createTemplate() throws IOException {
- Header header = new Header();
- header.addField(Field.parse("Subject", "Template message"));
-
Multipart multipart = new Multipart("mixed");
BodyPart part1 = createTextPart("This is the first part of the
template..");
@@ -142,9 +133,10 @@
multipart.addBodyPart(part3);
Message message = new Message();
- message.setHeader(header);
message.setMultipart(multipart);
+ message.setSubject("Template message");
+
return message;
}
Modified:
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Entity.java
URL:
http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Entity.java?rev=736123&r1=736122&r2=736123&view=diff
==============================================================================
---
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Entity.java
(original)
+++
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Entity.java
Tue Jan 20 13:56:31 2009
@@ -390,7 +390,7 @@
*
* @return the header of this entity; never <code>null</code>.
*/
- protected Header obtainHeader() {
+ Header obtainHeader() {
if (header == null) {
header = new Header();
}
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=736123&r1=736122&r2=736123&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
Tue Jan 20 13:56:31 2009
@@ -19,19 +19,22 @@
package org.apache.james.mime4j.message;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Date;
+import java.util.TimeZone;
+
import org.apache.james.mime4j.MimeException;
import org.apache.james.mime4j.MimeIOException;
+import org.apache.james.mime4j.field.DateTimeField;
import org.apache.james.mime4j.field.Field;
+import org.apache.james.mime4j.field.Fields;
import org.apache.james.mime4j.field.UnstructuredField;
import org.apache.james.mime4j.parser.MimeEntityConfig;
import org.apache.james.mime4j.parser.MimeStreamParser;
import org.apache.james.mime4j.storage.DefaultStorageProvider;
import org.apache.james.mime4j.storage.StorageProvider;
-import java.io.IOException;
-import java.io.InputStream;
-
-
/**
* Represents a MIME message. The following code parses a stream into a
* <code>Message</code> object.
@@ -109,7 +112,7 @@
* @throws IOException on I/O errors.
* @throws MimeIOException on MIME protocol violations.
*/
- public Message(InputStream is, MimeEntityConfig config,
+ public Message(InputStream is, MimeEntityConfig config,
StorageProvider storageProvider) throws IOException,
MimeIOException {
try {
@@ -122,13 +125,121 @@
}
/**
- * Gets the <code>Subject</code> field.
+ * Returns the value of the <i>Message-ID</i> header field of this message
+ * or <code>null</code> if it is not present.
*
- * @return the <code>Subject</code> field or <code>null</code> if it
- * doesn't exist.
+ * @return the identifier of this message.
*/
- public UnstructuredField getSubject() {
- return (UnstructuredField) getHeader().getField(Field.SUBJECT);
+ public String getMessageId() {
+ Field field = obtainField(Field.MESSAGE_ID);
+ if (field == null)
+ return null;
+
+ return field.getBody();
}
-
+
+ /**
+ * Creates and sets a new <i>Message-ID</i> header field for this message.
+ * A <code>Header</code> is created if this message does not already have
+ * one.
+ *
+ * @param hostName
+ * host name to be included in the identifier or
+ * <code>null</code> if no host name should be included.
+ */
+ public void createMessageId(String hostname) {
+ Header header = obtainHeader();
+
+ header.setField(Fields.messageId(hostname));
+ }
+
+ /**
+ * Returns the (decoded) value of the <i>Subject</i> header field of this
+ * message or <code>null</code> if it is not present.
+ *
+ * @return the subject of this message.
+ */
+ public String getSubject() {
+ UnstructuredField field = obtainField(Field.SUBJECT);
+ if (field == null)
+ return null;
+
+ return field.getValue();
+ }
+
+ /**
+ * Sets the <i>Subject</i> header field for this message. The specified
+ * string may contain non-ASCII characters, in which case it gets encoded
as
+ * an 'encoded-word' automatically. A <code>Header</code> is created if
+ * this message does not already have one.
+ *
+ * @param subject
+ * subject to set.
+ */
+ public void setSubject(String subject) {
+ Header header = obtainHeader();
+
+ if (subject == null) {
+ header.removeFields(Field.SUBJECT);
+ } else {
+ header.setField(Fields.subject(subject));
+ }
+ }
+
+ /**
+ * Returns the value of the <i>Date</i> header field of this message as
+ * <code>Date</code> object or <code>null</code> if it is not present.
+ *
+ * @return the date of this message.
+ */
+ public Date getDate() {
+ DateTimeField dateField = obtainField(Field.DATE);
+ if (dateField == null)
+ return null;
+
+ return dateField.getDate();
+ }
+
+ /**
+ * Sets the <i>Date</i> header field for this message. This method uses the
+ * default <code>TimeZone</code> of this host to encode the specified
+ * <code>Date</code> object into a string.
+ *
+ * @param date
+ * date to set.
+ */
+ public void setDate(Date date) {
+ setDate(date, null);
+ }
+
+ /**
+ * Sets the <i>Date</i> header field for this message. The specified
+ * <code>TimeZone</code> is used to encode the specified <code>Date</code>
+ * object into a string.
+ *
+ * @param date
+ * date to set.
+ * @param zone
+ * a time zone.
+ */
+ public void setDate(Date date, TimeZone zone) {
+ Header header = obtainHeader();
+
+ if (date == null) {
+ header.removeFields(Field.DATE);
+ } else {
+ header.setField(Fields.date(Field.DATE, date, zone));
+ }
+ }
+
+ private <F extends Field> F obtainField(String fieldName) {
+ Header header = getHeader();
+ if (header == null)
+ return null;
+
+ @SuppressWarnings("unchecked")
+ F field = (F) header.getField(fieldName);
+ return field;
+ }
+
}
Modified:
james/mime4j/trunk/src/test/java/org/apache/james/mime4j/message/MessageTest.java
URL:
http://svn.apache.org/viewvc/james/mime4j/trunk/src/test/java/org/apache/james/mime4j/message/MessageTest.java?rev=736123&r1=736122&r2=736123&view=diff
==============================================================================
---
james/mime4j/trunk/src/test/java/org/apache/james/mime4j/message/MessageTest.java
(original)
+++
james/mime4j/trunk/src/test/java/org/apache/james/mime4j/message/MessageTest.java
Tue Jan 20 13:56:31 2009
@@ -26,7 +26,9 @@
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
+import java.util.Date;
import java.util.List;
+import java.util.TimeZone;
import junit.framework.TestCase;
@@ -165,6 +167,70 @@
assertTrue("header added", lines.contains(testheader));
}
+ public void testGetMessageId() throws Exception {
+ Message m = new Message();
+ assertNull(m.getMessageId());
+
+ String id = "<ms...@localhost>";
+ Header header = new Header();
+ header.setField(Field.parse("Message-ID", id));
+ m.setHeader(header);
+ assertEquals(id, m.getMessageId());
+ }
+
+ public void testCreateMessageId() throws Exception {
+ Message m = new Message();
+ m.createMessageId("hostname");
+
+ String id = m.getMessageId();
+ assertNotNull(id);
+ assertTrue(id.startsWith("<Mime4j."));
+ assertTrue(id.endsWith("@hostname>"));
+ }
+
+ public void testGetSubject() throws Exception {
+ Message m = new Message();
+ assertNull(m.getSubject());
+
+ String subject = "testing 1 2";
+ Header header = new Header();
+ header.setField(Field.parse("Subject", subject));
+ m.setHeader(header);
+ assertEquals(subject, m.getSubject());
+
+ header.setField(Field.parse("Subject", "=?windows-1252?Q?99_=80?="));
+ assertEquals("99 \u20ac", m.getSubject());
+ }
+
+ public void testSetSubject() throws Exception {
+ Message m = new Message();
+ m.setSubject("Semmelbr\366sel");
+
+ assertEquals("Semmelbr\366sel", m.getSubject());
+ assertEquals("=?ISO-8859-1?Q?Semmelbr=F6sel?=", m.getHeader().getField(
+ "Subject").getBody());
+ }
+
+ public void testGetDate() throws Exception {
+ Message m = new Message();
+ assertNull(m.getDate());
+
+ Header header = new Header();
+ header.setField(Field.parse("Date", "Thu, 1 Jan 1970 05:30:00 +0530"));
+ m.setHeader(header);
+
+ assertEquals(new Date(0), m.getDate());
+ }
+
+ public void testSetDate() throws Exception {
+ Message m = new Message();
+ m.setDate(new Date(86400000), TimeZone.getTimeZone("GMT"));
+
+ assertEquals(new Date(86400000), m.getDate());
+ assertEquals("Fri, 2 Jan 1970 00:00:00 +0000", m.getHeader().getField(
+ "Date").getBody());
+ }
+
public void testDisposeGetsPropagatedToBody() throws Exception {
DummyBody body1 = new DummyBody();
BodyPart part1 = new BodyPart();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]