package com.evancharlton.mileage.dao;
import com.evancharlton.mileage.R;
import com.evancharlton.mileage.dao.Dao.DataObject;
import com.evancharlton.mileage.math.Calculator;
import com.evancharlton.mileage.provider.tables.FillupsTable;
import com.evancharlton.mileage.provider.tables.VehiclesTable;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
@DataObject(path = VehiclesTable.VEHICLES_URI)
public class Vehicle extends Dao {
public static final String TITLE = "title";
public static final String DESCRIPTION = "description";
public static final String YEAR = "year";
public static final String MAKE = "make";
public static final String MODEL = "model";
public static final String VEHICLE_TYPE = "vehicle_type_id";
public static final String DEFAULT_TIME = "default_time";
public static final String PREF_DISTANCE_UNITS = "odometer_units";
public static final String PREF_VOLUME_UNITS = "volume_units";
public static final String PREF_ECONOMY_UNITS = "economy_units";
public static final String PREF_CURRENCY = "currency_units";
@Validate(R.string.error_invalid_vehicle_title)
@Column(type = Column.STRING, name = TITLE)
protected String mTitle;
@Validate
@Nullable
@Column(type = Column.STRING, name = DESCRIPTION)
protected String mDescription;
@Validate(R.string.error_invalid_vehicle_year)
@Column(type = Column.STRING, name = YEAR)
protected String mYear;
@Validate(R.string.error_invalid_vehicle_make)
@Column(type = Column.STRING, name = MAKE)
protected String mMake;
@Validate(R.string.error_invalid_vehicle_model)
@Column(type = Column.STRING, name = MODEL)
protected String mModel;
@Validate(R.string.error_invalid_vehicle_type)
@Range.Positive
@Column(type = Column.LONG, name = VEHICLE_TYPE)
protected long mVehicleType;
@Validate
@Column(type = Column.LONG, name = DEFAULT_TIME)
protected long mDefaultTime;
@Validate
@Column(type = Column.INTEGER, name = PREF_DISTANCE_UNITS, value = Calculator.MI)
protected int mPrefDistanceUnits;
@Validate
@Column(type = Column.INTEGER, name = PREF_VOLUME_UNITS, value = Calculator.GALLONS)
protected int mPrefVolumeUnits;
@Validate
@Column(type = Column.INTEGER, name = PREF_ECONOMY_UNITS, value = Calculator.MI_PER_GALLON)
protected int mPrefEconomyUnits;
@Validate
@Column(type = Column.STRING, name = PREF_CURRENCY)
protected String mPrefCurrency;
public Vehicle(ContentValues values) {
super(values);
}
public Vehicle(Cursor cursor) {
super(cursor);
}
public static final Vehicle loadById(final Context context, final long id) {
Uri uri = ContentUris.withAppendedId(VehiclesTable.BASE_URI, id);
Cursor cursor =
context.getContentResolver().query(uri, VehiclesTable.PROJECTION, null, null, null);
Vehicle v = null;
if (cursor.getCount() > 0) {
v = new Vehicle(cursor);
}
cursor.close();
if (v == null) {
throw new IllegalArgumentException("Unable to load vehicle #" + id);
}
return v;
}
public Fillup loadLatestFillup(Context context) {
Uri uri = FillupsTable.BASE_URI;
String[] projection = FillupsTable.PROJECTION;
Cursor c =
context.getContentResolver().query(uri, projection, Fillup.VEHICLE_ID + " = ?",
new String[] {
String.valueOf(getId())
}, Fillup.ODOMETER + " desc");
Fillup newest = null;
if (c.getCount() >= 1) {
c.moveToFirst();
newest = new Fillup(c);
}
c.close();
return newest;
}
public void setTitle(String title) {
mTitle = title;
}
public void setDescription(String description) {
mDescription = description;
}
public void setYear(String year) {
mYear = year;
}
public void setMake(String make) {
mMake = make;
}
public void setModel(String model) {
mModel = model;
}
public void setVehicleType(long vehicleType) {
mVehicleType = vehicleType;
}
public void setDefaultTime(long defaultTime) {
mDefaultTime = defaultTime;
}
public void setVolumeUnits(int volumeUnits) {
mPrefVolumeUnits = volumeUnits;
}
public void setDistanceUnits(int distanceUnits) {
mPrefDistanceUnits = distanceUnits;
}
public void setEconomyUnits(int economyUnits) {
mPrefEconomyUnits = economyUnits;
}
public void setCurrency(String currency) {
mPrefCurrency = currency;
}
public String getTitle() {
if (mTitle.trim().length() == 0) {
mTitle = String.format("%s %s %s", getYear(), getMake(), getModel());
}
return mTitle;
}
public String getDescription() {
return mDescription;
}
public String getYear() {
return mYear;
}
public String getMake() {
return mMake;
}
public String getModel() {
return mModel;
}
public long getVehicleType() {
return mVehicleType;
}
public long getDefaultTime() {
return mDefaultTime;
}
public int getDistanceUnits() {
return mPrefDistanceUnits;
}
public int getVolumeUnits() {
return mPrefVolumeUnits;
}
public int getEconomyUnits() {
return mPrefEconomyUnits;
}
public String getCurrency() {
return mPrefCurrency;
}
}