package org.iilab.pb.data;
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.List;
import org.iilab.pb.common.AppConstants;
import org.iilab.pb.model.HelpPage;
import org.iilab.pb.model.Page;
import org.iilab.pb.model.PageAction;
import org.iilab.pb.model.PageChecklist;
import org.iilab.pb.model.PageItem;
import org.iilab.pb.model.PageStatus;
import org.iilab.pb.model.PageTimer;
/**
* Created by aoe on 12/12/13.
*/
public class PBDatabase {
private static final String TAG = PBDatabase.class.getSimpleName();
private DatabaseHelper dbHelper;
private SQLiteDatabase db;
private Context mContext;
private static final String DATABASE_NAME = "pb_db";
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context ctx) {
super(ctx, DATABASE_NAME, null, AppConstants.DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
PageDbManager.createTable(db);
PageStatusDbManager.createTable(db);
PageItemDbManager.createTable(db);
PageActionDbManager.createTable(db);
PageTimerDbManager.createTable(db);
PageChecklistDbManager.createTable(db);
HelpPageDbManager.createTable(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
PageDbManager.dropTable(db);
PageStatusDbManager.dropTable(db);
PageItemDbManager.dropTable(db);
PageActionDbManager.dropTable(db);
PageTimerDbManager.dropTable(db);
PageChecklistDbManager.dropTable(db);
HelpPageDbManager.dropTable(db);
onCreate(db);
}
}
/**
* Constructor
*/
public PBDatabase(Context ctx) {
mContext = ctx;
}
public PBDatabase open() throws SQLException {
dbHelper = new DatabaseHelper(mContext);
db = dbHelper.getWritableDatabase();
return this;
}
public void close() {
dbHelper.close();
}
public void insertOrUpdatePage(Page page) {
PageDbManager.insertOrUpdate(this.db, page);
deletePageActions(page.getId(), page.getLang());
deletePageItems(page.getId(), page.getLang());
deletePageStatus(page.getId(), page.getLang());
deletePageTimer(page.getId(), page.getLang());
deletePageChecklist(page.getId(), page.getLang());
if (page.getStatus() != null) {
for (PageStatus status : page.getStatus())
insertPageStatus(status, page.getId(), page.getLang());
}
if (page.getAction() != null) {
for (PageAction action : page.getAction())
insertPageAction(action, page.getId(), page.getLang());
}
if (page.getItems() != null) {
for (PageItem item : page.getItems())
insertPageItem(item, page.getId(), page.getLang());
}
if(page.getTimers() != null){
insertPageTimer(page.getTimers(), page.getId(), page.getLang());
}
if (page.getChecklist() != null) {
for (PageChecklist cl : page.getChecklist())
insertPageChecklist(cl, page.getId(), page.getLang());
}
}
public Page retrievePage(String pageId, String lang) {
return PageDbManager.retrieve(this.db, pageId, lang);
}
public List<Page> retrievePages(String lang) {
return PageDbManager.retrieve(this.db, lang);
}
/*
Page-Action methods
*/
public void insertPageAction(PageAction action, String pageId, String lang) {
PageActionDbManager.insert(this.db, action, pageId, lang);
}
public List<PageAction> retrievePageAction(String pageId, String lang) {
return PageActionDbManager.retrieve(this.db, pageId, lang);
}
public void deletePageActions(String pageId, String lang){
PageActionDbManager.delete(this.db, pageId, lang);
}
/*
Page-Item methods
*/
public void insertPageItem(PageItem item, String pageId, String lang) {
PageItemDbManager.insert(this.db, item, pageId, lang);
}
public List<PageItem> retrievePageItem(String pageId, String lang) {
return PageItemDbManager.retrieve(this.db, pageId, lang);
}
public void deletePageItems(String pageId, String lang){
PageItemDbManager.delete(this.db, pageId, lang);
}
/*
Page-Status methods
*/
public void insertPageStatus(PageStatus status, String pageId, String lang) {
PageStatusDbManager.insert(this.db, status, pageId, lang);
}
public List<PageStatus> retrievePageStatus(String pageId, String lang) {
return PageStatusDbManager.retrieve(this.db, pageId, lang);
}
public void deletePageStatus(String pageId, String lang){
PageStatusDbManager.delete(this.db, pageId, lang);
}
/*
Page-Timers methods
*/
public void insertPageTimer(PageTimer timer, String pageId, String lang) {
PageTimerDbManager.insert(this.db, timer, pageId, lang);
}
public PageTimer retrievePageTimer(String pageId, String lang) {
return PageTimerDbManager.retrieve(this.db, pageId, lang);
}
public void deletePageTimer(String pageId, String lang){
PageTimerDbManager.delete(this.db, pageId, lang);
}
/*
Page-Checklist methods
*/
public void insertPageChecklist(PageChecklist cList, String pageId, String lang) {
PageChecklistDbManager.insert(this.db, cList, pageId, lang);
}
public List<PageChecklist> retrievePageChecklist(String pageId, String lang) {
return PageChecklistDbManager.retrieve(this.db, pageId, lang);
}
public void deletePageChecklist(String pageId, String lang){
PageChecklistDbManager.delete(this.db, pageId, lang);
}
/*
Page-HelpPage methods
*/
public void insertOrUpdateHelpPage(HelpPage page) {
HelpPageDbManager.insertOrUpdate(this.db, page);
deletePageItems(page.getId(), page.getLang());
if (page.getItems() != null) {
for (PageItem item : page.getItems())
insertPageItem(item, page.getId(), page.getLang());
}
}
public List<HelpPage> retrieveHelpPage(String lang) {
return HelpPageDbManager.retrieve(this.db, lang);
}
public void deleteHelpPage(String pageId, String lang){
HelpPageDbManager.delete(this.db, pageId, lang);
}
}