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 sqlTypeDBStringMap; private static Map stringValueTypeMap; private static Map sqlTypeValueTypeMap; private static Map> valueTypeJavaClassMap; static { // initSQLTypeDBStringMap(); // initStringValueTypeMap(); // initSQLTypeValueTypeMap(); // initValueTypeJavaClassMap(); } private static void initSQLTypeDBStringMap() { sqlTypeDBStringMap = new HashMap(); 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(); //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(); 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>(); 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); } }