From ad0cee22bbdaba658fe4db56f7c3785e58ff9ce6 Mon Sep 17 00:00:00 2001 From: Keith Donald Date: Mon, 30 Jun 2008 18:12:50 +0000 Subject: [PATCH] polish --- .../binding/convert/ConversionService.java | 14 -------------- .../convert/converters/ArrayToCollection.java | 15 ++++++++------- .../binding/convert/converters/ObjectToArray.java | 8 +++++--- .../convert/service/GenericConversionService.java | 7 +------ .../service/DefaultConversionServiceTests.java | 7 +++++++ 5 files changed, 21 insertions(+), 30 deletions(-) diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/ConversionService.java b/spring-binding/src/main/java/org/springframework/binding/convert/ConversionService.java index 2ed8fad3..32cbb227 100644 --- a/spring-binding/src/main/java/org/springframework/binding/convert/ConversionService.java +++ b/spring-binding/src/main/java/org/springframework/binding/convert/ConversionService.java @@ -39,18 +39,4 @@ public interface ConversionService { public ConversionExecutor getConversionExecutor(Class sourceClass, Class targetClass) throws ConversionExecutorNotFoundException; - /** - * Return a custom conversion executor capable of converting source objects of the specified - * sourceClass to instances of the targetClass. - *

- * The returned ConversionExecutor is thread-safe and may safely be cached for use in client code. - * @param id the id of the custom conversion executor (should be unique among custom converters) - * @param sourceClass the source class to convert from - * @param targetClass the target class to convert to - * @return the executor that can execute instance type conversion, never null - * @throws ConversionExecutorNotFoundException when no suitable conversion executor could be found - */ - public ConversionExecutor getConversionExecutor(String id, Class sourceClass, Class targetClass) - throws ConversionExecutorNotFoundException; - } \ No newline at end of file diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/converters/ArrayToCollection.java b/spring-binding/src/main/java/org/springframework/binding/convert/converters/ArrayToCollection.java index ec8a7303..b02e4b71 100644 --- a/spring-binding/src/main/java/org/springframework/binding/convert/converters/ArrayToCollection.java +++ b/spring-binding/src/main/java/org/springframework/binding/convert/converters/ArrayToCollection.java @@ -2,7 +2,6 @@ package org.springframework.binding.convert.converters; import java.lang.reflect.Array; import java.lang.reflect.Constructor; -import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; @@ -65,18 +64,17 @@ public class ArrayToCollection implements TwoWayConverter { converter = null; } Collection collection = (Collection) constructor.newInstance(null); - Method add = collectionImplClass.getMethod("add", new Class[] { Object.class }); int length = Array.getLength(source); if (converter != null) { for (int i = 0; i < length; i++) { Object value = Array.get(source, i); value = converter.execute(value); - add.invoke(collection, new Object[] { value }); + collection.add(value); } } else { for (int i = 0; i < length; i++) { Object value = Array.get(source, i); - add.invoke(collection, new Object[] { value }); + collection.add(value); } } return collection; @@ -91,9 +89,12 @@ public class ArrayToCollection implements TwoWayConverter { int i = 0; for (Iterator it = collection.iterator(); it.hasNext(); i++) { Object value = it.next(); - ConversionExecutor converter = conversionService.getConversionExecutor(value.getClass(), sourceClass - .getComponentType()); - Array.set(array, i, converter.execute(value)); + if (value != null) { + ConversionExecutor converter = conversionService.getConversionExecutor(value.getClass(), sourceClass + .getComponentType()); + value = converter.execute(value); + } + Array.set(array, i, value); } return array; } diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/converters/ObjectToArray.java b/spring-binding/src/main/java/org/springframework/binding/convert/converters/ObjectToArray.java index 1a9f230f..092ee654 100644 --- a/spring-binding/src/main/java/org/springframework/binding/convert/converters/ObjectToArray.java +++ b/spring-binding/src/main/java/org/springframework/binding/convert/converters/ObjectToArray.java @@ -56,17 +56,19 @@ public class ObjectToArray implements TwoWayConverter { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < length; i++) { Object value = Array.get(target, i); - buffer.append(converter.execute(value)); - if (i < length) { + if (value != null) { + buffer.append(converter.execute(value)); + } + if (i < length - 1) { buffer.append(","); } } + return buffer.toString(); } else { Object value = Array.get(target, 0); Class componentType = target.getClass().getComponentType(); ConversionExecutor converter = conversionService.getConversionExecutor(componentType, sourceClass); return converter.execute(value); } - return null; } } diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/service/GenericConversionService.java b/spring-binding/src/main/java/org/springframework/binding/convert/service/GenericConversionService.java index e34a77a7..915a39aa 100644 --- a/spring-binding/src/main/java/org/springframework/binding/convert/service/GenericConversionService.java +++ b/spring-binding/src/main/java/org/springframework/binding/convert/service/GenericConversionService.java @@ -45,7 +45,7 @@ public class GenericConversionService implements ConversionService { * is a map of target classes that can be converted to, ultimately mapping to a specific converter that can perform * the source->target conversion. */ - private Map sourceClassConverters = new HashMap(); + private final Map sourceClassConverters = new HashMap(); /** * An optional parent conversion service. @@ -147,11 +147,6 @@ public class GenericConversionService implements ConversionService { } } - public ConversionExecutor getConversionExecutor(String id, Class sourceClass, Class targetClass) - throws ConversionExecutorNotFoundException { - throw new UnsupportedOperationException("Not yet implemented"); - } - // subclassing support /** diff --git a/spring-binding/src/test/java/org/springframework/binding/convert/service/DefaultConversionServiceTests.java b/spring-binding/src/test/java/org/springframework/binding/convert/service/DefaultConversionServiceTests.java index 0ef0b2c1..3101f48f 100644 --- a/spring-binding/src/test/java/org/springframework/binding/convert/service/DefaultConversionServiceTests.java +++ b/spring-binding/src/test/java/org/springframework/binding/convert/service/DefaultConversionServiceTests.java @@ -201,6 +201,13 @@ public class DefaultConversionServiceTests extends TestCase { assertEquals(new Integer(3), result[2]); } + public void testToArrayObjectConversion() { + DefaultConversionService service = new DefaultConversionService(); + ConversionExecutor executor = service.getConversionExecutor(String[].class, String.class); + String result = (String) executor.execute(new String[] { "1", "2", "3" }); + assertEquals("1,2,3", result); + } + /* * * public void testArrayListConversionWithElementConversion() throws Exception { DefaultConversionService service =