package org.maepaysoh.maepaysohsdk.db;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.util.Log;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.maepaysoh.maepaysohsdk.models.Party;
import org.maepaysoh.maepaysohsdk.utils.JsonUtils;
import static org.maepaysoh.maepaysohsdk.utils.Logger.LOGE;
import static org.maepaysoh.maepaysohsdk.utils.Logger.makeLogTag;
/**
* Created by yemyatthu on 8/7/15.
*/
// TODO: 8/7/15 USE SQL RELATIONSHIP IN PLACE OF JSON SERIALIZATION
public class PartyDao {
private SQLiteDatabase mMaepaysohDb;
private MaepaysohDbHelper mMaepaysohDbHelper;
private static final String TAG = makeLogTag(PartyDao.class);
public PartyDao(Context context) {
mMaepaysohDbHelper = new MaepaysohDbHelper(context);
}
public void open() throws SQLException {
mMaepaysohDb = mMaepaysohDbHelper.getWritableDatabase();
}
public void close() throws SQLException {
mMaepaysohDbHelper.close();
}
public boolean createParty(Party party) throws SQLException {
open();
ContentValues partyContentValues = new ContentValues();
partyContentValues.put(MaepaysohDbHelper.COLUMN_PARTY_ID, party.getPartyId());
partyContentValues.put(MaepaysohDbHelper.COLUMN_PARTY_NAME, party.getPartyName());
partyContentValues.put(MaepaysohDbHelper.COLUMN_PARTY_NAME_ENGLISH,
party.getPartyNameEnglish());
partyContentValues.put(MaepaysohDbHelper.COLUMN_PARTY_APPROVED_PARTY_NUMBER,
party.getApprovedPartyNumber());
partyContentValues.put(MaepaysohDbHelper.COLUMN_PARTY_ESTABLISHMENT_DATE,
party.getEstablishmentApprovalDate());
partyContentValues.put(MaepaysohDbHelper.COLUMN_PARTY_ESTABLISHMENT_APPROVAL_DATE,
party.getEstablishmentApprovalDate());
partyContentValues.put(MaepaysohDbHelper.COLUMN_PARTY_REGISTRATION_APPLICATION_DATE,
party.getRegistrationApplicationDate());
partyContentValues.put(MaepaysohDbHelper.COLUMN_PARTY_REGISTRATION_APPROVAL_DATE,
party.getRegistrationApprovalDate());
partyContentValues.put(MaepaysohDbHelper.COLUMN_PARTY_MEMBER_COUNT, party.getMemberCount());
partyContentValues.put(MaepaysohDbHelper.COLUMN_PARTY_POLICY, party.getPolicy());
partyContentValues.put(MaepaysohDbHelper.COLUMN_PARTY_REGION, party.getRegion());
partyContentValues.put(MaepaysohDbHelper.COLUMN_PARTY_PARTY_FLAG, party.getPartyFlag());
partyContentValues.put(MaepaysohDbHelper.COLUMN_PARTY_PARTY_SEAL, party.getPartySeal());
partyContentValues.put(MaepaysohDbHelper.COLUMN_PARTY_CONTACT,
JsonUtils.convertToJson(party.getContact()));
partyContentValues.put(MaepaysohDbHelper.COLUMN_PARTY_CHAIRMAN,
JsonUtils.convertToJson(party.getChairman()));
partyContentValues.put(MaepaysohDbHelper.COLUMN_PARTY_LEADERSHIP,
JsonUtils.convertToJson(party.getLeadership()));
partyContentValues.put(MaepaysohDbHelper.COLUMN_PARTY_HEADQUARTER, party.getHeadquarters());
mMaepaysohDb.beginTransaction();
try {
long insertId = mMaepaysohDb.insertWithOnConflict(MaepaysohDbHelper.TABLE_NAME_PARTY, null,
partyContentValues, SQLiteDatabase.CONFLICT_REPLACE);
mMaepaysohDb.setTransactionSuccessful();
} catch (SQLiteException e) {
LOGE(TAG, e.getLocalizedMessage());
} finally {
mMaepaysohDb.endTransaction();
}
return true;
}
public List<Party> getAllPartyData() throws SQLException {
open();
List<Party> parties = new ArrayList<>();
Cursor cursor =
mMaepaysohDb.query(MaepaysohDbHelper.TABLE_NAME_PARTY, null, null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
Party party = cursorToParty(cursor);
parties.add(party);
cursor.moveToNext();
}
cursor.close();
close();
return parties;
}
public Party getPartyById(String id) throws SQLException {
open();
Cursor cursor = mMaepaysohDb.query(MaepaysohDbHelper.TABLE_NAME_PARTY, null,
MaepaysohDbHelper.COLUMN_PARTY_ID + " = " + id, null, null, null, null);
Party party = cursorToParty(cursor);
cursor.close();
close();
return party;
}
public List<Party> searchPartiesFromDb(String keyword) throws SQLException {
open();
List<Party> parties = new ArrayList<>();
Cursor cursor = mMaepaysohDb.query(MaepaysohDbHelper.TABLE_NAME_PARTY, null,
MaepaysohDbHelper.COLUMN_PARTY_NAME + " LIKE " + "'%" + keyword + "%'" + " OR "
+ MaepaysohDbHelper.COLUMN_PARTY_NAME_ENGLISH + " LIKE " + "'%" + keyword + "%'", null,
null, null, null);
if (cursor.moveToFirst()) {
while (!cursor.isAfterLast()) {
Party party = cursorToParty(cursor);
parties.add(party);
cursor.moveToNext();
}
}
cursor.close();
close();
return parties;
}
private Party cursorToParty(Cursor cursor) {
Type type = new TypeToken<List<String>>() {
}.getType();
Party party = new Party();
party.setPartyId(
cursor.getString(cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_PARTY_ID)));
party.setPartyName(
cursor.getString(cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_PARTY_NAME)));
party.setPartyNameEnglish(cursor.getString(
cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_PARTY_NAME_ENGLISH)));
party.setEstablishmentApprovalDate(cursor.getString(
cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_PARTY_ESTABLISHMENT_APPROVAL_DATE)));
party.setRegistrationApprovalDate(cursor.getString(
cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_PARTY_REGISTRATION_APPROVAL_DATE)));
party.setRegistrationApplicationDate(cursor.getString(cursor.getColumnIndexOrThrow(
MaepaysohDbHelper.COLUMN_PARTY_REGISTRATION_APPLICATION_DATE)));
party.setApprovedPartyNumber(cursor.getString(
cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_PARTY_APPROVED_PARTY_NUMBER)));
party.setEstablishmentDate(cursor.getString(
cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_PARTY_ESTABLISHMENT_DATE)));
party.setMemberCount(cursor.getString(
cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_PARTY_MEMBER_COUNT)));
party.setHeadquarters(
cursor.getString(cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_PARTY_HEADQUARTER)));
party.setChairman(JsonUtils.convertToJava(
cursor.getString(cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_PARTY_CHAIRMAN)),
type));
party.setLeadership(JsonUtils.convertToJava(
cursor.getString(cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_PARTY_LEADERSHIP)),
type));
party.setContact(JsonUtils.convertToJava(
cursor.getString(cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_PARTY_CONTACT)),
type));
party.setPartyFlag(
cursor.getString(cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_PARTY_PARTY_FLAG)));
party.setPartySeal(
cursor.getString(cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_PARTY_PARTY_SEAL)));
party.setPolicy(
cursor.getString(cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_PARTY_POLICY)));
party.setRegion(
cursor.getString(cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_PARTY_REGION)));
return party;
}
}