package com.boardgamegeek.filterer;
import android.content.Context;
import android.support.annotation.NonNull;
import com.boardgamegeek.R;
import java.util.ArrayList;
import java.util.List;
public class CollectionStatusFilterer extends CollectionFilterer {
private boolean[] selectedStatuses;
private boolean shouldJoinWithOr;
public CollectionStatusFilterer(Context context) {
super(context);
}
public CollectionStatusFilterer(@NonNull Context context, boolean[] selectedStatuses, boolean shouldJoinWithOr) {
super(context);
this.selectedStatuses = selectedStatuses;
this.shouldJoinWithOr = shouldJoinWithOr;
}
@Override
public void setData(@NonNull String data) {
String[] d = data.split(DELIMITER);
shouldJoinWithOr = (d[0].equals("1"));
selectedStatuses = new boolean[d.length - 1];
for (int i = 0; i < d.length - 1; i++) {
selectedStatuses[i] = (d[i + 1].equals("1"));
}
}
@Override
public int getTypeResourceId() {
return R.string.collection_filter_type_collection_status;
}
@Override
public String getDisplayText() {
String[] entries = context.getResources().getStringArray(R.array.collection_status_filter_entries);
String displayText = "";
for (int i = 0; i < selectedStatuses.length; i++) {
if (selectedStatuses[i]) {
if (displayText.length() > 0) {
displayText += " " + (shouldJoinWithOr ? "|" : "&") + " ";
}
displayText += entries[i];
}
}
return displayText;
}
@Override
public String getSelection() {
String[] values = context.getResources().getStringArray(R.array.collection_status_filter_values);
String selection = "";
for (int i = 0; i < selectedStatuses.length; i++) {
if (selectedStatuses[i]) {
if (selection.length() > 0) {
selection += " " + (shouldJoinWithOr ? "OR" : "AND") + " ";
}
selection += values[i] + "=?";
}
}
return selection;
}
public boolean[] getSelectedStatuses() {
return selectedStatuses;
}
@NonNull
@Override
public String flatten() {
String s = (shouldJoinWithOr ? "1" : "0");
for (boolean selected : selectedStatuses) {
if (s.length() > 0) {
s += DELIMITER;
}
s += (selected ? "1" : "0");
}
return s;
}
@Override
public String[] getSelectionArgs() {
List<String> selectionArgs = new ArrayList<>(selectedStatuses.length);
for (boolean selectedStatus : selectedStatuses) {
if (selectedStatus) {
selectionArgs.add("1");
}
}
return selectionArgs.toArray(new String[selectionArgs.size()]);
}
}