1 package org.apache.torque.templates.typemapping;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.Collections;
23 import java.util.HashMap;
24 import java.util.HashSet;
25 import java.util.Map;
26 import java.util.Set;
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 public final class TypeMap
71 {
72
73
74
75 private static final Set<SchemaType> TEXT_TYPES;
76
77 static
78 {
79 Set<SchemaType> textTypes = new HashSet<SchemaType>();
80 textTypes.add(SchemaType.CHAR);
81 textTypes.add(SchemaType.VARCHAR);
82 textTypes.add(SchemaType.LONGVARCHAR);
83 textTypes.add(SchemaType.CLOB);
84 textTypes.add(SchemaType.DATE);
85 textTypes.add(SchemaType.TIME);
86 textTypes.add(SchemaType.TIMESTAMP);
87 textTypes.add(SchemaType.BOOLEANCHAR);
88 TEXT_TYPES = Collections.unmodifiableSet(textTypes);
89 }
90
91 public static final String CHAR_OBJECT_TYPE = "\"\"";
92 public static final String VARCHAR_OBJECT_TYPE = "\"\"";
93 public static final String LONGVARCHAR_OBJECT_TYPE = "\"\"";
94 public static final String CLOB_OBJECT_TYPE = "\"\"";
95 public static final String NUMERIC_OBJECT_TYPE
96 = "new java.math.BigDecimal((double) 0)";
97 public static final String DECIMAL_OBJECT_TYPE
98 = "new java.math.BigDecimal((double) 0)";
99 public static final String BIT_OBJECT_TYPE = "new Boolean(true)";
100 public static final String TINYINT_OBJECT_TYPE = "Byte.valueOf((byte) 0)";
101 public static final String SMALLINT_OBJECT_TYPE = "Short.valueOf((short) 0)";
102 public static final String INTEGER_OBJECT_TYPE = "Integer.valueOf(0)";
103 public static final String BIGINT_OBJECT_TYPE = "Long.valueOf(0)";
104 public static final String REAL_OBJECT_TYPE = "new Float(0)";
105 public static final String FLOAT_OBJECT_TYPE = "new Double(0)";
106 public static final String DOUBLE_OBJECT_TYPE = "new Double(0)";
107 public static final String BINARY_OBJECT_TYPE = "new Object()";
108 public static final String VARBINARY_OBJECT_TYPE = "new Object()";
109 public static final String LONGVARBINARY_OBJECT_TYPE = "new Object()";
110 public static final String BLOB_OBJECT_TYPE = "new Object()";
111 public static final String DATE_OBJECT_TYPE = "new Date()";
112 public static final String TIME_OBJECT_TYPE = "new Date()";
113 public static final String TIMESTAMP_OBJECT_TYPE = "new Date()";
114 public static final String BOOLEANCHAR_OBJECT_TYPE = "\"\"";
115 public static final String BOOLEANINT_OBJECT_TYPE = "new Integer(0)";
116
117
118
119
120
121 private static final Map<SchemaType, String>
122 SCHEMA_TYPE_TO_INIT_VALUE_MAP;
123
124
125
126
127
128 private static final Map<SchemaType, JavaType>
129 SCHEMA_TYPE_TO_JAVA_PRIMITIVE_TYPE_MAP;
130
131
132
133
134 private static final Map<SchemaType, JavaType>
135 SCHEMA_TYPE_TO_JAVA_OBJECT_TYPE_MAP;
136
137
138
139
140
141 private static Map<SchemaType, ResultSetGetter>
142 SCHEMA_TYPE_TO_RESULT_SET_GETTER;
143
144
145 static {
146 Map<SchemaType, String> schemaToInitValue
147 = new HashMap<SchemaType, String>();
148
149 schemaToInitValue.put(SchemaType.CHAR, CHAR_OBJECT_TYPE);
150 schemaToInitValue.put(SchemaType.VARCHAR, VARCHAR_OBJECT_TYPE);
151 schemaToInitValue.put(SchemaType.LONGVARCHAR, LONGVARCHAR_OBJECT_TYPE);
152 schemaToInitValue.put(SchemaType.CLOB, CLOB_OBJECT_TYPE);
153 schemaToInitValue.put(SchemaType.NUMERIC, NUMERIC_OBJECT_TYPE);
154 schemaToInitValue.put(SchemaType.DECIMAL, DECIMAL_OBJECT_TYPE);
155 schemaToInitValue.put(SchemaType.BIT, BIT_OBJECT_TYPE);
156 schemaToInitValue.put(SchemaType.TINYINT, TINYINT_OBJECT_TYPE);
157 schemaToInitValue.put(SchemaType.SMALLINT, SMALLINT_OBJECT_TYPE);
158 schemaToInitValue.put(SchemaType.INTEGER, INTEGER_OBJECT_TYPE);
159 schemaToInitValue.put(SchemaType.BIGINT, BIGINT_OBJECT_TYPE);
160 schemaToInitValue.put(SchemaType.REAL, REAL_OBJECT_TYPE);
161 schemaToInitValue.put(SchemaType.FLOAT, FLOAT_OBJECT_TYPE);
162 schemaToInitValue.put(SchemaType.DOUBLE, DOUBLE_OBJECT_TYPE);
163 schemaToInitValue.put(SchemaType.BINARY, BINARY_OBJECT_TYPE);
164 schemaToInitValue.put(SchemaType.VARBINARY, VARBINARY_OBJECT_TYPE);
165 schemaToInitValue.put(SchemaType.LONGVARBINARY, LONGVARBINARY_OBJECT_TYPE);
166 schemaToInitValue.put(SchemaType.BLOB, BLOB_OBJECT_TYPE);
167 schemaToInitValue.put(SchemaType.DATE, DATE_OBJECT_TYPE);
168 schemaToInitValue.put(SchemaType.TIME, TIME_OBJECT_TYPE);
169 schemaToInitValue.put(SchemaType.TIMESTAMP, TIMESTAMP_OBJECT_TYPE);
170 schemaToInitValue.put(SchemaType.BOOLEANCHAR, BOOLEANCHAR_OBJECT_TYPE);
171 schemaToInitValue.put(SchemaType.BOOLEANINT, BOOLEANINT_OBJECT_TYPE);
172 SCHEMA_TYPE_TO_INIT_VALUE_MAP
173 = Collections.unmodifiableMap(schemaToInitValue);
174 }
175
176
177 static
178 {
179 Map<SchemaType, JavaType> schemaToJava
180 = new HashMap<SchemaType, JavaType>();
181 schemaToJava.put(SchemaType.CHAR, JavaType.STRING);
182 schemaToJava.put(SchemaType.VARCHAR, JavaType.STRING);
183 schemaToJava.put(SchemaType.LONGVARCHAR, JavaType.STRING);
184 schemaToJava.put(SchemaType.CLOB, JavaType.STRING);
185 schemaToJava.put(SchemaType.NUMERIC, JavaType.BIG_DECIMAL);
186 schemaToJava.put(SchemaType.DECIMAL, JavaType.BIG_DECIMAL);
187 schemaToJava.put(SchemaType.BIT, JavaType.BOOLEAN_PRIMITIVE);
188 schemaToJava.put(SchemaType.TINYINT, JavaType.BYTE_PRIMITIVE);
189 schemaToJava.put(SchemaType.SMALLINT, JavaType.SHORT_PRIMITIVE);
190 schemaToJava.put(SchemaType.INTEGER, JavaType.INTEGER_PRIMITIVE);
191 schemaToJava.put(SchemaType.BIGINT, JavaType.LONG_PRIMITIVE);
192 schemaToJava.put(SchemaType.REAL, JavaType.FLOAT_PRIMITIVE);
193 schemaToJava.put(SchemaType.FLOAT, JavaType.DOUBLE_PRIMITIVE);
194 schemaToJava.put(SchemaType.DOUBLE, JavaType.DOUBLE_PRIMITIVE);
195 schemaToJava.put(SchemaType.BINARY, JavaType.BYTE_PRIMITIVE_ARRAY);
196 schemaToJava.put(SchemaType.VARBINARY, JavaType.BYTE_PRIMITIVE_ARRAY);
197 schemaToJava.put(SchemaType.LONGVARBINARY, JavaType.BYTE_PRIMITIVE_ARRAY);
198 schemaToJava.put(SchemaType.BLOB, JavaType.BYTE_PRIMITIVE_ARRAY);
199 schemaToJava.put(SchemaType.DATE, JavaType.DATE);
200 schemaToJava.put(SchemaType.TIME, JavaType.DATE);
201 schemaToJava.put(SchemaType.TIMESTAMP, JavaType.DATE);
202 schemaToJava.put(SchemaType.BOOLEANCHAR, JavaType.BOOLEAN_PRIMITIVE);
203 schemaToJava.put(SchemaType.BOOLEANINT, JavaType.BOOLEAN_PRIMITIVE);
204 SCHEMA_TYPE_TO_JAVA_PRIMITIVE_TYPE_MAP
205 = Collections.unmodifiableMap(schemaToJava);
206 }
207
208
209
210 static
211 {
212 Map<SchemaType, JavaType> schemaToJava
213 = new HashMap<SchemaType, JavaType>();
214 schemaToJava.put(SchemaType.CHAR, JavaType.STRING);
215 schemaToJava.put(SchemaType.VARCHAR, JavaType.STRING);
216 schemaToJava.put(SchemaType.LONGVARCHAR, JavaType.STRING);
217 schemaToJava.put(SchemaType.CLOB, JavaType.STRING);
218 schemaToJava.put(SchemaType.NUMERIC, JavaType.BIG_DECIMAL);
219 schemaToJava.put(SchemaType.DECIMAL, JavaType.BIG_DECIMAL);
220 schemaToJava.put(SchemaType.BIT, JavaType.BOOLEAN_OBJECT);
221 schemaToJava.put(SchemaType.TINYINT, JavaType.BYTE_OBJECT);
222 schemaToJava.put(SchemaType.SMALLINT, JavaType.SHORT_OBJECT);
223 schemaToJava.put(SchemaType.INTEGER, JavaType.INTEGER_OBJECT);
224 schemaToJava.put(SchemaType.BIGINT, JavaType.LONG_OBJECT);
225 schemaToJava.put(SchemaType.REAL, JavaType.FLOAT_OBJECT);
226 schemaToJava.put(SchemaType.FLOAT, JavaType.DOUBLE_OBJECT);
227 schemaToJava.put(SchemaType.DOUBLE, JavaType.DOUBLE_OBJECT);
228 schemaToJava.put(SchemaType.BINARY, JavaType.BYTE_PRIMITIVE_ARRAY);
229 schemaToJava.put(SchemaType.VARBINARY, JavaType.BYTE_PRIMITIVE_ARRAY);
230 schemaToJava.put(SchemaType.LONGVARBINARY, JavaType.BYTE_PRIMITIVE_ARRAY);
231 schemaToJava.put(SchemaType.BLOB, JavaType.BYTE_PRIMITIVE_ARRAY);
232 schemaToJava.put(SchemaType.DATE, JavaType.DATE);
233 schemaToJava.put(SchemaType.TIME, JavaType.DATE);
234 schemaToJava.put(SchemaType.TIMESTAMP, JavaType.DATE);
235 schemaToJava.put(SchemaType.BOOLEANCHAR, JavaType.BOOLEAN_OBJECT);
236 schemaToJava.put(SchemaType.BOOLEANINT, JavaType.BOOLEAN_OBJECT);
237 SCHEMA_TYPE_TO_JAVA_OBJECT_TYPE_MAP
238 = Collections.unmodifiableMap(schemaToJava);
239 }
240
241 static
242 {
243 Map<SchemaType, ResultSetGetter> schemaToResultSetGetter
244 = new HashMap<SchemaType, ResultSetGetter>();
245
246 schemaToResultSetGetter.put(SchemaType.CHAR, ResultSetGetter.STRING);
247 schemaToResultSetGetter.put(SchemaType.VARCHAR, ResultSetGetter.STRING);
248 schemaToResultSetGetter.put(SchemaType.LONGVARCHAR, ResultSetGetter.STRING);
249 schemaToResultSetGetter.put(SchemaType.CLOB, ResultSetGetter.STRING);
250 schemaToResultSetGetter.put(SchemaType.NUMERIC, ResultSetGetter.BIG_DECIMAL);
251 schemaToResultSetGetter.put(SchemaType.DECIMAL, ResultSetGetter.BIG_DECIMAL);
252 schemaToResultSetGetter.put(SchemaType.BIT, ResultSetGetter.BOOLEAN);
253 schemaToResultSetGetter.put(SchemaType.TINYINT, ResultSetGetter.BYTE);
254 schemaToResultSetGetter.put(SchemaType.SMALLINT, ResultSetGetter.SHORT);
255 schemaToResultSetGetter.put(SchemaType.INTEGER, ResultSetGetter.INT);
256 schemaToResultSetGetter.put(SchemaType.BIGINT, ResultSetGetter.LONG);
257 schemaToResultSetGetter.put(SchemaType.REAL, ResultSetGetter.FLOAT);
258 schemaToResultSetGetter.put(SchemaType.FLOAT, ResultSetGetter.DOUBLE);
259 schemaToResultSetGetter.put(SchemaType.DOUBLE, ResultSetGetter.DOUBLE);
260 schemaToResultSetGetter.put(SchemaType.BINARY, ResultSetGetter.BYTES);
261 schemaToResultSetGetter.put(SchemaType.VARBINARY, ResultSetGetter.BYTES);
262 schemaToResultSetGetter.put(SchemaType.LONGVARBINARY, ResultSetGetter.BYTES);
263 schemaToResultSetGetter.put(SchemaType.BLOB, ResultSetGetter.BYTES);
264 schemaToResultSetGetter.put(SchemaType.DATE, ResultSetGetter.DATE);
265 schemaToResultSetGetter.put(SchemaType.TIME, ResultSetGetter.TIME);
266 schemaToResultSetGetter.put(SchemaType.TIMESTAMP, ResultSetGetter.TIMESTAMP);
267 schemaToResultSetGetter.put(SchemaType.BOOLEANCHAR, ResultSetGetter.STRING);
268 schemaToResultSetGetter.put(SchemaType.BOOLEANINT, ResultSetGetter.INT);
269 SCHEMA_TYPE_TO_RESULT_SET_GETTER
270 = Collections.unmodifiableMap(schemaToResultSetGetter);
271 }
272
273
274
275
276 private TypeMap()
277 {
278 }
279
280
281
282
283
284
285
286
287 public static String getJavaObject(SchemaType jdbcType)
288 {
289 return (String) SCHEMA_TYPE_TO_INIT_VALUE_MAP.get(jdbcType);
290 }
291
292
293
294
295
296
297
298
299 public static JavaType getJavaPrimitiveType(SchemaType schemaType)
300 {
301 return SCHEMA_TYPE_TO_JAVA_PRIMITIVE_TYPE_MAP.get(schemaType);
302 }
303
304
305
306
307
308
309
310
311 public static JavaType getJavaObjectType(SchemaType schemaType)
312 {
313 return SCHEMA_TYPE_TO_JAVA_OBJECT_TYPE_MAP.get(schemaType);
314 }
315
316
317
318
319
320
321
322
323 public static ResultSetGetter getResultSetGetter(SchemaType schemaType)
324 {
325 return SCHEMA_TYPE_TO_RESULT_SET_GETTER.get(schemaType);
326 }
327
328
329
330
331
332
333
334
335 public static boolean isBooleanInt(SchemaType type)
336 {
337 return SchemaType.BOOLEANINT.equals(type);
338 }
339
340
341
342
343
344
345
346
347 public static boolean isBooleanChar(SchemaType type)
348 {
349 return SchemaType.BOOLEANCHAR.equals(type);
350 }
351
352
353
354
355
356
357
358
359 public static boolean isBit(SchemaType type)
360 {
361 return SchemaType.BIT.equals(type);
362 }
363
364
365
366
367
368
369
370 public static boolean isTextType(SchemaType type)
371 {
372 return TEXT_TYPES.contains(type);
373 }
374 }