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 mw...@apache.org on 2009/01/13 00:18:45 UTC
svn commit: r733960 - in /james/mime4j/trunk/src:
main/java/org/apache/james/mime4j/field/Fields.java
test/java/org/apache/james/mime4j/field/FieldsTest.java
Author: mwiederkehr
Date: Mon Jan 12 15:18:41 2009
New Revision: 733960
URL: http://svn.apache.org/viewvc?rev=733960&view=rev
Log:
MIME4J-100: methods for creating Date header fields
Modified:
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/Fields.java
james/mime4j/trunk/src/test/java/org/apache/james/mime4j/field/FieldsTest.java
Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/Fields.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/Fields.java?rev=733960&r1=733959&r2=733960&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/Fields.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/Fields.java Mon Jan 12 15:18:41 2009
@@ -19,7 +19,14 @@
package org.apache.james.mime4j.field;
+import java.text.DateFormat;
+import java.text.FieldPosition;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.Locale;
import java.util.Map;
+import java.util.TimeZone;
import org.apache.james.mime4j.util.MimeUtil;
@@ -57,6 +64,30 @@
Field.CONTENT_TRANSFER_ENCODING, contentTransferEncoding);
}
+ public static DateTimeField date(String fieldValue) {
+ return date("Date", fieldValue);
+ }
+
+ public static DateTimeField date(String fieldName, String fieldValue) {
+ return (DateTimeField) Field.parse(fieldName, fieldValue);
+ }
+
+ public static DateTimeField date(Date date) {
+ return date("Date", date, null);
+ }
+
+ public static DateTimeField date(String fieldName, Date date) {
+ return date(fieldName, date, null);
+ }
+
+ public static DateTimeField date(String fieldName, Date date, TimeZone zone) {
+ DateFormat df = RFC822_DATE_FORMAT.get();
+ if (zone != null) {
+ df.setTimeZone(zone);
+ }
+ return date(fieldName, df.format(date));
+ }
+
private static String quote(String value) {
for (int idx = 0; idx < value.length(); idx++) {
if (isSpecial(value.charAt(idx))) {
@@ -72,4 +103,41 @@
final String tspecials = "()<>@,;:\\\"/[]?="; // rfc 2045
return ch < 32 || ch >= 127 || tspecials.indexOf(ch) != -1;
}
+
+ private static final ThreadLocal<DateFormat> RFC822_DATE_FORMAT = new ThreadLocal<DateFormat>() {
+ @Override
+ protected DateFormat initialValue() {
+ return new Rfc822DateFormat();
+ }
+ };
+
+ private static final class Rfc822DateFormat extends SimpleDateFormat {
+ private static final long serialVersionUID = 1L;
+
+ public Rfc822DateFormat() {
+ super("EEE, d MMM yyyy HH:mm:ss ", Locale.US);
+ }
+
+ @Override
+ public StringBuffer format(Date date, StringBuffer toAppendTo,
+ FieldPosition pos) {
+ StringBuffer sb = super.format(date, toAppendTo, pos);
+
+ int zoneMillis = calendar.get(GregorianCalendar.ZONE_OFFSET);
+ int dstMillis = calendar.get(GregorianCalendar.DST_OFFSET);
+ int minutes = (zoneMillis + dstMillis) / 1000 / 60;
+
+ if (minutes < 0) {
+ sb.append('-');
+ minutes = -minutes;
+ } else {
+ sb.append('+');
+ }
+
+ sb.append(String.format("%02d%02d", minutes / 60, minutes % 60));
+
+ return sb;
+ }
+ }
+
}
Modified: james/mime4j/trunk/src/test/java/org/apache/james/mime4j/field/FieldsTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/test/java/org/apache/james/mime4j/field/FieldsTest.java?rev=733960&r1=733959&r2=733960&view=diff
==============================================================================
--- james/mime4j/trunk/src/test/java/org/apache/james/mime4j/field/FieldsTest.java (original)
+++ james/mime4j/trunk/src/test/java/org/apache/james/mime4j/field/FieldsTest.java Mon Jan 12 15:18:41 2009
@@ -19,8 +19,10 @@
package org.apache.james.mime4j.field;
+import java.util.Date;
import java.util.HashMap;
import java.util.Map;
+import java.util.TimeZone;
import junit.framework.TestCase;
@@ -77,4 +79,54 @@
assertEquals("Content-Transfer-Encoding: base64", field.getRaw());
}
+ public void testDateString() throws Exception {
+ DateTimeField field = Fields.date("Thu, 1 Jan 1970 00:00:00 +0000");
+ assertTrue(field.isValidField());
+
+ assertEquals("Date: Thu, 1 Jan 1970 00:00:00 +0000", field.getRaw());
+ assertEquals(new Date(0), field.getDate());
+ }
+
+ public void testDateStringString() throws Exception {
+ DateTimeField field = Fields.date("Resent-Date",
+ "Thu, 1 Jan 1970 00:00:00 +0000");
+ assertTrue(field.isValidField());
+
+ assertEquals("Resent-Date: Thu, 1 Jan 1970 00:00:00 +0000", field
+ .getRaw());
+ assertEquals(new Date(0), field.getDate());
+ }
+
+ public void testDateStringDateTimeZone() throws Exception {
+ DateTimeField field = Fields.date("Date", new Date(0), TimeZone
+ .getTimeZone("GMT"));
+ assertTrue(field.isValidField());
+
+ assertEquals("Date: Thu, 1 Jan 1970 00:00:00 +0000", field.getRaw());
+ assertEquals(new Date(0), field.getDate());
+
+ field = Fields.date("Resent-Date", new Date(0), TimeZone
+ .getTimeZone("GMT+1"));
+ assertTrue(field.isValidField());
+
+ assertEquals("Resent-Date: Thu, 1 Jan 1970 01:00:00 +0100", field
+ .getRaw());
+ assertEquals(new Date(0), field.getDate());
+ }
+
+ public void testDateDST() throws Exception {
+ long millis = 1216221153000l;
+ DateTimeField field = Fields.date("Date", new Date(millis), TimeZone
+ .getTimeZone("CET"));
+ assertTrue(field.isValidField());
+
+ assertEquals("Date: Wed, 16 Jul 2008 17:12:33 +0200", field.getRaw());
+ assertEquals(new Date(millis), field.getDate());
+ }
+
+ public void testInvalidDate() throws Exception {
+ DateTimeField field = Fields.date("Thu, Jan 1 1969 00:00:00 +0000");
+ assertFalse(field.isValidField());
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org