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

Reply via email to