package co.smartreceipts.android.filters; import org.json.JSONException; import org.json.JSONObject; import java.util.List; import co.smartreceipts.android.R; import co.smartreceipts.android.model.Trip; public class TripMaximumPriceFilter implements Filter<Trip>{ private final static String MIN_PRICE = "minprice"; private final static String CURRENCY_CODE = "currencycode"; private final float mMaxPrice; private final String mCurrencyCode; public TripMaximumPriceFilter(float maxPrice, String currencyCode) { if (currencyCode == null) throw new IllegalArgumentException( "ReceiptMinPriceFilter requires non-null currencyCode"); mMaxPrice = maxPrice; mCurrencyCode = currencyCode; } public TripMaximumPriceFilter(JSONObject json) throws JSONException { this.mMaxPrice = (float) json.getDouble(MIN_PRICE); this.mCurrencyCode = json.getString(CURRENCY_CODE); } @Override public boolean accept(Trip t) { return t.getPrice().getPriceAsFloat() <= mMaxPrice && t.getPrice().getCurrencyCode().equalsIgnoreCase(mCurrencyCode); } @Override public JSONObject getJsonRepresentation() throws JSONException { final JSONObject json = new JSONObject(); json.put(FilterFactory.CLASS_NAME, this.getClass().getName()); json.put(MIN_PRICE, mMaxPrice); json.put(CURRENCY_CODE, mCurrencyCode); return json; } @Override public List<Filter<Trip>> getChildren() { return null; } @Override public int getNameResource() { return R.string.filter_name_trip_max_price; } @Override public FilterType getType() { return FilterType.Float; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((mCurrencyCode == null) ? 0 : mCurrencyCode.hashCode()) + (int) (mMaxPrice * 100); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; TripMaximumPriceFilter other = (TripMaximumPriceFilter) obj; return (mMaxPrice == other.mMaxPrice && mCurrencyCode.equals(other.mCurrencyCode)); } }