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