package uk.co.imallan.tuchongdaily.provider;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import uk.co.imallan.tuchongdaily.db.Table;
/**
* Created by allan on 15/2/20.
*/
public class PostProvider extends AbstractProvider {
private static final String TABLE_NAME = Table.Post.TABLE_NAME;
private static final int URI_POSTS = 1;
private static final int URI_POST_ID = 2;
protected static Uri getContentUri() {
return Uri.parse(CONTENT_URI_BASE + getAuthority(PostProvider.class) + "/" + TABLE_NAME);
}
public static Uri uriPosts() {
return getContentUri();
}
public static Uri uriPost(String id) {
return Uri.withAppendedPath(getContentUri(), id);
}
@Override
public boolean onCreate() {
boolean result = super.onCreate();
final String authority = getAuthority(this.getClass());
uriMatcher.addURI(authority, TABLE_NAME, URI_POSTS);
uriMatcher.addURI(authority, TABLE_NAME + "/#", URI_POST_ID);
return result;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
Cursor c = null;
final SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
switch (uriMatcher.match(uri)) {
case URI_POSTS:
qb.setTables(TABLE_NAME
+ " JOIN " + Table.Author.TABLE_NAME +
" ON " + Table.Author.COLUMN_ID + "=" + Table.Post.COLUMN_AUTHOR_ID
);
c = qb.query(getReadableDatabase(), projection, selection, selectionArgs, null, null, sortOrder);
break;
case URI_POST_ID:
qb.setTables(TABLE_NAME
+ " JOIN " + Table.Author.TABLE_NAME +
" ON " + Table.Author.COLUMN_ID + "=" + Table.Post.COLUMN_AUTHOR_ID
);
qb.appendWhere(Table.Post.COLUMN_ID + "=\"" + uri.getLastPathSegment() + "\"");
c = qb.query(getReadableDatabase(), projection, selection, selectionArgs, null, null, sortOrder);
break;
}
return c;
}
@Override
public String getType(Uri uri) {
switch (uriMatcher.match(uri)) {
case URI_POSTS:
return TYPE_LIST_BASE + TABLE_NAME;
case URI_POST_ID:
return TYPE_ITEM_BASE + TABLE_NAME;
default:
throw new IllegalArgumentException("Unsupported URI: " + uri);
}
}
@Override
public Uri insert(Uri uri, ContentValues values) {
switch (uriMatcher.match(uri)) {
case URI_POSTS:
getWritableDatabase().insert(TABLE_NAME, null, values);
break;
case URI_POST_ID:
getWritableDatabase().insert(TABLE_NAME, null, values);
break;
}
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
int deleted = 0;
switch (uriMatcher.match(uri)) {
case URI_POSTS:
deleted = getWritableDatabase().delete(TABLE_NAME, null, null);
break;
case URI_POST_ID:
deleted = getWritableDatabase().delete(TABLE_NAME, Table.Post.COLUMN_ID + "=?", new String[]{uri.getLastPathSegment()});
break;
}
return deleted;
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
return 0;
}
}