WICKET-4858 Introduce AbstractDateConverter that holds the common code for 
util.Date, sql.Date, sql.Time and sql.Timestamp


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/abdcf847
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/abdcf847
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/abdcf847

Branch: refs/heads/wicket-4774
Commit: abdcf847326aa04a34883df2f7a1024a64378e81
Parents: bc2fa6a
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Fri May 3 10:21:27 2013 +0200
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Fri May 3 10:21:27 2013 +0200

----------------------------------------------------------------------
 .../convert/converter/AbstractDateConverter.java   |   68 ++++++++++++
 .../util/convert/converter/DateConverter.java      |   52 +---------
 .../util/convert/converter/SqlDateConverter.java   |   81 +--------------
 .../util/convert/converter/SqlTimeConverter.java   |   44 ++-------
 .../convert/converter/SqlTimestampConverter.java   |   61 ++---------
 5 files changed, 90 insertions(+), 216 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/abdcf847/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/AbstractDateConverter.java
----------------------------------------------------------------------
diff --git 
a/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/AbstractDateConverter.java
 
b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/AbstractDateConverter.java
new file mode 100644
index 0000000..ee049a9
--- /dev/null
+++ 
b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/AbstractDateConverter.java
@@ -0,0 +1,68 @@
+package org.apache.wicket.util.convert.converter;
+
+import java.text.DateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+import org.apache.wicket.util.string.Strings;
+
+/**
+ * A base class for all Date related converters
+ *
+ * @param <D>
+ *     the type of the Date that is supported by this converter
+ */
+public abstract class AbstractDateConverter<D extends Date> extends 
AbstractConverter<D>
+{
+       /**
+        * Creates a new instance of D out of the passed date(time) as long
+        * @param date
+        *      the date(time) in millis since Epoch
+        * @return a new instance of the specific type D
+        */
+       protected abstract D createDateLike(long date);
+
+       @Override
+       public D convertToObject(final String value, Locale locale)
+       {
+               if (Strings.isEmpty(value))
+               {
+                       return null;
+               }
+
+               DateFormat format = getDateFormat(locale);
+               Date date = parse(format, value, locale);
+               return createDateLike(date.getTime());
+       }
+
+       @Override
+       public String convertToString(final D value, final Locale locale)
+       {
+               if (value == null)
+               {
+                       return null;
+               }
+
+               final DateFormat dateFormat = getDateFormat(locale);
+               if (dateFormat != null)
+               {
+                       return dateFormat.format(value);
+               }
+               return value.toString();
+       }
+
+       /**
+        * @param locale
+        * @return Returns the date format.
+        */
+       public DateFormat getDateFormat(Locale locale)
+       {
+               if (locale == null)
+               {
+                       locale = Locale.getDefault();
+               }
+
+               // return a clone because DateFormat.getDateInstance uses a pool
+               return (DateFormat) 
DateFormat.getDateInstance(DateFormat.SHORT, locale).clone();
+       }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/abdcf847/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/DateConverter.java
----------------------------------------------------------------------
diff --git 
a/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/DateConverter.java
 
b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/DateConverter.java
index c2f16a1..30254cc 100644
--- 
a/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/DateConverter.java
+++ 
b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/DateConverter.java
@@ -16,69 +16,23 @@
  */
 package org.apache.wicket.util.convert.converter;
 
-import java.text.DateFormat;
 import java.util.Date;
-import java.util.Locale;
-
-import org.apache.wicket.util.string.Strings;
 
 /**
  * Converts from Object to Date.
  * 
  * @author Eelco Hillenius
  */
-public class DateConverter extends AbstractConverter<Date>
+public class DateConverter extends AbstractDateConverter<Date>
 {
        private static final long serialVersionUID = 1L;
 
-       /**
-        * @see 
org.apache.wicket.util.convert.IConverter#convertToObject(java.lang.String,Locale)
-        */
-       @Override
-       public Date convertToObject(final String value, final Locale locale)
-       {
-               if ((value == null) || Strings.isEmpty(value))
-               {
-                       return null;
-               }
-               else
-               {
-                       return parse(getDateFormat(locale), value, locale);
-               }
-       }
-
-       /**
-        * @see 
org.apache.wicket.util.convert.IConverter#convertToString(Object, 
java.util.Locale)
-        */
        @Override
-       public String convertToString(final Date value, final Locale locale)
+       protected Date createDateLike(long date)
        {
-               final DateFormat dateFormat = getDateFormat(locale);
-               if (dateFormat != null)
-               {
-                       return dateFormat.format(value);
-               }
-               return value.toString();
-       }
-
-
-       /**
-        * @param locale
-        * @return Returns the date format.
-        */
-       public DateFormat getDateFormat(Locale locale)
-       {
-               if (locale == null)
-               {
-                       locale = Locale.getDefault();
-               }
-
-               return DateFormat.getDateInstance(DateFormat.SHORT, locale);
+               return new Date(date);
        }
 
-       /**
-        * @see 
org.apache.wicket.util.convert.converter.AbstractConverter#getTargetType()
-        */
        @Override
        protected Class<Date> getTargetType()
        {

http://git-wip-us.apache.org/repos/asf/wicket/blob/abdcf847/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/SqlDateConverter.java
----------------------------------------------------------------------
diff --git 
a/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/SqlDateConverter.java
 
b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/SqlDateConverter.java
index c86c508..7e3816b 100644
--- 
a/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/SqlDateConverter.java
+++ 
b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/SqlDateConverter.java
@@ -17,65 +17,18 @@
 package org.apache.wicket.util.convert.converter;
 
 import java.sql.Date;
-import java.text.DateFormat;
-import java.text.Format;
-import java.text.ParsePosition;
-import java.util.Locale;
-
-import org.apache.wicket.util.string.Strings;
 
 /**
  * Converts to {@link java.sql.Date}.
  */
-public class SqlDateConverter extends AbstractConverter<Date>
+public class SqlDateConverter extends AbstractDateConverter<Date>
 {
        private static final long serialVersionUID = 1L;
 
-       /**
-        * @see 
org.apache.wicket.util.convert.IConverter#convertToObject(java.lang.String,Locale)
-        */
        @Override
-       public Date convertToObject(final String value, final Locale locale)
-       {
-               if ((value == null) || Strings.isEmpty(value))
-               {
-                       return null;
-               }
-               else
-               {
-                       java.util.Date date = parseDate(getDateFormat(locale), 
value, locale);
-                       return new Date(date.getTime());
-               }
-       }
-
-       /**
-        * @see 
org.apache.wicket.util.convert.converter.DateConverter#convertToObject(java.lang.String,
-        *      java.util.Locale)
-        */
-       @Override
-       public String convertToString(final Date value, final Locale locale)
-       {
-               final DateFormat dateFormat = getDateFormat(locale);
-               if (dateFormat != null)
-               {
-                       return dateFormat.format(value);
-               }
-               return value.toString();
-       }
-
-
-       /**
-        * @param locale
-        * @return Returns the date format.
-        */
-       public DateFormat getDateFormat(Locale locale)
+       protected Date createDateLike(long date)
        {
-               if (locale == null)
-               {
-                       locale = Locale.getDefault();
-               }
-
-               return DateFormat.getDateInstance(DateFormat.SHORT, locale);
+               return new Date(date);
        }
 
        @Override
@@ -83,32 +36,4 @@ public class SqlDateConverter extends AbstractConverter<Date>
        {
                return Date.class;
        }
-
-       /**
-        * Parses a value using one of the java.util.text format classes.
-        *
-        * @param format
-        *            The format to use
-        * @param value
-        *            The object to parse
-        * @param locale
-        *            The locale to use to parse.
-        * @return The object
-        * @throws org.apache.wicket.util.convert.ConversionException
-        *             Thrown if parsing fails
-        */
-       @SuppressWarnings("unchecked")
-       private java.util.Date parseDate(final Format format, final Object 
value, final Locale locale)
-       {
-               final ParsePosition position = new ParsePosition(0);
-               final String stringValue = value.toString();
-               final java.util.Date result = 
(java.util.Date)format.parseObject(stringValue, position);
-
-               if (position.getIndex() != stringValue.length())
-               {
-                       throw newConversionException("Cannot parse '" + value + 
"' using format " + format,
-                                       value, locale).setFormat(format);
-               }
-               return result;
-       }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/abdcf847/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/SqlTimeConverter.java
----------------------------------------------------------------------
diff --git 
a/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/SqlTimeConverter.java
 
b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/SqlTimeConverter.java
index 43433f3..2f3d069 100644
--- 
a/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/SqlTimeConverter.java
+++ 
b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/SqlTimeConverter.java
@@ -18,61 +18,31 @@ package org.apache.wicket.util.convert.converter;
 
 import java.sql.Time;
 import java.text.DateFormat;
-import java.text.ParseException;
-import java.util.Date;
 import java.util.Locale;
 
-import org.apache.wicket.util.convert.ConversionException;
-
 /**
  * Converts to {@link Time}.
  */
-public class SqlTimeConverter extends AbstractConverter<Time>
+public class SqlTimeConverter extends AbstractDateConverter<Time>
 {
-
        private static final long serialVersionUID = 1L;
 
-       /** @see 
org.apache.wicket.util.convert.converter.DateConverter#convertToObject(java.lang.String,java.util.Locale)
 */
        @Override
-       public Time convertToObject(final String value, Locale locale)
+       protected Time createDateLike(long date)
        {
-               if (value == null)
-               {
-                       return null;
-               }
-               if (locale == null)
-               {
-                       locale = Locale.getDefault();
-               }
-               DateFormat format = 
DateFormat.getTimeInstance(DateFormat.SHORT, locale);
-               try
-               {
-                       Date date = format.parse(value);
-                       return new Time(date.getTime());
-               }
-               catch (ParseException e)
-               {
-                       throw new ConversionException("Cannot parse '" + value 
+ "' using format " + format).setSourceValue(
-                               value)
-                               .setTargetType(getTargetType())
-                               .setConverter(this)
-                               .setLocale(locale);
-               }
+               return new Time(date);
        }
 
        @Override
-       public String convertToString(final Time time, Locale locale)
+       public DateFormat getDateFormat(Locale locale)
        {
-               if (time == null)
-               {
-                       return null;
-               }
                if (locale == null)
                {
                        locale = Locale.getDefault();
                }
-               DateFormat format = 
DateFormat.getTimeInstance(DateFormat.SHORT, locale);
-               return format.format(time);
+
+               // return a clone because DateFormat.getDateInstance uses a pool
+               return (DateFormat) 
DateFormat.getTimeInstance(DateFormat.SHORT, locale).clone();
        }
 
        @Override

http://git-wip-us.apache.org/repos/asf/wicket/blob/abdcf847/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/SqlTimestampConverter.java
----------------------------------------------------------------------
diff --git 
a/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/SqlTimestampConverter.java
 
b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/SqlTimestampConverter.java
index 432c1ac..2dd7d4b 100644
--- 
a/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/SqlTimestampConverter.java
+++ 
b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/SqlTimestampConverter.java
@@ -18,8 +18,6 @@ package org.apache.wicket.util.convert.converter;
 
 import java.sql.Timestamp;
 import java.text.DateFormat;
-import java.text.ParseException;
-import java.util.Date;
 import java.util.Locale;
 
 /**
@@ -27,7 +25,7 @@ import java.util.Locale;
  * 
  * @author eelcohillenius
  */
-public class SqlTimestampConverter extends AbstractConverter<Timestamp>
+public class SqlTimestampConverter extends AbstractDateConverter<Timestamp>
 {
        private static final long serialVersionUID = 1L;
 
@@ -39,8 +37,7 @@ public class SqlTimestampConverter extends 
AbstractConverter<Timestamp>
         */
        public SqlTimestampConverter()
        {
-               dateFormat = DateFormat.SHORT;
-               timeFormat = DateFormat.SHORT;
+               this(DateFormat.SHORT, DateFormat.SHORT);
        }
 
        /**
@@ -51,8 +48,7 @@ public class SqlTimestampConverter extends 
AbstractConverter<Timestamp>
         */
        public SqlTimestampConverter(final int dateFormat)
        {
-               this.dateFormat = dateFormat;
-               timeFormat = DateFormat.SHORT;
+               this(dateFormat, DateFormat.SHORT);
        }
 
        /**
@@ -69,67 +65,28 @@ public class SqlTimestampConverter extends 
AbstractConverter<Timestamp>
                this.timeFormat = timeFormat;
        }
 
-
-       /**
-        * 
-        * @see 
org.apache.wicket.util.convert.IConverter#convertToObject(java.lang.String,
-        *      java.util.Locale)
-        */
        @Override
-       public Timestamp convertToObject(final String value, Locale locale)
+       public DateFormat getDateFormat(Locale locale)
        {
-               if (value == null)
-               {
-                       return null;
-               }
-
                if (locale == null)
                {
                        locale = Locale.getDefault();
                }
 
-               DateFormat format = DateFormat.getDateTimeInstance(dateFormat, 
timeFormat, locale);
-               try
-               {
-                       Date date = format.parse(value);
-                       return new Timestamp(date.getTime());
-               }
-               catch (ParseException e)
-               {
-                       throw newConversionException("Cannot parse '" + value + 
"' using format " + format,
-                               value, locale);
-               }
+               // return a clone because DateFormat.getDateInstance uses a pool
+               return (DateFormat) DateFormat.getDateTimeInstance(dateFormat, 
timeFormat, locale).clone();
        }
 
-       /**
-        * 
-        * @see 
org.apache.wicket.util.convert.converter.AbstractConverter#convertToString(java.lang.Object,
-        *      java.util.Locale)
-        */
        @Override
-       public String convertToString(final Timestamp timestamp, Locale locale)
+       protected Timestamp createDateLike(long date)
        {
-               if (timestamp == null)
-               {
-                       return null;
-               }
-
-               if (locale == null)
-               {
-                       locale = Locale.getDefault();
-               }
-
-               DateFormat format = DateFormat.getDateTimeInstance(dateFormat, 
timeFormat, locale);
-               return format.format(timestamp);
+               return new Timestamp(date);
        }
 
-       /**
-        * 
-        * @see 
org.apache.wicket.util.convert.converter.AbstractConverter#getTargetType()
-        */
        @Override
        protected Class<Timestamp> getTargetType()
        {
                return Timestamp.class;
        }
+
 }

Reply via email to