From 17f7796d42d9a579bbb841e4d68ad0dd602da294 Mon Sep 17 00:00:00 2001 From: Keith Donald Date: Mon, 21 Sep 2009 05:39:16 +0000 Subject: [PATCH] polish --- .../convert/support/GenericConversionService.java | 6 +++++- .../support/ObjectToArrayGenericConverter.java | 8 ++++---- .../ObjectToCollectionGenericConverter.java | 15 +++++++++++++-- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java index 1d82ee0920a..4907fbe9cd8 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java @@ -150,7 +150,7 @@ public class GenericConversionService implements ConversionService, ConverterReg Assert.notNull(sourceType, "The source type to convert to is required"); Assert.notNull(targetType, "The targetType to convert to is required"); if (source == null) { - return null; + return convertNull(sourceType, targetType); } Assert.isTrue(sourceType != TypeDescriptor.NULL, "The source TypeDescriptor must not be TypeDescriptor.NULL when source != null"); @@ -197,6 +197,10 @@ public class GenericConversionService implements ConversionService, ConverterReg getSourceMap(sourceType).put(targetType, converter); } + protected Object convertNull(TypeDescriptor sourceType, TypeDescriptor targetType) { + return null; + } + protected GenericConverter getConverter(TypeDescriptor sourceType, TypeDescriptor targetType) { return findConverterByClassPair(sourceType.getObjectType(), targetType.getObjectType()); } diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/ObjectToArrayGenericConverter.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/ObjectToArrayGenericConverter.java index 13791a93939..51bab7c0d5f 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/support/ObjectToArrayGenericConverter.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/ObjectToArrayGenericConverter.java @@ -29,14 +29,14 @@ class ObjectToArrayGenericConverter implements GenericConverter { public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { TypeDescriptor targetElementType = targetType.getElementTypeDescriptor(); - Object array = Array.newInstance(targetType.getElementType(), 1); + Object target = Array.newInstance(targetElementType.getType(), 1); if (sourceType.isAssignableTo(targetElementType)) { - Array.set(array, 0, source); + Array.set(target, 0, source); } else { GenericConverter converter = conversionService.getConverter(sourceType, targetElementType); - Array.set(array, 0, converter.convert(source, sourceType, targetElementType)); + Array.set(target, 0, converter.convert(source, sourceType, targetElementType)); } - return array; + return target; } } \ No newline at end of file diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/ObjectToCollectionGenericConverter.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/ObjectToCollectionGenericConverter.java index ffd6b1cfe5d..c06569cde5c 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/support/ObjectToCollectionGenericConverter.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/ObjectToCollectionGenericConverter.java @@ -15,6 +15,9 @@ */ package org.springframework.core.convert.support; +import java.util.Collection; + +import org.springframework.core.CollectionFactory; import org.springframework.core.convert.TypeDescriptor; class ObjectToCollectionGenericConverter implements GenericConverter { @@ -26,7 +29,15 @@ class ObjectToCollectionGenericConverter implements GenericConverter { } public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { - throw new UnsupportedOperationException("Not yet implemented"); + Collection target = CollectionFactory.createCollection(targetType.getType(), 1); + TypeDescriptor targetElementType = targetType.getElementTypeDescriptor(); + if (targetElementType == TypeDescriptor.NULL || sourceType.isAssignableTo(targetElementType)) { + target.add(source); + } else { + GenericConverter converter = conversionService.getConverter(sourceType, targetElementType); + target.add(converter.convert(source, sourceType, targetElementType)); + } + return target; } -} +} \ No newline at end of file