package com.nolanlawson.logcat.db; import java.util.ArrayList; import java.util.List; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import com.nolanlawson.logcat.util.UtilLogger; public class CatlogDBHelper extends SQLiteOpenHelper { private static UtilLogger log = new UtilLogger(CatlogDBHelper.class); private static final String DB_NAME = "catlog.db"; private static final int DB_VERSION = 1; private static final String TABLE_NAME = "Filters"; private static final String COLUMN_ID = "_id"; private static final String COLUMN_TEXT = "filterText"; private SQLiteDatabase db; public CatlogDBHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); db = getWritableDatabase(); } @Override public void onCreate(SQLiteDatabase db) { String createSql = "create table if not exists " + TABLE_NAME + " (" + COLUMN_ID + " integer not null primary key autoincrement, " + COLUMN_TEXT + " text);"; String indexSql = "create unique index if not exists index_game_id on " + TABLE_NAME + " (" + COLUMN_TEXT + ");"; db.execSQL(createSql); db.execSQL(indexSql); } @Override public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { // do nothing } public List<FilterItem> findFilterItems() { synchronized (CatlogDBHelper.class) { List<FilterItem> filters = new ArrayList<FilterItem>(); Cursor cursor = null; try { cursor = db.query(TABLE_NAME, new String[]{COLUMN_ID, COLUMN_TEXT}, null, null, null, null, null); while (cursor.moveToNext()) { FilterItem filterItem = FilterItem.create(cursor.getInt(0), cursor.getString(1)); filters.add(filterItem); } } finally { if (cursor != null) { cursor.close(); } } log.d("fetched %d filters", filters.size()); return filters; } } public void deleteFilter(int id) { synchronized (CatlogDBHelper.class) { int rows = db.delete(TABLE_NAME, COLUMN_ID + "=" + id, null); log.d("deleted %d filters with id %d", rows, id); } } public FilterItem addFilter(String text) { synchronized (CatlogDBHelper.class) { ContentValues contentValues = new ContentValues(); contentValues.put(COLUMN_TEXT, text); long result = db.insert(TABLE_NAME, null, contentValues); log.d("inserted filter with text %s: %g", text, result); if (result == -1) { log.d("attempted to insert duplicate filter"); return null; } Cursor cursor = null; try { String selection = COLUMN_TEXT +"=?"; String[] selectionArgs = {text}; cursor = db.query(TABLE_NAME, new String[]{COLUMN_ID, COLUMN_TEXT}, selection, selectionArgs, null, null, null); cursor.moveToNext(); return FilterItem.create(cursor.getInt(0), cursor.getString(1)); } finally { if (cursor != null) { cursor.close(); } } } } }