package com.quickblox.q_municate_db.helpers;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.support.ConnectionSource;
import com.quickblox.q_municate_db.R;
import com.quickblox.q_municate_db.models.Attachment;
import com.quickblox.q_municate_db.models.Dialog;
import com.quickblox.q_municate_db.models.DialogNotification;
import com.quickblox.q_municate_db.models.DialogOccupant;
import com.quickblox.q_municate_db.models.Friend;
import com.quickblox.q_municate_db.models.Message;
import com.quickblox.q_municate_db.models.Social;
import com.quickblox.q_municate_db.models.User;
import com.quickblox.q_municate_db.models.UserRequest;
import com.quickblox.q_municate_db.utils.DbHelperUtils;
import com.quickblox.q_municate_db.utils.ErrorUtils;
import java.util.concurrent.ConcurrentHashMap;
public class DataHelper extends OrmLiteSqliteOpenHelper {
private ConcurrentHashMap<Class<?>, Dao> concurrentDaoHashMap = null;
public static final Class<?>[] TABLES = {
User.class,
Social.class,
Friend.class,
UserRequest.class,
Dialog.class,
DialogOccupant.class,
DialogNotification.class,
Attachment.class,
Message.class
};
public DataHelper(Context context) {
super(context, context.getString(R.string.db_name), null, context.getResources().getInteger(
R.integer.db_version), R.raw.orm);
concurrentDaoHashMap = new ConcurrentHashMap<>();
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
DbHelperUtils.onCreate(connectionSource, TABLES);
}
@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
DbHelperUtils.onOpen(db);
}
@Override
public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
DbHelperUtils.onUpgrade(database, connectionSource, TABLES);
}
public void clearTable(Class clazz) {
DbHelperUtils.clearTable(connectionSource, clazz);
}
public void clearTables() {
DbHelperUtils.clearTables(connectionSource, TABLES);
}
public <T> Dao getDaoByClass(Class<T> clazz) {
try {
if (isInMap(clazz)) {
return getFromMap(clazz);
} else {
return addToMap(clazz, getDao(clazz));
}
} catch (java.sql.SQLException e) {
ErrorUtils.logError(e);
}
return null;
}
private <T> Dao addToMap(Class<T> clazz, Dao dao) {
concurrentDaoHashMap.put(clazz, dao);
return concurrentDaoHashMap.put(clazz, dao);
}
private <T> boolean isInMap(Class<T> clazz) {
return concurrentDaoHashMap.contains(clazz);
}
public <T> Dao getFromMap(Class<T> clazz) {
return concurrentDaoHashMap.get(clazz);
}
}