package by.istin.android.xcore.db.impl; import android.database.sqlite.SQLiteStatement; import by.istin.android.xcore.annotations.*; import by.istin.android.xcore.utils.ReflectUtils; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * Created with IntelliJ IDEA. * User: Uladzimir_Klyshevich * Date: 10/14/13 * Time: 3:20 PM */ class DBAssociationCache { private static final DBAssociationCache INSTANCE = new DBAssociationCache(); public final static Map<Class<?>, String> TYPE_ASSOCIATION = new ConcurrentHashMap<Class<?>, String>(); static { TYPE_ASSOCIATION.put(dbString.class, "LONGTEXT"); TYPE_ASSOCIATION.put(dbInteger.class, "INTEGER"); TYPE_ASSOCIATION.put(dbLong.class, "BIGINT"); TYPE_ASSOCIATION.put(dbDouble.class, "DOUBLE"); TYPE_ASSOCIATION.put(dbBoolean.class, "BOOLEAN"); TYPE_ASSOCIATION.put(dbByte.class, "INTEGER"); TYPE_ASSOCIATION.put(dbByteArray.class, "BLOB"); } private final Map<Class<?>, List<ReflectUtils.XField>> mDbEntityFieldsCache = new ConcurrentHashMap<Class<?>, List<ReflectUtils.XField>>(); private final Map<Class<?>, List<ReflectUtils.XField>> mDbEntitiesFieldsCache = new ConcurrentHashMap<Class<?>, List<ReflectUtils.XField>>(); private final ConcurrentHashMap<String, Boolean> mCacheTable = new ConcurrentHashMap<String, Boolean>(); private final ConcurrentHashMap<Class<?>, String> mCacheTableNames = new ConcurrentHashMap<Class<?>, String>(); private final ConcurrentHashMap<Class<?>, SQLiteStatement> mCacheInsertStatements = new ConcurrentHashMap<Class<?>, SQLiteStatement>(); private final ConcurrentHashMap<Class<?>, String> mForeignKeys = new ConcurrentHashMap<Class<?>, String>(); private DBAssociationCache() { } public static DBAssociationCache get() { return INSTANCE; } public List<ReflectUtils.XField> getEntityFields(Class<?> clazz) { return mDbEntityFieldsCache.get(clazz); } public List<ReflectUtils.XField> getEntitiesFields(Class<?> clazz) { return mDbEntitiesFieldsCache.get(clazz); } public void putEntityFields(Class<?> classOfModel, List<ReflectUtils.XField> list) { mDbEntityFieldsCache.put(classOfModel, list); } public void putEntitiesFields(Class<?> classOfModel, List<ReflectUtils.XField> list) { mDbEntitiesFieldsCache.put(classOfModel, list); } public void setTableCreated(String tableName) { setTableCreated(tableName, true); } public void setTableCreated(String tableName, Boolean isCreated) { if (isCreated == null) { mCacheTable.remove(tableName); } else { mCacheTable.put(tableName, isCreated); } } public Boolean isTableCreated(String tableName) { return mCacheTable.get(tableName); } public String getTableName(Class<?> clazz) { return mCacheTableNames.get(clazz); } public void setTableName(Class<?> clazz, String tableName) { mCacheTableNames.put(clazz, tableName); } public SQLiteStatement getInsertStatement(Class<?> clazz) { return mCacheInsertStatements.get(clazz); } public void setInsertStatement(Class<?> clazz, SQLiteStatement insertStatement) { mCacheInsertStatements.put(clazz, insertStatement); } public String getForeignKey(Class<?> clazz) { return mForeignKeys.get(clazz); } public void putForeignKey(Class<?> clazz, String value) { mForeignKeys.put(clazz, value); } }