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> classTranslatorMap; private static Map> 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 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 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>(); 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>(); 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); } }