Coverage Summary for Class: JavaType (net.sf.persism)
Class |
Class, %
|
Method, %
|
Line, %
|
JavaType |
100%
(1/1)
|
100%
(9/9)
|
100%
(86/86)
|
1 package net.sf.persism;
2
3 import java.lang.reflect.Array;
4 import java.math.BigDecimal;
5 import java.math.BigInteger;
6 import java.sql.Blob;
7 import java.sql.Clob;
8 import java.sql.Time;
9 import java.sql.Timestamp;
10 import java.time.LocalTime;
11 import java.util.UUID;
12
13 /**
14 * Type mapper used for fast switch statements
15 *
16 * @author Dan Howard
17 * @since 10/8/11 5:36 PM
18 */
19 enum JavaType {
20
21 booleanType(boolean.class),
22 BooleanType(Boolean.class),
23 byteType(byte.class),
24 ByteType(Byte.class),
25 shortType(short.class),
26 ShortType(Short.class),
27 integerType(int.class),
28 IntegerType(Integer.class),
29 longType(long.class),
30 LongType(Long.class),
31 floatType(float.class),
32 FloatType(Float.class),
33 doubleType(double.class),
34 DoubleType(Double.class),
35 BigDecimalType(BigDecimal.class),
36 BigIntegerType(BigInteger.class),
37 StringType(String.class),
38 characterType(char.class),
39 CharacterType(Character.class),
40 UtilDateType(java.util.Date.class),
41 SQLDateType(java.sql.Date.class),
42 TimeType(Time.class),
43 LocalTimeType(LocalTime.class),
44 TimestampType(Timestamp.class),
45 LocalDateType(java.time.LocalDate.class),
46 LocalDateTimeType(java.time.LocalDateTime.class),
47 InstantType(java.time.Instant.class),
48 OffsetDateTimeType(java.time.OffsetDateTime.class),
49 ZonedDateTimeType(java.time.ZonedDateTime.class),
50 byteArrayType(byte[].class),
51 ByteArrayType(Byte[].class),
52 ClobType(Clob.class),
53 BlobType(Blob.class),
54 EnumType(Enum.class),
55 UUIDType(UUID.class),
56 ObjectType(Object.class);
57
58 private static final Log log = Log.getLogger(JavaType.class);
59
60 private Class<?> type;
61
62 <T> JavaType(Class<T> type) {
63 init(type);
64 }
65
66 private <T> void init(Class<T> type) {
67 this.type = type;
68 }
69
70 public static <T> JavaType getType(Class<T> type) {
71 if (type.isEnum()) {
72 return EnumType;
73 }
74
75 for (JavaType t : values()) {
76 if (t.type.equals(type)) {
77 return t;
78 }
79 }
80 return null;
81 }
82
83 public static JavaType convert(int sqlType) {
84 JavaType result = null;
85
86 switch (sqlType) {
87 case java.sql.Types.CHAR:
88 case java.sql.Types.NCHAR:
89 case java.sql.Types.VARCHAR:
90 case java.sql.Types.NVARCHAR:
91 case java.sql.Types.LONGVARCHAR:
92 case java.sql.Types.LONGNVARCHAR:
93 result = StringType;
94 break;
95
96 case java.sql.Types.NUMERIC:
97 case java.sql.Types.DECIMAL:
98 result = BigDecimalType;
99 break;
100
101 case java.sql.Types.BIT:
102 case java.sql.Types.BOOLEAN:
103 result = BooleanType;
104 break;
105
106 case java.sql.Types.TINYINT:
107 result = ByteType;
108 break;
109
110 case java.sql.Types.SMALLINT:
111 result = ShortType;
112 break;
113
114 case java.sql.Types.INTEGER:
115 result = IntegerType;
116 break;
117
118 case java.sql.Types.BIGINT:
119 result = LongType;
120 break;
121
122 case java.sql.Types.FLOAT:
123 result = FloatType;
124 break;
125
126 case java.sql.Types.DOUBLE:
127 case java.sql.Types.REAL:
128 result = DoubleType;
129 break;
130
131 case java.sql.Types.BINARY:
132 case java.sql.Types.VARBINARY:
133 result = ByteArrayType;
134 break;
135
136 case java.sql.Types.LONGVARBINARY:
137 case java.sql.Types.BLOB:
138 result = BlobType;
139 break;
140
141 case java.sql.Types.DATE:
142 result = SQLDateType;
143 break;
144
145 case java.sql.Types.TIME:
146 result = TimeType;
147 break;
148
149 case java.sql.Types.TIMESTAMP:
150 result = TimestampType;
151 break;
152
153 case java.sql.Types.CLOB:
154 case java.sql.Types.NCLOB:
155 result = ClobType;
156 break;
157
158 case java.sql.Types.OTHER:
159 result = ObjectType;
160 }
161
162 if (result == null) {
163 log.warnNoDuplicates(Message.UnknownSQLType.message(sqlType));
164 }
165
166 return result;
167 }
168
169 public Class<?> getJavaType() {
170 return type;
171 }
172
173 public boolean isEligibleForAutoinc() {
174 // Oracle returns BigDecimalType for INT
175 // PUBS has SmallInt -> short
176 return this == IntegerType || this == integerType || this == LongType || this == longType
177 || this == ShortType || this == shortType || this == BigDecimalType || this == BigIntegerType;
178 }
179
180 // https://stackoverflow.com/questions/2891970/getting-default-value-for-primitive-types
181 public static <T> T getDefaultValue(Class<T> clazz) {
182 return (T) Array.get(Array.newInstance(clazz, 1), 0);
183 }
184 }
185
186