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); } }