package org.iilab.pb.data;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteStatement;
import java.util.ArrayList;
import java.util.List;
import org.iilab.pb.common.AppConstants;
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 1/5/14.
*/
public class PageDbManager {
private static final String TAG = PageDbManager.class.getSimpleName();
private static final String TABLE_PAGE = "page_table";
private static final String PAGE_ID = "page_id";
private static final String PAGE_LANGUAGE = "page_language";
private static final String PAGE_TYPE = "page_type";
private static final String PAGE_TITLE = "page_title";
private static final String PAGE_INTRODUCTION = "page_introduction";
private static final String PAGE_WARNING = "page_warning";
private static final String PAGE_COMPONENT = "page_component";
private static final String PAGE_CONTENT = "page_content";
private static final String PAGE_SUCCESS_ID = "page_success_id";
private static final String PAGE_FAILED_ID = "page_failed_id";
private static final String PAGE_HEADING = "page_heading";
private static final String PAGE_SECTION_ORDER = "page_section_order";
private static final String CREATE_TABLE_WIZARD_PAGE = "create table " + TABLE_PAGE + " ( "
+ AppConstants.TABLE_PRIMARY_KEY + " integer primary key autoincrement, " + PAGE_ID + " text, " + PAGE_LANGUAGE + " text, "
+ PAGE_TYPE + " text, " + PAGE_TITLE + " text, " + PAGE_INTRODUCTION + " text, " + PAGE_WARNING + " text, " + PAGE_COMPONENT + " text, "
+ PAGE_CONTENT + " text, " + PAGE_SUCCESS_ID + " text, " + PAGE_FAILED_ID + " text, " + PAGE_HEADING + " text, " + PAGE_SECTION_ORDER + " text);";
private static final String INSERT_SQL = "insert into " + TABLE_PAGE + " (" + PAGE_ID + ", " + PAGE_LANGUAGE + ", " + PAGE_TYPE + ", "
+ PAGE_TITLE + ", " + PAGE_INTRODUCTION + ", " + PAGE_WARNING + ", " + PAGE_COMPONENT + ", " + PAGE_CONTENT + ", " + PAGE_SUCCESS_ID
+ ", " + PAGE_FAILED_ID + ", " + PAGE_HEADING + ", " + PAGE_SECTION_ORDER + ") values (?,?,?,?,?,?,?,?,?,?,?,?)";
public static void createTable(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_WIZARD_PAGE);
}
public static void dropTable(SQLiteDatabase db) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_PAGE);
}
public static long insert(SQLiteDatabase db, Page page) throws SQLException {
SQLiteStatement insertStatement = db.compileStatement(INSERT_SQL);
if(page.getId() != null)
insertStatement.bindString(1, page.getId());
if(page.getLang() != null)
insertStatement.bindString(2, page.getLang());
if(page.getType() != null)
insertStatement.bindString(3, page.getType());
if(page.getTitle() != null)
insertStatement.bindString(4, page.getTitle());
if(page.getIntroduction() != null)
insertStatement.bindString(5, page.getIntroduction());
if(page.getWarning() != null)
insertStatement.bindString(6, page.getWarning());
if(page.getComponent() != null)
insertStatement.bindString(7, page.getComponent());
if(page.getContent() != null)
insertStatement.bindString(8, page.getContent());
if(page.getSuccessId() != null)
insertStatement.bindString(9, page.getSuccessId());
if(page.getFailedId() != null)
insertStatement.bindString(10, page.getFailedId());
if(page.getHeading() != null)
insertStatement.bindString(11, page.getHeading());
if(page.getSectionOrder() != null)
insertStatement.bindString(12, page.getSectionOrder());
return insertStatement.executeInsert();
}
public static Page retrieve(SQLiteDatabase db, String pageId, String lang) throws SQLException {
Page page = null;
Cursor c = db.query(TABLE_PAGE, null, PAGE_ID + "=? AND " + PAGE_LANGUAGE + "=?", new String[]{pageId, lang}, null, null, null);
if (c != null && c.getCount() > 0) {
c.moveToFirst();
String pageType = c.getString(c.getColumnIndex(PAGE_TYPE));
String pageTitle = c.getString(c.getColumnIndex(PAGE_TITLE));
String pageIntro = c.getString(c.getColumnIndex(PAGE_INTRODUCTION));
String pageWarning = c.getString(c.getColumnIndex(PAGE_WARNING));
String pageComponent = c.getString(c.getColumnIndex(PAGE_COMPONENT));
String pageContent = c.getString(c.getColumnIndex(PAGE_CONTENT));
String successId = c.getString(c.getColumnIndex(PAGE_SUCCESS_ID));
String failedId = c.getString(c.getColumnIndex(PAGE_FAILED_ID));
String heading = c.getString(c.getColumnIndex(PAGE_HEADING));
String secOrder = c.getString(c.getColumnIndex(PAGE_SECTION_ORDER));
List<PageStatus> statusList = PageStatusDbManager.retrieve(db, pageId, lang);
List<PageAction> actionList = PageActionDbManager.retrieve(db, pageId, lang);
List<PageItem> itemList = PageItemDbManager.retrieve(db, pageId, lang);
PageTimer timer = PageTimerDbManager.retrieve(db, pageId, lang);
List<PageChecklist> checkList = PageChecklistDbManager.retrieve(db, pageId, lang);
page = new Page(pageId, lang, pageType, pageTitle, pageIntro, pageWarning, pageComponent, statusList, actionList,
itemList, pageContent, timer, successId, failedId, checkList, heading, secOrder);
}
c.close();
return page;
}
public static List<Page> retrieve(SQLiteDatabase db, String lang) throws SQLException {
List<Page> pageList = new ArrayList<Page>();
Cursor c = db.query(TABLE_PAGE, null, PAGE_LANGUAGE + "=?", new String[]{lang}, null, null, null);
if (c != null && c.getCount() > 0) {
c.moveToFirst();
while (!c.isAfterLast()) {
String pageId = c.getString(c.getColumnIndex(PAGE_ID));
String pageType = c.getString(c.getColumnIndex(PAGE_TYPE));
String pageTitle = c.getString(c.getColumnIndex(PAGE_TITLE));
String pageIntro = c.getString(c.getColumnIndex(PAGE_INTRODUCTION));
String pageWarning = c.getString(c.getColumnIndex(PAGE_WARNING));
String pageComponent = c.getString(c.getColumnIndex(PAGE_COMPONENT));
String pageContent = c.getString(c.getColumnIndex(PAGE_CONTENT));
String successId = c.getString(c.getColumnIndex(PAGE_SUCCESS_ID));
String failedId = c.getString(c.getColumnIndex(PAGE_FAILED_ID));
String heading = c.getString(c.getColumnIndex(PAGE_HEADING));
String secOrder = c.getString(c.getColumnIndex(PAGE_SECTION_ORDER));
List<PageStatus> statusList = PageStatusDbManager.retrieve(db, pageId, lang);
List<PageAction> actionList = PageActionDbManager.retrieve(db, pageId, lang);
List<PageItem> itemList = PageItemDbManager.retrieve(db, pageId, lang);
PageTimer timer = PageTimerDbManager.retrieve(db, pageId, lang);
List<PageChecklist> checkList = PageChecklistDbManager.retrieve(db, pageId, lang);
Page page = new Page(pageId, lang, pageType, pageTitle, pageIntro, pageWarning, pageComponent,
statusList, actionList, itemList, pageContent, timer, successId, failedId, checkList, heading, secOrder);
pageList.add(page);
c.moveToNext();
}
}
c.close();
return pageList;
}
public static long update(SQLiteDatabase db, Page page) throws SQLException {
ContentValues cv = new ContentValues();
cv.put(PAGE_TYPE, page.getType());
cv.put(PAGE_TITLE, page.getTitle());
cv.put(PAGE_INTRODUCTION, page.getIntroduction());
cv.put(PAGE_WARNING, page.getWarning());
cv.put(PAGE_COMPONENT, page.getComponent());
cv.put(PAGE_CONTENT, page.getContent());
cv.put(PAGE_SUCCESS_ID, page.getSuccessId());
cv.put(PAGE_FAILED_ID, page.getFailedId());
cv.put(PAGE_HEADING, page.getHeading());
cv.put(PAGE_SECTION_ORDER, page.getSectionOrder());
return db.update(TABLE_PAGE, cv, PAGE_ID + "=? AND " + PAGE_LANGUAGE + "=?", new String[]{page.getId(), page.getLang()});
}
public static boolean isExist(SQLiteDatabase db, String pageId, String lang) throws SQLException {
boolean itemExist = false;
Cursor c = db.query(TABLE_PAGE, null, PAGE_ID + "=? AND " + PAGE_LANGUAGE + "=?", new String[]{pageId, lang}, null, null, null);
if ((c != null) && (c.getCount() > 0)) {
itemExist = true;
}
c.close();
return itemExist;
}
public static void insertOrUpdate(SQLiteDatabase db, Page page){
if(isExist(db, page.getId(), page.getLang())){
update(db, page);
}
else{
insert(db, page);
}
}
public static int delete(SQLiteDatabase db, String pageId, String lang){
return db.delete(TABLE_PAGE, PAGE_ID + "=? AND " + PAGE_LANGUAGE + "=?", new String[]{pageId, lang});
}
}