Coverage Summary for Class: JavaType (net.sf.persism)
| Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
| JavaType |
100%
(1/1)
|
100%
(9/9)
|
84.3%
(43/51)
|
100%
(71/71)
|
package net.sf.persism;
import java.lang.reflect.Array;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.Time;
import java.sql.Timestamp;
import java.time.LocalTime;
import java.util.UUID;
/**
* Type mapper used for fast switch statements
*
* @author Dan Howard
* @since 10/8/11 5:36 PM
*/
enum JavaType {
booleanType(boolean.class),
BooleanType(Boolean.class),
byteType(byte.class),
ByteType(Byte.class),
shortType(short.class),
ShortType(Short.class),
integerType(int.class),
IntegerType(Integer.class),
longType(long.class),
LongType(Long.class),
floatType(float.class),
FloatType(Float.class),
doubleType(double.class),
DoubleType(Double.class),
BigDecimalType(BigDecimal.class),
BigIntegerType(BigInteger.class),
StringType(String.class),
characterType(char.class),
CharacterType(Character.class),
UtilDateType(java.util.Date.class),
SQLDateType(java.sql.Date.class),
TimeType(Time.class),
LocalTimeType(LocalTime.class),
TimestampType(Timestamp.class),
LocalDateType(java.time.LocalDate.class),
LocalDateTimeType(java.time.LocalDateTime.class),
InstantType(java.time.Instant.class),
OffsetDateTimeType(java.time.OffsetDateTime.class),
ZonedDateTimeType(java.time.ZonedDateTime.class),
byteArrayType(byte[].class),
ByteArrayType(Byte[].class),
ClobType(Clob.class),
BlobType(Blob.class),
EnumType(Enum.class),
UUIDType(UUID.class),
ObjectType(Object.class);
private static final Log log = Log.getLogger(JavaType.class);
private Class<?> type;
<T> JavaType(Class<T> type) {
init(type);
}
private <T> void init(Class<T> type) {
this.type = type;
}
public static <T> JavaType getType(Class<T> type) {
if (type.isEnum()) {
return EnumType;
}
for (JavaType t : values()) {
if (t.type.equals(type)) {
return t;
}
}
return null;
}
public static JavaType convert(int sqlType) {
JavaType result = null;
switch (sqlType) {
case java.sql.Types.CHAR:
case java.sql.Types.NCHAR:
case java.sql.Types.VARCHAR:
case java.sql.Types.NVARCHAR:
case java.sql.Types.LONGVARCHAR:
case java.sql.Types.LONGNVARCHAR:
result = StringType;
break;
case java.sql.Types.NUMERIC:
case java.sql.Types.DECIMAL:
result = BigDecimalType;
break;
case java.sql.Types.BIT:
case java.sql.Types.BOOLEAN:
result = BooleanType;
break;
case java.sql.Types.TINYINT:
result = ByteType;
break;
case java.sql.Types.SMALLINT:
result = ShortType;
break;
case java.sql.Types.INTEGER:
result = IntegerType;
break;
case java.sql.Types.BIGINT:
result = LongType;
break;
case java.sql.Types.FLOAT:
result = FloatType;
break;
case java.sql.Types.DOUBLE:
case java.sql.Types.REAL:
result = DoubleType;
break;
case java.sql.Types.BINARY:
case java.sql.Types.VARBINARY:
result = ByteArrayType;
break;
case java.sql.Types.LONGVARBINARY:
case java.sql.Types.BLOB:
result = BlobType;
break;
case java.sql.Types.DATE:
result = SQLDateType;
break;
case java.sql.Types.TIME:
result = TimeType;
break;
case java.sql.Types.TIMESTAMP:
result = TimestampType;
break;
case java.sql.Types.CLOB:
case java.sql.Types.NCLOB:
result = ClobType;
break;
case java.sql.Types.OTHER:
result = ObjectType;
}
if (result == null) {
log.warnNoDuplicates(Message.UnknownSQLType.message(sqlType));
}
return result;
}
public Class<?> getJavaType() {
return type;
}
public boolean isEligibleForAutoinc() {
// Oracle returns BigDecimalType for INT
// PUBS has SmallInt -> short
return this == IntegerType || this == integerType || this == LongType || this == longType
|| this == ShortType || this == shortType || this == BigDecimalType || this == BigIntegerType;
}
// https://stackoverflow.com/questions/2891970/getting-default-value-for-primitive-types
public static <T> T getDefaultValue(Class<T> clazz) {
return (T) Array.get(Array.newInstance(clazz, 1), 0);
}
}