package ngvl.android.exrecyclerview.db;
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;
public class MensagemProvider extends ContentProvider {
public static final int MENSAGENS = 1;
public static final int MENSAGENS_POR_ID = 2;
UriMatcher mUriMatcher;
DbHelper mDbHelper;
@Override
public boolean onCreate() {
mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
mUriMatcher.addURI(MensagemContract.AUTHORITY, "msgs", MENSAGENS);
mUriMatcher.addURI(MensagemContract.AUTHORITY, "msgs/#", MENSAGENS_POR_ID);
mDbHelper = new DbHelper(getContext());
return true;
}
@Override
public String getType(Uri uri) {
throw new UnsupportedOperationException("Não implementada.");
}
@Override
public Uri insert(Uri uri, ContentValues values) {
if (mUriMatcher.match(uri) == MENSAGENS){
SQLiteDatabase db = mDbHelper.getWritableDatabase();
long id = db.insert(MensagemContract.TABELA_MENSAGEM, null, values);
Uri insertUri = Uri.withAppendedPath(MensagemContract.BASE_URI, String.valueOf(id));
db.close();
notifyChanges(uri);
return insertUri;
} else {
throw new UnsupportedOperationException("Not yet implemented");
}
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
if (mUriMatcher.match(uri) == MENSAGENS_POR_ID){
SQLiteDatabase db = mDbHelper.getWritableDatabase();
int linhasAfetadas = db.delete(MensagemContract.TABELA_MENSAGEM,
MensagemContract._ID +" = ?",
new String[]{ uri.getLastPathSegment() });
db.close();
notifyChanges(uri);
return linhasAfetadas;
} else {
throw new UnsupportedOperationException("Uri inválida para exclusão.");
}
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
if (mUriMatcher.match(uri) == MENSAGENS_POR_ID){
SQLiteDatabase db = mDbHelper.getWritableDatabase();
int linhasAfetadas = db.update(MensagemContract.TABELA_MENSAGEM,
values,
MensagemContract._ID +" = ?",
new String[]{ uri.getLastPathSegment() });
db.close();
notifyChanges(uri);
return linhasAfetadas;
} else {
throw new UnsupportedOperationException("Uri inválida para exclusão.");
}
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
if (mUriMatcher.match(uri) == MENSAGENS){
SQLiteDatabase db = mDbHelper.getWritableDatabase();
Cursor cursor = db.query(MensagemContract.TABELA_MENSAGEM,
projection, selection, selectionArgs, null, null, sortOrder);
cursor.setNotificationUri(getContext().getContentResolver(), uri);
return cursor;
} else if (mUriMatcher.match(uri) == MENSAGENS_POR_ID) {
SQLiteDatabase db = mDbHelper.getWritableDatabase();
Cursor cursor = db.query(MensagemContract.TABELA_MENSAGEM,
projection,
MensagemContract._ID +" = ?",
new String[]{ uri.getLastPathSegment() }, null, null, sortOrder);
cursor.setNotificationUri(getContext().getContentResolver(), uri);
return cursor;
} else {
throw new UnsupportedOperationException("Not yet implemented");
}
}
private void notifyChanges(Uri uri){
if (getContext() != null && getContext().getContentResolver() != null){
getContext().getContentResolver().notifyChange(uri, null);
}
}
}