package cm.android.common.db; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import android.content.ContentResolver; import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; import android.provider.BaseColumns; public class BaseDao { private static final Logger logger = LoggerFactory.getLogger("db"); protected ContentResolver resolver = null; protected Uri contentUri; protected String[] projection; public void register(Context context, ContentObserver observer) { context.getContentResolver() .registerContentObserver(contentUri, true, observer); } public void unregister(Context context, ContentObserver observer) { context.getContentResolver().unregisterContentObserver(observer); } public BaseDao(Uri uri, String[] projection, Context context) { resolver = context.getContentResolver(); this.contentUri = uri; this.projection = projection.clone(); } public int deleteAll() { int count = delete(null, null); return count; } protected long insert(ContentValues values) { Uri uri = resolver.insert(contentUri, values); String itemId = uri.getPathSegments().get(1); return Integer.valueOf(itemId).longValue(); } public int update(int id, ContentValues values) { Uri uri = ContentUris.withAppendedId(contentUri, id); int count = resolver.update(uri, values, null, null); return count; } public int update(ContentValues values, String where, String[] selectionArgs) { int count = resolver.update(contentUri, values, where, selectionArgs); return count; } public int delete(int id) { int count = delete(id, null, null); return count; } public int delete(int id, String where, String[] selectionArgs) { Uri uri = ContentUris.withAppendedId(contentUri, id); int count = delete(uri, where, selectionArgs); return count; } public int delete(Uri uri, String where, String[] selectionArgs) { int count = resolver.delete(uri, where, selectionArgs); return count; } public void upsert(ContentValues values, String selection, String[] selectionArgs) { Cursor cursor = null; // try { cursor = query(selection, selectionArgs, null); // } catch (RuntimeException e) { // logger.error(e.getMessage(), e); // } try { if (cursor != null && cursor.moveToFirst()) { int id = parseId(cursor); update(id, values); } else { insert(values); } } finally { DBUtil.closeQuietly(cursor); } } protected Cursor query(String selection, String[] selectionArgs, String sortOrder) { Cursor cursor = resolver.query(contentUri, projection, selection, selectionArgs, sortOrder); return cursor; } protected int delete(String selection, String[] selectionArgs) { int count = resolver.delete(contentUri, selection, selectionArgs); return count; } protected int parseId(Cursor cursor) { int id = cursor.getInt(cursor.getColumnIndex(BaseColumns._ID)); return id; } }