package frame.variant.translator;
|
|
import java.math.BigDecimal;
|
import java.math.BigInteger;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.Map;
|
|
import frame.variant.ValueType;
|
import frame.variant.Value;
|
|
public abstract class Translator {
|
|
private static Map<Class<?>, Class<? extends ITranslator>> classTranslatorTypeMap;
|
private static Map<ValueType, Class<? extends ITranslator>> dataTypeTranslatorTypeMap;
|
private static Map<Class<?>, ITranslator> classTranslatorMap;
|
|
|
static {
|
initClassTranslatorTypeMap();
|
initDataTypeTranslatorTypeMap();
|
intiClassTranslatorMap();
|
}
|
|
public static ITranslator getInstance(Class<?> type) {
|
return getInstance(type, null);
|
}
|
|
public static ITranslator getInstance(ValueType type) {
|
return getInstance(type, null);
|
}
|
|
public static ITranslator getInstance(Class<?> type, String format) {
|
ITranslator result = null;
|
|
Class<? extends ITranslator> translatorClass = classTranslatorTypeMap.get(type);
|
|
if (translatorClass == null) {
|
return null;
|
}
|
|
try {
|
result = translatorClass.newInstance();
|
result.setFormat(format);
|
}
|
catch (Exception e) {
|
return null;
|
}
|
|
return result;
|
}
|
|
public static ITranslator getInstance(ValueType type, String format) {
|
ITranslator result = null;
|
|
Class<? extends ITranslator> translatorClass = dataTypeTranslatorTypeMap.get(type);
|
|
if (translatorClass == null) {
|
return null;
|
}
|
|
try {
|
result = translatorClass.newInstance();
|
result.setFormat(format);
|
}
|
catch (Exception e) {
|
return null;
|
}
|
|
return result;
|
}
|
|
public static String toString(Object value) {
|
return toString(value, null);
|
}
|
|
public static String toString(Object value, String defaultValue) {
|
if (value == null) {
|
return defaultValue;
|
}
|
|
ITranslator simpleTranslator = getInstance(value.getClass());
|
return simpleTranslator.toString(value, defaultValue);
|
}
|
|
public static String toSqlString(Object value) throws Exception {
|
ITranslator simpleTranslator = getInstance(value.getClass());
|
return simpleTranslator.toSqlString(value);
|
}
|
|
public static String toSqlString(String prefix, Object value, String suffix)throws Exception {
|
ITranslator simpleTranslator = getInstance(value.getClass());
|
return simpleTranslator.toSqlString(prefix, value, suffix);
|
}
|
|
public static String toJSONString(Object value) throws Exception {
|
ITranslator simpleTranslator = getInstance(value.getClass());
|
return simpleTranslator.toJSONString(value);
|
}
|
|
public static String toJSONString(Object value, String defaultValue) {
|
try {
|
ITranslator simpleTranslator = getInstance(value.getClass());
|
return simpleTranslator.toJSONString(value);
|
}
|
catch (Exception e) {
|
return defaultValue;
|
}
|
}
|
|
public static String toSchemaString(Object value) throws Exception {
|
ITranslator simpleTranslator = getInstance(value.getClass());
|
return simpleTranslator.toSchemaString(value);
|
}
|
|
public static Integer toInteger(Object value) throws Exception {
|
ITranslator simpleTranslator = getInstance(value.getClass());
|
return simpleTranslator.toInteger(value);
|
}
|
|
public static Integer toInteger(Object value, Integer defaultValue) {
|
if (value == null) {
|
return defaultValue;
|
}
|
|
ITranslator simpleTranslator = getInstance(value.getClass());
|
return simpleTranslator.toInteger(value, defaultValue);
|
}
|
|
public static Double toDouble(Object value)throws Exception {
|
ITranslator simpleTranslator = getInstance(value.getClass());
|
return simpleTranslator.toDouble(value);
|
}
|
|
public static BigDecimal toBigDecimal(Object value) throws Exception {
|
return toBigDecimal(value, null);
|
}
|
|
public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue) throws Exception {
|
if (value == null) {
|
return defaultValue;
|
}
|
|
ITranslator simpleTranslator = getInstance(value.getClass());
|
return simpleTranslator.toBigDecimal(value, defaultValue);
|
}
|
|
public static Boolean toBoolean(Object value) throws Exception {
|
return toBoolean(value, null);
|
}
|
|
public static Boolean toBoolean(Object value, Boolean defaultValue) {
|
if (value == null) {
|
return defaultValue;
|
}
|
|
ITranslator simpleTranslator = getInstance(value.getClass());
|
return simpleTranslator.toBoolean(value, defaultValue);
|
}
|
|
public static Date toDate(Object value) throws Exception {
|
return toDate(value, null);
|
}
|
|
public static Date toDate(Object value, Date defaultValue) throws Exception {
|
if (value == null) {
|
return defaultValue;
|
}
|
|
ITranslator simpleTranslator = getInstance(value.getClass());
|
return simpleTranslator.toDate(value, defaultValue);
|
}
|
|
public static String toSQLTypeCode(Object typeValue, Object lengthValue) {
|
String result = toString(typeValue, null);
|
|
if (result == null) {
|
result = "varchar";
|
}
|
|
if (result.indexOf("char") >= 0) {
|
String length = toString(lengthValue, null);
|
|
if (length == null) {
|
length = "32";
|
}
|
|
result = result + "(" + length + ")";
|
}
|
|
return result;
|
}
|
|
public static String toSQLNullCode(Object object) {
|
boolean nullable = toBoolean(object, true);
|
|
if (nullable) {
|
return "NULL";
|
}
|
else {
|
return "NOT NULL";
|
}
|
}
|
|
public static Object toTranslatorTypeValue(Object value, Class<?> clazz) {
|
ITranslator iTranslator = classTranslatorMap.get(value.getClass());
|
|
classTranslatorMap.put(Long.class, new LongTranslator());
|
|
if (String.class.equals(clazz)) {
|
iTranslator.toString();
|
}
|
else if (Integer.class.equals(clazz)) {
|
iTranslator.toInteger(value, 0);
|
}
|
else if (BigInteger.class.equals(clazz)) {
|
iTranslator.toInteger(value, 0);
|
}
|
else if (Double.class.equals(clazz)) {
|
iTranslator.toDouble(value, 0.0);
|
}
|
else if (Float.class.equals(clazz)) {
|
iTranslator.toDouble(value, 0.0);
|
}
|
else if (Long.class.equals(clazz)) {
|
iTranslator.toInteger(value, 0);
|
}
|
else if (BigDecimal.class.equals(clazz)) {
|
iTranslator.toBigDecimal(value, BigDecimal.ZERO);
|
}
|
else if (Date.class.equals(clazz)) {
|
iTranslator.toDate(value, null);
|
}
|
else if (Boolean.class.equals(clazz)) {
|
iTranslator.toBoolean(value, false);
|
}
|
else if (Object.class.equals(clazz)) {
|
return value;
|
}
|
|
return value;
|
}
|
|
public static Object toTranslatorTypeValue(Object value) throws Exception {
|
ITranslator simpleTranslator = getInstance(value.getClass());
|
return simpleTranslator.toTranslatorTypeValue(value);
|
}
|
|
public static Object loadToObject(String value) throws Exception {
|
ITranslator simpleTranslator = getInstance(value.getClass());
|
return simpleTranslator.loadObjectFrom(value);
|
}
|
|
public static Value loadToVariant(String value) throws Exception {
|
ITranslator simpleTranslator = getInstance(value.getClass());
|
return simpleTranslator.loadVariantFrom(value);
|
}
|
|
private static void initClassTranslatorTypeMap() {
|
classTranslatorTypeMap = new HashMap<Class<?>, Class<? extends ITranslator>>();
|
|
classTranslatorTypeMap.put(String.class, StringTranslator.class);
|
classTranslatorTypeMap.put(Integer.class, IntegerTranslator.class);
|
classTranslatorTypeMap.put(int.class, IntegerTranslator.class);
|
classTranslatorTypeMap.put(BigInteger.class, IntegerTranslator.class);
|
classTranslatorTypeMap.put(Double.class, DoubleTranslator.class);
|
classTranslatorTypeMap.put(double.class, DoubleTranslator.class);
|
classTranslatorTypeMap.put(Float.class, DoubleTranslator.class);
|
classTranslatorTypeMap.put(float.class, DoubleTranslator.class);
|
classTranslatorTypeMap.put(BigDecimal.class, BigDecimalTranslator.class);
|
classTranslatorTypeMap.put(Date.class, DateTranslator.class);
|
classTranslatorTypeMap.put(Boolean.class, BooleanTranslator.class);
|
classTranslatorTypeMap.put(boolean.class, BooleanTranslator.class);
|
classTranslatorTypeMap.put(Object.class, ObjectTranslator.class);
|
classTranslatorTypeMap.put(Long.class, LongTranslator.class);
|
}
|
|
private static void intiClassTranslatorMap() {
|
classTranslatorMap = new HashMap<Class<?>, ITranslator>();
|
|
classTranslatorMap.put(String.class, new StringTranslator());
|
classTranslatorMap.put(Integer.class, new IntegerTranslator());
|
classTranslatorMap.put(int.class, new IntegerTranslator());
|
classTranslatorMap.put(BigInteger.class, new IntegerTranslator());
|
classTranslatorMap.put(Double.class, new DoubleTranslator());
|
classTranslatorMap.put(double.class, new DoubleTranslator());
|
classTranslatorMap.put(Float.class, new DoubleTranslator());
|
classTranslatorMap.put(float.class, new DoubleTranslator());
|
classTranslatorMap.put(BigDecimal.class, new BigDecimalTranslator());
|
classTranslatorMap.put(Date.class, new DateTranslator());
|
classTranslatorMap.put(Boolean.class, new BooleanTranslator());
|
classTranslatorMap.put(boolean.class, new BooleanTranslator());
|
classTranslatorMap.put(Object.class, new ObjectTranslator());
|
classTranslatorMap.put(Long.class, new LongTranslator());
|
}
|
|
private static void initDataTypeTranslatorTypeMap() {
|
dataTypeTranslatorTypeMap = new HashMap<ValueType, Class<? extends ITranslator>>();
|
|
dataTypeTranslatorTypeMap.put(ValueType.String, StringTranslator.class);
|
dataTypeTranslatorTypeMap.put(ValueType.Int, IntegerTranslator.class);
|
dataTypeTranslatorTypeMap.put(ValueType.Double, DoubleTranslator.class);
|
dataTypeTranslatorTypeMap.put(ValueType.Decimal, BigDecimalTranslator.class);
|
dataTypeTranslatorTypeMap.put(ValueType.Date, DateTranslator.class);
|
dataTypeTranslatorTypeMap.put(ValueType.Boolean, BooleanTranslator.class);
|
}
|
|
public static boolean containsType(Class<?> type) {
|
return classTranslatorTypeMap.containsKey(type);
|
}
|
|
}
|