Browse Source
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@1974 50f2f4bb-b051-0410-bef5-90022cba6387pull/1/head
21 changed files with 592 additions and 498 deletions
@ -1,69 +0,0 @@
@@ -1,69 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2009 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.springframework.core.convert.support; |
||||
|
||||
import static org.springframework.core.convert.support.ConversionUtils.invokeConverter; |
||||
|
||||
import java.lang.reflect.Array; |
||||
|
||||
import org.springframework.core.convert.ConverterNotFoundException; |
||||
import org.springframework.core.convert.TypeDescriptor; |
||||
|
||||
final class ArrayToStringGenericConverter implements GenericConverter { |
||||
|
||||
private static final String DELIMITER = ","; |
||||
|
||||
private final GenericConversionService conversionService; |
||||
|
||||
public ArrayToStringGenericConverter(GenericConversionService conversionService) { |
||||
this.conversionService = conversionService; |
||||
} |
||||
|
||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { |
||||
int length = Array.getLength(source); |
||||
if (length == 0) { |
||||
return ""; |
||||
} else { |
||||
TypeDescriptor sourceElementType = sourceType.getElementTypeDescriptor(); |
||||
if (sourceElementType.isAssignableTo(targetType)) { |
||||
StringBuilder string = new StringBuilder(); |
||||
for (int i = 0; i < length; i++) { |
||||
if (i > 0) { |
||||
string.append(DELIMITER); |
||||
} |
||||
string.append(Array.get(source, i)); |
||||
} |
||||
return string.toString(); |
||||
} else { |
||||
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetType); |
||||
if (converter == null) { |
||||
throw new ConverterNotFoundException(sourceElementType, targetType); |
||||
} |
||||
StringBuilder string = new StringBuilder(); |
||||
for (int i = 0; i < length; i++) { |
||||
if (i > 0) { |
||||
string.append(DELIMITER); |
||||
} |
||||
Object sourceElement = Array.get(source, i); |
||||
Object targetElement = invokeConverter(converter, sourceElement, sourceElementType, targetType); |
||||
string.append(targetElement); |
||||
} |
||||
return string.toString(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,96 @@
@@ -0,0 +1,96 @@
|
||||
/* |
||||
* Copyright 2002-2009 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.springframework.core.convert.support; |
||||
|
||||
import static org.springframework.core.convert.support.ConversionUtils.getElementType; |
||||
|
||||
import java.util.Collection; |
||||
import java.util.Map; |
||||
|
||||
import org.springframework.core.CollectionFactory; |
||||
import org.springframework.core.convert.TypeDescriptor; |
||||
|
||||
final class CollectionToMapGenericConverter implements GenericConverter { |
||||
|
||||
private final GenericConversionService conversionService; |
||||
|
||||
public CollectionToMapGenericConverter(GenericConversionService conversionService) { |
||||
this.conversionService = conversionService; |
||||
} |
||||
|
||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { |
||||
Collection sourceCollection = (Collection) source; |
||||
TypeDescriptor sourceElementType = sourceType.getElementTypeDescriptor(); |
||||
if (sourceElementType == TypeDescriptor.NULL) { |
||||
sourceElementType = getElementType(sourceCollection); |
||||
} |
||||
TypeDescriptor targetKeyType = targetType.getMapKeyTypeDescriptor(); |
||||
TypeDescriptor targetValueType = targetType.getMapValueTypeDescriptor(); |
||||
boolean keysCompatible = false; |
||||
if (sourceElementType == TypeDescriptor.NULL || targetKeyType == TypeDescriptor.NULL |
||||
|| sourceElementType.isAssignableTo(targetKeyType)) { |
||||
keysCompatible = true; |
||||
} |
||||
boolean valuesCompatible = false; |
||||
if (sourceElementType == TypeDescriptor.NULL || targetValueType == TypeDescriptor.NULL |
||||
|| sourceElementType.isAssignableTo(targetValueType)) { |
||||
valuesCompatible = true; |
||||
} |
||||
if (keysCompatible && valuesCompatible) { |
||||
Map target = CollectionFactory.createMap(targetType.getType(), sourceCollection.size()); |
||||
if (sourceElementType.typeEquals(String.class)) { |
||||
for (Object element : sourceCollection) { |
||||
String[] property = parseProperty((String) element); |
||||
target.put(property[0], property[1]); |
||||
} |
||||
} else { |
||||
for (Object element : sourceCollection) { |
||||
target.put(element, element); |
||||
} |
||||
} |
||||
return target; |
||||
} else { |
||||
Map target = CollectionFactory.createMap(targetType.getType(), sourceCollection.size()); |
||||
MapEntryConverter converter = new MapEntryConverter(sourceElementType, sourceElementType, targetKeyType, |
||||
targetValueType, keysCompatible, valuesCompatible, conversionService); |
||||
if (sourceElementType.typeEquals(String.class)) { |
||||
for (Object element : sourceCollection) { |
||||
String[] property = parseProperty((String) element); |
||||
Object targetKey = converter.convertKey(property[0]); |
||||
Object targetValue = converter.convertValue(property[1]); |
||||
target.put(targetKey, targetValue); |
||||
} |
||||
} else { |
||||
for (Object element : sourceCollection) { |
||||
Object targetKey = converter.convertKey(element); |
||||
Object targetValue = converter.convertValue(element); |
||||
target.put(targetKey, targetValue); |
||||
} |
||||
} |
||||
return target; |
||||
} |
||||
} |
||||
|
||||
private String[] parseProperty(String string) { |
||||
String[] property = string.split("="); |
||||
if (property.length < 2) { |
||||
throw new IllegalArgumentException("Invalid String property '" + property |
||||
+ "'; properties should be in the format name=value"); |
||||
} |
||||
return property; |
||||
} |
||||
|
||||
} |
||||
@ -1,75 +0,0 @@
@@ -1,75 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2009 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.springframework.core.convert.support; |
||||
|
||||
import static org.springframework.core.convert.support.ConversionUtils.getElementType; |
||||
import static org.springframework.core.convert.support.ConversionUtils.invokeConverter; |
||||
|
||||
import java.util.Collection; |
||||
|
||||
import org.springframework.core.convert.ConverterNotFoundException; |
||||
import org.springframework.core.convert.TypeDescriptor; |
||||
|
||||
final class CollectionToStringGenericConverter implements GenericConverter { |
||||
|
||||
private static final String DELIMITER = ","; |
||||
|
||||
private final GenericConversionService conversionService; |
||||
|
||||
public CollectionToStringGenericConverter(GenericConversionService conversionService) { |
||||
this.conversionService = conversionService; |
||||
} |
||||
|
||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { |
||||
Collection sourceCollection = (Collection) source; |
||||
if (sourceCollection.size() == 0) { |
||||
return ""; |
||||
} else { |
||||
TypeDescriptor sourceElementType = sourceType.getElementTypeDescriptor(); |
||||
if (sourceElementType == TypeDescriptor.NULL) { |
||||
sourceElementType = getElementType(sourceCollection); |
||||
} |
||||
if (sourceElementType == TypeDescriptor.NULL || sourceElementType.isAssignableTo(targetType)) { |
||||
StringBuilder string = new StringBuilder(); |
||||
int i = 0; |
||||
for (Object element : sourceCollection) { |
||||
if (i > 0) { |
||||
string.append(DELIMITER); |
||||
} |
||||
string.append(element); |
||||
i++; |
||||
} |
||||
return string.toString(); |
||||
} else { |
||||
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetType); |
||||
if (converter == null) { |
||||
throw new ConverterNotFoundException(sourceElementType, targetType); |
||||
} |
||||
StringBuilder string = new StringBuilder(); |
||||
int i = 0; |
||||
for (Object sourceElement : sourceCollection) { |
||||
if (i > 0) { |
||||
string.append(DELIMITER); |
||||
} |
||||
Object targetElement = invokeConverter(converter, sourceElement, sourceElementType, targetType); |
||||
string.append(targetElement); |
||||
i++; |
||||
} |
||||
return string.toString(); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,39 @@
@@ -0,0 +1,39 @@
|
||||
/* |
||||
* Copyright 2002-2009 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.springframework.core.convert.support; |
||||
|
||||
import java.util.List; |
||||
|
||||
import org.springframework.core.convert.TypeDescriptor; |
||||
|
||||
final class MapToArrayGenericConverter implements GenericConverter { |
||||
|
||||
private final GenericConverter mapToCollectionHelperConverter; |
||||
|
||||
private final GenericConverter collectionToArrayHelperConverter; |
||||
|
||||
public MapToArrayGenericConverter(GenericConversionService conversionService) { |
||||
this.mapToCollectionHelperConverter = new MapToCollectionGenericConverter(conversionService); |
||||
this.collectionToArrayHelperConverter = new CollectionToArrayGenericConverter(conversionService); |
||||
} |
||||
|
||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { |
||||
TypeDescriptor collectionType = TypeDescriptor.collection(List.class, targetType.getElementTypeDescriptor()); |
||||
Object collection = this.mapToCollectionHelperConverter.convert(source, sourceType, collectionType); |
||||
return this.collectionToArrayHelperConverter.convert(collection, collectionType, targetType); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,100 @@
@@ -0,0 +1,100 @@
|
||||
/* |
||||
* Copyright 2002-2009 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.springframework.core.convert.support; |
||||
|
||||
import java.util.Map; |
||||
|
||||
import org.springframework.core.convert.TypeDescriptor; |
||||
|
||||
final class MapToObjectGenericConverter implements GenericConverter { |
||||
|
||||
private static final String DELIMITER = " "; |
||||
|
||||
private final GenericConversionService conversionService; |
||||
|
||||
public MapToObjectGenericConverter(GenericConversionService conversionService) { |
||||
this.conversionService = conversionService; |
||||
} |
||||
|
||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { |
||||
Map sourceMap = (Map) source; |
||||
if (sourceMap.size() == 0) { |
||||
if (targetType.typeEquals(String.class)) { |
||||
return ""; |
||||
} else { |
||||
return null; |
||||
} |
||||
} else { |
||||
if (targetType.typeEquals(String.class)) { |
||||
TypeDescriptor sourceKeyType = sourceType.getMapKeyTypeDescriptor(); |
||||
TypeDescriptor sourceValueType = sourceType.getMapValueTypeDescriptor(); |
||||
boolean keysCompatible = false; |
||||
if (sourceKeyType == TypeDescriptor.NULL || sourceKeyType.isAssignableTo(targetType)) { |
||||
keysCompatible = true; |
||||
} |
||||
boolean valuesCompatible = false; |
||||
if (sourceValueType == TypeDescriptor.NULL || sourceValueType.isAssignableTo(targetType)) { |
||||
valuesCompatible = true; |
||||
} |
||||
if (keysCompatible && valuesCompatible) { |
||||
StringBuilder string = new StringBuilder(); |
||||
int i = 0; |
||||
for (Object entry : sourceMap.entrySet()) { |
||||
Map.Entry mapEntry = (Map.Entry) entry; |
||||
if (i > 0) { |
||||
string.append(DELIMITER); |
||||
} |
||||
String property = mapEntry.getKey() + "=" + mapEntry.getValue(); |
||||
string.append(property); |
||||
i++; |
||||
} |
||||
return string.toString(); |
||||
} else { |
||||
MapEntryConverter converter = new MapEntryConverter(sourceKeyType, sourceValueType, targetType, targetType, |
||||
keysCompatible, valuesCompatible, conversionService); |
||||
StringBuilder string = new StringBuilder(); |
||||
int i = 0; |
||||
for (Object entry : sourceMap.entrySet()) { |
||||
Map.Entry mapEntry = (Map.Entry) entry; |
||||
if (i > 0) { |
||||
string.append(DELIMITER); |
||||
} |
||||
Object key = converter.convertKey(mapEntry.getKey()); |
||||
Object value = converter.convertValue(mapEntry.getValue()); |
||||
String property = key + "=" + value; |
||||
string.append(property); |
||||
i++; |
||||
} |
||||
return string.toString(); |
||||
} |
||||
} else { |
||||
TypeDescriptor sourceValueType = sourceType.getMapValueTypeDescriptor(); |
||||
boolean valuesCompatible = false; |
||||
if (sourceValueType == TypeDescriptor.NULL || sourceValueType.isAssignableTo(targetType)) { |
||||
valuesCompatible = true; |
||||
} |
||||
if (valuesCompatible) { |
||||
return sourceMap.values().iterator().next(); |
||||
} else { |
||||
MapEntryConverter converter = new MapEntryConverter(sourceValueType, sourceValueType, targetType, targetType, |
||||
true, valuesCompatible, conversionService); |
||||
Object value = sourceMap.values().iterator().next(); |
||||
return converter.convertValue(value); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,64 @@
@@ -0,0 +1,64 @@
|
||||
/* |
||||
* Copyright 2002-2009 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.springframework.core.convert.support; |
||||
|
||||
import java.util.Map; |
||||
|
||||
import org.springframework.core.CollectionFactory; |
||||
import org.springframework.core.convert.TypeDescriptor; |
||||
|
||||
final class ObjectToMapGenericConverter implements GenericConverter { |
||||
|
||||
private final GenericConversionService conversionService; |
||||
|
||||
private final ArrayToMapGenericConverter helperConverter; |
||||
|
||||
public ObjectToMapGenericConverter(GenericConversionService conversionService) { |
||||
this.conversionService = conversionService; |
||||
this.helperConverter = new ArrayToMapGenericConverter(conversionService); |
||||
} |
||||
|
||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { |
||||
if (sourceType.typeEquals(String.class)) { |
||||
String string = (String) source; |
||||
String[] properties = string.split(" "); |
||||
return this.helperConverter.convert(properties, TypeDescriptor.valueOf(String[].class), targetType); |
||||
} else { |
||||
Map target = CollectionFactory.createMap(targetType.getType(), 1); |
||||
TypeDescriptor targetKeyType = targetType.getMapKeyTypeDescriptor(); |
||||
TypeDescriptor targetValueType = targetType.getMapValueTypeDescriptor(); |
||||
boolean keysCompatible = false; |
||||
if (targetKeyType == TypeDescriptor.NULL || sourceType.isAssignableTo(targetKeyType)) { |
||||
keysCompatible = true; |
||||
} |
||||
boolean valuesCompatible = false; |
||||
if (targetValueType == 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, conversionService); |
||||
Object key = converter.convertKey(source); |
||||
Object value = converter.convertValue(source); |
||||
target.put(key, value); |
||||
} |
||||
return target; |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -1,84 +0,0 @@
@@ -1,84 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2009 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.springframework.core.convert.support; |
||||
|
||||
import java.lang.reflect.Array; |
||||
import java.util.Map; |
||||
|
||||
import org.springframework.core.CollectionFactory; |
||||
import org.springframework.core.convert.TypeDescriptor; |
||||
|
||||
final class StringArrayToMapGenericConverter implements GenericConverter { |
||||
|
||||
private final GenericConversionService conversionService; |
||||
|
||||
public StringArrayToMapGenericConverter(GenericConversionService conversionService) { |
||||
this.conversionService = conversionService; |
||||
} |
||||
|
||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { |
||||
TypeDescriptor targetKeyType = targetType.getMapKeyTypeDescriptor(); |
||||
TypeDescriptor targetValueType = targetType.getMapValueTypeDescriptor(); |
||||
if (targetKeyType == TypeDescriptor.NULL && targetValueType == TypeDescriptor.NULL) { |
||||
return mapWithoutConversion(source, targetType); |
||||
} |
||||
TypeDescriptor sourceElementType = sourceType.getElementTypeDescriptor(); |
||||
boolean keysCompatible = false; |
||||
if (sourceElementType.isAssignableTo(targetKeyType)) { |
||||
keysCompatible = true; |
||||
} |
||||
boolean valuesCompatible = false; |
||||
if (sourceElementType.isAssignableTo(targetValueType)) { |
||||
valuesCompatible = true; |
||||
} |
||||
if (keysCompatible && valuesCompatible) { |
||||
return mapWithoutConversion(source, targetType); |
||||
} |
||||
int length = Array.getLength(source); |
||||
Map target = CollectionFactory.createMap(targetType.getType(), length); |
||||
MapEntryConverter converter = new MapEntryConverter(sourceElementType, sourceElementType, targetKeyType, targetValueType, keysCompatible, valuesCompatible, conversionService); |
||||
for (int i = 0; i < length; i++) { |
||||
String property = (String) Array.get(source, i); |
||||
String[] fields = property.split("="); |
||||
if (fields.length < 2) { |
||||
throw new IllegalArgumentException("Invalid String property '" + property |
||||
+ "'; properties should be in the format name=value"); |
||||
} |
||||
Object targetKey = converter.convertKey(fields[0]); |
||||
Object targetValue = converter.convertValue(fields[1]); |
||||
target.put(targetKey, targetValue); |
||||
} |
||||
return target; |
||||
} |
||||
|
||||
private Map mapWithoutConversion(Object source, TypeDescriptor targetType) { |
||||
int length = Array.getLength(source); |
||||
Map target = CollectionFactory.createMap(targetType.getType(), length); |
||||
for (int i = 0; i < length; i++) { |
||||
String property = (String) Array.get(source, i); |
||||
String[] fields = property.split("="); |
||||
if (fields.length < 2) { |
||||
throw new IllegalArgumentException("Invalid String property '" + property |
||||
+ "'; properties should be in the format name=value"); |
||||
} |
||||
String key = fields[0]; |
||||
String value = fields[1]; |
||||
target.put(key, value); |
||||
} |
||||
return target; |
||||
} |
||||
|
||||
} |
||||
@ -1,53 +0,0 @@
@@ -1,53 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2009 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.springframework.core.convert.support; |
||||
|
||||
import static org.springframework.core.convert.support.ConversionUtils.invokeConverter; |
||||
|
||||
import java.lang.reflect.Array; |
||||
|
||||
import org.springframework.core.convert.ConverterNotFoundException; |
||||
import org.springframework.core.convert.TypeDescriptor; |
||||
import org.springframework.util.StringUtils; |
||||
|
||||
final class StringToArrayGenericConverter implements GenericConverter { |
||||
|
||||
private final GenericConversionService conversionService; |
||||
|
||||
public StringToArrayGenericConverter(GenericConversionService conversionService) { |
||||
this.conversionService = conversionService; |
||||
} |
||||
|
||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { |
||||
String string = (String) source; |
||||
String[] fields = StringUtils.commaDelimitedListToStringArray(string); |
||||
TypeDescriptor targetElementType = targetType.getElementTypeDescriptor(); |
||||
if (sourceType.isAssignableTo(targetElementType)) { |
||||
return fields; |
||||
} else { |
||||
Object target = Array.newInstance(targetElementType.getType(), fields.length); |
||||
GenericConverter converter = this.conversionService.getConverter(sourceType, targetElementType); |
||||
if (converter == null) { |
||||
throw new ConverterNotFoundException(sourceType, targetElementType); |
||||
} |
||||
for (int i = 0; i < fields.length; i++) { |
||||
Array.set(target, i, invokeConverter(converter, fields[i], sourceType, targetElementType)); |
||||
} |
||||
return target; |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -1,58 +0,0 @@
@@ -1,58 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2009 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.springframework.core.convert.support; |
||||
|
||||
import static org.springframework.core.convert.support.ConversionUtils.invokeConverter; |
||||
|
||||
import java.util.Collection; |
||||
|
||||
import org.springframework.core.CollectionFactory; |
||||
import org.springframework.core.convert.ConverterNotFoundException; |
||||
import org.springframework.core.convert.TypeDescriptor; |
||||
import org.springframework.util.StringUtils; |
||||
|
||||
final class StringToCollectionGenericConverter implements GenericConverter { |
||||
|
||||
private final GenericConversionService conversionService; |
||||
|
||||
public StringToCollectionGenericConverter(GenericConversionService conversionService) { |
||||
this.conversionService = conversionService; |
||||
} |
||||
|
||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { |
||||
String string = (String) source; |
||||
String[] fields = StringUtils.commaDelimitedListToStringArray(string); |
||||
Collection target = CollectionFactory.createCollection(targetType.getType(), 1); |
||||
TypeDescriptor targetElementType = targetType.getElementTypeDescriptor(); |
||||
if (targetElementType == TypeDescriptor.NULL || sourceType.isAssignableTo(targetElementType)) { |
||||
for (int i = 0; i < fields.length; i++) { |
||||
target.add(fields[i]); |
||||
} |
||||
} else { |
||||
GenericConverter converter = this.conversionService.getConverter(sourceType, targetElementType); |
||||
if (converter == null) { |
||||
throw new ConverterNotFoundException(sourceType, targetElementType); |
||||
} |
||||
for (int i = 0; i < fields.length; i++) { |
||||
String sourceElement = fields[i]; |
||||
Object targetElement = invokeConverter(converter, sourceElement, sourceType, targetElementType); |
||||
target.add(targetElement); |
||||
} |
||||
} |
||||
return target; |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue