/*
* Generated by Mickey DB
*/
package com.justeat.mickeydb;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.text.TextUtils;
import com.justeat.mickeydb.ContentProviderActions;
import com.justeat.mickeydb.MickeyContentProvider;
import com.justeat.mickeydb.Query;
import com.justeat.mickeydb.util.Closeables;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public abstract class CustomActions extends ContentProviderActions {
@Override
public int delete(MickeyContentProvider provider, Uri uri, String selection, String[] selectionArgs){
final SQLiteDatabase db = provider.getOpenHelper().getWritableDatabase();
Query query = new Query(provider.getContext(), null);
addQueryExpressionsFromUriSegmentParams(uri, query);
query.append(selection, selectionArgs);
int affected = query.delete(db, getSourceName());
return affected;
}
@Override
public int update(MickeyContentProvider provider, Uri uri, ContentValues values, String selection, String[] selectionArgs){
final SQLiteDatabase db = provider.getOpenHelper().getWritableDatabase();
Query query = new Query(provider.getContext(), null);
addQueryExpressionsFromUriSegmentParams(uri, query);
addContentValuesFromUri(provider, uri, values);
query.append(selection, selectionArgs);
int affected = query.update(db, getSourceName(), values);
return affected;
}
@Override
public Uri insert(MickeyContentProvider provider, Uri uri, ContentValues values) {
final SQLiteDatabase db = provider.getOpenHelper().getWritableDatabase();
addContentValuesFromUri(provider, uri, values);
long id = db.insertOrThrow(getSourceName(), null, values);
if(id > -1) {
return ContentUris.withAppendedId(uri, id);
}
return null;
}
@Override
public Cursor query(MickeyContentProvider provider, Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder){
Query query = new Query(provider.getContext(), null);
addQueryExpressionsFromUriSegmentParams(uri, query);
query.append(selection, selectionArgs);
Cursor result = executeQuery(provider, uri, projection, query, sortOrder);
return result;
}
private Cursor executeQuery(MickeyContentProvider provider, Uri uri, String[] projection, Query query, String sortOrder) {
final SQLiteDatabase db = provider.getOpenHelper().getWritableDatabase();
String groupBy = uri.getQueryParameter(MickeyContentProvider.PARAM_GROUP_BY);
String limit = uri.getQueryParameter(MickeyContentProvider.PARAM_LIMIT);
String offset = uri.getQueryParameter(MickeyContentProvider.PARAM_OFFSET);
String sortAndLimitClause = buildSortAndClause(sortOrder, limit, offset);
return db.query(getSourceName(), projection, query.toString(), query.getArgsArray(), TextUtils.isEmpty(groupBy) ? null : groupBy, null, sortAndLimitClause);
}
private String buildSortAndClause(String sortOrder, String limit, String offset) {
String limitClause = null;
if(!TextUtils.isEmpty(limit)) {
limitClause = " LIMIT " + limit;
}
if(!TextUtils.isEmpty(offset)) {
limitClause = limitClause + " OFFSET " + offset;
}
if(limitClause != null) {
return (sortOrder == null ? " 1" + limitClause : sortOrder + limitClause);
} else {
return sortOrder;
}
}
@Override
public int bulkInsert(MickeyContentProvider provider, Uri uri, ContentValues[] values) {
final SQLiteDatabase db = provider.getOpenHelper().getWritableDatabase();
int numValues = values.length;
try {
db.beginTransaction();
for (int i = 0; i < numValues; i++) {
db.insertOrThrow(getSourceName(), null, values[i]);
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
return numValues;
}
@SuppressWarnings("unchecked")
@Override
public <T extends ActiveRecord> List<T> selectRecords(MickeyContentProvider provider, Uri uri, Query sQuery, String sortOrder) {
final ActiveRecordFactory<?> recordFactory = getActiveRecordFactory();
addQueryExpressionsFromUriSegmentParams(uri, sQuery);
Cursor c = null;
ArrayList<T> items = new ArrayList<T>();
try {
c = executeQuery(provider, uri, recordFactory.getProjection(), sQuery, sortOrder);
if(c.getCount() > 0) {
while(c.moveToNext()) {
items.add((T)recordFactory.create(c));
}
}
} finally {
Closeables.closeSilently(c);
}
return items;
}
@SuppressWarnings("unchecked")
@Override
public <T extends ActiveRecord> Map<String, T> selectRecordMap(
MickeyContentProvider provider, Uri uri, Query sQuery,
String keyColumnName) {
final ActiveRecordFactory<?> recordFactory = getActiveRecordFactory();
addQueryExpressionsFromUriSegmentParams(uri, sQuery);
Cursor c = null;
HashMap<String, T> items = new HashMap<String, T>();
try {
c = executeQuery(provider, uri, recordFactory.getProjection(), sQuery, null);
int keyColumnIndex = c.getColumnIndexOrThrow(keyColumnName);
if(c.getCount() > 0) {
while(c.moveToNext()) {
items.put(c.getString(keyColumnIndex), (T)recordFactory.create(c));
}
}
} finally {
Closeables.closeSilently(c);
}
return items;
}
public void addContentValuesFromUri(MickeyContentProvider provider, Uri uir, ContentValues values) {
}
public void addQueryExpressionsFromUriSegmentParams(Uri uri, Query query) {
}
public abstract String getSourceName();
public abstract ActiveRecordFactory<?> getActiveRecordFactory();
}