package frame.variant.translator; import java.math.BigDecimal; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import frame.util.Util; import frame.variant.ValueType; import frame.variant.Value; public class StringTranslator extends ITranslator { @Override public String toString(Object value) throws Exception { if (value == null) { return null; } return value.toString(); } @Override public String toSqlString(Object value) throws Exception { if (value == null) { return "null"; } return "'" + value + "'"; } @Override public String toJSONString(Object value) throws Exception { if (value == null) { return "null"; } return "\"" + value.toString() + "\""; } @Override public String toSchemaString(Object value) throws Exception { if (value == null) { return ""; } return "\"" + value.toString() + "\""; } @Override public Integer toInteger(Object value) throws Exception { if (value == null) { return null; } return Integer.valueOf(String.valueOf(value)); } @Override public Double toDouble(Object value) throws Exception { if (value == null) { return null; } return Double.valueOf(String.valueOf(value)); } @Override public BigDecimal toBigDecimal(Object value) throws Exception { if (value == null) { return BigDecimal.valueOf(0); } return BigDecimal.valueOf(Double.valueOf(String.valueOf(value))); } @Override public Boolean toBoolean(Object object) throws Exception { if (object == null) { return false; } String value = String.valueOf(object).toLowerCase(); if ("t".equals(value)) { return true; } if ("true".equals(value)) { return true; } if ("y".equals(value)) { return true; } if ("yes".equals(value)) { return true; } if ("是".equals(value)) { return true; } return false; } @Override public Date toDate(Object value) throws Exception { if (value == null) { return null; } String fomater = null; String str = String.valueOf(value).replace('T', ' '); if (str.indexOf("/") == 4) { fomater = "yyyy/MM/dd"; } else if (str.indexOf("/") == 2 || str.indexOf("/") == 1) { fomater = "MM/dd/yyyy"; } else if (str.indexOf("-") == 2 || str.indexOf("-") == 1) { fomater = "MM-dd-yyyy"; } else if (str.indexOf("-") == 4 && str.indexOf(":")<0) { fomater = "yyyy-MM-dd"; } else if (str.indexOf("-") == 4 && str.indexOf(":")>0) { if(str.split(":").length == 3){ fomater = "yyyy-MM-dd HH:mm:ss"; } else{ str = str + ":00"; fomater = "yyyy-MM-dd HH:mm:00"; } } else if (str.indexOf(".") == 2 || str.indexOf(".") == 1) { fomater = "MM.dd.yyyy"; } else if (str.indexOf(".") == 4) { fomater = "yyyy.MM.dd"; } else if (str.indexOf("-") < 0 && str.indexOf("/") < 0) { fomater = "yyyyMMdd"; } DateFormat dateFormat = new SimpleDateFormat(fomater); return dateFormat.parse(str); } @Override public Object toTranslatorTypeValue(Object value) throws Exception { return toString(value); } @Override public Object loadObjectFrom(String value) throws Exception { if (Util.isEmptyStr(value)) { return null; } return value; } @Override public Value loadVariantFrom(String value) throws Exception { Object object = loadObjectFrom(value); Value variant = new Value(); variant.setData(object, ValueType.String); return variant; } @Override public Value loadVariantFrom(String value, Object defaultValue) { try { return loadVariantFrom(value); } catch (Exception e) { Value variant = new Value(); variant.setData(defaultValue, ValueType.String); return variant; } } @Override public Class getDataClass() { return String.class; } }