mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 20:58:03 +00:00
make AdvancedSearch support use localization string search card name/rules text.
This commit is contained in:
@@ -39,16 +39,30 @@ import forge.util.CardTranslation;
|
|||||||
public class AdvancedSearch {
|
public class AdvancedSearch {
|
||||||
public enum FilterOption {
|
public enum FilterOption {
|
||||||
NONE("lblNone", null, null, null),
|
NONE("lblNone", null, null, null),
|
||||||
CARD_NAME("lblName", PaperCard.class, FilterOperator.STRING_OPS, new StringEvaluator<PaperCard>() {
|
CARD_NAME("lblName", PaperCard.class, FilterOperator.STRINGS_OPS, new StringEvaluator<PaperCard>() {
|
||||||
@Override
|
@Override
|
||||||
protected String getItemValue(PaperCard input) {
|
protected String getItemValue(PaperCard input) {
|
||||||
return input.getName();
|
throw new RuntimeException("getItemValues should be called instead");
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
protected Set<String> getItemValues(PaperCard input) {
|
||||||
|
Set<String> names = new HashSet<>();
|
||||||
|
names.add(input.getName());
|
||||||
|
names.add(CardTranslation.getTranslatedName(input.getName()));
|
||||||
|
return names;
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
CARD_RULES_TEXT("lblRulesText", PaperCard.class, FilterOperator.STRING_OPS, new StringEvaluator<PaperCard>() {
|
CARD_RULES_TEXT("lblRulesText", PaperCard.class, FilterOperator.STRINGS_OPS, new StringEvaluator<PaperCard>() {
|
||||||
@Override
|
@Override
|
||||||
protected String getItemValue(PaperCard input) {
|
protected String getItemValue(PaperCard input) {
|
||||||
return input.getRules().getOracleText();
|
throw new RuntimeException("getItemValues should be called instead");
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
protected Set<String> getItemValues(PaperCard input) {
|
||||||
|
Set<String> names = new HashSet<>();
|
||||||
|
names.add(input.getRules().getOracleText());
|
||||||
|
names.add(CardTranslation.getTranslatedOracle(input.getName()));
|
||||||
|
return names;
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
CARD_KEYWORDS("lblKeywords", PaperCard.class, FilterOperator.COLLECTION_OPS, new CustomListEvaluator<PaperCard, Keyword>(Keyword.getAllKeywords()) {
|
CARD_KEYWORDS("lblKeywords", PaperCard.class, FilterOperator.COLLECTION_OPS, new CustomListEvaluator<PaperCard, Keyword>(Keyword.getAllKeywords()) {
|
||||||
@@ -484,6 +498,18 @@ public class AdvancedSearch {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
|
public boolean apply(Set<String> inputs, List<String> values) {
|
||||||
|
if (inputs != null && !inputs.isEmpty() && !values.isEmpty()) {
|
||||||
|
for (String input : inputs) {
|
||||||
|
if (apply(input, values)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
STARTS_WITH("lblStartsWith", "%1$s starts with '%2$s'", FilterValueCount.ONE, new OperatorEvaluator<String>() {
|
STARTS_WITH("lblStartsWith", "%1$s starts with '%2$s'", FilterValueCount.ONE, new OperatorEvaluator<String>() {
|
||||||
@Override
|
@Override
|
||||||
@@ -493,6 +519,18 @@ public class AdvancedSearch {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
|
public boolean apply(Set<String> inputs, List<String> values) {
|
||||||
|
if (inputs != null && !inputs.isEmpty() && !values.isEmpty()) {
|
||||||
|
for (String input : inputs) {
|
||||||
|
if (apply(input, values)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
ENDS_WITH("lblEndsWith", "%1$s ends with '%2$s'", FilterValueCount.ONE, new OperatorEvaluator<String>() {
|
ENDS_WITH("lblEndsWith", "%1$s ends with '%2$s'", FilterValueCount.ONE, new OperatorEvaluator<String>() {
|
||||||
@Override
|
@Override
|
||||||
@@ -502,6 +540,18 @@ public class AdvancedSearch {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
|
public boolean apply(Set<String> inputs, List<String> values) {
|
||||||
|
if (inputs != null && !inputs.isEmpty() && !values.isEmpty()) {
|
||||||
|
for (String input : inputs) {
|
||||||
|
if (apply(input, values)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
|
|
||||||
//Custom list operators
|
//Custom list operators
|
||||||
@@ -662,6 +712,9 @@ public class AdvancedSearch {
|
|||||||
public static final FilterOperator[] STRING_OPS = new FilterOperator[] {
|
public static final FilterOperator[] STRING_OPS = new FilterOperator[] {
|
||||||
CONTAINS, STARTS_WITH, ENDS_WITH
|
CONTAINS, STARTS_WITH, ENDS_WITH
|
||||||
};
|
};
|
||||||
|
public static final FilterOperator[] STRINGS_OPS = new FilterOperator[] {
|
||||||
|
CONTAINS, STARTS_WITH, ENDS_WITH
|
||||||
|
};
|
||||||
public static final FilterOperator[] SINGLE_LIST_OPS = new FilterOperator[] {
|
public static final FilterOperator[] SINGLE_LIST_OPS = new FilterOperator[] {
|
||||||
IS_ANY
|
IS_ANY
|
||||||
};
|
};
|
||||||
@@ -716,27 +769,32 @@ public class AdvancedSearch {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public final Filter<T> createFilter(FilterOption option, FilterOperator operator) {
|
public final Filter<T> createFilter(FilterOption option, FilterOperator operator) {
|
||||||
final List<V> values = getValues(option, operator);
|
final List<V> values = getValues(option, operator);
|
||||||
if (values == null || values.isEmpty()) { return null; }
|
if (values == null || values.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
String caption = getCaption(values, option, operator);
|
String caption = getCaption(values, option, operator);
|
||||||
|
|
||||||
final OperatorEvaluator<V> evaluator = (OperatorEvaluator<V>)operator.evaluator;
|
final OperatorEvaluator<V> evaluator = (OperatorEvaluator<V>) operator.evaluator;
|
||||||
Predicate<T> predicate;
|
Predicate<T> predicate = new Predicate<T>() {
|
||||||
if (option.operatorOptions == FilterOperator.MULTI_LIST_OPS || option.operatorOptions == FilterOperator.COMBINATION_OPS || option.operatorOptions == FilterOperator.COLLECTION_OPS) {
|
@Override
|
||||||
predicate = new Predicate<T>() {
|
public boolean apply(T input) {
|
||||||
@Override
|
return evaluator.apply(getItemValue(input), values);
|
||||||
public boolean apply(T input) {
|
}
|
||||||
return evaluator.apply(getItemValues(input), values);
|
};
|
||||||
}
|
;
|
||||||
};
|
final FilterOperator[][] manyValueOperators = { FilterOperator.MULTI_LIST_OPS,
|
||||||
}
|
FilterOperator.COMBINATION_OPS, FilterOperator.COLLECTION_OPS, FilterOperator.STRINGS_OPS };
|
||||||
else {
|
for (FilterOperator[] oper : manyValueOperators) {
|
||||||
predicate = new Predicate<T>() {
|
if (option.operatorOptions == oper) {
|
||||||
@Override
|
predicate = new Predicate<T>() {
|
||||||
public boolean apply(T input) {
|
@Override
|
||||||
return evaluator.apply(getItemValue(input), values);
|
public boolean apply(T input) {
|
||||||
}
|
return evaluator.apply(getItemValues(input), values);
|
||||||
};
|
}
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return new Filter<>(option, operator, caption, predicate);
|
return new Filter<>(option, operator, caption, predicate);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user