Updated Branches: refs/heads/wicket-1.5.x 2a09c11e0 -> 3ac6affeb
WICKET-4839 ConverterLocator should create a new instance for all date based converters Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/3ac6affe Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/3ac6affe Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/3ac6affe Branch: refs/heads/wicket-1.5.x Commit: 3ac6affebf4b02e702dee4fea320ba624d05d21c Parents: 2a09c11 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Mon Nov 5 09:13:22 2012 +0200 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Mon Nov 5 09:13:22 2012 +0200 ---------------------------------------------------------------------- .../java/org/apache/wicket/ConverterLocator.java | 50 +++++++------- .../org/apache/wicket/ConverterLocatorTest.java | 46 +++++++++++++- 2 files changed, 69 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/3ac6affe/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java b/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java index c4e9bdd..3d62ac1 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java +++ b/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java @@ -184,34 +184,34 @@ public class ConverterLocator implements IConverterLocator public final <C> IConverter<C> get(Class<C> c) { @SuppressWarnings("unchecked") - final IConverter<C> converter; + IConverter<C> converter = (IConverter<C>)classToConverter.get(c.getName()); - // Date based converters work with thread unsafe DateFormats and - // a new instance should be created for each usage - if (Date.class.equals(c)) - { - converter = (IConverter<C>) new DateConverter(); - } - else if (java.sql.Date.class.equals(c)) - { - converter = (IConverter<C>) new SqlDateConverter(); - } - else if (java.sql.Time.class.equals(c)) - { - converter = (IConverter<C>) new SqlTimeConverter(); - } - else if (java.sql.Timestamp.class.equals(c)) - { - converter = (IConverter<C>) new SqlTimestampConverter(); - } - else if (Calendar.class.equals(c)) - { - converter = (IConverter<C>) new CalendarConverter(); - } - else + if (converter == null) { - converter = (IConverter<C>)classToConverter.get(c.getName()); + // Date based converters work with thread unsafe DateFormats and + // a new instance should be created for each usage + if (Date.class.equals(c)) + { + converter = (IConverter<C>) new DateConverter(); + } + else if (java.sql.Date.class.equals(c)) + { + converter = (IConverter<C>) new SqlDateConverter(); + } + else if (java.sql.Time.class.equals(c)) + { + converter = (IConverter<C>) new SqlTimeConverter(); + } + else if (java.sql.Timestamp.class.equals(c)) + { + converter = (IConverter<C>) new SqlTimestampConverter(); + } + else if (Calendar.class.equals(c)) + { + converter = (IConverter<C>) new CalendarConverter(); + } } + return converter; } http://git-wip-us.apache.org/repos/asf/wicket/blob/3ac6affe/wicket-core/src/test/java/org/apache/wicket/ConverterLocatorTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/ConverterLocatorTest.java b/wicket-core/src/test/java/org/apache/wicket/ConverterLocatorTest.java index 34fcc04..94f3bc6 100644 --- a/wicket-core/src/test/java/org/apache/wicket/ConverterLocatorTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/ConverterLocatorTest.java @@ -16,8 +16,11 @@ */ package org.apache.wicket; +import java.util.Date; import java.util.Locale; +import org.apache.wicket.util.convert.IConverter; +import org.apache.wicket.util.convert.converter.DateConverter; import org.junit.Assert; import org.junit.Test; @@ -28,8 +31,7 @@ import org.junit.Test; */ public final class ConverterLocatorTest extends Assert { - /** Dutch locale for localized testing. */ - private static final Locale DUTCH_LOCALE = new Locale("nl", "NL"); + /** * Test generalized conversion @@ -44,4 +46,44 @@ public final class ConverterLocatorTest extends Assert // default converter assertNotNull(locator.getConverter(String.class).convertToObject("", Locale.US)); } + + + /** + * Verifies that a new instance of date converter is returned + * if there is no custom converter registered. + * + * https://issues.apache.org/jira/browse/WICKET-4839 + */ + @Test + public void customDateConverter() + { + final ConverterLocator locator = new ConverterLocator(); + + /** + * A custom converter that can override the default + * registered DateConverter + */ + class CustomDateConverter extends DateConverter + { + } + + IConverter<Date> dateConverter = locator.getConverter(Date.class); + + // assert that a DateConverter is returned + assertSame(DateConverter.class, dateConverter.getClass()); + assertNotSame(CustomDateConverter.class, dateConverter.getClass()); + + IConverter<Date> secondDateConverter = locator.getConverter(Date.class); + + // assert that a new instance of DateConverter is returned + assertNotSame(dateConverter, secondDateConverter); + + locator.set(Date.class, new CustomDateConverter()); + dateConverter = locator.getConverter(Date.class); + + // assert that the CustomDateConverter is returned + assertNotSame(DateConverter.class, dateConverter.getClass()); + assertSame(CustomDateConverter.class, dateConverter.getClass()); + + } } \ No newline at end of file
