package frame.data.convert;
|
|
import java.math.BigDecimal;
|
import java.math.BigInteger;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.Map;
|
import frame.data.DataType;
|
import frame.data.Variant;
|
|
public abstract class Convertor {
|
|
protected String format;
|
private static Map<Class<?>, Class<? extends Convertor>> classTranslatorMap;
|
private static Map<DataType, Class<? extends Convertor>> dataTypeTranslatorMap;
|
|
|
static {
|
initClassTranslatorMap();
|
initDataTypeTranslatorMap();
|
}
|
|
public static Convertor getInstance(Class<?> type) throws Exception {
|
return getInstance(type, null);
|
}
|
|
public static Convertor getInstance(DataType type) throws Exception {
|
return getInstance(type, null);
|
}
|
|
public static Convertor getInstance(Class<?> type, String format) throws Exception {
|
Convertor result = null;
|
|
Class<? extends Convertor> translatorClass = classTranslatorMap.get(type);
|
|
if (translatorClass == null) {
|
throw new Exception("can not create translator for: " + type);
|
}
|
|
result = translatorClass.newInstance();
|
result.setFormat(format);
|
|
return result;
|
}
|
|
public static Convertor getInstance(DataType type, String format) throws Exception {
|
Convertor result = null;
|
|
Class<? extends Convertor> translatorClass = dataTypeTranslatorMap.get(type);
|
|
if (translatorClass == null) {
|
throw new Exception("can not create translator for: " + type);
|
}
|
|
result = translatorClass.newInstance();
|
result.setFormat(format);
|
|
return result;
|
}
|
|
public abstract int toInteger(Object value, int defaultValue) throws Exception;
|
|
public abstract String toSqlString(Object value) throws Exception;
|
|
public abstract String toSqlString(String prefix, Object value, String suffix)throws Exception;
|
|
public abstract String toJSONString(Object value) throws Exception;
|
|
public abstract String toSchemaString(Object value) throws Exception;
|
|
public abstract Double toDouble(Object object)throws Exception;
|
|
public abstract BigDecimal toBigDecimal(Object object, BigDecimal defaultValue) throws Exception;;
|
|
public abstract boolean toBoolean(Object value, boolean defaultValue) throws Exception;
|
|
public abstract boolean toDate(Object value, Date defaultValue) throws Exception;
|
|
public abstract Object toSelfType(Object value) throws Exception;;
|
|
public abstract Object loadToObject(String value) throws Exception;
|
|
public abstract Variant loadToVariant(String value) throws Exception;
|
|
public abstract String toString(Object value) throws Exception;
|
|
public void setFormat(String format) {
|
this.format = format;
|
}
|
|
public String getFormat() {
|
return format;
|
}
|
|
|
|
private static void initClassTranslatorMap() {
|
classTranslatorMap = new HashMap<Class<?>, Class<? extends Convertor>>();
|
|
classTranslatorMap.put(String.class, StringTranslator.class);
|
classTranslatorMap.put(Integer.class, IntegerTranslator.class);
|
classTranslatorMap.put(int.class, IntegerTranslator.class);
|
classTranslatorMap.put(BigInteger.class, IntegerTranslator.class);
|
classTranslatorMap.put(Double.class, DoubleTranslator.class);
|
classTranslatorMap.put(double.class, DoubleTranslator.class);
|
classTranslatorMap.put(Float.class, DoubleTranslator.class);
|
classTranslatorMap.put(float.class, DoubleTranslator.class);
|
classTranslatorMap.put(BigDecimal.class, BigDecimalTranslator.class);
|
classTranslatorMap.put(Date.class, DateTranslator.class);
|
classTranslatorMap.put(Boolean.class, BooleanTranslator.class);
|
classTranslatorMap.put(boolean.class, BooleanTranslator.class);
|
classTranslatorMap.put(Object.class, ObjectTranslator.class);
|
classTranslatorMap.put(Long.class, LongTranslator.class);
|
}
|
|
private static void initDataTypeTranslatorMap() {
|
dataTypeTranslatorMap = new HashMap<DataType, Class<? extends Convertor>>();
|
|
dataTypeTranslatorMap.put(DataType.String, StringTranslator.class);
|
dataTypeTranslatorMap.put(DataType.Int, IntegerTranslator.class);
|
dataTypeTranslatorMap.put(DataType.Double, DoubleTranslator.class);
|
dataTypeTranslatorMap.put(DataType.Decimal, BigDecimalTranslator.class);
|
dataTypeTranslatorMap.put(DataType.Date, DateTranslator.class);
|
dataTypeTranslatorMap.put(DataType.Boolean, BooleanTranslator.class);
|
}
|
|
public static boolean containsType(Class<?> type) {
|
return classTranslatorMap.containsKey(type);
|
}
|
|
|
}
|