package com.evancharlton.mileage.provider.tables; import com.evancharlton.mileage.dao.Dao; import com.evancharlton.mileage.dao.Vehicle; 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 VehiclesTable extends ContentTable { // make sure it's globally unique private static final int VEHICLES = 40; private static final int VEHICLE_ID = 41; public static final String TABLE_NAME = "vehicles"; public static final String VEHICLES_URI = "vehicles/"; public static final Uri BASE_URI = Uri.withAppendedPath(FillUpsProvider.BASE_URI, VEHICLES_URI); private static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.evancharlton.vehicles"; private static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.evancharlton.vehicle"; public static String[] PROJECTION = new String[] { Vehicle._ID, Vehicle.TITLE, Vehicle.DESCRIPTION, Vehicle.YEAR, Vehicle.MAKE, Vehicle.MODEL, Vehicle.VEHICLE_TYPE, Vehicle.DEFAULT_TIME, Vehicle.PREF_DISTANCE_UNITS, Vehicle.PREF_VOLUME_UNITS, Vehicle.PREF_ECONOMY_UNITS, Vehicle.PREF_CURRENCY }; @Override protected Class<? extends Dao> getDaoType() { return Vehicle.class; } @Override public String getTableName() { return TABLE_NAME; } @Override public String getType(int type) { switch (type) { case VEHICLES: return CONTENT_TYPE; case VEHICLE_ID: return CONTENT_ITEM_TYPE; } return null; } @Override public String[] init(boolean isUpgrade) { if (isUpgrade) { return null; } // FIXME: hardcoded strings = bad! return new String[] { new InsertBuilder().add(Vehicle.TITLE, "Default vehicle") .add(Vehicle.DESCRIPTION, "Auto-generated vehicle") .add(Vehicle.DEFAULT_TIME, System.currentTimeMillis()) .add(Vehicle.MAKE, "Android").add(Vehicle.MODEL, "Mileage") .add(Vehicle.YEAR, "2010").add(Vehicle.VEHICLE_TYPE, 1).build() }; } @Override public long insert(int type, SQLiteDatabase db, ContentValues initialValues) { switch (type) { case VEHICLES: 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 VEHICLES: queryBuilder.setTables(getTableName()); queryBuilder.setProjectionMap(buildProjectionMap(PROJECTION)); return true; case VEHICLE_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, VEHICLES_URI, VEHICLES); FillUpsProvider.registerUri(this, VEHICLES_URI + "#", VEHICLE_ID); } @Override public int update(int match, SQLiteDatabase db, Uri uri, ContentValues values, String selection, String[] selectionArgs) { switch (match) { case VEHICLE_ID: return db.update(getTableName(), values, Vehicle._ID + " = ?", new String[] { uri.getPathSegments().get(1) }); case VEHICLES: return db.update(getTableName(), values, selection, selectionArgs); } return -1; } @Override public String getDefaultSortOrder() { return Vehicle.DEFAULT_TIME + " desc"; } @Override public String[] getProjection() { return PROJECTION; } }