- Revision
- 733
- Author
- mauro
- Date
- 2008-06-18 11:00:57 -0500 (Wed, 18 Jun 2008)
Log Message
WAFFLE-86: Added registerConverter method to ValueConverterFinder.
Modified Paths
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:
