package com.lidroid.xutils.db.converter;
import com.lidroid.xutils.db.sqlite.ColumnDbType;
import java.util.Date;
import java.util.concurrent.ConcurrentHashMap;
/**
* Author: wyouflf
* Date: 13-11-4
* Time: 下午10:27
*/
public class ColumnConverterFactory {
private ColumnConverterFactory() {
}
public static ColumnConverter getColumnConverter(Class columnType) {
if (columnType_columnConverter_map.containsKey(columnType.getName())) {
return columnType_columnConverter_map.get(columnType.getName());
} else if (ColumnConverter.class.isAssignableFrom(columnType)) {
try {
ColumnConverter columnConverter = (ColumnConverter) columnType.newInstance();
if (columnConverter != null) {
columnType_columnConverter_map.put(columnType.getName(), columnConverter);
}
return columnConverter;
} catch (Throwable e) {
}
}
return null;
}
public static ColumnDbType getDbColumnType(Class columnType) {
ColumnConverter converter = getColumnConverter(columnType);
if (converter != null) {
return converter.getColumnDbType();
}
return ColumnDbType.TEXT;
}
public static void registerColumnConverter(Class columnType, ColumnConverter columnConverter) {
columnType_columnConverter_map.put(columnType.getName(), columnConverter);
}
public static boolean isSupportColumnConverter(Class columnType) {
if (columnType_columnConverter_map.containsKey(columnType.getName())) {
return true;
} else if (ColumnConverter.class.isAssignableFrom(columnType)) {
try {
ColumnConverter columnConverter = (ColumnConverter) columnType.newInstance();
if (columnConverter != null) {
columnType_columnConverter_map.put(columnType.getName(), columnConverter);
}
return columnConverter == null;
} catch (Throwable e) {
}
}
return false;
}
private static final ConcurrentHashMap<String, ColumnConverter> columnType_columnConverter_map;
static {
columnType_columnConverter_map = new ConcurrentHashMap<String, ColumnConverter>();
BooleanColumnConverter booleanColumnConverter = new BooleanColumnConverter();
columnType_columnConverter_map.put(boolean.class.getName(), booleanColumnConverter);
columnType_columnConverter_map.put(Boolean.class.getName(), booleanColumnConverter);
ByteArrayColumnConverter byteArrayColumnConverter = new ByteArrayColumnConverter();
columnType_columnConverter_map.put(byte[].class.getName(), byteArrayColumnConverter);
ByteColumnConverter byteColumnConverter = new ByteColumnConverter();
columnType_columnConverter_map.put(byte.class.getName(), byteColumnConverter);
columnType_columnConverter_map.put(Byte.class.getName(), byteColumnConverter);
CharColumnConverter charColumnConverter = new CharColumnConverter();
columnType_columnConverter_map.put(char.class.getName(), charColumnConverter);
columnType_columnConverter_map.put(Character.class.getName(), charColumnConverter);
DateColumnConverter dateColumnConverter = new DateColumnConverter();
columnType_columnConverter_map.put(Date.class.getName(), dateColumnConverter);
DoubleColumnConverter doubleColumnConverter = new DoubleColumnConverter();
columnType_columnConverter_map.put(double.class.getName(), doubleColumnConverter);
columnType_columnConverter_map.put(Double.class.getName(), doubleColumnConverter);
FloatColumnConverter floatColumnConverter = new FloatColumnConverter();
columnType_columnConverter_map.put(float.class.getName(), floatColumnConverter);
columnType_columnConverter_map.put(Float.class.getName(), floatColumnConverter);
IntegerColumnConverter integerColumnConverter = new IntegerColumnConverter();
columnType_columnConverter_map.put(int.class.getName(), integerColumnConverter);
columnType_columnConverter_map.put(Integer.class.getName(), integerColumnConverter);
LongColumnConverter longColumnConverter = new LongColumnConverter();
columnType_columnConverter_map.put(long.class.getName(), longColumnConverter);
columnType_columnConverter_map.put(Long.class.getName(), longColumnConverter);
ShortColumnConverter shortColumnConverter = new ShortColumnConverter();
columnType_columnConverter_map.put(short.class.getName(), shortColumnConverter);
columnType_columnConverter_map.put(Short.class.getName(), shortColumnConverter);
SqlDateColumnConverter sqlDateColumnConverter = new SqlDateColumnConverter();
columnType_columnConverter_map.put(java.sql.Date.class.getName(), sqlDateColumnConverter);
StringColumnConverter stringColumnConverter = new StringColumnConverter();
columnType_columnConverter_map.put(String.class.getName(), stringColumnConverter);
}
}