package jm.org.data.area; import android.content.ContentProvider; import android.content.ContentValues; import android.content.UriMatcher; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteQueryBuilder; import android.net.Uri; import android.util.Log; public class AreaProvider extends ContentProvider { public static final String AUTHORITY = "content://jm.org.data.area.AreaProvider"; public static final Uri CONTENT_URI = Uri.parse(AUTHORITY); public static final Uri COUNTRY_URI = Uri.parse(AUTHORITY+"/"+DBConstants.COUNTRY); public static final Uri INDICATOR_URI = Uri.parse(AUTHORITY+"/"+DBConstants.INDICATOR); public static final Uri SRCH_URI = Uri.parse(AUTHORITY+"/"+DBConstants.SEARCH); public static final Uri IDS_SEARCH_TABLE_URI = Uri.parse(AUTHORITY+"/"+DBConstants.IDS_SEARCH_TABLE); public static final Uri BING_SEARCH_TABLE_URI = Uri.parse(AUTHORITY+"/"+DBConstants.BING_SEARCH_TABLE); public static final Uri API_URI = Uri.parse(AUTHORITY+"/"+DBConstants.API); public static final Uri WB_DATA_URI = Uri.parse(AUTHORITY+"/"+DBConstants.WB_DATA); public static final Uri SEARCH_COUNTRY_URI = Uri.parse(AUTHORITY+"/"+DBConstants.SEARCH_COUNTRY); public static final Uri PERIOD_URI = Uri.parse(AUTHORITY+"/"+DBConstants.PERIOD); public static final Uri BING_SEARCH_RESULTS_URI = Uri.parse(AUTHORITY+"/"+DBConstants.BING_SEARCH_RESULTS); public static final Uri IDS_SEARCH_PARAMS_URI = Uri.parse(AUTHORITY+"/"+DBConstants.IDS_SEARCH_PARAMS); public static final Uri IDS_SEARCH_RESULTS_URI = Uri.parse(AUTHORITY+"/"+DBConstants.IDS_SEARCH_RESULTS); public static final Uri IDS_DATA_URI = Uri.parse(AUTHORITY+"/"+DBConstants.IDS_DATA); public static final Uri IDS_AUTHOR_URI = Uri.parse(AUTHORITY+"/"+DBConstants.IDS_AUTHOR); public static final Uri IDS_DOC_THEME_URI = Uri.parse(AUTHORITY+"/"+DBConstants.IDS_DOC_THEME); public static final Uri IDS_THEME_URI = Uri.parse(AUTHORITY+"/"+DBConstants.IDS_THEME); final static int COUNTRY = 1; final static int INDICATOR = 2; final static int SEARCH = 3; final static int IDS_SEARCH_TABLE = 4; final static int BING_SEARCH_TABLE = 5; final static int API = 6; final static int WB_DATA = 7; final static int SEARCH_COUNTRY = 8; final static int PERIOD = 9; final static int BING_SEARCH_RESULTS = 10; final static int IDS_SEARCH_PARAMS = 11; final static int IDS_SEARCH_RESULTS = 12; final static int IDS_DATA = 13; final static int IDS_AUTHOR = 14; final static int IDS_DOC_THEME = 15; final static int IDS_THEME = 16; final static int COUNTRY_ID = 17; final static int INDICATOR_ID = 18; final static int SEARCH_ID = 19; final static int IDS_SEARCH_TABLE_ID = 20; final static int BING_SEARCH_TABLE_ID = 21; final static int API_ID = 22; final static int WB_DATA_ID = 23; final static int SEARCH_COUNTRY_ID = 24; final static int PERIOD_ID = 25; final static int BING_SEARCH_RESULTS_ID = 26; final static int IDS_SEARCH_PARAMS_ID = 27; final static int IDS_SEARCH_RESULTS_ID = 28; final static int IDS_DATA_ID = 29; final static int IDS_AUTHOR_ID = 30; final static int IDS_DOC_THEME_ID = 31; final static int IDS_THEME_ID = 32; private SQLiteDatabase db; AreaDB dbHelper; private static final String TAG = AreaProvider.class.getSimpleName(); private final static UriMatcher uriMatcher; static{ uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI(AUTHORITY, DBConstants.COUNTRY, COUNTRY); uriMatcher.addURI(AUTHORITY, DBConstants.COUNTRY+"/#", COUNTRY_ID); uriMatcher.addURI(AUTHORITY, DBConstants.INDICATOR, INDICATOR); uriMatcher.addURI(AUTHORITY, DBConstants.INDICATOR+"/#", INDICATOR_ID); uriMatcher.addURI(AUTHORITY, DBConstants.SEARCH, SEARCH); uriMatcher.addURI(AUTHORITY, DBConstants.SEARCH+"/#", SEARCH_ID); uriMatcher.addURI(AUTHORITY, DBConstants.IDS_SEARCH_TABLE, IDS_SEARCH_TABLE); uriMatcher.addURI(AUTHORITY, DBConstants.IDS_SEARCH_TABLE+"/#", IDS_SEARCH_TABLE_ID); uriMatcher.addURI(AUTHORITY, DBConstants.BING_SEARCH_TABLE, BING_SEARCH_TABLE); uriMatcher.addURI(AUTHORITY, DBConstants.BING_SEARCH_TABLE+"/#", BING_SEARCH_TABLE_ID); uriMatcher.addURI(AUTHORITY, DBConstants.API, API); uriMatcher.addURI(AUTHORITY, DBConstants.API+"/#", API_ID); uriMatcher.addURI(AUTHORITY, DBConstants.WB_DATA, WB_DATA); uriMatcher.addURI(AUTHORITY, DBConstants.WB_DATA+"/#", WB_DATA_ID); uriMatcher.addURI(AUTHORITY, DBConstants.SEARCH_COUNTRY, SEARCH_COUNTRY); uriMatcher.addURI(AUTHORITY, DBConstants.SEARCH_COUNTRY+"/#", SEARCH_COUNTRY_ID); uriMatcher.addURI(AUTHORITY, DBConstants.PERIOD, PERIOD); uriMatcher.addURI(AUTHORITY, DBConstants.PERIOD+"/#", PERIOD_ID); uriMatcher.addURI(AUTHORITY, DBConstants.BING_SEARCH_RESULTS, BING_SEARCH_RESULTS); uriMatcher.addURI(AUTHORITY, DBConstants.BING_SEARCH_RESULTS+"/#", BING_SEARCH_RESULTS_ID); uriMatcher.addURI(AUTHORITY, DBConstants.IDS_SEARCH_PARAMS, IDS_SEARCH_PARAMS); uriMatcher.addURI(AUTHORITY, DBConstants.IDS_SEARCH_PARAMS+"/#", IDS_SEARCH_PARAMS_ID); uriMatcher.addURI(AUTHORITY, DBConstants.IDS_SEARCH_RESULTS, IDS_SEARCH_RESULTS); uriMatcher.addURI(AUTHORITY, DBConstants.IDS_SEARCH_RESULTS+"/#", IDS_SEARCH_RESULTS_ID); uriMatcher.addURI(AUTHORITY, DBConstants.IDS_DATA, IDS_DATA); uriMatcher.addURI(AUTHORITY, DBConstants.IDS_DATA+"/#", IDS_DATA_ID); uriMatcher.addURI(AUTHORITY, DBConstants.IDS_AUTHOR, IDS_AUTHOR); uriMatcher.addURI(AUTHORITY, DBConstants.IDS_AUTHOR+"/#", IDS_AUTHOR_ID); uriMatcher.addURI(AUTHORITY, DBConstants.IDS_DOC_THEME, IDS_DOC_THEME); uriMatcher.addURI(AUTHORITY, DBConstants.IDS_DOC_THEME+"/#", IDS_DOC_THEME_ID); uriMatcher.addURI(AUTHORITY, DBConstants.IDS_THEME, IDS_THEME); uriMatcher.addURI(AUTHORITY, DBConstants.IDS_THEME+"/#", IDS_THEME_ID); } @Override public boolean onCreate() { dbHelper = new AreaDB(getContext()); return true; } @Override public Uri insert(Uri uri, ContentValues values) { long id = 0; db = dbHelper.getWritableDatabase(); id = db.insertOrThrow(uri.getLastPathSegment(), null, values); Log.d(TAG, String.format("Insert Successfull into table %s", uri.toString())); if(id!= -1){ uri = Uri.withAppendedPath(uri, Long.toString(id)); //uri = Uri.parse(Long.toString(id)); getContext().getContentResolver().notifyChange(uri, null); }else{ uri = Uri.withAppendedPath(uri, Long.toString(id)); //uri = Uri.parse(Long.toString(id)); getContext().getContentResolver().notifyChange(uri, null); } if(db.isOpen()){ //db.close(); } //db.close(); //getContext().getContentResolver().notifyChange(uri, null); return uri; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { int count = 0; db = dbHelper.getWritableDatabase(); count = db.update(uri.getLastPathSegment(), values, selection, selectionArgs); /*switch(uriMatcher.match(uri)){ case COUNTRY: count = db.update(DBConstants.COUNTRY, values, selection, selectionArgs); break; case INDICATOR: count = db.update(DBConstants.INDICATOR, values, selection, selectionArgs); break; case SEARCH: count = db.update(DBConstants.SEARCH, values, selection, selectionArgs); break; case IDS_SEARCH_TABLE: count = db.update(DBConstants.IDS_SEARCH_TABLE, values, selection, selectionArgs); break; case BING_SEARCH_TABLE: count = db.update(DBConstants.BING_SEARCH_TABLE, values, selection, selectionArgs); break; case API: count = db.update(DBConstants.API, values, selection, selectionArgs); break; case WB_DATA: count = db.update(DBConstants.WB_DATA, values, selection, selectionArgs); break; case SEARCH_COUNTRY: count = db.update(DBConstants.IDS_SEARCH_TABLE, values, selection, selectionArgs); break; case PERIOD: count = db.update(DBConstants.PERIOD, values, selection, selectionArgs); break; case BING_SEARCH_RESULTS: count = db.update(DBConstants.BING_SEARCH_RESULTS, values, selection, selectionArgs); break; case IDS_SEARCH_PARAMS: count = db.update(DBConstants.IDS_SEARCH_PARAMS, values, selection, selectionArgs); break; case IDS_SEARCH_RESULTS: count = db.update(DBConstants.IDS_SEARCH_RESULTS, values, selection, selectionArgs); break; case IDS_DATA: count = db.update(DBConstants.IDS_DATA, values, selection, selectionArgs); break; case IDS_AUTHOR: count = db.update(DBConstants.IDS_AUTHOR, values, selection, selectionArgs); break; case IDS_DOC_THEME: count = db.update(DBConstants.IDS_DOC_THEME, values, selection, selectionArgs); break; case IDS_THEME: count = db.update(DBConstants.IDS_THEME, values, selection, selectionArgs); break; }*/ db.close(); getContext().getContentResolver().notifyChange(uri, null); return count; } public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String groupBy, String having, String sortOrder) { if(db == null){ db = dbHelper.getReadableDatabase(); }else if (!db.isOpen()){ db = dbHelper.getReadableDatabase(); } SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); Cursor cursor = null; qb.setTables(uri.getLastPathSegment()); if (db.isOpen()){ cursor = qb.query(db, projection, selection, selectionArgs, groupBy, having, sortOrder); }else{ Log.d(TAG, "DB is closed for some reason"); } //db.close(); cursor.setNotificationUri(getContext().getContentResolver(), uri); return cursor; } @Override public int delete(Uri uri, String whereClause, String[] whereArgs) { int count = 0; db = dbHelper.getWritableDatabase(); /*switch(uriMatcher.match(uri)){ case COUNTRY: count = db.delete(DBConstants.COUNTRY, whereClause, whereArgs); break; case INDICATOR: count = db.delete(DBConstants.INDICATOR, whereClause, whereArgs); break; case SEARCH: count = db.delete(DBConstants.SEARCH, whereClause, whereArgs); break; case IDS_SEARCH_TABLE: count = db.delete(DBConstants.IDS_SEARCH_TABLE, whereClause, whereArgs); break; case BING_SEARCH_TABLE: count = db.delete(DBConstants.BING_SEARCH_TABLE, whereClause, whereArgs); break; case API: count = db.delete(DBConstants.API, whereClause, whereArgs); break; case WB_DATA: count = db.delete(DBConstants.WB_DATA, whereClause, whereArgs); break; case SEARCH_COUNTRY: count = db.delete(DBConstants.IDS_SEARCH_TABLE, whereClause, whereArgs); break; case PERIOD: count = db.delete(DBConstants.PERIOD, whereClause, whereArgs); break; case BING_SEARCH_RESULTS: count = db.delete(DBConstants.BING_SEARCH_RESULTS, whereClause, whereArgs); break; case IDS_SEARCH_PARAMS: count = db.delete(DBConstants.IDS_SEARCH_PARAMS, whereClause, whereArgs); break; case IDS_SEARCH_RESULTS: count = db.delete(DBConstants.IDS_SEARCH_RESULTS, whereClause, whereArgs); break; case IDS_DATA: count = db.delete(DBConstants.IDS_DATA, whereClause, whereArgs); break; case IDS_AUTHOR: count = db.delete(DBConstants.IDS_AUTHOR, whereClause, whereArgs); break; case IDS_DOC_THEME: count = db.delete(DBConstants.IDS_DOC_THEME, whereClause, whereArgs); break; case IDS_THEME: count = db.delete(DBConstants.IDS_THEME, whereClause, whereArgs); break; }*/ count = db.delete(uri.getLastPathSegment(), whereClause, whereArgs); //db.close(); getContext().getContentResolver().notifyChange(uri, null); return count; } @Override public String getType(Uri uri) { // TODO Auto-generated method stub return null; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { if(db == null){ db = dbHelper.getReadableDatabase(); }else if (!db.isOpen()){ db = dbHelper.getReadableDatabase(); } SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); Cursor cursor = null; qb.setTables(uri.getLastPathSegment()); if (db.isOpen()){ cursor = qb.query(db, projection, selection, selectionArgs, null, null, sortOrder); }else{ Log.d(TAG, "DB is closed for some reason"); } //db.close(); cursor.setNotificationUri(getContext().getContentResolver(), uri); return cursor; } }