package com.quickblox.sample.groupchatwebrtc.db;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.text.TextUtils;
import android.util.Log;
import com.quickblox.core.helper.StringifyArrayList;
import com.quickblox.users.model.QBUser;
import java.util.ArrayList;
import java.util.List;
/**
* Created by tereha on 17.05.16.
*/
public class QbUsersDbManager {
private static String TAG = QbUsersDbManager.class.getSimpleName();
private static QbUsersDbManager instance;
private Context mContext;
private QbUsersDbManager(Context context) {
this.mContext = context;
}
public static QbUsersDbManager getInstance(Context context) {
if (instance == null) {
instance = new QbUsersDbManager(context);
}
return instance;
}
public ArrayList<QBUser> getAllUsers() {
ArrayList<QBUser> allUsers = new ArrayList<>();
DbHelper dbHelper = new DbHelper(mContext);
SQLiteDatabase db = dbHelper.getWritableDatabase();
Cursor c = db.query(DbHelper.DB_TABLE_NAME, null, null, null, null, null, null);
if (c.moveToFirst()) {
int userIdColIndex = c.getColumnIndex(DbHelper.DB_COLUMN_USER_ID);
int userLoginColIndex = c.getColumnIndex(DbHelper.DB_COLUMN_USER_LOGIN);
int userPassColIndex = c.getColumnIndex(DbHelper.DB_COLUMN_USER_PASSWORD);
int userFullNameColIndex = c.getColumnIndex(DbHelper.DB_COLUMN_USER_FULL_NAME);
int userTagColIndex = c.getColumnIndex(DbHelper.DB_COLUMN_USER_TAG);
do {
QBUser qbUser = new QBUser();
qbUser.setFullName(c.getString(userFullNameColIndex));
qbUser.setLogin(c.getString(userLoginColIndex));
qbUser.setId(c.getInt(userIdColIndex));
qbUser.setPassword(c.getString(userPassColIndex));
StringifyArrayList<String> tags = new StringifyArrayList<>();
tags.add(c.getString(userTagColIndex));
qbUser.setTags(tags);
allUsers.add(qbUser);
} while (c.moveToNext());
}
c.close();
dbHelper.close();
return allUsers;
}
public QBUser getUserById(Integer userId) {
QBUser qbUser = null;
DbHelper dbHelper = new DbHelper(mContext);
SQLiteDatabase db = dbHelper.getWritableDatabase();
Cursor c = db.query(DbHelper.DB_TABLE_NAME, null, null, null, null, null, null);
if (c.moveToFirst()) {
int userIdColIndex = c.getColumnIndex(DbHelper.DB_COLUMN_USER_ID);
int userLoginColIndex = c.getColumnIndex(DbHelper.DB_COLUMN_USER_LOGIN);
int userPassColIndex = c.getColumnIndex(DbHelper.DB_COLUMN_USER_PASSWORD);
int userFullNameColIndex = c.getColumnIndex(DbHelper.DB_COLUMN_USER_FULL_NAME);
int userTagColIndex = c.getColumnIndex(DbHelper.DB_COLUMN_USER_TAG);
do {
if (c.getInt(userIdColIndex) == userId) {
qbUser = new QBUser();
qbUser.setFullName(c.getString(userFullNameColIndex));
qbUser.setLogin(c.getString(userLoginColIndex));
qbUser.setId(c.getInt(userIdColIndex));
qbUser.setPassword(c.getString(userPassColIndex));
StringifyArrayList<String> tags = new StringifyArrayList<>();
tags.add(c.getString(userTagColIndex).split(","));
qbUser.setTags(tags);
break;
}
} while (c.moveToNext());
}
c.close();
dbHelper.close();
return qbUser;
}
public void saveAllUsers(ArrayList<QBUser> allUsers, boolean needRemoveOldData) {
if (needRemoveOldData) {
clearDB();
}
for (QBUser qbUser : allUsers) {
saveUser(qbUser);
}
Log.d(TAG, "saveAllUsers");
}
public void saveUser(QBUser qbUser) {
ContentValues cv = new ContentValues();
DbHelper dbHelper = new DbHelper(mContext);
SQLiteDatabase db = dbHelper.getWritableDatabase();
cv.put(DbHelper.DB_COLUMN_USER_FULL_NAME, qbUser.getFullName());
cv.put(DbHelper.DB_COLUMN_USER_LOGIN, qbUser.getLogin());
cv.put(DbHelper.DB_COLUMN_USER_ID, qbUser.getId());
cv.put(DbHelper.DB_COLUMN_USER_PASSWORD, qbUser.getPassword());
cv.put(DbHelper.DB_COLUMN_USER_TAG, qbUser.getTags().getItemsAsString());
db.insert(DbHelper.DB_TABLE_NAME, null, cv);
dbHelper.close();
}
public void clearDB() {
DbHelper dbHelper = new DbHelper(mContext);
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete(DbHelper.DB_TABLE_NAME, null, null);
dbHelper.close();
}
public ArrayList<QBUser> getUsersByIds(List<Integer> usersIds) {
ArrayList<QBUser> qbUsers = new ArrayList<>();
for (Integer userId : usersIds) {
if (getUserById(userId) != null) {
qbUsers.add(getUserById(userId));
}
}
return qbUsers;
}
}