package net.mms_projects.copy_it.databases; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import net.mms_projects.copy_it.models.HistoryContract; import net.mms_projects.copy_it.models.HistoryItem; import net.mms_projects.copy_it.models.HistoryListFactory; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class HistoryItemsDbHelper extends SQLiteOpenHelper { // If you change the database schema, you must increment the database // version. public static final int DATABASE_VERSION = 2; public static final String DATABASE_NAME = "history.db"; private static final String TEXT_TYPE = " TEXT"; private static final String NUMERIC_TYPE = " NUMERIC"; private static final String COMMA_SEP = ","; private static final String SQL_CREATE_ENTRIES = "CREATE TABLE " + HistoryContract.ItemEntry.TABLE_NAME + " (" + HistoryContract.ItemEntry._ID + " INTEGER PRIMARY KEY," + HistoryContract.ItemEntry.COLUMN_NAME_CONTENT + TEXT_TYPE + COMMA_SEP + HistoryContract.ItemEntry.COLUMN_NAME_DATE + NUMERIC_TYPE + COMMA_SEP + HistoryContract.ItemEntry.COLUMN_NAME_CHANGE + TEXT_TYPE + " )"; private static final String SQL_DELETE_ENTRIES = "DROP TABLE IF EXISTS " + HistoryContract.ItemEntry.TABLE_NAME; private final Logger log = LoggerFactory.getLogger(this.getClass()); public HistoryItemsDbHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase database) { database.execSQL(SQL_CREATE_ENTRIES); } @Override public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) { String[] projection = { HistoryContract.ItemEntry.COLUMN_NAME_CONTENT, HistoryContract.ItemEntry.COLUMN_NAME_DATE, HistoryContract.ItemEntry.COLUMN_NAME_CHANGE }; Cursor cursor = database.query(HistoryContract.ItemEntry.TABLE_NAME, projection, null, null, null, null, null); List<HistoryItem> items = HistoryListFactory.buildList(cursor); this.clearDatabase(database); this.onCreate(database); for (HistoryItem item : items) { log.debug("Upgrading item: {}, " + item.date); ContentValues values = new ContentValues(); values.put(HistoryContract.ItemEntry.COLUMN_NAME_CONTENT, item.content); values.put(HistoryContract.ItemEntry.COLUMN_NAME_DATE, item.date.getTime()); values.put(HistoryContract.ItemEntry.COLUMN_NAME_CHANGE, item.change.toString()); database.insert(HistoryContract.ItemEntry.TABLE_NAME, null, values); } } @Override public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { onUpgrade(db, oldVersion, newVersion); } public void clearDatabase(SQLiteDatabase database) { database.execSQL(SQL_DELETE_ENTRIES); } }