package org.maepaysoh.maepaysohsdk.db; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; 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.util.ArrayList; import java.util.List; import org.maepaysoh.maepaysohsdk.models.FAQ; 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 FaqDao { private SQLiteDatabase mMaepaysohDb; private MaepaysohDbHelper mMaepaysohDbHelper; private static final String TAG = makeLogTag(FaqDao.class); public FaqDao(Context context) { mMaepaysohDbHelper = new MaepaysohDbHelper(context); } public void open() throws SQLException { mMaepaysohDb = mMaepaysohDbHelper.getWritableDatabase(); } public void close() throws SQLException { mMaepaysohDbHelper.close(); } public boolean createFaq(FAQ FAQ) throws SQLException { open(); ContentValues faqContentValues = new ContentValues(); faqContentValues.put(MaepaysohDbHelper.COLUMN_FAQ_ID, FAQ.getId()); faqContentValues.put(MaepaysohDbHelper.COLUMN_FAQ_question, FAQ.getQuestion()); faqContentValues.put(MaepaysohDbHelper.COLUMN_FAQ_answer, FAQ.getAnswer()); faqContentValues.put(MaepaysohDbHelper.COLUMN_FAQ_basis, FAQ.getBasis()); faqContentValues.put(MaepaysohDbHelper.COLUMN_FAQ_type, FAQ.getType()); faqContentValues.put(MaepaysohDbHelper.COLUMN_FAQ_url, FAQ.getUrl()); faqContentValues.put(MaepaysohDbHelper.COLUMN_FAQ_sections, JsonUtils.convertToJson(FAQ.getSections())); mMaepaysohDb.beginTransaction(); try { long insertId = mMaepaysohDb.insertWithOnConflict(MaepaysohDbHelper.TABLE_NAME_FAQ, null, faqContentValues, SQLiteDatabase.CONFLICT_REPLACE); mMaepaysohDb.setTransactionSuccessful(); } catch (SQLiteException e) { LOGE(TAG, e.getLocalizedMessage()); } finally { mMaepaysohDb.endTransaction(); } return true; } public List<FAQ> getAllFaqData() throws SQLException { open(); List<FAQ> FAQs = new ArrayList<>(); Cursor cursor = mMaepaysohDb.query(MaepaysohDbHelper.TABLE_NAME_FAQ, null, null, null, null, null, null); cursor.moveToFirst(); while (!cursor.isAfterLast()) { FAQ FAQ = cursorToFaq(cursor); FAQs.add(FAQ); cursor.moveToNext(); } cursor.close(); close(); return FAQs; } public List<FAQ> searchFAQsFromDb(String keyword) { open(); List<FAQ> FAQs = new ArrayList<>(); Cursor cursor = mMaepaysohDb.query(MaepaysohDbHelper.TABLE_NAME_FAQ, null, MaepaysohDbHelper.COLUMN_FAQ_question + " LIKE " + "'%" + keyword + "%'", null, null, null, null); if (cursor.moveToFirst()) { while (!cursor.isAfterLast()) { FAQ FAQ = cursorToFaq(cursor); FAQs.add(FAQ); cursor.moveToNext(); } } cursor.close(); close(); return FAQs; } public FAQ getFaqById(String id) throws SQLException { open(); Cursor cursor = mMaepaysohDb.query(MaepaysohDbHelper.TABLE_NAME_FAQ, null, MaepaysohDbHelper.COLUMN_FAQ_ID + " = " + id, null, null, null, null); FAQ FAQ = cursorToFaq(cursor); cursor.close(); close(); return FAQ; } private FAQ cursorToFaq(Cursor cursor) { Type type = new TypeToken<List<String>>() { }.getType(); FAQ FAQ = new FAQ(); FAQ.setId(cursor.getString(cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_FAQ_ID))); FAQ.setQuestion( cursor.getString(cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_FAQ_question))); FAQ.setAnswer( cursor.getString(cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_FAQ_answer))); FAQ.setBasis( cursor.getString(cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_FAQ_basis))); FAQ.setSections(JsonUtils.convertToJava( cursor.getString(cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_FAQ_sections)), type)); FAQ.setType(cursor.getString(cursor.getColumnIndexOrThrow(MaepaysohDbHelper.COLUMN_FAQ_type))); return FAQ; } }