package foundation.translator; import java.math.BigDecimal; import java.text.DateFormat; import java.util.Date; import foundation.server.config.DBaseType; import foundation.util.Util; public class ObjectTranslator extends ITranslator { private static IntegerTranslator integerTranslator; private static LongTranslator longTranslator; private static DoubleTranslator doubleTranslator; private static BigDecimalTranslator bigDecimalTranslator; private static StringTranslator stringTranslator; private DateFormat dateFormater; static { integerTranslator = new IntegerTranslator(); longTranslator = new LongTranslator(); doubleTranslator = new DoubleTranslator(); bigDecimalTranslator = new BigDecimalTranslator(); stringTranslator = new StringTranslator(); } @Override public String toString(Object value) throws Exception { if (value == null || value == ValueType.Null) { return null; } if (value instanceof String) { return (String)value; } return value.toString(); } @Override public String toSqlString(DBaseType dbaseType, Object value) throws Exception { if (value == null || value == ValueType.Null) { return "null"; } Date date = toDate(value); if (dbaseType.isMySQL()) { return "\"" + dateFormater.format(date) + "\""; } else if (dbaseType.isSQLServer()) { return "'" + dateFormater.format(date) + "'"; } else if (dbaseType.isOracle()) { return "\"" + dateFormater.format(date) + "\""; } else { return "\"" + dateFormater.format(date) + "\""; } } @Override public String toJSONString(Object value) throws Exception { if (value == null || value == ValueType.Null) { return "null"; } return "\"" + value.toString() + "\""; } @Override public String toSchemaString(Object value) throws Exception { if (value == null || value == ValueType.Null) { return ""; } return "\"" + value.toString() + "\""; } @Override public Integer toInteger(Object value) throws Exception { if (value == null || value == ValueType.Null) { return null; } if (value instanceof Integer) { return (Integer)value; } if (value instanceof Double) { return ((Double)value).intValue(); } if (value instanceof Float) { return ((Float)value).intValue(); } if (value instanceof Long) { return ((Long)value).intValue(); } if (value instanceof BigDecimal) { return ((BigDecimal)value).intValue(); } if (value instanceof String) { return Integer.valueOf((String)value); } return Integer.valueOf(String.valueOf(value)); } @Override public Double toDouble(Object value) throws Exception { if (value == null || value == ValueType.Null) { return null; } if (value instanceof Integer) { return (Double)value; } if (value instanceof Double) { return (Double)value; } if (value instanceof Float) { return (Double)value; } if (value instanceof Long) { return (Double)value; } if (value instanceof BigDecimal) { return ((BigDecimal)value).doubleValue(); } if (value instanceof String) { return Double.valueOf((String)value); } return Double.valueOf(String.valueOf(value)); } @Override public BigDecimal toBigDecimal(Object value) throws Exception { if (value == null || value == ValueType.Null) { return null; } if (value instanceof Integer) { return BigDecimal.valueOf((Double)value); } if (value instanceof Double) { return BigDecimal.valueOf((Double)value); } if (value instanceof Float) { return BigDecimal.valueOf((Double)value); } if (value instanceof Long) { return BigDecimal.valueOf((Double)value); } if (value instanceof BigDecimal) { return (BigDecimal)value; } if (value instanceof String) { return BigDecimal.valueOf(Double.valueOf((String)value)); } return BigDecimal.valueOf(Double.valueOf(String.valueOf(value))); } @Override public Boolean toBoolean(Object value) throws Exception { if (value == null || value == ValueType.Null) { return null; } if (value instanceof Integer) { return integerTranslator.toBoolean((Integer)value); } if (value instanceof Double) { return doubleTranslator.toBoolean((Double)value); } if (value instanceof Float) { return doubleTranslator.toBoolean((Float)value); } if (value instanceof Long) { return longTranslator.toBoolean((Long)value); } if (value instanceof BigDecimal) { return bigDecimalTranslator.toBoolean((BigDecimal)value); } if (value instanceof String) { return stringTranslator.toBoolean((String)value); } return stringTranslator.toBoolean(String.valueOf(value)); } @Override public Date toDate(Object value) throws Exception { if (value == null || value == ValueType.Null) { return null; } if (value instanceof Integer) { return integerTranslator.toDate((Integer)value); } if (value instanceof Double) { return doubleTranslator.toDate((Double)value); } if (value instanceof Float) { return doubleTranslator.toDate((Double)value); } if (value instanceof Long) { return longTranslator.toDate((Long)value); } if (value instanceof BigDecimal) { return bigDecimalTranslator.toDate((BigDecimal)value); } if (value instanceof String) { return stringTranslator.toDate((String)value); } return stringTranslator.toDate(String.valueOf(value)); } @Override public Object toTranslatorTypeValue(Object value) throws Exception { return value; } @Override public Object loadObjectFrom(String value) throws Exception { if (Util.isEmpty(value)) { return null; } return value; } @Override public Class getDataClass() { return Object.class; } }