package foundation.translator;
|
|
import java.sql.Types;
|
import java.util.HashMap;
|
import java.util.Map;
|
|
|
public enum ValueType {
|
|
Void, Int, Long, Double, Decimal, Date, String, Boolean, Entity, EntitySet,
|
Float, List, Null;
|
|
public static ValueType parse(int value) {
|
ValueType type = sqlTypeValueTypeMap.get(value);
|
|
if (type == null) {
|
type = String;
|
}
|
|
return type;
|
}
|
|
public static ValueType parse(String value) {
|
if (value == null) {
|
return String;
|
}
|
|
value = value.trim().toLowerCase();
|
ValueType type = stringValueTypeMap.get(value);
|
|
if (type == null) {
|
type = String;
|
}
|
|
return type;
|
}
|
|
public String toJavaScriptType() {
|
int no = ordinal();
|
|
if (no == 0) {
|
return "String";
|
}
|
else if (no == 1) {
|
return "integer";
|
}
|
else if (no == 2) {
|
return "double";
|
}
|
else if (no == 3) {
|
return "date";
|
}
|
else if (no == 4) {
|
return "boolean";
|
}
|
|
return "String";
|
}
|
|
public Class<?> toJavaClass() {
|
Class<?> result = valueTypeJavaClassMap.get(this);
|
|
if (result == null) {
|
result = String.getClass();
|
}
|
|
return result;
|
}
|
|
public int toSQLType() {
|
if (Int == this) {
|
return Types.INTEGER;
|
}
|
else if (Double == this) {
|
return Types.NUMERIC;
|
}
|
else if (Date == this) {
|
return Types.DATE;
|
}
|
else if (Boolean == this) {
|
return Types.BIT;
|
}
|
else {
|
return Types.VARCHAR;
|
}
|
}
|
|
public java.lang.String toDBType() {
|
return sqlTypeDBStringMap.get(this);
|
}
|
|
public boolean isNumber() {
|
if (ValueType.Int == this) {
|
return true;
|
}
|
else if (ValueType.Long == this) {
|
return true;
|
}
|
else if (ValueType.Double == this) {
|
return true;
|
}
|
else if (ValueType.Float == this) {
|
return true;
|
}
|
else {
|
return ValueType.Decimal == this;
|
}
|
}
|
|
public boolean isDate() {
|
return this == Date;
|
}
|
|
public ValueLength getDefaultLength() {
|
ValueLength valueLength = new ValueLength(0);
|
switch (this) {
|
case String:
|
valueLength.setLength(32);
|
break;
|
case Int:
|
case Long:
|
valueLength.setLength(11);
|
break;
|
case Boolean:
|
valueLength.setLength(1);
|
break;
|
case Float:
|
case Double:
|
valueLength.setLength(8);
|
valueLength.setDecimalLength(3);
|
break;
|
case Decimal:
|
valueLength.setLength(20);
|
valueLength.setDecimalLength(4);
|
break;
|
default:
|
break;
|
|
}
|
return valueLength;
|
}
|
|
private static Map<ValueType, String> sqlTypeDBStringMap;
|
private static Map<String, ValueType> stringValueTypeMap;
|
private static Map<Integer, ValueType> sqlTypeValueTypeMap;
|
private static Map<ValueType, Class<?>> valueTypeJavaClassMap;
|
|
static {
|
//
|
initSQLTypeDBStringMap();
|
|
//
|
initStringValueTypeMap();
|
|
//
|
initSQLTypeValueTypeMap();
|
|
//
|
initValueTypeJavaClassMap();
|
}
|
|
private static void initSQLTypeDBStringMap() {
|
sqlTypeDBStringMap = new HashMap<ValueType, String>();
|
|
sqlTypeDBStringMap.put(Long, "BIGINT");
|
sqlTypeDBStringMap.put(Int, "INTEGER");
|
sqlTypeDBStringMap.put(Float, "FLOAT");
|
sqlTypeDBStringMap.put(Double, "DOUBLE");
|
sqlTypeDBStringMap.put(Decimal, "DECIMAL");
|
sqlTypeDBStringMap.put(Date, "DATE");
|
sqlTypeDBStringMap.put(Boolean, "BOOLEAN");
|
sqlTypeDBStringMap.put(String, "VARCHAR");
|
}
|
|
private static void initStringValueTypeMap() {
|
stringValueTypeMap = new HashMap<String, ValueType>();
|
|
//1. SAP 类型
|
stringValueTypeMap.put("c", String);
|
stringValueTypeMap.put("n", String);
|
stringValueTypeMap.put("t", String);
|
stringValueTypeMap.put("d", String);
|
stringValueTypeMap.put("i", Int);
|
stringValueTypeMap.put("f", Double);
|
stringValueTypeMap.put("p", Double);
|
stringValueTypeMap.put("x", String);
|
|
//2. 普通类型
|
stringValueTypeMap.put("String", String);
|
stringValueTypeMap.put("char", String);
|
stringValueTypeMap.put("varchar", String);
|
stringValueTypeMap.put("vchar", String);
|
stringValueTypeMap.put("text", String);
|
stringValueTypeMap.put("int", Int);
|
stringValueTypeMap.put("tinyint", Int);
|
stringValueTypeMap.put("smallint", Int);
|
stringValueTypeMap.put("bigint", Int);
|
stringValueTypeMap.put("long", Int);
|
stringValueTypeMap.put("number", Double);
|
stringValueTypeMap.put("decimal", Double);
|
stringValueTypeMap.put("float", Double);
|
stringValueTypeMap.put("double", Double);
|
stringValueTypeMap.put("date", Date);
|
stringValueTypeMap.put("time", Date);
|
stringValueTypeMap.put("datetime", Date);
|
stringValueTypeMap.put("boolean", Boolean);
|
stringValueTypeMap.put("entity", Entity);
|
stringValueTypeMap.put("entityset", EntitySet);
|
}
|
|
private static void initSQLTypeValueTypeMap() {
|
sqlTypeValueTypeMap = new HashMap<Integer, ValueType>();
|
|
sqlTypeValueTypeMap.put(Types.INTEGER, Int);
|
sqlTypeValueTypeMap.put(Types.BIGINT, Long);
|
sqlTypeValueTypeMap.put(Types.SMALLINT, Int);
|
sqlTypeValueTypeMap.put(Types.TINYINT, Int);
|
sqlTypeValueTypeMap.put(Types.DECIMAL, Decimal);
|
sqlTypeValueTypeMap.put(Types.NUMERIC, Decimal);
|
sqlTypeValueTypeMap.put(Types.DOUBLE, Double);
|
sqlTypeValueTypeMap.put(Types.FLOAT, Double);
|
sqlTypeValueTypeMap.put(Types.DATE, Date);
|
sqlTypeValueTypeMap.put(Types.TIME, Date);
|
sqlTypeValueTypeMap.put(Types.TIMESTAMP, Date);
|
sqlTypeValueTypeMap.put(Types.BOOLEAN, Boolean);
|
sqlTypeValueTypeMap.put(Types.BIT, Boolean);
|
}
|
|
private static void initValueTypeJavaClassMap() {
|
valueTypeJavaClassMap = new HashMap<ValueType, Class<?>>();
|
|
valueTypeJavaClassMap.put(Int, Integer.class);
|
valueTypeJavaClassMap.put(Double, Double.class);
|
valueTypeJavaClassMap.put(Float, Float.class);
|
valueTypeJavaClassMap.put(Decimal, java.util.Date.class);
|
valueTypeJavaClassMap.put(List, java.util.List.class);
|
valueTypeJavaClassMap.put(Boolean, java.lang.Boolean.class);
|
valueTypeJavaClassMap.put(Int, Integer.class);
|
}
|
|
}
|