You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2009/04/27 19:26:57 UTC
svn commit: r769064 -
/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/convert/ConversionServiceImpl.java
Author: gawor
Date: Mon Apr 27 17:26:57 2009
New Revision: 769064
URL: http://svn.apache.org/viewvc?rev=769064&view=rev
Log:
updated the ConversionService to try all converters registered for a given type - as per spec
Modified:
geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/convert/ConversionServiceImpl.java
Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/convert/ConversionServiceImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/convert/ConversionServiceImpl.java?rev=769064&r1=769063&r2=769064&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/convert/ConversionServiceImpl.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/convert/ConversionServiceImpl.java Mon Apr 27 17:26:57 2009
@@ -70,37 +70,60 @@
if (Object.class == toType) {
return fromValue;
}
- Converter converter = lookupConverter(toType);
- if (converter == null) {
- return convertDefault(fromValue, toType);
+ Object value = doConvert(fromValue, toType);
+ if (value == null) {
+ if (fromValue instanceof String) {
+ return convertString( (String)fromValue, toType);
+ } else {
+ throw new Exception("Unable to convert value " + fromValue + " to type: " + toType.getName());
+ }
} else {
- return converter.convert(fromValue);
+ return value;
}
}
- private Converter lookupConverter(Class toType) {
+ private Object doConvert(Object source, Class type) {
+ Object value = null;
+
// do explicit lookup
- List<Converter> converters = convertersMap.get(toType);
- if (converters != null && !converters.isEmpty()) {
- return converters.get(0);
+ List<Converter> converters = convertersMap.get(type);
+ if (converters != null) {
+ value = convert(converters, source);
+ if (value != null) {
+ return value;
+ }
}
-
+
// try to find converter that matches the type
for (Map.Entry<Class, List<Converter>> entry : convertersMap.entrySet()) {
Class converterClass = entry.getKey();
- if (toType.isAssignableFrom(converterClass)) {
- return entry.getValue().get(0);
+ if (type.isAssignableFrom(converterClass)) {
+ value = convert(entry.getValue(), source);
+ if (value != null) {
+ return value;
+ }
}
- }
+ }
return null;
}
- private Object convertDefault(Object fromValue, Class toType) throws Exception {
- if (!(fromValue instanceof String)) {
- throw new RuntimeException("Unable to convert non-String value: " + fromValue.getClass());
+ private Object convert(List<Converter> converters, Object source) {
+ Object value = null;
+ for (Converter converter : converters) {
+ try {
+ value = converter.convert(source);
+ if (value != null) {
+ return value;
+ }
+ } catch (Exception e) {
+ // ignore
+ }
}
- String value = (String)fromValue;
+ return null;
+ }
+
+ private Object convertString(String value, Class toType) throws Exception {
if (Locale.class == toType) {
String[] tokens = value.split("_");
if (tokens.length == 1) {