提交 9750dfc3 编写于 作者: A Andy Clement

hard coded support for boxing conversions. Added support for numbers (int/long) to boolean

上级 ef16bff7
......@@ -42,22 +42,47 @@ public class StandardTypeConverter implements TypeConverter {
public boolean canConvert(Class<?> sourceType, Class<?> targetType) {
Map<Class<?>, StandardIndividualTypeConverter> possibleConvertersToTheTargetType = converters.get(targetType);
if (possibleConvertersToTheTargetType == null && targetType.isPrimitive()) {
if (targetType == Integer.TYPE)
if (targetType == Integer.TYPE) {
if (sourceType == Integer.class) {
return true;
}
possibleConvertersToTheTargetType = converters.get(Integer.class);
else if (targetType == Boolean.TYPE)
} else if (targetType == Boolean.TYPE) {
if (sourceType == Boolean.class) {
return true;
}
possibleConvertersToTheTargetType = converters.get(Boolean.class);
else if (targetType == Short.TYPE)
} else if (targetType == Short.TYPE) {
if (sourceType == Short.class) {
return true;
}
possibleConvertersToTheTargetType = converters.get(Short.class);
else if (targetType == Long.TYPE)
} else if (targetType == Long.TYPE) {
if (sourceType == Long.class) {
return true;
}
possibleConvertersToTheTargetType = converters.get(Long.class);
else if (targetType == Character.TYPE)
} else if (targetType == Character.TYPE) {
if (sourceType == Character.class) {
return true;
}
possibleConvertersToTheTargetType = converters.get(Character.class);
else if (targetType == Double.TYPE)
} else if (targetType == Double.TYPE) {
if (sourceType == Double.class) {
return true;
}
possibleConvertersToTheTargetType = converters.get(Double.class);
else if (targetType == Float.TYPE)
} else if (targetType == Float.TYPE) {
if (sourceType == Float.class) {
return true;
}
possibleConvertersToTheTargetType = converters.get(Float.class);
else if (targetType == Byte.TYPE)
} else if (targetType == Byte.TYPE) {
if (sourceType == Byte.class) {
return true;
}
possibleConvertersToTheTargetType = converters.get(Byte.class);
}
}
if (possibleConvertersToTheTargetType != null) {
StandardIndividualTypeConverter aConverter = possibleConvertersToTheTargetType.get(sourceType);
......@@ -72,24 +97,50 @@ public class StandardTypeConverter implements TypeConverter {
public Object convertValue(Object value, Class<?> targetType) throws SpelException {
if (value == null || value.getClass() == targetType)
return value;
Class sourceType = value.getClass();
Map<Class<?>, StandardIndividualTypeConverter> possibleConvertersToTheTargetType = converters.get(targetType);
if (possibleConvertersToTheTargetType == null && targetType.isPrimitive()) {
if (targetType == Integer.TYPE)
if (targetType == Integer.TYPE) {
if (sourceType == Integer.class) {
return value;
}
possibleConvertersToTheTargetType = converters.get(Integer.class);
else if (targetType == Boolean.TYPE)
} else if (targetType == Boolean.TYPE) {
if (sourceType == Boolean.class) {
return value;
}
possibleConvertersToTheTargetType = converters.get(Boolean.class);
else if (targetType == Short.TYPE)
} else if (targetType == Short.TYPE) {
if (sourceType == Short.class) {
return value;
}
possibleConvertersToTheTargetType = converters.get(Short.class);
else if (targetType == Long.TYPE)
} else if (targetType == Long.TYPE) {
if (sourceType == Long.class) {
return value;
}
possibleConvertersToTheTargetType = converters.get(Long.class);
else if (targetType == Character.TYPE)
} else if (targetType == Character.TYPE) {
if (sourceType == Character.class) {
return value;
}
possibleConvertersToTheTargetType = converters.get(Character.class);
else if (targetType == Double.TYPE)
} else if (targetType == Double.TYPE) {
if (sourceType == Double.class) {
return value;
}
possibleConvertersToTheTargetType = converters.get(Double.class);
else if (targetType == Float.TYPE)
} else if (targetType == Float.TYPE) {
if (sourceType == Float.class) {
return value;
}
possibleConvertersToTheTargetType = converters.get(Float.class);
else if (targetType == Byte.TYPE)
} else if (targetType == Byte.TYPE) {
if (sourceType == Byte.class) {
return value;
}
possibleConvertersToTheTargetType = converters.get(Byte.class);
}
}
Object result = null;
if (possibleConvertersToTheTargetType != null) {
......@@ -126,15 +177,19 @@ public class StandardTypeConverter implements TypeConverter {
private static class ToBooleanConverter implements StandardIndividualTypeConverter {
public Object convert(Object value) throws SpelException {
return ((Boolean) value).booleanValue();
if (value instanceof Integer) {
return ((Integer) value).intValue() != 0;
} else {
return ((Long) value).longValue() != 0;
}
}
public Class<?>[] getFrom() {
return new Class<?>[] { Boolean.class };
return new Class<?>[] { Integer.class, Long.class };
}
public Class<?> getTo() {
return Boolean.TYPE;
return Boolean.class;
}
}
......@@ -264,21 +319,16 @@ public class StandardTypeConverter implements TypeConverter {
private static class ToIntegerConverter implements StandardIndividualTypeConverter {
public Object convert(Object value) throws SpelException {
if (value instanceof Integer)
return ((Integer) value).intValue();
else if (value instanceof Long) {
try {
return Integer.parseInt(((Long) value).toString());
} catch (NumberFormatException nfe) {
throw new SpelException(SpelMessages.PROBLEM_DURING_TYPE_CONVERSION, "long value '" + value
+ "' cannot be represented as an int");
}
} else
return null;
try {
return Integer.parseInt(((Long) value).toString());
} catch (NumberFormatException nfe) {
throw new SpelException(SpelMessages.PROBLEM_DURING_TYPE_CONVERSION, "long value '" + value
+ "' cannot be represented as an int");
}
}
public Class<?>[] getFrom() {
return new Class<?>[] { Integer.class, Long.class };
return new Class<?>[] { Long.class };
}
public Class<?> getTo() {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册