package com.code44.finance.data.providers;
import android.content.ContentValues;
import android.net.Uri;
import com.code44.finance.common.model.ModelState;
import com.code44.finance.data.Query;
import com.code44.finance.data.db.Column;
import com.code44.finance.data.db.Tables;
import java.util.List;
import java.util.Map;
public class CategoriesProvider extends BaseModelProvider {
public static Uri uriCategories() {
return uriModels(CategoriesProvider.class, Tables.Categories.TABLE_NAME);
}
public static Uri uriCategory(String categoryServerId) {
return uriModel(CategoriesProvider.class, Tables.Categories.TABLE_NAME, categoryServerId);
}
@Override protected String getModelTable() {
return Tables.Categories.TABLE_NAME;
}
@Override protected String getQueryTables(Uri uri) {
return getModelTable();
}
@Override protected Column getIdColumn() {
return Tables.Categories.ID;
}
@Override protected void onBeforeUpdateItems(Uri uri, ContentValues values, String selection, String[] selectionArgs, Map<String, Object> outExtras) {
super.onBeforeUpdateItems(uri, values, selection, selectionArgs, outExtras);
throw new IllegalArgumentException("Update is not supported.");
}
@Override protected void onBeforeDeleteItems(Uri uri, String selection, String[] selectionArgs, ModelState modelState, Map<String, Object> outExtras) {
super.onBeforeDeleteItems(uri, selection, selectionArgs, modelState, outExtras);
final List<String> affectedIds = getIdList(getIdColumn(), selection, selectionArgs);
outExtras.put("affectedIds", affectedIds);
}
@Override protected void onAfterDeleteItems(Uri uri, String selection, String[] selectionArgs, ModelState modelState, Map<String, Object> extras) {
super.onAfterDeleteItems(uri, selection, selectionArgs, modelState, extras);
//noinspection unchecked
final List<String> affectedIds = (List<String>) extras.get("affectedIds");
if (affectedIds.size() > 0) {
final Uri transactionsUri = uriForDeleteFromItemState(TransactionsProvider.uriTransactions(), modelState);
final Query query = Query.create().selectionInClause(Tables.Transactions.CATEGORY_ID.getName(), affectedIds);
getContext().getContentResolver().delete(transactionsUri, query.getSelection(), query.getSelectionArgs());
}
}
}