package com.opensymphony.xwork2.conversion.impl;
import com.opensymphony.xwork2.ObjectFactory;
import com.opensymphony.xwork2.conversion.TypeConverter;
import com.opensymphony.xwork2.conversion.TypeConverterCreator;
import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.ognl.XWorkTypeConverterWrapper;
/**
* Default implementation of {@link TypeConverterCreator}
*/
public class DefaultTypeConverterCreator implements TypeConverterCreator {
private ObjectFactory objectFactory;
@Inject
public void setObjectFactory(ObjectFactory objectFactory) {
this.objectFactory = objectFactory;
}
public TypeConverter createTypeConverter(String className) throws Exception {
Object obj = objectFactory.buildBean(className, null);
return getTypeConverter(obj);
}
public TypeConverter createTypeConverter(Class<?> clazz) throws Exception {
Object obj = objectFactory.buildBean(clazz, null);
return getTypeConverter(obj);
}
protected TypeConverter getTypeConverter(Object obj) {
if (obj instanceof TypeConverter) {
return (TypeConverter) obj;
// For backwards compatibility
} else if (obj instanceof ognl.TypeConverter) {
return new XWorkTypeConverterWrapper((ognl.TypeConverter) obj);
} else {
throw new IllegalArgumentException("Type converter class " + obj.getClass() + " doesn't implement com.opensymphony.xwork2.conversion.TypeConverter");
}
}
}