commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From adri...@apache.org
Subject svn commit: r932851 - in /commons/sandbox/convert/trunk/src: main/java/org/apache/commons/convert/DateTimeConverters.java test/java/org/apache/commons/convert/TestDateTimeConverters.java
Date Sun, 11 Apr 2010 08:08:29 GMT
Author: adrianc
Date: Sun Apr 11 08:08:28 2010
New Revision: 932851

URL: http://svn.apache.org/viewvc?rev=932851&view=rev
Log:
Improved date/time conversion reflection, added date/time converter localized tests.

Modified:
    commons/sandbox/convert/trunk/src/main/java/org/apache/commons/convert/DateTimeConverters.java
    commons/sandbox/convert/trunk/src/test/java/org/apache/commons/convert/TestDateTimeConverters.java

Modified: commons/sandbox/convert/trunk/src/main/java/org/apache/commons/convert/DateTimeConverters.java
URL: http://svn.apache.org/viewvc/commons/sandbox/convert/trunk/src/main/java/org/apache/commons/convert/DateTimeConverters.java?rev=932851&r1=932850&r2=932851&view=diff
==============================================================================
--- commons/sandbox/convert/trunk/src/main/java/org/apache/commons/convert/DateTimeConverters.java
(original)
+++ commons/sandbox/convert/trunk/src/main/java/org/apache/commons/convert/DateTimeConverters.java
Sun Apr 11 08:08:28 2010
@@ -18,6 +18,7 @@
  *******************************************************************************/
 package org.apache.commons.convert;
 
+import java.sql.Time;
 import java.sql.Timestamp;
 import java.text.DateFormat;
 import java.text.ParseException;
@@ -30,37 +31,34 @@ import java.util.TimeZone;
 /** Date/time Converter classes. */
 public class DateTimeConverters implements ConverterLoader {
 
-    public static final String CALENDAR_FORMAT = "EEE MMM dd HH:mm:ss.SSS zzz yyyy";
+    public static final String CALENDAR_FORMAT = "EEE MMM dd HH:mm:ss.SSS z yyyy";
+    public static final String JDBC_DATE_FORMAT = "yyyy-MM-dd";
+    public static final String JDBC_TIME_FORMAT = "HH:mm:ss";
+    public static final String JDBC_TIMESTAMP_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";
 
     /**
      * Returns an initialized DateFormat object.
-     *
-     * @param dateFormat
-     *            optional format string
+     * 
      * @param tz
-     * @param locale
-     *            can be null if dateFormat is not null
      * @return DateFormat object
      */
-    public static DateFormat toDateFormat(String dateFormat, TimeZone tz, Locale locale)
{
-        DateFormat df = null;
-        if (Util.isEmpty(dateFormat)) {
-            df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
-        } else {
-            df = new SimpleDateFormat(dateFormat);
-        }
+    protected static DateFormat toDateFormat(TimeZone tz) {
+        DateFormat df = new SimpleDateFormat(JDBC_DATE_FORMAT);
         df.setTimeZone(tz);
         return df;
     }
 
     /**
      * Returns an initialized DateFormat object.
-     * @param dateTimeFormat optional format string
+     * 
+     * @param dateTimeFormat
+     *            optional format string
      * @param tz
-     * @param locale can be null if dateTimeFormat is not null
+     * @param locale
+     *            can be null if dateTimeFormat is not null
      * @return DateFormat object
      */
-    public static DateFormat toDateTimeFormat(String dateTimeFormat, TimeZone tz, Locale
locale) {
+    protected static DateFormat toDateTimeFormat(String dateTimeFormat, TimeZone tz, Locale
locale) {
         DateFormat df = null;
         if (Util.isEmpty(dateTimeFormat)) {
             df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM, locale);
@@ -73,18 +71,12 @@ public class DateTimeConverters implemen
 
     /**
      * Returns an initialized DateFormat object.
-     * @param timeFormat optional format string
+     * 
      * @param tz
-     * @param locale can be null if timeFormat is not null
      * @return DateFormat object
      */
-    public static DateFormat toTimeFormat(String timeFormat, TimeZone tz, Locale locale)
{
-        DateFormat df = null;
-        if (Util.isEmpty(timeFormat)) {
-            df = DateFormat.getTimeInstance(DateFormat.MEDIUM, locale);
-        } else {
-            df = new SimpleDateFormat(timeFormat);
-        }
+    protected static DateFormat toTimeFormat(TimeZone tz) {
+        DateFormat df = new SimpleDateFormat(JDBC_TIME_FORMAT);
         df.setTimeZone(tz);
         return df;
     }
@@ -107,8 +99,6 @@ public class DateTimeConverters implemen
         Converters.registerConverter(new GenericSingletonToSet<java.sql.Date>(java.sql.Date.class));
         Converters.registerConverter(new GenericSingletonToSet<java.sql.Time>(java.sql.Time.class));
         Converters.registerConverter(new GenericSingletonToSet<java.sql.Timestamp>(java.sql.Timestamp.class));
-        Converters.registerConverter(new GenericToStringConverter<java.sql.Date>(java.sql.Date.class));
-        Converters.registerConverter(new GenericToStringConverter<java.sql.Time>(java.sql.Time.class));
     }
 
     public static class CalendarToLong extends AbstractConverter<Calendar, Long> {
@@ -134,7 +124,7 @@ public class DateTimeConverters implemen
         }
 
         public String convert(Calendar obj, Locale locale, TimeZone timeZone, String formatString)
throws ConversionException {
-            DateFormat df = toDateTimeFormat(formatString, timeZone, locale);
+            DateFormat df = toDateTimeFormat(formatString == null ? CALENDAR_FORMAT : formatString,
timeZone, locale);
             df.setCalendar(obj);
             return df.format(obj.getTime());
         }
@@ -167,7 +157,7 @@ public class DateTimeConverters implemen
         }
 
         public String convert(Date obj, Locale locale, TimeZone timeZone, String formatString)
throws ConversionException {
-            DateFormat df = toDateTimeFormat(formatString, timeZone, locale);
+            DateFormat df = toDateTimeFormat(formatString == null ? CALENDAR_FORMAT : formatString,
timeZone, locale);
             return df.format(obj);
         }
     }
@@ -193,7 +183,7 @@ public class DateTimeConverters implemen
         }
 
         public Long convert(S obj) throws ConversionException {
-             return obj.getTime();
+            return obj.getTime();
         }
     }
 
@@ -207,7 +197,7 @@ public class DateTimeConverters implemen
         }
     }
 
-    public static class LongToCalendar extends AbstractLocalizedConverter<Long, Calendar>
{
+    public static class LongToCalendar extends GenericLocalizedConverter<Long, Calendar>
{
         public LongToCalendar() {
             super(Long.class, Calendar.class);
         }
@@ -218,15 +208,11 @@ public class DateTimeConverters implemen
             return cal;
         }
 
-        public Calendar convert(Long obj, Locale locale, TimeZone timeZone) throws ConversionException
{
+        public Calendar convert(Long obj, Locale locale, TimeZone timeZone, String formatString)
throws ConversionException {
             Calendar cal = Calendar.getInstance(timeZone, locale);
             cal.setTimeInMillis(obj);
             return cal;
         }
-
-        public Calendar convert(Long obj, Locale locale, TimeZone timeZone, String formatString)
throws ConversionException {
-            return convert(obj, locale, timeZone);
-        }
     }
 
     public static class LongToDate extends AbstractConverter<Long, Date> {
@@ -235,7 +221,7 @@ public class DateTimeConverters implemen
         }
 
         public Date convert(Long obj) throws ConversionException {
-             return new Date(obj.longValue());
+            return new Date(obj.longValue());
         }
     }
 
@@ -245,7 +231,7 @@ public class DateTimeConverters implemen
         }
 
         public java.sql.Date convert(Long obj) throws ConversionException {
-             return new java.sql.Date(obj.longValue());
+            return new java.sql.Date(obj.longValue());
         }
     }
 
@@ -255,7 +241,7 @@ public class DateTimeConverters implemen
         }
 
         public java.sql.Time convert(Long obj) throws ConversionException {
-             return new java.sql.Time(obj.longValue());
+            return new java.sql.Time(obj.longValue());
         }
     }
 
@@ -265,7 +251,7 @@ public class DateTimeConverters implemen
         }
 
         public java.sql.Timestamp convert(Long obj) throws ConversionException {
-             return new java.sql.Timestamp(obj.longValue());
+            return new java.sql.Timestamp(obj.longValue());
         }
     }
 
@@ -284,6 +270,22 @@ public class DateTimeConverters implemen
         }
     }
 
+    public static class SqlDateToString extends GenericLocalizedConverter<java.sql.Date,
String> {
+        public SqlDateToString() {
+            super(java.sql.Date.class, String.class);
+        }
+
+        @Override
+        public String convert(java.sql.Date obj) throws ConversionException {
+            return obj.toString();
+        }
+
+        public String convert(java.sql.Date obj, Locale locale, TimeZone timeZone, String
formatString) throws ConversionException {
+            DateFormat df = toDateFormat(timeZone);
+            return df.format(obj);
+        }
+    }
+
     public static class SqlDateToTimestamp extends AbstractConverter<java.sql.Date, java.sql.Timestamp>
{
         public SqlDateToTimestamp() {
             super(java.sql.Date.class, java.sql.Timestamp.class);
@@ -296,7 +298,23 @@ public class DateTimeConverters implemen
 
         public java.sql.Timestamp convert(java.sql.Date obj) throws ConversionException {
             return new java.sql.Timestamp(obj.getTime());
-       }
+        }
+    }
+
+    public static class SqlTimeToString extends GenericLocalizedConverter<java.sql.Time,
String> {
+        public SqlTimeToString() {
+            super(java.sql.Time.class, String.class);
+        }
+
+        @Override
+        public String convert(java.sql.Time obj) throws ConversionException {
+            return obj.toString();
+        }
+
+        public String convert(java.sql.Time obj, Locale locale, TimeZone timeZone, String
formatString) throws ConversionException {
+            DateFormat df = toTimeFormat(timeZone);
+            return df.format(obj);
+        }
     }
 
     public static class StringToCalendar extends GenericLocalizedConverter<String, Calendar>
{
@@ -316,7 +334,7 @@ public class DateTimeConverters implemen
         }
 
         public Calendar convert(String obj, Locale locale, TimeZone timeZone, String formatString)
throws ConversionException {
-            DateFormat df = toDateTimeFormat(formatString, timeZone, locale);
+            DateFormat df = toDateTimeFormat(formatString == null ? CALENDAR_FORMAT : formatString,
timeZone, locale);
             try {
                 Date date = df.parse(obj);
                 Calendar cal = Calendar.getInstance(timeZone, locale);
@@ -344,7 +362,7 @@ public class DateTimeConverters implemen
         }
 
         public Date convert(String obj, Locale locale, TimeZone timeZone, String formatString)
throws ConversionException {
-            DateFormat df = toDateTimeFormat(formatString, timeZone, locale);
+            DateFormat df = toDateTimeFormat(formatString == null ? CALENDAR_FORMAT : formatString,
timeZone, locale);
             try {
                 return df.parse(obj);
             } catch (ParseException e) {
@@ -353,7 +371,7 @@ public class DateTimeConverters implemen
         }
     }
 
-    public static class StringToSqlDate extends AbstractConverter<String, java.sql.Date>
{
+    public static class StringToSqlDate extends GenericLocalizedConverter<String, java.sql.Date>
{
         public StringToSqlDate() {
             super(String.class, java.sql.Date.class);
         }
@@ -362,9 +380,19 @@ public class DateTimeConverters implemen
         public java.sql.Date convert(String obj) throws ConversionException {
             return java.sql.Date.valueOf(obj);
         }
+
+        @Override
+        public java.sql.Date convert(String obj, Locale locale, TimeZone timeZone, String
formatString) throws ConversionException {
+            DateFormat df = toDateFormat(timeZone);
+            try {
+                return new java.sql.Date(df.parse(obj).getTime());
+            } catch (ParseException e) {
+                throw new ConversionException(e);
+            }
+        }
     }
 
-    public static class StringToSqlTime extends AbstractConverter<String, java.sql.Time>
{
+    public static class StringToSqlTime extends GenericLocalizedConverter<String, java.sql.Time>
{
         public StringToSqlTime() {
             super(String.class, java.sql.Time.class);
         }
@@ -373,6 +401,16 @@ public class DateTimeConverters implemen
         public java.sql.Time convert(String obj) throws ConversionException {
             return java.sql.Time.valueOf(obj);
         }
+
+        @Override
+        public Time convert(String obj, Locale locale, TimeZone timeZone, String formatString)
throws ConversionException {
+            DateFormat df = toTimeFormat(timeZone);
+            try {
+                return new java.sql.Time(df.parse(obj).getTime());
+            } catch (ParseException e) {
+                throw new ConversionException(e);
+            }
+        }
     }
 
     public static class StringToTimestamp extends GenericLocalizedConverter<String, java.sql.Timestamp>
{
@@ -386,7 +424,7 @@ public class DateTimeConverters implemen
         }
 
         public java.sql.Timestamp convert(String obj, Locale locale, TimeZone timeZone, String
formatString) throws ConversionException {
-            DateFormat df = toDateTimeFormat(formatString, timeZone, locale);
+            DateFormat df = toDateTimeFormat(formatString == null ? JDBC_TIMESTAMP_FORMAT
: formatString, timeZone, locale);
             try {
                 return new java.sql.Timestamp(df.parse(obj).getTime());
             } catch (ParseException e) {
@@ -431,7 +469,7 @@ public class DateTimeConverters implemen
         }
 
         public String convert(java.sql.Timestamp obj, Locale locale, TimeZone timeZone, String
formatString) throws ConversionException {
-            DateFormat df = toDateFormat(formatString, timeZone, locale);
+            DateFormat df = toDateTimeFormat(formatString == null ? JDBC_TIMESTAMP_FORMAT
: formatString, timeZone, locale);
             return df.format(obj);
         }
     }

Modified: commons/sandbox/convert/trunk/src/test/java/org/apache/commons/convert/TestDateTimeConverters.java
URL: http://svn.apache.org/viewvc/commons/sandbox/convert/trunk/src/test/java/org/apache/commons/convert/TestDateTimeConverters.java?rev=932851&r1=932850&r2=932851&view=diff
==============================================================================
--- commons/sandbox/convert/trunk/src/test/java/org/apache/commons/convert/TestDateTimeConverters.java
(original)
+++ commons/sandbox/convert/trunk/src/test/java/org/apache/commons/convert/TestDateTimeConverters.java
Sun Apr 11 08:08:28 2010
@@ -23,6 +23,7 @@ import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Collection;
 import java.util.List;
+import java.util.Locale;
 import java.util.Set;
 import java.util.TimeZone;
 
@@ -41,12 +42,23 @@ public class TestDateTimeConverters exte
             assertEquals(label + " registered", converter.getClass(), Converters.getConverter(source.getClass(),
target.getClass()).getClass());
         }
         assertEquals(label + " converted", target, converter.convert(source));
+        Converter<T, S> reflectiveConverter = null;
         try {
-            Converter<T, S> reflectiveConverter = (Converter<T, S>) Converters.getConverter(target.getClass(),
source.getClass());
+            reflectiveConverter = (Converter<T, S>) Converters.getConverter(target.getClass(),
source.getClass());
             assertEquals(label + " reflection converted", source, reflectiveConverter.convert(target));
         } catch (ClassNotFoundException e) {
             System.out.println(converter.getClass() + " not reflective");
         }
+        try {
+            LocalizedConverter<S,T> localizedConverter = (LocalizedConverter) converter;
+            T localizedResult = localizedConverter.convert(source, Locale.getDefault(), TimeZone.getDefault());
+            T formattedResult = localizedConverter.convert(source, Locale.getDefault(), TimeZone.getDefault(),
DateTimeConverters.CALENDAR_FORMAT);
+            if (reflectiveConverter != null) {
+                LocalizedConverter<T, S> localizedReflectiveConverter = (LocalizedConverter)
reflectiveConverter;
+                assertEquals(label + " localized reflection converted", source, localizedReflectiveConverter.convert(localizedResult,
Locale.getDefault(), TimeZone.getDefault()));
+                assertEquals(label + " formatted reflection converted", source, localizedReflectiveConverter.convert(formattedResult,
Locale.getDefault(), TimeZone.getDefault(), DateTimeConverters.CALENDAR_FORMAT));
+            }
+        } catch (ClassCastException e) {}
     }
 
     @SuppressWarnings("unchecked")
@@ -77,8 +89,8 @@ public class TestDateTimeConverters exte
         // Source class = java.util.Calendar
         DateFormat df = new SimpleDateFormat(DateTimeConverters.CALENDAR_FORMAT);
         df.setCalendar(cal);
-        assertConversion("CalendarToLong", new DateTimeConverters.CalendarToLong(), cal ,
currentTime);
-        assertConversion("CalendarToString", new DateTimeConverters.CalendarToString(), cal
, df.format(cal.getTime()));
+        assertConversion("CalendarToLong", new DateTimeConverters.CalendarToLong(), cal,
currentTime);
+        assertConversion("CalendarToString", new DateTimeConverters.CalendarToString(), cal,
df.format(cal.getTime()));
         assertToCollection("CalendarToCollection", cal);
         // Source class = java.util.Date
         assertConversion("DateToLong", new DateTimeConverters.GenericDateToLong<java.util.Date>(java.util.Date.class),
utilDate, currentTime);
@@ -91,11 +103,13 @@ public class TestDateTimeConverters exte
         // Source class = java.sql.Date
         assertConversion("SqlDateToDate", new DateTimeConverters.SqlDateToDate(), sqlDate,
new java.util.Date(sqlDate.getTime()));
         assertConversion("SqlDateToLong", new DateTimeConverters.GenericDateToLong<java.sql.Date>(java.sql.Date.class),
sqlDate, sqlDate.getTime());
+        assertConversion("SqlDateToString", new DateTimeConverters.SqlDateToString(), sqlDate,
sqlDate.toString());
         assertConversion("SqlDateToTimestamp", new DateTimeConverters.SqlDateToTimestamp(),
sqlDate, new java.sql.Timestamp(sqlDate.getTime()));
         assertToCollection("SqlDateToCollection", sqlDate);
         // Source class = java.sql.Time
         assertConversion("SqlTimeToLong", new DateTimeConverters.GenericDateToLong<java.sql.Time>(java.sql.Time.class),
sqlTime, sqlTime.getTime());
         assertToCollection("SqlTimeToCollection", sqlTime);
+        assertConversion("SqlTimeToString", new DateTimeConverters.SqlTimeToString(), sqlTime,
sqlTime.toString());
         // Source class = java.sql.Timestamp
         assertConversion("TimestampToLong", new DateTimeConverters.GenericDateToLong<java.sql.Timestamp>(java.sql.Timestamp.class),
timestamp, currentTime);
         assertConversion("TimestampToString", new DateTimeConverters.TimestampToString(),
timestamp, timestamp.toString());



Mime
View raw message