You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2013/05/03 10:58:45 UTC

[26/27] git commit: WICKET-4858 Introduce AbstractDateConverter that holds the common code for util.Date, sql.Date, sql.Time and sql.Timestamp

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 <mg...@apache.org>
Authored: Fri May 3 10:21:27 2013 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
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;
 	}
+
 }