package com.evancharlton.mileage.provider.tables; import com.evancharlton.mileage.dao.Dao; import com.evancharlton.mileage.dao.ServiceIntervalTemplate; 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 java.util.Map.Entry; public class ServiceIntervalTemplatesTable extends ContentTable { private static final int SERVICE_TEMPLATES = 60; private static final int SERVICE_TEMPLATE_ID = 61; public static final String URI = "intervals/templates"; public static final Uri BASE_URI = Uri.withAppendedPath(FillUpsProvider.BASE_URI, URI); private static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.evancharlton.interval_template"; private static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.evancharlton.interval_template"; public static final String[] PROJECTION = new String[] { ServiceIntervalTemplate._ID, ServiceIntervalTemplate.TITLE, ServiceIntervalTemplate.DESCRIPTION, ServiceIntervalTemplate.DISTANCE, ServiceIntervalTemplate.DURATION, ServiceIntervalTemplate.VEHICLE_TYPE }; // FIXME - Hard-coded strings. public static final ContentValues[] TEMPLATES = new ContentValues[] { createInterval("Transmission fluid", "Replace transmission fluid", 25000, 25), createInterval("Timing belt", "Replace timing belt", 60000, 60), createInterval("Fuel filter", "Replace fuel filter", 25000, 25), createInterval("Power steering fluid", "Replace power steering fluid", 30000, 30), createInterval("Replace air filter", "Replace air filter", 15000, 15), createInterval("Oil change (synthetic)", "Synthetic oil change", 1000, 10), createInterval("Oil change (standard)", "Standard oil change", 3000, 3) }; @Override protected Class<? extends Dao> getDaoType() { return ServiceIntervalTemplate.class; } @Override public String getTableName() { return "service_interval_templates"; } @Override public String getType(int type) { switch (type) { case SERVICE_TEMPLATES: return CONTENT_TYPE; case SERVICE_TEMPLATE_ID: return CONTENT_ITEM_TYPE; } return null; } @Override public String[] init(boolean isUpgrade) { String[] sql = new String[TEMPLATES.length]; for (int i = 0; i < TEMPLATES.length; i++) { sql[i] = createIntervalSQL(TEMPLATES[i]); } return sql; } private String createIntervalSQL(ContentValues values) { InsertBuilder builder = new InsertBuilder(); for (Entry<String, Object> entry : values.valueSet()) { builder.add(entry.getKey(), String.valueOf(entry.getValue())); } return builder.build(); } private static ContentValues createInterval(String title, String description, long miles, long months) { ContentValues values = new ContentValues(); values.put(ServiceIntervalTemplate.TITLE, title); values.put(ServiceIntervalTemplate.DESCRIPTION, description); values.put(ServiceIntervalTemplate.DISTANCE, miles(miles)); values.put(ServiceIntervalTemplate.DURATION, months(months)); values.put(ServiceIntervalTemplate.VEHICLE_TYPE, 1); // FIXME return values; } private static long miles(long num) { return 1609L * 100L * num; } private static long months(long num) { return 1000L * 60L * 60L * 24L * 30L * num; } @Override public long insert(int type, SQLiteDatabase db, ContentValues initialValues) { switch (type) { case SERVICE_TEMPLATES: 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 SERVICE_TEMPLATES: queryBuilder.setTables(getTableName()); queryBuilder.setProjectionMap(buildProjectionMap(PROJECTION)); return true; case SERVICE_TEMPLATE_ID: queryBuilder.setTables(getTableName()); queryBuilder.setProjectionMap(buildProjectionMap(PROJECTION)); queryBuilder.appendWhere(BaseColumns._ID + " = " + uri.getPathSegments().get(2)); return true; } return false; } @Override public void registerUris() { FillUpsProvider.registerUri(this, URI, SERVICE_TEMPLATES); FillUpsProvider.registerUri(this, URI + "/#", SERVICE_TEMPLATE_ID); } @Override public int update(int match, SQLiteDatabase db, Uri uri, ContentValues values, String selection, String[] selectionArgs) { switch (match) { case SERVICE_TEMPLATE_ID: return db.update(getTableName(), values, ServiceIntervalTemplate._ID + " = ?", new String[] { values.getAsString(ServiceIntervalTemplate._ID) }); case SERVICE_TEMPLATES: return db.update(getTableName(), values, selection, selectionArgs); } return -1; } @Override public String[] getProjection() { return PROJECTION; } }