package org.cacahuete.app.feedreader.db; import org.cacahuete.app.feedreader.db.RssContract.ArticlesTable; import org.cacahuete.app.feedreader.db.RssContract.FeedsTable; import org.cacahuete.app.feedreader.db.RssDbHelper; import android.content.ContentProvider; import android.content.ContentValues; import android.content.UriMatcher; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.text.TextUtils; import android.util.Log; public class RssContentProvider extends ContentProvider { private RssDbHelper mDbHelper; private static final String TAG = "RSS content provider"; private static final UriMatcher sUriMatcher; private static final int TYPE_ARTICLES_COLLECTION = 1; private static final int TYPE_ARTICLES_ITEM = 2; private static final int TYPE_FEEDS_COLLECTION = 3; private static final int TYPE_FEEDS_ITEM = 4; static { sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); sUriMatcher.addURI(RssContract.AUTHORITY, "articles", TYPE_ARTICLES_COLLECTION); sUriMatcher.addURI(RssContract.AUTHORITY, "articles/#", TYPE_ARTICLES_ITEM); sUriMatcher.addURI(RssContract.AUTHORITY, "feeds", TYPE_FEEDS_COLLECTION); sUriMatcher.addURI(RssContract.AUTHORITY, "feeds/#", TYPE_FEEDS_ITEM); } @Override public boolean onCreate() { this.mDbHelper = new RssDbHelper(getContext()); Log.d(TAG,"Creado content provider y enlace a RssDbHelper"); return true; } @Override public String getType(Uri uri) { switch(sUriMatcher.match(uri)) { case TYPE_ARTICLES_COLLECTION: return "android.cursor.dir/vnd.org.cacahuete.app.feedreader.rsscontentprovider.articles"; case TYPE_ARTICLES_ITEM: return "android.cursor.item/vnd.org.cacahuete.app.feedreader.rsscontentprovider.articles"; case TYPE_FEEDS_COLLECTION: return "android.cursor.dir/vnd.org.cacahuete.app.feedreader.rsscontentprovider.feeds"; case TYPE_FEEDS_ITEM: return "android.cursor.item/vnd.org.cacahuete.app.feedreader.rsscontentprovider.feeds"; default: return null; } } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { // TODO Auto-generated method stub final SQLiteDatabase db = mDbHelper.getWritableDatabase(); String whereClause=""; Long id; String last_segment = uri.getLastPathSegment(); if (esId(last_segment)==true) { id=Long.parseLong(last_segment); whereClause = ArticlesTable._ID + "==" + id; } String whereArgs[]=null; int num=db.delete(ArticlesTable.TABLE_NAME, whereClause, whereArgs); return num; } @Override public Uri insert(Uri uri, ContentValues values) { int uriType = sUriMatcher.match(uri); if( uriType != TYPE_ARTICLES_COLLECTION) { return null; } final SQLiteDatabase db = mDbHelper.getWritableDatabase(); long id = db.insert(ArticlesTable.TABLE_NAME, null, values); Uri newUri = ArticlesTable.getUri(id); return newUri; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Long id=null; Log.d(TAG,"Empezando query con uri "+uri.toString() ); try { SQLiteDatabase db = mDbHelper.getReadableDatabase(); if (esId(uri.getLastPathSegment())==true) { id=Long.parseLong(uri.getLastPathSegment()); } switch(sUriMatcher.match(uri)) { case TYPE_ARTICLES_ITEM: Log.d(TAG,"estamos en articles item"); if(selection==null) { selection = ""; } selection += (!TextUtils.isEmpty(selection)) ? " AND" : ""; selection += ArticlesTable._ID + "=" + id.toString(); case TYPE_ARTICLES_COLLECTION: Log.d(TAG,"estamos en articles collection"); String table = ArticlesTable.TABLE_NAME; String groupBy = null; String having = null; Log.d(TAG,"selection es "+selection); Cursor cursor = db.query(table, projection, selection, selectionArgs, groupBy, having, sortOrder); Log.d(TAG,"Devolviendo cursor con "+cursor.getCount()+" elementos"); return cursor; case TYPE_FEEDS_ITEM: Log.d(TAG,"estamos en feeds item"); if(selection==null) { selection = ""; } selection += (!TextUtils.isEmpty(selection)) ? " AND" : ""; selection += FeedsTable._ID + "==" + id.toString(); case TYPE_FEEDS_COLLECTION: Log.d(TAG,"estamos en feeds collection"); String table2 = FeedsTable.TABLE_NAME; String groupBy2 = null; String having2 = null; Cursor cursor2 = db.query(table2, projection, selection, selectionArgs, groupBy2, having2, sortOrder); Log.d(TAG,"cursor tiene "+cursor2.getColumnCount()); return cursor2; default: Log.d(TAG,"devolviendo null"); return null; } } catch (Exception e) { Log.d(TAG, "exception en coger bd"); // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { // TODO Auto-generated method stub return 0; } /* * Si fragment es un numero devuelve true, si no false */ private boolean esId(String fragment) { try { Long.parseLong(fragment); } catch (Exception e) {return false;} return true; } }