IN PROGRESS - issue SWF-720: Multiple checkboxes to Collection mapping

http://jira.springframework.org/browse/SWF-720
This commit is contained in:
Keith Donald
2008-06-30 21:04:28 +00:00
parent 3ffdc587f6
commit 390b914d4f
10 changed files with 88 additions and 34 deletions

View File

@@ -39,4 +39,12 @@ public interface ConversionService {
public ConversionExecutor getConversionExecutor(Class sourceClass, Class targetClass)
throws ConversionExecutorNotFoundException;
/**
* Lookup a class by its fully qualified name or alias. As an example, for Long.class the fully qualified class name
* is <code>java.lang.Long</code> and the alias is <code>long</code>.
* @param name the fully qualified class name or alias
* @return the class
*/
public Class getClassByName(String name);
}

View File

@@ -15,6 +15,10 @@
*/
package org.springframework.binding.convert.service;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
import org.springframework.binding.convert.ConversionService;
import org.springframework.binding.convert.converters.StringToBigDecimal;
import org.springframework.binding.convert.converters.StringToBigInteger;
@@ -29,6 +33,7 @@ import org.springframework.binding.convert.converters.StringToInteger;
import org.springframework.binding.convert.converters.StringToLabeledEnum;
import org.springframework.binding.convert.converters.StringToLong;
import org.springframework.binding.convert.converters.StringToShort;
import org.springframework.core.enums.LabeledEnum;
/**
* Default, local implementation of a conversion service. Will automatically register <i>from string</i> converters for
@@ -48,6 +53,7 @@ public class DefaultConversionService extends GenericConversionService {
*/
public DefaultConversionService() {
addDefaultConverters();
addDefaultAliases();
}
/**
@@ -69,6 +75,23 @@ public class DefaultConversionService extends GenericConversionService {
addConverter(new StringToDate());
}
protected void addDefaultAliases() {
addAlias("byte", Byte.class);
addAlias("boolean", Boolean.class);
addAlias("character", Character.class);
addAlias("short", Short.class);
addAlias("integer", Integer.class);
addAlias("long", Long.class);
addAlias("float", Float.class);
addAlias("double", Double.class);
addAlias("bigInteger", BigInteger.class);
addAlias("bigDecimal", BigDecimal.class);
addAlias("class", Class.class);
addAlias("labeledEnum", LabeledEnum.class);
addAlias("date", Date.class);
addAlias("string", String.class);
}
/**
* Returns the shared {@link DefaultConversionService} instance.
*/

View File

@@ -32,6 +32,7 @@ import org.springframework.binding.convert.converters.ObjectToArray;
import org.springframework.binding.convert.converters.ReverseConverter;
import org.springframework.binding.convert.converters.TwoWayConverter;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
/**
* Base implementation of a conversion service. Initially empty, e.g. no converters are registered by default.
@@ -47,6 +48,11 @@ public class GenericConversionService implements ConversionService {
*/
private final Map sourceClassConverters = new HashMap();
/**
* Indexes classes by well-known aliases.
*/
private final Map aliasMap = new HashMap();
/**
* An optional parent conversion service.
*/
@@ -89,6 +95,13 @@ public class GenericConversionService implements ConversionService {
}
}
/**
* Add an alias for given target type.
*/
public void addAlias(String alias, Class targetType) {
aliasMap.put(alias, targetType);
}
private Map getSourceMap(Class sourceClass) {
Map sourceMap = (Map) sourceClassConverters.get(sourceClass);
if (sourceMap == null) {
@@ -147,6 +160,26 @@ public class GenericConversionService implements ConversionService {
}
}
public Class getClassByName(String name) throws IllegalArgumentException {
Class clazz = (Class) aliasMap.get(name);
if (clazz != null) {
return clazz;
} else {
if (parent != null) {
return parent.getClassByName(name);
} else {
try {
return ClassUtils.forName(name);
} catch (ClassNotFoundException e) {
IllegalArgumentException iae = new IllegalArgumentException(
"No Class alias or instance found with name '" + name + "' in this ConversionService");
iae.initCause(e);
throw iae;
}
}
}
}
// subclassing support
/**