Author: oheger Date: Wed Oct 23 20:16:37 2013 New Revision: 1535153 URL: http://svn.apache.org/r1535153 Log: Generified CharacterConverter.
The converter now also checks whether it supports the passed in target type. Modified: commons/proper/beanutils/branches/java5/src/main/java/org/apache/commons/beanutils/converters/CharacterConverter.java commons/proper/beanutils/branches/java5/src/test/java/org/apache/commons/beanutils/converters/CharacterConverterTestCase.java Modified: commons/proper/beanutils/branches/java5/src/main/java/org/apache/commons/beanutils/converters/CharacterConverter.java URL: http://svn.apache.org/viewvc/commons/proper/beanutils/branches/java5/src/main/java/org/apache/commons/beanutils/converters/CharacterConverter.java?rev=1535153&r1=1535152&r2=1535153&view=diff ============================================================================== --- commons/proper/beanutils/branches/java5/src/main/java/org/apache/commons/beanutils/converters/CharacterConverter.java (original) +++ commons/proper/beanutils/branches/java5/src/main/java/org/apache/commons/beanutils/converters/CharacterConverter.java Wed Oct 23 20:16:37 2013 @@ -16,6 +16,8 @@ */ package org.apache.commons.beanutils.converters; +import org.apache.commons.beanutils.ConversionException; + /** * {@link org.apache.commons.beanutils.Converter} implementaion that handles conversion * to and from <b>java.lang.Character</b> objects. @@ -55,7 +57,7 @@ public final class CharacterConverter ex * @since 1.8.0 */ @Override - protected Class getDefaultType() { + protected Class<?> getDefaultType() { return Character.class; } @@ -82,8 +84,13 @@ public final class CharacterConverter ex * @since 1.8.0 */ @Override - protected Object convertToType(Class type, Object value) throws Exception { - return new Character(value.toString().charAt(0)); + protected <T> T convertToType(Class<T> type, Object value) throws Exception { + if (Character.class.equals(type) || Character.TYPE.equals(type)) { + return type.cast(new Character(value.toString().charAt(0))); + } + + throw new ConversionException("Can't convert value '" + value + + "' to type " + type); } } Modified: commons/proper/beanutils/branches/java5/src/test/java/org/apache/commons/beanutils/converters/CharacterConverterTestCase.java URL: http://svn.apache.org/viewvc/commons/proper/beanutils/branches/java5/src/test/java/org/apache/commons/beanutils/converters/CharacterConverterTestCase.java?rev=1535153&r1=1535152&r2=1535153&view=diff ============================================================================== --- commons/proper/beanutils/branches/java5/src/test/java/org/apache/commons/beanutils/converters/CharacterConverterTestCase.java (original) +++ commons/proper/beanutils/branches/java5/src/test/java/org/apache/commons/beanutils/converters/CharacterConverterTestCase.java Wed Oct 23 20:16:37 2013 @@ -19,6 +19,7 @@ package org.apache.commons.beanutils.con import junit.framework.TestCase; import junit.framework.TestSuite; +import org.apache.commons.beanutils.ConversionException; import org.apache.commons.beanutils.Converter; /** @@ -80,6 +81,22 @@ public class CharacterConverterTestCase assertEquals("Character Test", new Character('N'), converter.convert(Character.class, new Character('N'))); assertEquals("String Test", new Character('F'), converter.convert(Character.class, "FOO")); assertEquals("Integer Test", new Character('3'), converter.convert(Character.class, new Integer(321))); + } + + /** + * Tests whether the primitive char class can be passed as target type. + */ + public void testConvertToChar() { + Converter converter = new CharacterConverter(); + assertEquals("Wrong result", new Character('F'), converter.convert(Character.TYPE, "FOO")); + } + + /** + * Tests a conversion to character for null input if no default value is + * provided. + */ + public void testConvertToCharacterNullNoDefault() { + Converter converter = new CharacterConverter(); try { converter.convert(Character.class, null); fail("Expected a ConversionException for null value"); @@ -95,4 +112,17 @@ public class CharacterConverterTestCase Converter converter = new CharacterConverter("C"); assertEquals("Default Test", new Character('C'), converter.convert(Character.class, null)); } + + /** + * Tries a conversion to an unsupported type. + */ + public void testConvertToUnsupportedType() { + Converter converter = new CharacterConverter(); + try { + converter.convert(Integer.class, "Test"); + fail("Could convert to unsupported type!"); + } catch (ConversionException cex) { + // expected result + } + } }