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;
}
+
}