moved generic converter to spi; added entity converter; removed various service impls in favor of service factory

This commit is contained in:
Keith Donald
2009-11-19 09:10:51 +00:00
parent 211e36c249
commit d85dc01e28
37 changed files with 418 additions and 341 deletions

View File

@@ -24,7 +24,7 @@ import java.math.BigInteger;
import java.util.Locale;
import org.junit.Test;
import org.springframework.core.convert.ConversionFailedException;
import org.springframework.core.convert.ConversionService;
import org.springframework.core.convert.ConverterNotFoundException;
import org.springframework.core.convert.converter.Converter;
@@ -186,20 +186,20 @@ public class DefaultConversionServiceTests {
@Test
public void convertObjectToObjectValueOFMethod() {
DefaultConversionService conversionService = new DefaultConversionService();
ConversionService conversionService = ConversionServiceFactory.createDefault();
assertEquals(new Integer(3), conversionService.convert("3", Integer.class));
}
@Test
public void convertObjectToObjectConstructor() {
DefaultConversionService conversionService = new DefaultConversionService();
ConversionService conversionService = ConversionServiceFactory.createDefault();
assertEquals(new SSN("123456789"), conversionService.convert("123456789", SSN.class));
assertEquals("123456789", conversionService.convert(new SSN("123456789"), String.class));
}
@Test(expected=ConverterNotFoundException.class)
public void convertObjectToObjectNoValueOFMethodOrConstructor() {
DefaultConversionService conversionService = new DefaultConversionService();
ConversionService conversionService = ConversionServiceFactory.createDefault();
conversionService.convert(new Long(3), SSN.class);
}

View File

@@ -146,8 +146,7 @@ public class GenericConversionServiceTests {
@Test
public void convertArrayToArray() {
conversionService.addGenericConverter(Object[].class, Object[].class, new ArrayToArrayConverter(
conversionService));
conversionService.addGenericConverter(new ArrayToArrayConverter(conversionService));
conversionService.addConverterFactory(new StringToNumberConverterFactory());
Integer[] result = conversionService.convert(new String[] { "1", "2", "3" }, Integer[].class);
assertEquals(new Integer(1), result[0]);
@@ -157,8 +156,7 @@ public class GenericConversionServiceTests {
@Test
public void convertArrayToPrimitiveArray() {
conversionService.addGenericConverter(Object[].class, Object[].class, new ArrayToArrayConverter(
conversionService));
conversionService.addGenericConverter(new ArrayToArrayConverter(conversionService));
conversionService.addConverterFactory(new StringToNumberConverterFactory());
int[] result = conversionService.convert(new String[] { "1", "2", "3" }, int[].class);
assertEquals(1, result[0]);
@@ -176,8 +174,7 @@ public class GenericConversionServiceTests {
@Test
public void convertArrayToListInterface() {
conversionService.addGenericConverter(Object[].class, Collection.class, new ArrayToCollectionConverter(
conversionService));
conversionService.addGenericConverter(new ArrayToCollectionConverter(conversionService));
List<?> result = conversionService.convert(new String[] { "1", "2", "3" }, List.class);
assertEquals("1", result.get(0));
assertEquals("2", result.get(1));
@@ -188,8 +185,7 @@ public class GenericConversionServiceTests {
@Test
public void convertArrayToListGenericTypeConversion() throws Exception {
conversionService.addGenericConverter(Object[].class, Collection.class, new ArrayToCollectionConverter(
conversionService));
conversionService.addGenericConverter(new ArrayToCollectionConverter(conversionService));
conversionService.addConverterFactory(new StringToNumberConverterFactory());
List<Integer> result = (List<Integer>) conversionService.convert(new String[] { "1", "2", "3" }, TypeDescriptor
.valueOf(String[].class), new TypeDescriptor(getClass().getDeclaredField("genericList")));
@@ -200,8 +196,7 @@ public class GenericConversionServiceTests {
@Test
public void convertArrayToListImpl() {
conversionService.addGenericConverter(Object[].class, Collection.class, new ArrayToCollectionConverter(
conversionService));
conversionService.addGenericConverter(new ArrayToCollectionConverter(conversionService));
LinkedList<?> result = conversionService.convert(new String[] { "1", "2", "3" }, LinkedList.class);
assertEquals("1", result.get(0));
assertEquals("2", result.get(1));
@@ -210,14 +205,13 @@ public class GenericConversionServiceTests {
@Test(expected = ConversionFailedException.class)
public void convertArrayToAbstractList() {
conversionService.addGenericConverter(Object[].class, Collection.class, new ArrayToCollectionConverter(
conversionService));
conversionService.addGenericConverter(new ArrayToCollectionConverter(conversionService));
conversionService.convert(new String[] { "1", "2", "3" }, AbstractList.class);
}
@Test
public void convertArrayToMap() {
conversionService.addGenericConverter(Object[].class, Map.class, new ArrayToMapConverter(conversionService));
conversionService.addGenericConverter(new ArrayToMapConverter(conversionService));
Map result = conversionService.convert(new String[] { "foo=bar", "bar=baz", "baz=boop" }, Map.class);
assertEquals("bar", result.get("foo"));
assertEquals("baz", result.get("bar"));
@@ -226,7 +220,7 @@ public class GenericConversionServiceTests {
@Test
public void convertArrayToMapWithElementConversion() throws Exception {
conversionService.addGenericConverter(Object[].class, Map.class, new ArrayToMapConverter(conversionService));
conversionService.addGenericConverter(new ArrayToMapConverter(conversionService));
conversionService.addConverterFactory(new StringToNumberConverterFactory());
conversionService.addConverterFactory(new StringToEnumConverterFactory());
Map result = (Map) conversionService.convert(new String[] { "1=BAR", "2=BAZ" }, TypeDescriptor
@@ -237,16 +231,14 @@ public class GenericConversionServiceTests {
@Test
public void convertArrayToString() {
conversionService.addGenericConverter(Object[].class, Object.class, new ArrayToObjectConverter(
conversionService));
conversionService.addGenericConverter(new ArrayToObjectConverter(conversionService));
String result = conversionService.convert(new String[] { "1", "2", "3" }, String.class);
assertEquals("1,2,3", result);
}
@Test
public void convertArrayToStringWithElementConversion() {
conversionService.addGenericConverter(Object[].class, Object.class, new ArrayToObjectConverter(
conversionService));
conversionService.addGenericConverter(new ArrayToObjectConverter(conversionService));
conversionService.addConverter(new ObjectToStringConverter());
String result = conversionService.convert(new Integer[] { 1, 2, 3 }, String.class);
assertEquals("1,2,3", result);
@@ -254,16 +246,14 @@ public class GenericConversionServiceTests {
@Test
public void convertEmptyArrayToString() {
conversionService.addGenericConverter(Object[].class, Object.class, new ArrayToObjectConverter(
conversionService));
conversionService.addGenericConverter(new ArrayToObjectConverter(conversionService));
String result = conversionService.convert(new String[0], String.class);
assertEquals("", result);
}
@Test
public void convertArrayToObject() {
conversionService.addGenericConverter(Object[].class, Object.class, new ArrayToObjectConverter(
conversionService));
conversionService.addGenericConverter(new ArrayToObjectConverter(conversionService));
Object[] array = new Object[] { 3L };
Object result = conversionService.convert(array, Object.class);
assertEquals(3L, result);
@@ -271,8 +261,7 @@ public class GenericConversionServiceTests {
@Test
public void convertArrayToObjectWithElementConversion() {
conversionService.addGenericConverter(Object[].class, Object.class, new ArrayToObjectConverter(
conversionService));
conversionService.addGenericConverter(new ArrayToObjectConverter(conversionService));
conversionService.addConverterFactory(new StringToNumberConverterFactory());
String[] array = new String[] { "3" };
Integer result = conversionService.convert(array, Integer.class);
@@ -281,8 +270,7 @@ public class GenericConversionServiceTests {
@Test
public void convertCollectionToArray() {
conversionService.addGenericConverter(Collection.class, Object[].class, new CollectionToArrayConverter(
conversionService));
conversionService.addGenericConverter(new CollectionToArrayConverter(conversionService));
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
@@ -295,8 +283,7 @@ public class GenericConversionServiceTests {
@Test
public void convertCollectionToArrayWithElementConversion() {
conversionService.addGenericConverter(Collection.class, Object[].class, new CollectionToArrayConverter(
conversionService));
conversionService.addGenericConverter(new CollectionToArrayConverter(conversionService));
conversionService.addConverterFactory(new StringToNumberConverterFactory());
List<String> list = new ArrayList<String>();
list.add("1");
@@ -310,8 +297,7 @@ public class GenericConversionServiceTests {
@Test
public void convertCollectionToCollection() throws Exception {
conversionService.addGenericConverter(Collection.class, Collection.class, new CollectionToCollectionConverter(
conversionService));
conversionService.addGenericConverter(new CollectionToCollectionConverter(conversionService));
conversionService.addConverterFactory(new StringToNumberConverterFactory());
Set<String> foo = new LinkedHashSet<String>();
foo.add("1");
@@ -326,8 +312,7 @@ public class GenericConversionServiceTests {
@Test
public void convertCollectionToCollectionNull() throws Exception {
conversionService.addGenericConverter(Collection.class, Collection.class, new CollectionToCollectionConverter(
conversionService));
conversionService.addGenericConverter(new CollectionToCollectionConverter(conversionService));
List<Integer> bar = (List<Integer>) conversionService.convert(null,
TypeDescriptor.valueOf(LinkedHashSet.class), new TypeDescriptor(getClass().getField("genericList")));
assertNull(bar);
@@ -335,8 +320,7 @@ public class GenericConversionServiceTests {
@Test
public void convertCollectionToCollectionNotGeneric() throws Exception {
conversionService.addGenericConverter(Collection.class, Collection.class, new CollectionToCollectionConverter(
conversionService));
conversionService.addGenericConverter(new CollectionToCollectionConverter(conversionService));
conversionService.addConverterFactory(new StringToNumberConverterFactory());
Set<String> foo = new LinkedHashSet<String>();
foo.add("1");
@@ -351,8 +335,7 @@ public class GenericConversionServiceTests {
@Test
public void convertCollectionToCollectionSpecialCaseSourceImpl() throws Exception {
conversionService.addGenericConverter(Collection.class, Collection.class, new CollectionToCollectionConverter(
conversionService));
conversionService.addGenericConverter(new CollectionToCollectionConverter(conversionService));
conversionService.addConverterFactory(new StringToNumberConverterFactory());
Map map = new LinkedHashMap();
map.put("1", "1");
@@ -369,8 +352,7 @@ public class GenericConversionServiceTests {
@Test
public void convertCollectionToMap() {
conversionService.addGenericConverter(Collection.class, Map.class, new CollectionToMapConverter(
conversionService));
conversionService.addGenericConverter(new CollectionToMapConverter(conversionService));
List<String> list = new ArrayList<String>();
list.add("foo=bar");
list.add("bar=baz");
@@ -383,8 +365,7 @@ public class GenericConversionServiceTests {
@Test
public void convertCollectionToMapWithElementConversion() throws Exception {
conversionService.addGenericConverter(Collection.class, Map.class, new CollectionToMapConverter(
conversionService));
conversionService.addGenericConverter(new CollectionToMapConverter(conversionService));
conversionService.addConverterFactory(new StringToNumberConverterFactory());
conversionService.addConverterFactory(new StringToEnumConverterFactory());
List<String> list = new ArrayList<String>();
@@ -398,8 +379,7 @@ public class GenericConversionServiceTests {
@Test
public void convertCollectionToString() {
conversionService.addGenericConverter(Collection.class, Object.class, new CollectionToObjectConverter(
conversionService));
conversionService.addGenericConverter(new CollectionToObjectConverter(conversionService));
List<String> list = Arrays.asList(new String[] { "foo", "bar" });
String result = conversionService.convert(list, String.class);
assertEquals("foo,bar", result);
@@ -407,8 +387,7 @@ public class GenericConversionServiceTests {
@Test
public void convertCollectionToStringWithElementConversion() throws Exception {
conversionService.addGenericConverter(Collection.class, Object.class, new CollectionToObjectConverter(
conversionService));
conversionService.addGenericConverter(new CollectionToObjectConverter(conversionService));
conversionService.addConverter(new ObjectToStringConverter());
List<Integer> list = Arrays.asList(new Integer[] { 3, 5 });
String result = (String) conversionService.convert(list,
@@ -418,8 +397,7 @@ public class GenericConversionServiceTests {
@Test
public void convertCollectionToObject() {
conversionService.addGenericConverter(Collection.class, Object.class, new CollectionToObjectConverter(
conversionService));
conversionService.addGenericConverter(new CollectionToObjectConverter(conversionService));
List<Long> list = Collections.singletonList(3L);
Long result = conversionService.convert(list, Long.class);
assertEquals(new Long(3), result);
@@ -427,8 +405,7 @@ public class GenericConversionServiceTests {
@Test
public void convertCollectionToObjectWithElementConversion() {
conversionService.addGenericConverter(Collection.class, Object.class, new CollectionToObjectConverter(
conversionService));
conversionService.addGenericConverter(new CollectionToObjectConverter(conversionService));
conversionService.addConverterFactory(new StringToNumberConverterFactory());
List<String> list = Collections.singletonList("3");
Integer result = conversionService.convert(list, Integer.class);
@@ -439,7 +416,7 @@ public class GenericConversionServiceTests {
@Test
public void convertMapToMap() throws Exception {
conversionService.addGenericConverter(Map.class, Map.class, new MapToMapConverter(conversionService));
conversionService.addGenericConverter(new MapToMapConverter(conversionService));
conversionService.addConverterFactory(new StringToNumberConverterFactory());
conversionService.addConverterFactory(new StringToEnumConverterFactory());
Map<String, String> foo = new HashMap<String, String>();
@@ -453,7 +430,7 @@ public class GenericConversionServiceTests {
@Test
public void convertMapToStringArray() throws Exception {
conversionService.addGenericConverter(Map.class, Object[].class, new MapToArrayConverter(conversionService));
conversionService.addGenericConverter(new MapToArrayConverter(conversionService));
Map<String, String> foo = new LinkedHashMap<String, String>();
foo.put("1", "BAR");
foo.put("2", "BAZ");
@@ -464,7 +441,7 @@ public class GenericConversionServiceTests {
@Test
public void convertMapToStringArrayWithElementConversion() throws Exception {
conversionService.addGenericConverter(Map.class, Object[].class, new MapToArrayConverter(conversionService));
conversionService.addGenericConverter(new MapToArrayConverter(conversionService));
conversionService.addConverter(new ObjectToStringConverter());
Map<Integer, FooEnum> foo = new LinkedHashMap<Integer, FooEnum>();
foo.put(1, FooEnum.BAR);
@@ -477,7 +454,7 @@ public class GenericConversionServiceTests {
@Test
public void convertMapToString() {
conversionService.addGenericConverter(Map.class, Object.class, new MapToObjectConverter(conversionService));
conversionService.addGenericConverter(new MapToObjectConverter(conversionService));
Map<String, String> foo = new LinkedHashMap<String, String>();
foo.put("1", "BAR");
foo.put("2", "BAZ");
@@ -489,7 +466,7 @@ public class GenericConversionServiceTests {
@Test
public void convertMapToStringWithConversion() throws Exception {
conversionService.addGenericConverter(Map.class, Object.class, new MapToObjectConverter(conversionService));
conversionService.addGenericConverter(new MapToObjectConverter(conversionService));
Map<Integer, FooEnum> foo = new LinkedHashMap<Integer, FooEnum>();
foo.put(1, FooEnum.BAR);
foo.put(2, FooEnum.BAZ);
@@ -502,7 +479,7 @@ public class GenericConversionServiceTests {
@Test
public void convertMapToObject() {
conversionService.addGenericConverter(Map.class, Object.class, new MapToObjectConverter(conversionService));
conversionService.addGenericConverter(new MapToObjectConverter(conversionService));
Map<Long, Long> foo = new LinkedHashMap<Long, Long>();
foo.put(1L, 1L);
foo.put(2L, 2L);
@@ -514,7 +491,7 @@ public class GenericConversionServiceTests {
@Test
public void convertMapToObjectWithConversion() throws Exception {
conversionService.addGenericConverter(Map.class, Object.class, new MapToObjectConverter(conversionService));
conversionService.addGenericConverter(new MapToObjectConverter(conversionService));
conversionService.addConverterFactory(new NumberToNumberConverterFactory());
Map<Long, Long> foo = new LinkedHashMap<Long, Long>();
foo.put(1L, 1L);
@@ -526,8 +503,7 @@ public class GenericConversionServiceTests {
@Test
public void convertStringToArray() {
conversionService.addGenericConverter(Object.class, Object[].class, new ObjectToArrayConverter(
conversionService));
conversionService.addGenericConverter(new ObjectToArrayConverter(conversionService));
String[] result = conversionService.convert("1,2,3", String[].class);
assertEquals(3, result.length);
assertEquals("1", result[0]);
@@ -537,8 +513,7 @@ public class GenericConversionServiceTests {
@Test
public void convertStringToArrayWithElementConversion() {
conversionService.addGenericConverter(Object.class, Object[].class, new ObjectToArrayConverter(
conversionService));
conversionService.addGenericConverter(new ObjectToArrayConverter(conversionService));
conversionService.addConverterFactory(new StringToNumberConverterFactory());
Integer[] result = conversionService.convert("1,2,3", Integer[].class);
assertEquals(3, result.length);
@@ -549,16 +524,14 @@ public class GenericConversionServiceTests {
@Test
public void convertEmptyStringToArray() {
conversionService.addGenericConverter(Object.class, Object[].class, new ObjectToArrayConverter(
conversionService));
conversionService.addGenericConverter(new ObjectToArrayConverter(conversionService));
String[] result = conversionService.convert("", String[].class);
assertEquals(0, result.length);
}
@Test
public void convertObjectToArray() {
conversionService.addGenericConverter(Object.class, Object[].class, new ObjectToArrayConverter(
conversionService));
conversionService.addGenericConverter(new ObjectToArrayConverter(conversionService));
Object[] result = conversionService.convert(3L, Object[].class);
assertEquals(1, result.length);
assertEquals(3L, result[0]);
@@ -566,8 +539,7 @@ public class GenericConversionServiceTests {
@Test
public void convertObjectToArrayWithElementConversion() {
conversionService.addGenericConverter(Object.class, Object[].class, new ObjectToArrayConverter(
conversionService));
conversionService.addGenericConverter(new ObjectToArrayConverter(conversionService));
conversionService.addConverterFactory(new NumberToNumberConverterFactory());
Integer[] result = conversionService.convert(3L, Integer[].class);
assertEquals(1, result.length);
@@ -576,8 +548,7 @@ public class GenericConversionServiceTests {
@Test
public void convertStringToCollection() {
conversionService.addGenericConverter(Object.class, Collection.class, new ObjectToCollectionConverter(
conversionService));
conversionService.addGenericConverter(new ObjectToCollectionConverter(conversionService));
List result = conversionService.convert("1,2,3", List.class);
assertEquals(3, result.size());
assertEquals("1", result.get(0));
@@ -587,8 +558,7 @@ public class GenericConversionServiceTests {
@Test
public void convertStringToCollectionWithElementConversion() throws Exception {
conversionService.addGenericConverter(Object.class, Collection.class, new ObjectToCollectionConverter(
conversionService));
conversionService.addGenericConverter(new ObjectToCollectionConverter(conversionService));
conversionService.addConverterFactory(new StringToNumberConverterFactory());
List result = (List) conversionService.convert("1,2,3", TypeDescriptor.valueOf(String.class),
new TypeDescriptor(getClass().getField("genericList")));
@@ -600,16 +570,14 @@ public class GenericConversionServiceTests {
@Test
public void convertEmptyStringToCollection() {
conversionService.addGenericConverter(Object.class, Collection.class, new ObjectToCollectionConverter(
conversionService));
conversionService.addGenericConverter(new ObjectToCollectionConverter(conversionService));
Collection result = conversionService.convert("", Collection.class);
assertEquals(0, result.size());
}
@Test
public void convertObjectToCollection() {
conversionService.addGenericConverter(Object.class, Collection.class, new ObjectToCollectionConverter(
conversionService));
conversionService.addGenericConverter(new ObjectToCollectionConverter(conversionService));
List<String> result = (List<String>) conversionService.convert(3L, List.class);
assertEquals(1, result.size());
assertEquals(3L, result.get(0));
@@ -617,8 +585,7 @@ public class GenericConversionServiceTests {
@Test
public void convertObjectToCollectionWithElementConversion() throws Exception {
conversionService.addGenericConverter(Object.class, Collection.class, new ObjectToCollectionConverter(
conversionService));
conversionService.addGenericConverter(new ObjectToCollectionConverter(conversionService));
conversionService.addConverterFactory(new NumberToNumberConverterFactory());
List<Integer> result = (List<Integer>) conversionService.convert(3L, TypeDescriptor.valueOf(Long.class),
new TypeDescriptor(getClass().getField("genericList")));
@@ -628,7 +595,8 @@ public class GenericConversionServiceTests {
@Test
public void convertStringToMap() {
conversionService.addGenericConverter(Object.class, Map.class, new ObjectToMapConverter(conversionService));
conversionService.addGenericConverter(new ObjectToMapConverter(conversionService));
conversionService.addGenericConverter(new MapToMapConverter(conversionService));
Map result = conversionService.convert(" foo=bar\n bar=baz\n baz=boop", Map.class);
assertEquals("bar", result.get("foo"));
assertEquals("baz", result.get("bar"));
@@ -637,7 +605,8 @@ public class GenericConversionServiceTests {
@Test
public void convertStringToMapWithElementConversion() throws Exception {
conversionService.addGenericConverter(Object.class, Map.class, new ObjectToMapConverter(conversionService));
conversionService.addGenericConverter(new ObjectToMapConverter(conversionService));
conversionService.addGenericConverter(new MapToMapConverter(conversionService));
conversionService.addConverterFactory(new StringToNumberConverterFactory());
conversionService.addConverterFactory(new StringToEnumConverterFactory());
Map result = (Map) conversionService.convert("1=BAR\n 2=BAZ", TypeDescriptor.valueOf(String.class),
@@ -648,14 +617,14 @@ public class GenericConversionServiceTests {
@Test
public void convertObjectToMap() {
conversionService.addGenericConverter(Object.class, Map.class, new ObjectToMapConverter(conversionService));
conversionService.addGenericConverter(new ObjectToMapConverter(conversionService));
Map result = conversionService.convert(new Integer(3), Map.class);
assertEquals(new Integer(3), result.get(new Integer(3)));
}
@Test
public void convertObjectToMapWithConversion() throws Exception {
conversionService.addGenericConverter(Object.class, Map.class, new ObjectToMapConverter(conversionService));
conversionService.addGenericConverter(new ObjectToMapConverter(conversionService));
conversionService.addConverterFactory(new NumberToNumberConverterFactory());
Map result = (Map) conversionService.convert(1L, TypeDescriptor.valueOf(Integer.class), new TypeDescriptor(
getClass().getField("genericMap2")));
@@ -664,8 +633,7 @@ public class GenericConversionServiceTests {
@Test
public void genericConverterDelegatingBackToConversionServiceConverterNotFound() {
conversionService.addGenericConverter(Object.class, Object[].class, new ObjectToArrayConverter(
conversionService));
conversionService.addGenericConverter(new ObjectToArrayConverter(conversionService));
try {
conversionService.convert("1", Integer[].class);
} catch (ConversionFailedException e) {
@@ -673,18 +641,6 @@ public class GenericConversionServiceTests {
}
}
@Test
public void parent() {
GenericConversionService parent = new GenericConversionService();
conversionService.setParent(parent);
assertFalse(conversionService.canConvert(String.class, Integer.class));
try {
conversionService.convert("3", Integer.class);
} catch (ConverterNotFoundException e) {
}
}
public static enum FooEnum {
BAR, BAZ
}