package com.evancharlton.mileage.dao; import com.evancharlton.mileage.R; import com.evancharlton.mileage.exceptions.InvalidFieldException; import com.evancharlton.mileage.provider.FillUpsProvider; import com.evancharlton.mileage.provider.tables.FieldsTable; import com.evancharlton.mileage.provider.tables.FillupsFieldsTable; import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.net.Uri; public class FillupField extends Dao { public static final String FILLUP_ID = "fillup_id"; public static final String TEMPLATE_ID = "template_id"; public static final String VALUE = "value"; @Validate(R.string.error_invalid_template_id) @Range.Positive @Column(type = Column.LONG, name = TEMPLATE_ID) protected long mTemplateId; @Validate(R.string.error_invalid_fillup_id) @Range.Positive @Column(type = Column.LONG, name = FILLUP_ID) protected long mFillupId; @Validate @Column(type = Column.STRING, name = VALUE) protected String mValue; public FillupField(ContentValues values) { super(values); } public FillupField(Cursor cursor) { super(cursor); } @Override public Uri getUri() { Uri base = FillUpsProvider.BASE_URI; if (isExistingObject()) { base = Uri.withAppendedPath(base, FillupsFieldsTable.FILLUPS_FIELD_PATH); base = ContentUris.withAppendedId(base, getId()); } else { base = Uri.withAppendedPath(base, FillupsFieldsTable.FILLUPS_FIELDS_PATH); } return base; } @Override public boolean save(Context context) throws InvalidFieldException { ContentValues values = new ContentValues(); validate(values); String selection = FillupField.FILLUP_ID + " = ? AND " + FillupField.TEMPLATE_ID + " = ?"; String[] selectionArgs = new String[] { String.valueOf(mFillupId), String.valueOf(mTemplateId) }; Cursor c = context.getContentResolver().query(FillupsFieldsTable.FILLUPS_FIELDS_URI, FillupsFieldsTable.PROJECTION, selection, selectionArgs, null); long id = 0; if (c.getCount() > 0) { c.moveToFirst(); id = c.getLong(c.getColumnIndex(FillupField._ID)); } c.close(); if (id != 0 || isExistingObject()) { // update context.getContentResolver().update(getUri(), values, _ID + " = ?", new String[] { String.valueOf(id) }); return true; } else { return super.save(context); } } public Fillup getFillup(Context context) { return null; } public String getValue() { return mValue; } public Field getFieldTemplate(Context context) { Uri uri = ContentUris.withAppendedId(FieldsTable.URI, getTemplateId()); Cursor c = context.getContentResolver() .query(uri, FieldsTable.PROJECTION, null, null, null); Field f = new Field(c); c.close(); return f; } public long getTemplateId() { return mTemplateId; } public void setFillupId(long id) { mFillupId = id; } public void setTemplateId(long id) { mTemplateId = id; } public void setValue(String value) { mValue = value; } }