IT-KIMI_SHI\SINOIT.KIMI
2018-06-01 521993214708c66a5498bd669c94a661c11484b2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package frame.data.convert;
 
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import frame.data.DataType;
import frame.data.Variant;
 
public abstract class Convertor {
    
    protected String format;
    private static Map<Class<?>, Class<? extends Convertor>> classTranslatorMap;
    private static Map<DataType, Class<? extends Convertor>> dataTypeTranslatorMap;
    
    
    static {
        initClassTranslatorMap();
        initDataTypeTranslatorMap();
    }
    
    public static Convertor getInstance(Class<?> type) throws Exception {
        return getInstance(type, null);
    }
    
    public static Convertor getInstance(DataType type) throws Exception {
        return getInstance(type, null);
    }
    
    public static Convertor getInstance(Class<?> type, String format) throws Exception {
        Convertor result = null;
        
        Class<? extends Convertor> translatorClass = classTranslatorMap.get(type);
        
        if (translatorClass == null) {
            throw new Exception("can not create translator for: " + type);
        }
 
        result = translatorClass.newInstance();
        result.setFormat(format);
        
        return result;
    }
    
    public static Convertor getInstance(DataType type, String format) throws Exception {
        Convertor result = null;
        
        Class<? extends Convertor> translatorClass = dataTypeTranslatorMap.get(type);
        
        if (translatorClass == null) {
            throw new Exception("can not create translator for: " + type);
        }
 
        result = translatorClass.newInstance();
        result.setFormat(format);
        
        return result;
    }
 
    public abstract int toInteger(Object value, int defaultValue) throws Exception;
    
    public abstract String toSqlString(Object value) throws Exception;
    
    public abstract String toSqlString(String prefix, Object value, String suffix)throws Exception;
 
    public abstract String toJSONString(Object value) throws Exception;
    
    public abstract String toSchemaString(Object value) throws Exception; 
 
    public abstract Double toDouble(Object object)throws Exception;
 
    public abstract BigDecimal toBigDecimal(Object object, BigDecimal defaultValue) throws Exception;;
    
    public abstract boolean toBoolean(Object value, boolean defaultValue) throws Exception;
 
    public abstract boolean toDate(Object value, Date defaultValue) throws Exception;
 
    public abstract Object toSelfType(Object value) throws Exception;;
    
    public abstract Object loadToObject(String value) throws Exception;
    
    public abstract Variant loadToVariant(String value) throws Exception;
    
    public abstract String toString(Object value) throws Exception;
    
    public void setFormat(String format) {
        this.format = format;
    }
    
    public String getFormat() {
        return format;
    }
 
    
    
    private static void initClassTranslatorMap() {
        classTranslatorMap = new HashMap<Class<?>, Class<? extends Convertor>>();
        
        classTranslatorMap.put(String.class, StringTranslator.class);
        classTranslatorMap.put(Integer.class, IntegerTranslator.class);
        classTranslatorMap.put(int.class, IntegerTranslator.class);
        classTranslatorMap.put(BigInteger.class, IntegerTranslator.class);
        classTranslatorMap.put(Double.class, DoubleTranslator.class);
        classTranslatorMap.put(double.class, DoubleTranslator.class);
        classTranslatorMap.put(Float.class, DoubleTranslator.class);
        classTranslatorMap.put(float.class, DoubleTranslator.class);
        classTranslatorMap.put(BigDecimal.class, BigDecimalTranslator.class);
        classTranslatorMap.put(Date.class, DateTranslator.class);
        classTranslatorMap.put(Boolean.class, BooleanTranslator.class);
        classTranslatorMap.put(boolean.class, BooleanTranslator.class);
        classTranslatorMap.put(Object.class, ObjectTranslator.class);
        classTranslatorMap.put(Long.class, LongTranslator.class);
    }
 
    private static void initDataTypeTranslatorMap() {
        dataTypeTranslatorMap = new HashMap<DataType, Class<? extends Convertor>>();
        
        dataTypeTranslatorMap.put(DataType.String, StringTranslator.class);
        dataTypeTranslatorMap.put(DataType.Int, IntegerTranslator.class);
        dataTypeTranslatorMap.put(DataType.Double, DoubleTranslator.class);
        dataTypeTranslatorMap.put(DataType.Decimal, BigDecimalTranslator.class);
        dataTypeTranslatorMap.put(DataType.Date, DateTranslator.class);
        dataTypeTranslatorMap.put(DataType.Boolean, BooleanTranslator.class);
    }
 
    public static boolean containsType(Class<?> type) {
        return classTranslatorMap.containsKey(type);
    }
 
 
}