Title: [waffle-scm] [733] trunk/waffle-core/src/main/java/org/codehaus/waffle/bind: WAFFLE-86: Added registerConverter method to ValueConverterFinder.

Diff

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/ValueConverterFinder.java (732 => 733)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/ValueConverterFinder.java	2008-06-18 11:24:33 UTC (rev 732)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/ValueConverterFinder.java	2008-06-18 16:00:57 UTC (rev 733)
@@ -6,18 +6,24 @@
 import java.lang.reflect.Type;
 
 /**
- * Finder interface for [EMAIL PROTECTED] ValueConverters} registered per application.
- *
+ * Finder interface for [EMAIL PROTECTED] org.codehaus.waffle.bind.ValueConverter ValueConverter} instances registered per application.
+ * 
  * @author Mauro Talevi
  */
 public interface ValueConverterFinder {
 
     /**
-     * Should return the [EMAIL PROTECTED] ValueConverter} that is responsible for handling the type passed in.
-     *
+     * Returns the converter that is responsible for handling the type passed in.
+     * 
      * @param type the Type identifying the ValueConverter needed
-     * @return the associated ValueConverter is returned or [EMAIL PROTECTED] null} if none was found. 
+     * @return the associated ValueConverter is returned or [EMAIL PROTECTED] null} if none was found.
      */
     ValueConverter findConverter(Type type);
 
+    /**
+     * Registers the given converter
+     * 
+     * @param converter the ValueConverter to register
+     */
+    void registerConverter(ValueConverter converter);
 }

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/ognl/OgnlValueConverterFinder.java (732 => 733)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/ognl/OgnlValueConverterFinder.java	2008-06-18 11:24:33 UTC (rev 732)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/ognl/OgnlValueConverterFinder.java	2008-06-18 16:00:57 UTC (rev 733)
@@ -16,10 +16,13 @@
 
 /**
  * <p>
- * Implementation of <code>ValueConverterFinder</code> which caches converters 
- * found per type and uses <code>OgnlValueConverter</code> as default converter.
+ * Implementation of <code>ValueConverterFinder</code> which caches converters found per type and uses
+ * <code>OgnlValueConverter</code> as default converter.
  * </p>
- *
+ * <p>
+ * Converters can be either injected at instantiation or registered after instantiation.
+ * </p>
+ * 
  * @author Michael Ward
  * @author Mauro Talevi
  * @see OgnlValueConverter
@@ -27,21 +30,20 @@
 public class OgnlValueConverterFinder implements ValueConverterFinder {
 
     private static final ValueConverter OGNL_VALUE_CONVERTER = new OgnlValueConverter();
-    private final List<ValueConverter> DEFAULT_CONVERTERS = asList(OGNL_VALUE_CONVERTER);
     private final Map<Type, ValueConverter> cache = new HashMap<Type, ValueConverter>();
     private final List<ValueConverter> converters;
 
     public OgnlValueConverterFinder() {
-        this.converters = DEFAULT_CONVERTERS;
+        this(new ValueConverter[] {});
     }
 
     public OgnlValueConverterFinder(ValueConverter... converters) {
+        this.converters = new ArrayList<ValueConverter>();
         if (converters != null) {
-            this.converters = new ArrayList<ValueConverter>();
             this.converters.addAll(asList(converters));
-            this.converters.addAll(DEFAULT_CONVERTERS);
+            this.converters.add(OGNL_VALUE_CONVERTER);
         } else {
-            this.converters = DEFAULT_CONVERTERS;            
+            this.converters.add(OGNL_VALUE_CONVERTER);
         }
     }
 
@@ -61,4 +63,8 @@
         return null;
     }
 
+    public void registerConverter(ValueConverter converter) {
+        converters.add(converter);
+    }
+
 }

Modified: trunk/waffle-core/src/test/java/org/codehaus/waffle/bind/ognl/OgnlValueConverterFinderTest.java (732 => 733)

--- trunk/waffle-core/src/test/java/org/codehaus/waffle/bind/ognl/OgnlValueConverterFinderTest.java	2008-06-18 11:24:33 UTC (rev 732)
+++ trunk/waffle-core/src/test/java/org/codehaus/waffle/bind/ognl/OgnlValueConverterFinderTest.java	2008-06-18 16:00:57 UTC (rev 733)
@@ -23,13 +23,25 @@
     private static MessageResources RESOURCES = new DefaultMessageResources();
 
     @Test
-    public void canFindDifferentListConverters() throws IntrospectionException {
+    public void canFindDifferentListConvertersRegisteredAtInstantiation() throws IntrospectionException {
         ValueConverterFinder finder = new OgnlValueConverterFinder(new StringListValueConverter(RESOURCES), new NumberListValueConverter(RESOURCES));
+        assertListCovertersCanBeFound(finder);
+    }
+
+    @Test
+    public void canFindDifferentListConvertersRegisteredAfterInstantiation() throws IntrospectionException {
+        ValueConverterFinder finder = new OgnlValueConverterFinder();
+        finder.registerConverter(new StringListValueConverter(RESOURCES));
+        finder.registerConverter(new NumberListValueConverter(RESOURCES));
+        assertListCovertersCanBeFound(finder);
+    }
+
+    private void assertListCovertersCanBeFound(ValueConverterFinder finder) throws IntrospectionException {
         assertConverterType(finder, List.class, OgnlValueConverter.class); // List.class is not parameterized and matches default converter
         assertConverterType(finder, methodParameterType("listOfStrings"), StringListValueConverter.class);
         assertConverterType(finder, methodParameterType("listOfIntegers"), NumberListValueConverter.class);
     }
-
+    
     private void assertConverterType(ValueConverterFinder finder, Type type, Class<? extends ValueConverter> expectedConverterType) {
         assertEquals(expectedConverterType, finder.findConverter(type).getClass());
     }


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to