package co.smartreceipts.android.filters;
import android.view.LayoutInflater;
import android.view.View;
import org.json.JSONException;
import org.json.JSONObject;
import co.smartreceipts.android.model.Receipt;
import co.smartreceipts.android.model.Trip;
/**
* Factory that allows us to rebuild our previous filter list from a {@link JSONObject}
*
* @author Will Baumann
* @since July 08, 2014
*
*/
public class FilterFactory {
static final String CLASS_NAME = "class";
private FilterFactory() { }
public static final View getReceiptFiltersView(Filter<Receipt> filter, LayoutInflater inflater) {
if (filter instanceof ReceiptAndFilter) {
final ReceiptAndFilter receiptAndFilter = (ReceiptAndFilter) filter;
}
else if (filter instanceof ReceiptOrFilter) {
final ReceiptOrFilter receiptOrFilter = (ReceiptOrFilter) filter;
}
else if (filter instanceof ReceiptNotFilter) {
final ReceiptNotFilter receiptNotFilter = (ReceiptNotFilter) filter;
}
return null;
}
private static final View getReceiptFiltersView(Filter<Receipt> filter, LayoutInflater inflater, String prefix,
String suffix) {
return null;
}
/**
* Builds a {@link Filter} for a {@link Receipt} based on a {@link JSONObject}
*
* @param json - the {@link JSONObject} that represents this filter
* @return a {@link Filter} of {@link Receipt}
* @throws JSONException - throw if our provide {@link JSONObject} is invalid
*/
public static final Filter<Receipt> getReceiptFilter(JSONObject json) throws JSONException {
final String className = json.getString(CLASS_NAME);
if (ReceiptOrFilter.class.getName().equals(className)) {
return new ReceiptOrFilter(json);
}
else if (ReceiptAndFilter.class.getName().equals(className)) {
return new ReceiptAndFilter(json);
}
else if (ReceiptNotFilter.class.getName().equals(className)) {
return new ReceiptNotFilter(json);
}
else if (ReceiptIsReimbursableFilter.class.getName().equals(className)) {
return new ReceiptIsReimbursableFilter(json);
}
else if (ReceiptSelectedFilter.class.getName().equals(className)) {
return new ReceiptSelectedFilter(json);
}
else if (ReceiptCategoryFilter.class.getName().equals(className)) {
return new ReceiptCategoryFilter(json);
}
else if (ReceiptMaximumPriceFilter.class.getName().equals(className)) {
return new ReceiptMaximumPriceFilter(json);
}
else if (ReceiptMinimumPriceFilter.class.getName().equals(className)) {
return new ReceiptMinimumPriceFilter(json);
}
else if (ReceiptOnOrAfterDayFilter.class.getName().equals(className)) {
return new ReceiptOnOrAfterDayFilter(json);
}
else if (ReceiptOnOrBeforeDayFilter.class.getName().equals(className)) {
return new ReceiptOnOrBeforeDayFilter(json);
}
else {
return null;
}
}
/**
* Builds a {@link Filter} for a {@link Trip} based on a {@link JSONObject}
*
* @param json - the {@link JSONObject} that represents this filter
* @return a {@link Filter} of {@link Trip}
* @throws JSONException - throw if our provide {@link JSONObject} is invalid
*/
public static final Filter<Trip> getTripFilter(JSONObject json) throws JSONException {
final String className = json.getString(CLASS_NAME);
if(TripAndFilter.class.getName().equals(className)){
return new TripAndFilter(json);
}
else if(TripEndsOnOrAfterDayFilter.class.getName().equals(className)){
return new TripEndsOnOrAfterDayFilter(json);
}
else if(TripEndsOnOrBeforeDayFilter.class.getName().equals(className)){
return new TripEndsOnOrBeforeDayFilter(json);
}
else if(TripMaximumPriceFilter.class.getName().equals(className)){
return new TripMaximumPriceFilter(json);
}
else if(TripMinimumPriceFilter.class.getName().equals(className)){
return new TripMinimumPriceFilter(json);
}
else if(TripNotFilter.class.getName().equals(className)){
return new TripNotFilter(json);
}
else if(TripOrFilter.class.getName().equals(className)){
return new TripOrFilter(json);
}
else if(TripStartsOnOrAfterDayFilter.class.getName().equals(className)){
return new TripStartsOnOrAfterDayFilter(json);
}
else if(TripStartsOnOrBeforeDayFilter.class.getName().equals(className)){
return new TripStartsOnOrBeforeDayFilter(json);
}
else {
return null;
}
}
}