convert polishing: removed checked exception from Converter interface to support direct use, added Converter to each implementation for consistency

This commit is contained in:
Keith Donald 2009-09-16 19:24:56 +00:00
parent 881c3ed6fa
commit 1c6965132f
35 changed files with 90 additions and 356 deletions

View File

@ -35,7 +35,6 @@ abstract class AbstractCollectionConverter implements ConversionExecutor {
private final ConversionExecutor elementConverter; private final ConversionExecutor elementConverter;
public AbstractCollectionConverter(TypeDescriptor sourceCollectionType, TypeDescriptor targetCollectionType, GenericConversionService conversionService) { public AbstractCollectionConverter(TypeDescriptor sourceCollectionType, TypeDescriptor targetCollectionType, GenericConversionService conversionService) {
this.conversionService = conversionService; this.conversionService = conversionService;
this.sourceCollectionType = sourceCollectionType; this.sourceCollectionType = sourceCollectionType;
@ -56,7 +55,6 @@ abstract class AbstractCollectionConverter implements ConversionExecutor {
} }
} }
/** /**
* The collection type to convert to. * The collection type to convert to.
*/ */

View File

@ -29,7 +29,6 @@ import org.springframework.core.convert.TypeDescriptor;
* @author Juergen Hoeller * @author Juergen Hoeller
* @since 3.0 * @since 3.0
*/ */
@SuppressWarnings("unchecked")
class ArrayToArray extends AbstractCollectionConverter { class ArrayToArray extends AbstractCollectionConverter {
public ArrayToArray(TypeDescriptor sourceArrayType, TypeDescriptor targetArrayType, GenericConversionService conversionService) { public ArrayToArray(TypeDescriptor sourceArrayType, TypeDescriptor targetArrayType, GenericConversionService conversionService) {

View File

@ -39,7 +39,6 @@ class ArrayToCollection extends AbstractCollectionConverter {
} }
@Override @Override
@SuppressWarnings("unchecked")
protected Object doExecute(Object sourceArray) throws Exception { protected Object doExecute(Object sourceArray) throws Exception {
int length = Array.getLength(sourceArray); int length = Array.getLength(sourceArray);
Collection collection = CollectionFactory.createCollection(getTargetCollectionType(), length); Collection collection = CollectionFactory.createCollection(getTargetCollectionType(), length);

View File

@ -44,7 +44,6 @@ class CharacterToNumberFactory implements ConverterFactory<Character, Number> {
return new CharacterToNumber<T>(targetType); return new CharacterToNumber<T>(targetType);
} }
private static class CharacterToNumber<T extends Number> implements Converter<Character, T> { private static class CharacterToNumber<T extends Number> implements Converter<Character, T> {
private final Class<T> targetType; private final Class<T> targetType;
@ -53,7 +52,7 @@ class CharacterToNumberFactory implements ConverterFactory<Character, Number> {
this.targetType = targetType; this.targetType = targetType;
} }
public T convert(Character source) throws Exception { public T convert(Character source) {
return NumberUtils.convertNumberToTargetClass((short) source.charValue(), targetType); return NumberUtils.convertNumberToTargetClass((short) source.charValue(), targetType);
} }
} }

View File

@ -30,22 +30,15 @@ public class DefaultConversionService extends GenericConversionService {
* Create a new default conversion service, installing the default converters. * Create a new default conversion service, installing the default converters.
*/ */
public DefaultConversionService() { public DefaultConversionService() {
addConverter(new StringToByte()); addConverter(new StringToBooleanConverter());
addConverter(new StringToBoolean()); addConverter(new StringToCharacterConverter());
addConverter(new StringToCharacter()); addConverter(new StringToLocaleConverter());
addConverter(new StringToShort()); addConverter(new NumberToCharacterConverter());
addConverter(new StringToInteger()); addConverter(new ObjectToStringConverter());
addConverter(new StringToLong()); addConverterFactory(new StringToNumberConverterFactory());
addConverter(new StringToFloat()); addConverterFactory(new StringToEnumConverterFactory());
addConverter(new StringToDouble()); addConverterFactory(new NumberToNumberConverterFactory());
addConverter(new StringToBigInteger()); addConverterFactory(new CharacterToNumberFactory());
addConverter(new StringToBigDecimal());
addConverter(new StringToLocale());
addConverter(new NumberToCharacter());
addConverter(new ObjectToString());
addConverter(new StringToEnumFactory());
addConverter(new NumberToNumberFactory());
addConverter(new CharacterToNumberFactory());
} }
} }

View File

@ -46,7 +46,7 @@ import org.springframework.util.ClassUtils;
* @author Juergen Hoeller * @author Juergen Hoeller
* @since 3.0 * @since 3.0
* @see #addConverter(Converter) * @see #addConverter(Converter)
* @see #addConverter(ConverterFactory) * @see #addConverterFactory(ConverterFactory)
*/ */
public class GenericConversionService implements ConversionService, ConverterRegistry { public class GenericConversionService implements ConversionService, ConverterRegistry {
@ -58,7 +58,6 @@ public class GenericConversionService implements ConversionService, ConverterReg
*/ */
private final Map<Class, Map<Class, Object>> sourceTypeConverters = new HashMap<Class, Map<Class, Object>>(); private final Map<Class, Map<Class, Object>> sourceTypeConverters = new HashMap<Class, Map<Class, Object>>();
/** /**
* Registers the converters in the set provided. * Registers the converters in the set provided.
* JavaBean-friendly alternative to calling {@link #addConverter(Converter)}. * JavaBean-friendly alternative to calling {@link #addConverter(Converter)}.
@ -71,13 +70,13 @@ public class GenericConversionService implements ConversionService, ConverterReg
} }
/** /**
* Registers the converters in the set provided. * Registers the converter factories in the set provided.
* JavaBean-friendly alternative to calling {@link #addConverter(ConverterFactory)}. * JavaBean-friendly alternative to calling {@link #addConverterFactory(ConverterFactory)}.
* @see #addConverter(ConverterFactory) * @see #addConverterFactory(ConverterFactory)
*/ */
public void setConverterFactories(Set<ConverterFactory> converters) { public void setConverterFactories(Set<ConverterFactory> converters) {
for (ConverterFactory converterFactory : converters) { for (ConverterFactory converterFactory : converters) {
addConverter(converterFactory); addConverterFactory(converterFactory);
} }
} }
@ -95,35 +94,33 @@ public class GenericConversionService implements ConversionService, ConverterReg
return this.parent; return this.parent;
} }
// implementing ConverterRegistry // implementing ConverterRegistry
public void addConverter(Converter converter) { public void addConverter(Converter converter) {
List<Class> typeInfo = getRequiredTypeInfo(converter); List<Class> typeInfo = getRequiredTypeInfo(converter);
if (typeInfo == null) { if (typeInfo == null) {
throw new IllegalArgumentException("Unable to the determine sourceType <S> and targetType <T> your Converter<S, T> converts between"); throw new IllegalArgumentException("Unable to the determine sourceType <S> and targetType <T> your Converter<S, T> converts between; declare these types or implement ConverterInfo");
} }
Class sourceType = typeInfo.get(0); Class sourceType = typeInfo.get(0);
Class targetType = typeInfo.get(1); Class targetType = typeInfo.get(1);
getSourceMap(sourceType).put(targetType, converter); getSourceMap(sourceType).put(targetType, converter);
} }
public void addConverter(ConverterFactory<?, ?> converterFactory) { public void addConverterFactory(ConverterFactory<?, ?> converterFactory) {
List<Class> typeInfo = getRequiredTypeInfo(converterFactory); List<Class> typeInfo = getRequiredTypeInfo(converterFactory);
if (typeInfo == null) { if (typeInfo == null) {
throw new IllegalArgumentException("Unable to the determine sourceType <S> and targetType <T> your ConverterFactory<S, T> creates Converters to convert between"); throw new IllegalArgumentException("Unable to the determine sourceType <S> and targetType <T> your ConverterFactory<S, T> creates Converters to convert between; declare these types or implement ConverterInfo");
} }
Class sourceType = typeInfo.get(0); Class sourceType = typeInfo.get(0);
Class targetType = typeInfo.get(1); Class targetType = typeInfo.get(1);
getSourceMap(sourceType).put(targetType, converterFactory); getSourceMap(sourceType).put(targetType, converterFactory);
} }
public void removeConverter(Class<?> sourceType, Class<?> targetType) { public void removeConvertible(Class<?> sourceType, Class<?> targetType) {
Map sourceMap = getSourceMap(sourceType); Map sourceMap = getSourceMap(sourceType);
sourceMap.remove(targetType); sourceMap.remove(targetType);
} }
// implementing ConversionService // implementing ConversionService
public boolean canConvert(Class<?> sourceType, Class<?> targetType) { public boolean canConvert(Class<?> sourceType, Class<?> targetType) {
@ -459,7 +456,6 @@ public class GenericConversionService implements ConversionService, ConverterReg
} }
} }
@SuppressWarnings("unchecked")
private Converter getConverter(Map<Class, Object> converters, Class<?> currentClass, Class<?> targetType) { private Converter getConverter(Map<Class, Object> converters, Class<?> currentClass, Class<?> targetType) {
Object converter = converters.get(currentClass); Object converter = converters.get(currentClass);
if (converter == null) { if (converter == null) {

View File

@ -26,18 +26,15 @@ class MapEntryConverter {
public static final MapEntryConverter NO_OP_INSTANCE = new MapEntryConverter(null, null); public static final MapEntryConverter NO_OP_INSTANCE = new MapEntryConverter(null, null);
private final ConversionExecutor keyConverter; private final ConversionExecutor keyConverter;
private final ConversionExecutor valueConverter; private final ConversionExecutor valueConverter;
public MapEntryConverter(ConversionExecutor keyConverter, ConversionExecutor valueConverter) { public MapEntryConverter(ConversionExecutor keyConverter, ConversionExecutor valueConverter) {
this.keyConverter = keyConverter; this.keyConverter = keyConverter;
this.valueConverter = valueConverter; this.valueConverter = valueConverter;
} }
public Object convertKey(Object key) { public Object convertKey(Object key) {
if (this.keyConverter != null) { if (this.keyConverter != null) {
return this.keyConverter.execute(key); return this.keyConverter.execute(key);

View File

@ -39,7 +39,6 @@ class MapToMap implements ConversionExecutor {
private final MapEntryConverter entryConverter; private final MapEntryConverter entryConverter;
/** /**
* Creates a new map-to-map converter * Creates a new map-to-map converter
* @param sourceType the source map type * @param sourceType the source map type
@ -53,7 +52,6 @@ class MapToMap implements ConversionExecutor {
this.entryConverter = createEntryConverter(); this.entryConverter = createEntryConverter();
} }
private MapEntryConverter createEntryConverter() { private MapEntryConverter createEntryConverter() {
if (this.sourceType.isMapEntryTypeKnown() && this.targetType.isMapEntryTypeKnown()) { if (this.sourceType.isMapEntryTypeKnown() && this.targetType.isMapEntryTypeKnown()) {
ConversionExecutor keyConverter = this.conversionService.getConversionExecutor( ConversionExecutor keyConverter = this.conversionService.getConversionExecutor(

View File

@ -37,14 +37,12 @@ class MapToStringArray implements ConversionExecutor {
private final MapEntryConverter entryConverter; private final MapEntryConverter entryConverter;
public MapToStringArray(TypeDescriptor targetType, GenericConversionService conversionService) { public MapToStringArray(TypeDescriptor targetType, GenericConversionService conversionService) {
this.targetType = targetType; this.targetType = targetType;
this.conversionService = conversionService; this.conversionService = conversionService;
this.entryConverter = createEntryConverter(); this.entryConverter = createEntryConverter();
} }
private MapEntryConverter createEntryConverter() { private MapEntryConverter createEntryConverter() {
if (this.targetType.isMapEntryTypeKnown()) { if (this.targetType.isMapEntryTypeKnown()) {
ConversionExecutor keyConverter = this.conversionService.getConversionExecutor(this.targetType.getMapKeyType(), ConversionExecutor keyConverter = this.conversionService.getConversionExecutor(this.targetType.getMapKeyType(),

View File

@ -34,13 +34,11 @@ class MapToStringCollection implements ConversionExecutor {
private final ArrayToCollection collectionConverter; private final ArrayToCollection collectionConverter;
public MapToStringCollection(TypeDescriptor targetType, GenericConversionService conversionService) { public MapToStringCollection(TypeDescriptor targetType, GenericConversionService conversionService) {
this.converter = new MapToStringArray(targetType, conversionService); this.converter = new MapToStringArray(targetType, conversionService);
this.collectionConverter = new ArrayToCollection(TypeDescriptor.valueOf(String[].class), targetType, conversionService); this.collectionConverter = new ArrayToCollection(TypeDescriptor.valueOf(String[].class), targetType, conversionService);
} }
public Object execute(Object source) throws ConversionFailedException { public Object execute(Object source) throws ConversionFailedException {
Map map = (Map) source; Map map = (Map) source;
Object array = this.converter.execute(map); Object array = this.converter.execute(map);

View File

@ -28,7 +28,6 @@ class NoOpConversionExecutor implements ConversionExecutor {
public static final ConversionExecutor INSTANCE = new NoOpConversionExecutor(); public static final ConversionExecutor INSTANCE = new NoOpConversionExecutor();
private NoOpConversionExecutor() { private NoOpConversionExecutor() {
} }

View File

@ -17,7 +17,6 @@
package org.springframework.core.convert.support; package org.springframework.core.convert.support;
import org.springframework.core.convert.converter.Converter; import org.springframework.core.convert.converter.Converter;
import org.springframework.util.NumberUtils;
/** /**
* Converts from any JDK-standard Number implementation to a Character. * Converts from any JDK-standard Number implementation to a Character.
@ -32,9 +31,8 @@ import org.springframework.util.NumberUtils;
* @see java.lang.Float * @see java.lang.Float
* @see java.lang.Double * @see java.lang.Double
* @see java.math.BigDecimal * @see java.math.BigDecimal
* @see NumberUtils
*/ */
class NumberToCharacter implements Converter<Number, Character> { class NumberToCharacterConverter implements Converter<Number, Character> {
public Character convert(Number source) { public Character convert(Number source) {
return (char) source.shortValue(); return (char) source.shortValue();

View File

@ -38,13 +38,12 @@ import org.springframework.util.NumberUtils;
* @see java.math.BigDecimal * @see java.math.BigDecimal
* @see NumberUtils * @see NumberUtils
*/ */
class NumberToNumberFactory implements ConverterFactory<Number, Number> { class NumberToNumberConverterFactory implements ConverterFactory<Number, Number> {
public <T extends Number> Converter<Number, T> getConverter(Class<T> targetType) { public <T extends Number> Converter<Number, T> getConverter(Class<T> targetType) {
return new NumberToNumber<T>(targetType); return new NumberToNumber<T>(targetType);
} }
private static class NumberToNumber<T extends Number> implements Converter<Number, T> { private static class NumberToNumber<T extends Number> implements Converter<Number, T> {
private final Class<T> targetType; private final Class<T> targetType;
@ -53,7 +52,7 @@ class NumberToNumberFactory implements ConverterFactory<Number, Number> {
this.targetType = targetType; this.targetType = targetType;
} }
public T convert(Number source) throws Exception { public T convert(Number source) {
return NumberUtils.convertNumberToTargetClass(source, targetType); return NumberUtils.convertNumberToTargetClass(source, targetType);
} }
} }

View File

@ -34,16 +34,13 @@ class ObjectToArray implements ConversionExecutor {
private final ConversionExecutor elementConverter; private final ConversionExecutor elementConverter;
public ObjectToArray(TypeDescriptor sourceObjectType, TypeDescriptor targetArrayType, public ObjectToArray(TypeDescriptor sourceObjectType, TypeDescriptor targetArrayType,
GenericConversionService conversionService) { GenericConversionService conversionService) {
this.elementType = targetArrayType.getElementType(); this.elementType = targetArrayType.getElementType();
this.elementConverter = conversionService.getConversionExecutor( this.elementConverter = conversionService.getConversionExecutor(
sourceObjectType.getType(), TypeDescriptor.valueOf(this.elementType)); sourceObjectType.getType(), TypeDescriptor.valueOf(this.elementType));
} }
public Object execute(Object source) throws ConversionFailedException { public Object execute(Object source) throws ConversionFailedException {
Object array = Array.newInstance(this.elementType, 1); Object array = Array.newInstance(this.elementType, 1);
Object element = this.elementConverter.execute(source); Object element = this.elementConverter.execute(source);

View File

@ -33,11 +33,9 @@ class ObjectToCollection implements ConversionExecutor {
private final TypeDescriptor targetCollectionType; private final TypeDescriptor targetCollectionType;
private final ConversionExecutor elementConverter; private final ConversionExecutor elementConverter;
public ObjectToCollection(TypeDescriptor sourceObjectType, TypeDescriptor targetCollectionType, public ObjectToCollection(TypeDescriptor sourceObjectType, TypeDescriptor targetCollectionType,
GenericConversionService typeConverter) { GenericConversionService typeConverter) {
this.targetCollectionType = targetCollectionType; this.targetCollectionType = targetCollectionType;
Class<?> elementType = targetCollectionType.getElementType(); Class<?> elementType = targetCollectionType.getElementType();
if (elementType != null) { if (elementType != null) {
@ -48,7 +46,6 @@ class ObjectToCollection implements ConversionExecutor {
} }
} }
@SuppressWarnings("unchecked")
public Object execute(Object source) throws ConversionFailedException { public Object execute(Object source) throws ConversionFailedException {
Collection collection = CollectionFactory.createCollection(this.targetCollectionType.getType(), 1); Collection collection = CollectionFactory.createCollection(this.targetCollectionType.getType(), 1);
collection.add(this.elementConverter.execute(source)); collection.add(this.elementConverter.execute(source));

View File

@ -26,7 +26,7 @@ import org.springframework.core.convert.converter.Converter;
* @author Keith Donald * @author Keith Donald
* @since 3.0 * @since 3.0
*/ */
class ObjectToString implements Converter<Object, String> { class ObjectToStringConverter implements Converter<Object, String> {
public String convert(Object source) { public String convert(Object source) {
return source.toString(); return source.toString();

View File

@ -35,15 +35,12 @@ class StaticConversionExecutor implements ConversionExecutor {
private final Converter converter; private final Converter converter;
public StaticConversionExecutor(TypeDescriptor sourceType, TypeDescriptor targetType, Converter converter) { public StaticConversionExecutor(TypeDescriptor sourceType, TypeDescriptor targetType, Converter converter) {
this.sourceType = sourceType; this.sourceType = sourceType;
this.targetType = targetType; this.targetType = targetType;
this.converter = converter; this.converter = converter;
} }
@SuppressWarnings("unchecked")
public Object execute(Object source) throws ConversionFailedException { public Object execute(Object source) throws ConversionFailedException {
if (source == null) { if (source == null) {
return null; return null;

View File

@ -40,7 +40,6 @@ class StringArrayToMap implements ConversionExecutor {
private final MapEntryConverter entryConverter; private final MapEntryConverter entryConverter;
public StringArrayToMap(TypeDescriptor sourceType, TypeDescriptor targetType, GenericConversionService conversionService) { public StringArrayToMap(TypeDescriptor sourceType, TypeDescriptor targetType, GenericConversionService conversionService) {
this.sourceType = sourceType; this.sourceType = sourceType;
this.targetType = targetType; this.targetType = targetType;
@ -48,7 +47,6 @@ class StringArrayToMap implements ConversionExecutor {
this.entryConverter = createEntryConverter(); this.entryConverter = createEntryConverter();
} }
private MapEntryConverter createEntryConverter() { private MapEntryConverter createEntryConverter() {
if (this.targetType.isMapEntryTypeKnown()) { if (this.targetType.isMapEntryTypeKnown()) {
ConversionExecutor keyConverter = this.conversionService.getConversionExecutor(String.class, ConversionExecutor keyConverter = this.conversionService.getConversionExecutor(String.class,
@ -62,7 +60,6 @@ class StringArrayToMap implements ConversionExecutor {
} }
} }
@SuppressWarnings("unchecked")
public Object execute(Object source) throws ConversionFailedException { public Object execute(Object source) throws ConversionFailedException {
try { try {
int length = Array.getLength(source); int length = Array.getLength(source);

View File

@ -31,12 +31,10 @@ class StringArrayToObject implements ConversionExecutor {
private final ConversionExecutor elementConverter; private final ConversionExecutor elementConverter;
public StringArrayToObject(TypeDescriptor targetType, GenericConversionService conversionService) { public StringArrayToObject(TypeDescriptor targetType, GenericConversionService conversionService) {
this.elementConverter = conversionService.getConversionExecutor(String.class, targetType); this.elementConverter = conversionService.getConversionExecutor(String.class, targetType);
} }
public Object execute(Object source) throws ConversionFailedException { public Object execute(Object source) throws ConversionFailedException {
String str = StringUtils.arrayToCommaDelimitedString(ObjectUtils.toObjectArray(source)); String str = StringUtils.arrayToCommaDelimitedString(ObjectUtils.toObjectArray(source));
return this.elementConverter.execute(str); return this.elementConverter.execute(str);

View File

@ -25,17 +25,14 @@ import org.springframework.util.StringUtils;
* @author Keith Donald * @author Keith Donald
* @since 3.0 * @since 3.0
*/ */
@SuppressWarnings("unchecked")
class StringToArray implements ConversionExecutor { class StringToArray implements ConversionExecutor {
private final ArrayToArray converter; private final ArrayToArray converter;
public StringToArray(TypeDescriptor targetType, GenericConversionService conversionService) { public StringToArray(TypeDescriptor targetType, GenericConversionService conversionService) {
this.converter = new ArrayToArray(TypeDescriptor.valueOf(String[].class), targetType, conversionService); this.converter = new ArrayToArray(TypeDescriptor.valueOf(String[].class), targetType, conversionService);
} }
public Object execute(Object source) { public Object execute(Object source) {
String str = (String) source; String str = (String) source;
String[] fields = StringUtils.commaDelimitedListToStringArray(str); String[] fields = StringUtils.commaDelimitedListToStringArray(str);

View File

@ -1,36 +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.math.BigDecimal;
import org.springframework.core.convert.converter.Converter;
import org.springframework.util.NumberUtils;
/**
* Converts a String to a BigDecimal.
*
* @author Keith Donald
* @since 3.0
*/
class StringToBigDecimal implements Converter<String, BigDecimal> {
public BigDecimal convert(String source) {
return NumberUtils.parseNumber(source, BigDecimal.class);
}
}

View File

@ -1,36 +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.math.BigInteger;
import org.springframework.core.convert.converter.Converter;
import org.springframework.util.NumberUtils;
/**
* Converts a String to a BigInteger.
*
* @author Keith Donald
* @since 3.0
*/
class StringToBigInteger implements Converter<String, BigInteger> {
public BigInteger convert(String source) {
return NumberUtils.parseNumber(source, BigInteger.class);
}
}

View File

@ -24,7 +24,7 @@ import org.springframework.core.convert.converter.Converter;
* @author Keith Donald * @author Keith Donald
* @since 3.0 * @since 3.0
*/ */
class StringToBoolean implements Converter<String, Boolean> { class StringToBooleanConverter implements Converter<String, Boolean> {
public Boolean convert(String source) { public Boolean convert(String source) {
if (source.equals("true")) { if (source.equals("true")) {

View File

@ -1,34 +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 org.springframework.core.convert.converter.Converter;
import org.springframework.util.NumberUtils;
/**
* Converts a String to a Byte.
*
* @author Keith Donald
* @since 3.0
*/
class StringToByte implements Converter<String, Byte> {
public Byte convert(String source) {
return NumberUtils.parseNumber(source, Byte.class);
}
}

View File

@ -24,11 +24,11 @@ import org.springframework.core.convert.converter.Converter;
* @author Keith Donald * @author Keith Donald
* @since 3.0 * @since 3.0
*/ */
class StringToCharacter implements Converter<String, Character> { class StringToCharacterConverter implements Converter<String, Character> {
public Character convert(String source) { public Character convert(String source) {
if (source.length() != 1) { if (source.length() == 0) {
throw new IllegalArgumentException("To be a Character the String '" + source + "' must have a length of 1"); throw new IllegalArgumentException("Invalid value; to convert to a Character a String must have a length of 1 or greater");
} }
return source.charAt(0); return source.charAt(0);
} }

View File

@ -30,12 +30,10 @@ class StringToCollection implements ConversionExecutor {
private final ArrayToCollection converter; private final ArrayToCollection converter;
public StringToCollection(TypeDescriptor sourceType, TypeDescriptor targetType, GenericConversionService conversionService) { public StringToCollection(TypeDescriptor sourceType, TypeDescriptor targetType, GenericConversionService conversionService) {
this.converter = new ArrayToCollection(sourceType, targetType, conversionService); this.converter = new ArrayToCollection(sourceType, targetType, conversionService);
} }
public Object execute(Object source) throws ConversionFailedException { public Object execute(Object source) throws ConversionFailedException {
String string = (String) source; String string = (String) source;
String[] fields = string.split(","); String[] fields = string.split(",");

View File

@ -1,34 +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 org.springframework.core.convert.converter.Converter;
import org.springframework.util.NumberUtils;
/**
* Converts a String to a Double.
*
* @author Keith Donald
* @since 3.0
*/
class StringToDouble implements Converter<String, Double> {
public Double convert(String source) {
return NumberUtils.parseNumber(source, Double.class);
}
}

View File

@ -27,13 +27,12 @@ import org.springframework.core.convert.converter.ConverterInfo;
* @since 3.0 * @since 3.0
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
class StringToEnumFactory implements ConverterFactory<String, Enum> { class StringToEnumConverterFactory implements ConverterFactory<String, Enum> {
public <T extends Enum> Converter<String, T> getConverter(Class<T> targetType) { public <T extends Enum> Converter<String, T> getConverter(Class<T> targetType) {
return new StringToEnum(targetType); return new StringToEnum(targetType);
} }
private class StringToEnum<T extends Enum> implements Converter<String, T>, ConverterInfo { private class StringToEnum<T extends Enum> implements Converter<String, T>, ConverterInfo {
private final Class<T> enumType; private final Class<T> enumType;
@ -50,7 +49,7 @@ class StringToEnumFactory implements ConverterFactory<String, Enum> {
return this.enumType; return this.enumType;
} }
public T convert(String source) throws Exception { public T convert(String source) {
if ("".equals(source)) { if ("".equals(source)) {
// It's an empty enum identifier: reset the enum value to null. // It's an empty enum identifier: reset the enum value to null.
return null; return null;

View File

@ -1,34 +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 org.springframework.core.convert.converter.Converter;
import org.springframework.util.NumberUtils;
/**
* Converts a String to Float.
*
* @author Keith Donald
* @since 3.0
*/
class StringToFloat implements Converter<String, Float> {
public Float convert(String source) {
return NumberUtils.parseNumber(source, Float.class);
}
}

View File

@ -1,34 +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 org.springframework.core.convert.converter.Converter;
import org.springframework.util.NumberUtils;
/**
* Converts a String to an Integer.
*
* @author Keith Donald
* @since 3.0
*/
class StringToInteger implements Converter<String, Integer> {
public Integer convert(String source) {
return NumberUtils.parseNumber(source, Integer.class);
}
}

View File

@ -27,7 +27,7 @@ import org.springframework.util.StringUtils;
* @author Keith Donald * @author Keith Donald
* @since 3.0 * @since 3.0
*/ */
class StringToLocale implements Converter<String, Locale> { class StringToLocaleConverter implements Converter<String, Locale> {
public Locale convert(String source) { public Locale convert(String source) {
return StringUtils.parseLocaleString(source); return StringUtils.parseLocaleString(source);

View File

@ -1,34 +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 org.springframework.core.convert.converter.Converter;
import org.springframework.util.NumberUtils;
/**
* Converts a String to a Long.
*
* @author Keith Donald
* @since 3.0
*/
class StringToLong implements Converter<String, Long> {
public Long convert(String source) {
return NumberUtils.parseNumber(source, Long.class);
}
}

View File

@ -32,7 +32,6 @@ import org.springframework.core.convert.TypeDescriptor;
* @author Keith Donald * @author Keith Donald
* @since 3.0 * @since 3.0
*/ */
@SuppressWarnings("unchecked")
class StringToMap implements ConversionExecutor { class StringToMap implements ConversionExecutor {
private StringArrayToMap converter; private StringArrayToMap converter;

View File

@ -0,0 +1,60 @@
/*
* 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 org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.converter.ConverterFactory;
import org.springframework.util.NumberUtils;
/**
* Converts from a String any JDK-standard Number implementation.
*
* <p>Support Number classes including Byte, Short, Integer, Float, Double, Long, BigInteger, BigDecimal. This class
* delegates to {@link NumberUtils#parseNumber(String, Class)} to perform the conversion.
*
* @author Keith Donald
* @since 3.0
* @see java.lang.Byte
* @see java.lang.Short
* @see java.lang.Integer
* @see java.lang.Long
* @see java.math.BigInteger
* @see java.lang.Float
* @see java.lang.Double
* @see java.math.BigDecimal
* @see NumberUtils
*/
class StringToNumberConverterFactory implements ConverterFactory<String, Number> {
public <T extends Number> Converter<String, T> getConverter(Class<T> targetType) {
return new StringToNumber<T>(targetType);
}
private static class StringToNumber<T extends Number> implements Converter<String, T> {
private final Class<T> targetType;
public StringToNumber(Class<T> targetType) {
this.targetType = targetType;
}
public T convert(String source) {
return NumberUtils.parseNumber(source, targetType);
}
}
}

View File

@ -1,34 +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 org.springframework.core.convert.converter.Converter;
import org.springframework.util.NumberUtils;
/**
* Converts a String to a Short.
*
* @author Keith Donald
* @since 3.0
*/
class StringToShort implements Converter<String, Short> {
public Short convert(String source) {
return NumberUtils.parseNumber(source, Short.class);
}
}