package com.evancharlton.mileage.provider.tables;
import com.evancharlton.mileage.dao.Dao;
import com.evancharlton.mileage.dao.Field;
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;
import android.text.TextUtils;
public class FieldsTable extends ContentTable {
// make sure it's globally unique
private static final int FIELDS = 30;
private static final int FIELD_ID = 31;
private static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.evancharlton.fields";
private static final String CONTENT_ITEM_TYPE =
"vnd.android.cursor.item/vnd.evancharlton.field_id";
/**
* All saved field templates
*/
public static final String URI_PATH = "fields/";
public static final Uri URI = Uri.withAppendedPath(FillUpsProvider.BASE_URI, URI_PATH);
public static final String[] PROJECTION = new String[] {
Field._ID, Field.TITLE, Field.DESCRIPTION, Field.TYPE
};
@Override
protected Class<? extends Dao> getDaoType() {
return Field.class;
}
@Override
public String getDefaultSortOrder() {
return Field.TITLE + " asc";
}
@Override
public String getTableName() {
return "fields";
}
@Override
public String getType(int type) {
switch (type) {
case FIELDS:
return CONTENT_TYPE;
case FIELD_ID:
return CONTENT_ITEM_TYPE;
}
return null;
}
@Override
public String[] init(boolean isUpgrade) {
// FIXME - Hardcoded strings = bad!
return new String[] {
new InsertBuilder().add(Field.TITLE, "Comment")
.add(Field.DESCRIPTION, "Comment about your fillup.").build()
};
}
@Override
public long insert(int type, SQLiteDatabase db, ContentValues initialValues) {
switch (type) {
case 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 FIELDS:
queryBuilder.setTables(getTableName());
queryBuilder.setProjectionMap(buildProjectionMap(PROJECTION));
return true;
case FIELD_ID:
queryBuilder.setTables(getTableName());
queryBuilder.setProjectionMap(buildProjectionMap(PROJECTION));
queryBuilder.appendWhere(BaseColumns._ID + " = " + uri.getPathSegments().get(1));
return true;
}
return false;
}
@Override
public void registerUris() {
FillUpsProvider.registerUri(this, URI_PATH, FIELDS);
FillUpsProvider.registerUri(this, URI_PATH + "#", FIELD_ID);
}
@Override
public int update(int match, SQLiteDatabase db, Uri uri, ContentValues values,
String selection, String[] selectionArgs) {
if (selection == null) {
selection = "";
}
if (selectionArgs == null) {
selectionArgs = new String[0];
}
switch (match) {
case FIELD_ID:
String query =
Field._ID + " = ?"
+ (TextUtils.isEmpty(selection) ? "" : " AND (" + selection + ")");
String[] args = new String[selectionArgs.length + 1];
args[0] = values.getAsString(Field._ID);
for (int i = 0; i < selectionArgs.length; i++) {
args[i + 1] = selectionArgs[i];
}
return db.update(getTableName(), values, query, args);
case FIELDS:
return db.update(getTableName(), values, selection, selectionArgs);
}
return -1;
}
@Override
public String[] getProjection() {
return PROJECTION;
}
}