master
Keith Donald 15 years ago
parent 4f4732df45
commit 027bd24260
  1. 2
      org.springframework.core/src/main/java/org/springframework/core/convert/support/CollectionToArrayConverter.java
  2. 10
      org.springframework.core/src/main/java/org/springframework/core/convert/support/MapToCollectionConverter.java
  3. 13
      org.springframework.core/src/main/java/org/springframework/core/convert/support/MapToObjectConverter.java
  4. 14
      org.springframework.core/src/main/java/org/springframework/core/convert/support/ObjectToMapConverter.java

@ -33,7 +33,7 @@ import org.springframework.core.convert.converter.GenericConverter;
/**
* Converts a Collection to an Array.
* First, creates a new Array of the requested targetType with a length equal to the size of the source Collection.
* Then sets collection element into the array.
* Then sets each collection element into the array.
* Will perform an element conversion from the collection's parameterized type to the array's component type if necessary.
*
* @author Keith Donald

@ -51,8 +51,12 @@ final class MapToCollectionConverter implements ConditionalGenericConverter {
}
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
return this.conversionService.canConvert(sourceType.getMapKeyTypeDescriptor(), targetType.getElementTypeDescriptor()) &&
this.conversionService.canConvert(sourceType.getMapValueTypeDescriptor(), targetType.getElementTypeDescriptor());
if (String.class.equals(targetType.getType())) {
return this.conversionService.canConvert(sourceType.getMapKeyTypeDescriptor(), targetType.getElementTypeDescriptor()) &&
this.conversionService.canConvert(sourceType.getMapValueTypeDescriptor(), targetType.getElementTypeDescriptor());
} else {
return this.conversionService.canConvert(sourceType.getMapValueTypeDescriptor(), targetType.getElementTypeDescriptor());
}
}
@SuppressWarnings("unchecked")
@ -80,7 +84,7 @@ final class MapToCollectionConverter implements ConditionalGenericConverter {
Collection target = CollectionFactory.createCollection(targetType.getType(), sourceMap.size());
MapEntryConverter converter = new MapEntryConverter(sourceKeyType, sourceValueType, targetElementType,
targetElementType, keysCompatible, valuesCompatible, this.conversionService);
if (targetElementType.getType().equals(String.class)) {
if (String.class.equals(targetElementType.getType())) {
for (Object entry : sourceMap.entrySet()) {
Map.Entry<?, ?> mapEntry = (Map.Entry<?, ?>) entry;
String property = converter.convertKey(mapEntry.getKey()) + "="

@ -42,8 +42,7 @@ final class MapToObjectConverter implements ConditionalGenericConverter {
}
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
return this.conversionService.canConvert(sourceType.getMapKeyTypeDescriptor(), targetType)
&& this.conversionService.canConvert(sourceType.getMapValueTypeDescriptor(), targetType);
return this.conversionService.canConvert(sourceType.getMapValueTypeDescriptor(), targetType);
}
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
@ -63,13 +62,9 @@ final class MapToObjectConverter implements ConditionalGenericConverter {
if (sourceValueType != TypeDescriptor.NULL && sourceValueType.isAssignableTo(targetType)) {
valuesCompatible = true;
}
if (valuesCompatible) {
return firstValue;
} else {
MapEntryConverter converter = new MapEntryConverter(sourceValueType, sourceValueType, targetType,
targetType, true, valuesCompatible, this.conversionService);
return converter.convertValue(firstValue);
}
MapEntryConverter converter = new MapEntryConverter(sourceValueType, sourceValueType, targetType,
targetType, true, valuesCompatible, this.conversionService);
return converter.convertValue(firstValue);
}
}

@ -65,15 +65,11 @@ final class ObjectToMapConverter implements ConditionalGenericConverter {
if (sourceType != TypeDescriptor.NULL && sourceType.isAssignableTo(targetValueType)) {
valuesCompatible = true;
}
if (keysCompatible && valuesCompatible) {
target.put(source, source);
} else {
MapEntryConverter converter = new MapEntryConverter(sourceType, sourceType, targetKeyType, targetValueType,
keysCompatible, valuesCompatible, this.conversionService);
Object key = converter.convertKey(source);
Object value = converter.convertValue(source);
target.put(key, value);
}
MapEntryConverter converter = new MapEntryConverter(sourceType, sourceType, targetKeyType, targetValueType,
keysCompatible, valuesCompatible, this.conversionService);
Object key = converter.convertKey(source);
Object value = converter.convertValue(source);
target.put(key, value);
return target;
}

Loading…
Cancel
Save