You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mime4j-dev@james.apache.org by mw...@apache.org on 2009/01/29 16:05:47 UTC

svn commit: r738880 - in /james/mime4j/trunk/src/main/java/org/apache/james/mime4j: field/Fields.java util/MimeUtil.java

Author: mwiederkehr
Date: Thu Jan 29 15:05:47 2009
New Revision: 738880

URL: http://svn.apache.org/viewvc?rev=738880&view=rev
Log:
MIME4J-100: moved code to format an RFC822 date string into MimeUtil

Modified:
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/Fields.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/util/MimeUtil.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=738880&r1=738879&r2=738880&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 Thu Jan 29 15:05:47 2009
@@ -19,14 +19,9 @@
 
 package org.apache.james.mime4j.field;
 
-import java.text.DateFormat;
-import java.text.FieldPosition;
-import java.text.SimpleDateFormat;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.Locale;
 import java.util.Map;
 import java.util.TimeZone;
 
@@ -67,14 +62,6 @@
                 Field.CONTENT_TRANSFER_ENCODING, contentTransferEncoding);
     }
 
-    public static DateTimeField date(String fieldValue) {
-        return date(Field.DATE, fieldValue);
-    }
-
-    public static DateTimeField date(String fieldName, String fieldValue) {
-        return parse(DateTimeField.class, fieldName, fieldValue);
-    }
-
     public static DateTimeField date(Date date) {
         return date(Field.DATE, date, null);
     }
@@ -84,11 +71,15 @@
     }
 
     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));
+        return date(fieldName, MimeUtil.formatDate(date, zone));
+    }
+
+    public static DateTimeField date(String fieldValue) {
+        return date(Field.DATE, fieldValue);
+    }
+
+    public static DateTimeField date(String fieldName, String fieldValue) {
+        return parse(DateTimeField.class, fieldName, fieldValue);
     }
 
     public static Field messageId(String hostname) {
@@ -256,40 +247,4 @@
         return sb.toString();
     }
 
-    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/main/java/org/apache/james/mime4j/util/MimeUtil.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/util/MimeUtil.java?rev=738880&r1=738879&r2=738880&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/util/MimeUtil.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/util/MimeUtil.java Thu Jan 29 15:05:47 2009
@@ -19,13 +19,19 @@
 
 package org.apache.james.mime4j.util;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
+import java.text.DateFormat;
+import java.text.FieldPosition;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.GregorianCalendar;
 import java.util.HashMap;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Random;
+import java.util.TimeZone;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 /**
  * A utility class, which provides some MIME related application logic.
@@ -394,6 +400,24 @@
     }
 
     /**
+     * Formats the specified date into a RFC 822 date-time string.
+     * 
+     * @param date
+     *            date to be formatted into a string.
+     * @param zone
+     *            the time zone to use or <code>null</code> to use the default
+     *            time zone.
+     * @return the formatted time string.
+     */
+    public static String formatDate(Date date, TimeZone zone) {
+        DateFormat df = RFC822_DATE_FORMAT.get();
+        if (zone != null) {
+            df.setTimeZone(zone);
+        }
+        return df.format(date);
+    }
+
+    /**
      * Splits the specified string into a multiple-line representation with
      * lines no longer than 76 characters (because the line might contain
      * encoded words; see <a href='http://www.faqs.org/rfcs/rfc2047.html'>RFC
@@ -451,4 +475,40 @@
     private static synchronized int nextCounterValue() {
         return counter++;
     }
+
+    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;
+        }
+    }
 }