![JAR search and dependency download from the Maven repository](/logo.png)
org.sfm.utils.conv.ConverterFactory Maven / Gradle / Ivy
Show all versions of simpleFlatMapper Show documentation
package org.sfm.utils.conv;
import org.sfm.jdbc.JdbcColumnKey;
import org.sfm.jdbc.impl.getter.ResultSetGetterFactory;
import org.sfm.reflect.Getter;
import org.sfm.reflect.TypeHelper;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.URL;
import java.sql.ResultSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ConverterFactory {
private static final Map, Converter extends Number, ? extends Number>> numberConverters =
new HashMap, Converter extends Number, ? extends Number>>();
static {
numberConverters.put(Byte.class, new Converter() {
@Override
public Byte convert(Number in) {
return new Byte(in.byteValue());
}
});
numberConverters.put(Short.class, new Converter() {
@Override
public Short convert(Number in) {
return new Short(in.shortValue());
}
});
numberConverters.put(Integer.class, new Converter() {
@Override
public Integer convert(Number in) {
return new Integer(in.intValue());
}
});
numberConverters.put(Long.class, new Converter() {
@Override
public Long convert(Number in) {
return new Long(in.longValue());
}
});
numberConverters.put(Float.class, new Converter() {
@Override
public Float convert(Number in) {
return new Float(in.floatValue());
}
});
numberConverters.put(Double.class, new Converter() {
@Override
public Double convert(Number in) {
return new Double(in.doubleValue());
}
});
numberConverters.put(BigDecimal.class, new Converter() {
@Override
public BigDecimal convert(Number in) {
return new BigDecimal(in.doubleValue());
}
});
numberConverters.put(BigInteger.class, new Converter() {
@Override
public BigInteger convert(Number in) { return new BigInteger(String.valueOf(in));}
});
}
@SuppressWarnings("unchecked")
public static Converter getConverter(Class inType, Type outType) {
if (outType.equals(String.class)) {
return (Converter) new ToStringConverter();
} else if (TypeHelper.isNumber(outType) && TypeHelper.isNumber(inType)) {
return (Converter) numberConverters.get(TypeHelper.wrap(outType));
} else if (TypeHelper.isClass(outType, URL.class)) {
return (Converter)new StringToURLConverter();
} else if (TypeHelper.isArray(outType)) {
return newArrayConverter(TypeHelper.getComponentType(outType));
} else if (TypeHelper.isAssignable(List.class, outType)) {
return newArrayToListConverter(TypeHelper.getComponentType(outType));
}
return null;
}
@SuppressWarnings("unchecked")
private static Converter newArrayConverter(Type eltType) {
Getter elementGetter = new ResultSetGetterFactory().newGetter(eltType, new JdbcColumnKey("elt", 2));
if (elementGetter == null) return null;
return (Converter)new ArrayConverter((Class) TypeHelper.toClass(eltType), elementGetter);
}
@SuppressWarnings("unchecked")
private static Converter newArrayToListConverter(Type eltType) {
Getter elementGetter = new ResultSetGetterFactory().newGetter(eltType, new JdbcColumnKey("elt", 2));
if (elementGetter == null) return null;
return (Converter)new ArrayToListConverter(elementGetter);
}
}