package com.evancharlton.mileage.provider.tables;
import com.evancharlton.mileage.dao.Dao;
import com.evancharlton.mileage.dao.FillupField;
import com.evancharlton.mileage.provider.FillUpsProvider;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.provider.BaseColumns;
public class FillupsFieldsTable extends ContentTable {
// make sure it's globally unique
// TODO: rename these because it's confusing as fuck
private static final int FILLUP_FIELDS = 20;
private static final int FILLUP_FIELD = 21;
private static final int FILLUPS_FIELDS = 22;
public static final String TABLE_NAME = "fillups_fields";
/**
* Given a fillup ID, return all of the fields that were saved on that
* fillup
*/
public static final String FILLUPS_FIELDS_PATH = "fillups/fields";
public static final Uri FILLUPS_FIELDS_URI = Uri.withAppendedPath(FillUpsProvider.BASE_URI,
FILLUPS_FIELDS_PATH);
/**
* Given a field ID, return the field
*/
public static final String FILLUPS_FIELD_PATH = "fillups/field";
private static final String CONTENT_TYPE =
"vnd.android.cursor.dir/vnd.evancharlton.fillup_fields";
private static final String CONTENT_ITEM_TYPE =
"vnd.android.cursor.item/vnd.evancharlton.fillup_field_id";
private static final String CONTENT_ITEMS_TYPE =
"vnd.android.cursor.dir/vnd.evancharlton.fillups_fields";
public static final String[] PROJECTION = new String[] {
FillupField._ID, FillupField.FILLUP_ID, FillupField.TEMPLATE_ID, FillupField.VALUE
};
@Override
protected Class<? extends Dao> getDaoType() {
return FillupField.class;
}
@Override
public String getTableName() {
return TABLE_NAME;
}
@Override
public String getDefaultSortOrder() {
return FillupField.TEMPLATE_ID + " desc";
}
@Override
public String getType(int type) {
switch (type) {
case FILLUP_FIELD:
return CONTENT_ITEM_TYPE;
case FILLUP_FIELDS:
return CONTENT_TYPE;
case FILLUPS_FIELDS:
return CONTENT_ITEMS_TYPE;
}
return null;
}
@Override
public String[] init(boolean isUpgrade) {
return null;
}
@Override
public long insert(int type, SQLiteDatabase db, ContentValues initialValues) {
switch (type) {
case FILLUP_FIELDS:
case FILLUPS_FIELDS:
return db.insert(getTableName(), null, initialValues);
}
return -1L;
}
@Override
public boolean query(int type, Uri uri, SQLiteQueryBuilder queryBuilder, Context context,
String[] projection) {
switch (type) {
case FILLUPS_FIELDS:
queryBuilder.setTables(getTableName());
queryBuilder.setProjectionMap(buildProjectionMap(PROJECTION));
return true;
case FILLUP_FIELDS:
queryBuilder.setTables(getTableName());
queryBuilder.setProjectionMap(buildProjectionMap(PROJECTION));
queryBuilder.appendWhere(FillupField.FILLUP_ID + " = "
+ uri.getPathSegments().get(2));
return true;
case FILLUP_FIELD:
queryBuilder.setTables(getTableName());
queryBuilder.setProjectionMap(buildProjectionMap(PROJECTION));
queryBuilder.appendWhere(FillupField._ID + " = " + uri.getPathSegments().get(2));
return true;
}
return false;
}
@Override
public void registerUris() {
FillUpsProvider.registerUri(this, FILLUPS_FIELDS_PATH, FILLUPS_FIELDS);
FillUpsProvider.registerUri(this, FILLUPS_FIELDS_PATH + "/#", FILLUP_FIELDS);
FillUpsProvider.registerUri(this, FILLUPS_FIELD_PATH + "/#", FILLUP_FIELD);
}
@Override
public int update(int match, SQLiteDatabase db, Uri uri, ContentValues values,
String selection, String[] selectionArgs) {
switch (match) {
case FILLUP_FIELD:
return db.update(getTableName(), values, FillupField._ID + " = ?", new String[] {
values.getAsString(FillupField._ID)
});
case FILLUPS_FIELDS:
if (values.containsKey(BaseColumns._ID)) {
values.remove(BaseColumns._ID);
}
return db.update(getTableName(), values, selection, selectionArgs);
}
return -1;
}
@Override
public String[] getProjection() {
return PROJECTION;
}
}