package com.markupartist.iglaset.provider;
import java.security.InvalidParameterException;
import java.util.ArrayList;
import java.util.Vector;
import com.markupartist.iglaset.R;
import android.content.Context;
import android.text.TextUtils;
/**
* Search criteria
*/
public abstract class SearchCriteria {
private String mQuery;
private int mCategory;
private int mPage = 1;
private String mBarcode;
private ArrayList<Integer> mTags;
private AuthStore.Authentication mAuthentication;
public final static int SORT_MODE_NONE = 0;
public final static int SORT_MODE_NAME = 1;
public final static int SORT_MODE_PRODUCER = 2;
public final static int SORT_MODE_RATING = 3;
public final static int SORT_MODE_DATE = 4;
private int mSortMode = SORT_MODE_NONE;
public SearchCriteria() {
mSortMode = getDefaultSortMode();
}
public abstract int[] getSortModes();
public abstract int getDefaultSortMode();
public CharSequence[] getSortModeNames(Context context) {
Vector<CharSequence> names = new Vector<CharSequence>();
int[] modes = getSortModes();
if(modes != null && modes.length > 0) {
for(int i=0; i<modes.length; ++i) {
switch(modes[i]) {
case SORT_MODE_NAME:
names.add(context.getText(R.string.sort_mode_name));
break;
case SORT_MODE_PRODUCER:
names.add(context.getText(R.string.sort_mode_producer));
break;
case SORT_MODE_RATING:
names.add(context.getText(R.string.sort_mode_rating));
break;
case SORT_MODE_DATE:
names.add(context.getText(R.string.sort_mode_date));
break;
case SORT_MODE_NONE:
names.add(context.getText(R.string.sort_mode_none));
default:
break;
}
}
}
CharSequence[] result = {};
return names.toArray(result);
}
public int getSortIndexFromMode(int mode) {
int[] modes = getSortModes();
for(int i=0; i<modes.length; ++i) {
if(modes[i] == mode)
return i;
}
return 0;
}
public int getSortModeFromIndex(int index) {
int[] modes = getSortModes();
if(index < 0 || index > modes.length - 1) {
throw new InvalidParameterException("Sort mode can not be <0 or greater than the number of available modes");
}
return modes[index];
}
public boolean supportsSorting() {
int[] modes = getSortModes();
return modes != null && modes.length > 0;
}
public AuthStore.Authentication getAuthentication() {
return mAuthentication;
}
public void setAuthentication(AuthStore.Authentication authentication) {
this.mAuthentication = authentication;
}
public void setSortMode(int mode) {
mSortMode = mode;
}
public int getSortMode() {
return mSortMode;
}
public String getQuery() {
return mQuery;
}
public SearchCriteria setQuery(String query) {
this.mQuery = query;
return this;
}
public int getCategory() {
return mCategory;
}
public SearchCriteria setCategory(int category) {
this.mCategory = category;
return this;
}
public int getPage() {
return mPage;
}
public SearchCriteria setPage(int page) {
this.mPage = page;
return this;
}
public boolean hasBarcode() {
return !TextUtils.isEmpty(mBarcode);
}
public SearchCriteria setBarcode(String barcode) {
mBarcode = barcode;
return this;
}
public String getBarcode() {
return mBarcode;
}
public SearchCriteria setTags(ArrayList<Integer> tags) {
mTags = tags;
return this;
}
public ArrayList<Integer> getTags() {
return mTags;
}
@Override
public String toString() {
return "SearchCriteria ["
+ "mCategory=" + mCategory
+ ", mPage=" + mPage
+ ", mQuery=" + mQuery
+ ", mBarcode=" + mBarcode
+ ", mTags=" + mTags
+ ", mSortMode=" + mSortMode
+ "]";
}
}