diff --git a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java index 6abe7137f06..3e6b34325ef 100644 --- a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java +++ b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java @@ -26,6 +26,7 @@ import forge.game.keyword.Keyword; import forge.interfaces.IButton; import forge.item.InventoryItem; import forge.item.PaperCard; +import forge.item.SealedProduct; import forge.model.FModel; import forge.planarconquest.ConquestCommander; import forge.planarconquest.ConquestPlane; @@ -215,6 +216,239 @@ public class AdvancedSearch { return cards.get(0) == input; } }), + INVITEM_NAME("lblName", InventoryItem.class, FilterOperator.STRING_OPS, new StringEvaluator() { + @Override + protected String getItemValue(InventoryItem input) { + return input.getName(); + } + }), + INVITEM_RULES_TEXT("lblRulesText", InventoryItem.class, FilterOperator.STRING_OPS, new StringEvaluator() { + @Override + protected String getItemValue(InventoryItem input) { + if (!(input instanceof PaperCard)) { + return ""; + } + return ((PaperCard)input).getRules().getOracleText(); + } + }), + INVITEM_KEYWORDS("lblKeywords", InventoryItem.class, FilterOperator.COLLECTION_OPS, new CustomListEvaluator(Keyword.getAllKeywords()) { + @Override + protected Keyword getItemValue(InventoryItem input) { + throw new RuntimeException("getItemValues should be called instead"); + } + @Override + protected Set getItemValues(InventoryItem input) { + if (!(input instanceof PaperCard)) { + return new HashSet<>(); + } + return Keyword.getKeywordSet((PaperCard)input); + } + }), + INVITEM_SET("lblSet", InventoryItem.class, FilterOperator.SINGLE_LIST_OPS, new CustomListEvaluator(FModel.getMagicDb().getSortedEditions(), CardEdition.FN_GET_CODE) { + @Override + protected CardEdition getItemValue(InventoryItem input) { + if (input instanceof PaperCard) { + return FModel.getMagicDb().getEditions().get(((PaperCard)input).getEdition()); + } else if (input instanceof SealedProduct) { + return FModel.getMagicDb().getEditions().get(((SealedProduct)input).getEdition()); + } else { + return CardEdition.UNKNOWN; + } + } + }), + INVITEM_FORMAT("lblFormat", InventoryItem.class, FilterOperator.MULTI_LIST_OPS, new CustomListEvaluator((List)FModel.getFormats().getFilterList()) { + @Override + protected GameFormat getItemValue(InventoryItem input) { + throw new RuntimeException("getItemValues should be called instead"); + } + @Override + protected Set getItemValues(InventoryItem input) { + if (!(input instanceof PaperCard)) { + return new HashSet<>(); + } + return FModel.getFormats().getAllFormatsOfCard((PaperCard)input); + } + }), + INVITEM_PLANE("lblPlane", InventoryItem.class, FilterOperator.MULTI_LIST_OPS, new CustomListEvaluator(ImmutableList.copyOf(FModel.getPlanes())) { + @Override + protected ConquestPlane getItemValue(InventoryItem input) { + throw new RuntimeException("getItemValues should be called instead"); + } + @Override + protected Set getItemValues(InventoryItem input) { + if (!(input instanceof PaperCard)) { + return new HashSet<>(); + } + return ConquestPlane.getAllPlanesOfCard((PaperCard)input); + } + }), + INVITEM_REGION("lblRegion", InventoryItem.class, FilterOperator.MULTI_LIST_OPS, new CustomListEvaluator(ConquestRegion.getAllRegions()) { + @Override + protected ConquestRegion getItemValue(InventoryItem input) { + throw new RuntimeException("getItemValues should be called instead"); + } + @Override + protected Set getItemValues(InventoryItem input) { + if (!(input instanceof PaperCard)) { + return new HashSet<>(); + } + return ConquestRegion.getAllRegionsOfCard((PaperCard)input); + } + }), + INVITEM_QUEST_WORLD("lblQuestWorld", InventoryItem.class, FilterOperator.MULTI_LIST_OPS, new CustomListEvaluator(ImmutableList.copyOf(FModel.getWorlds())) { + @Override + protected QuestWorld getItemValue(InventoryItem input) { + throw new RuntimeException("getItemValues should be called instead"); + } + @Override + protected Set getItemValues(InventoryItem input) { + if (!(input instanceof PaperCard)) { + return new HashSet<>(); + } + return QuestWorld.getAllQuestWorldsOfCard(((PaperCard)input)); + } + }), + INVITEM_COLOR("lblColor", InventoryItem.class, FilterOperator.COMBINATION_OPS, new ColorEvaluator() { + @Override + protected MagicColor.Color getItemValue(InventoryItem input) { + throw new RuntimeException("getItemValues should be called instead"); + } + @Override + protected Set getItemValues(InventoryItem input) { + if (!(input instanceof PaperCard)) { + return new HashSet<>(); + } + return ((PaperCard)input).getRules().getColor().toEnumSet(); + } + }), + INVITEM_COLOR_IDENTITY("lblColorIdentity", InventoryItem.class, FilterOperator.COMBINATION_OPS, new ColorEvaluator() { + @Override + protected MagicColor.Color getItemValue(InventoryItem input) { + throw new RuntimeException("getItemValues should be called instead"); + } + @Override + protected Set getItemValues(InventoryItem input) { + if (!(input instanceof PaperCard)) { + return new HashSet<>(); + } + return ((PaperCard)input).getRules().getColorIdentity().toEnumSet(); + } + }), + INVITEM_COLOR_COUNT("lblColorCount", InventoryItem.class, FilterOperator.NUMBER_OPS, new NumericEvaluator(0, 5) { + @Override + protected Integer getItemValue(InventoryItem input) { + if (!(input instanceof PaperCard)) { + return 0; + } + return ((PaperCard)input).getRules().getColor().countColors(); + } + }), + INVITEM_TYPE("lblType", InventoryItem.class, FilterOperator.COMBINATION_OPS, new CustomListEvaluator(CardType.getCombinedSuperAndCoreTypes()) { + @Override + protected String getItemValue(InventoryItem input) { + throw new RuntimeException("getItemValues should be called instead"); + } + @Override + protected Set getItemValues(InventoryItem input) { + if (!(input instanceof PaperCard)) { + return new HashSet<>(); + } + final CardType type = ((PaperCard)input).getRules().getType(); + final Set types = new HashSet<>(); + for (Supertype t : type.getSupertypes()) { + types.add(t.name()); + } + for (CoreType t : type.getCoreTypes()) { + types.add(t.name()); + } + return types; + } + }), + INVITEM_SUB_TYPE("lblSubtype", InventoryItem.class, FilterOperator.COMBINATION_OPS, new CustomListEvaluator(CardType.getSortedSubTypes()) { + @Override + protected String getItemValue(InventoryItem input) { + throw new RuntimeException("getItemValues should be called instead"); + } + @Override + protected Set getItemValues(InventoryItem input) { + if (!(input instanceof PaperCard)) { + return new HashSet<>(); + } + return (Set)((PaperCard)input).getRules().getType().getSubtypes(); + } + }), + INVITEM_CMC("lblCMC", InventoryItem.class, FilterOperator.NUMBER_OPS, new NumericEvaluator(0, 20) { + @Override + protected Integer getItemValue(InventoryItem input) { + if (!(input instanceof PaperCard)) { + return 0; + } + return ((PaperCard)input).getRules().getManaCost().getCMC(); + } + }), + INVITEM_GENERIC_COST("lblGenericCost", InventoryItem.class, FilterOperator.NUMBER_OPS, new NumericEvaluator(0, 20) { + @Override + protected Integer getItemValue(InventoryItem input) { + if (!(input instanceof PaperCard)) { + return 0; + } + return ((PaperCard)input).getRules().getManaCost().getGenericCost(); + } + }), + INVITEM_POWER("lblPower", InventoryItem.class, FilterOperator.NUMBER_OPS, new NumericEvaluator(0, 20) { + @Override + protected Integer getItemValue(InventoryItem input) { + if (!(input instanceof PaperCard)) { + return 0; + } + CardRules rules = ((PaperCard)input).getRules(); + if (rules.getType().isCreature()) { + return rules.getIntPower(); + } + return null; + } + }), + INVITEM_TOUGHNESS("lblToughness", InventoryItem.class, FilterOperator.NUMBER_OPS, new NumericEvaluator(0, 20) { + @Override + protected Integer getItemValue(InventoryItem input) { + if (!(input instanceof PaperCard)) { + return 0; + } + CardRules rules = ((PaperCard)input).getRules(); + if (rules.getType().isCreature()) { + return rules.getIntToughness(); + } + return null; + } + }), + INVITEM_MANA_COST("lblManaCost", InventoryItem.class, FilterOperator.STRING_OPS, new StringEvaluator() { + @Override + protected String getItemValue(InventoryItem input) { + if (!(input instanceof PaperCard)) { + return ""; + } + return ((PaperCard)input).getRules().getManaCost().toString(); + } + }), + INVITEM_FIRST_PRINTING("lblFirstPrinting", InventoryItem.class, FilterOperator.BOOLEAN_OPS, new BooleanEvaluator() { + @Override + protected Boolean getItemValue(InventoryItem input) { + List cards = FModel.getMagicDb().getCommonCards().getAllCards(input.getName()); + if (cards.size() <= 1) { return true; } + + Collections.sort(cards, FModel.getMagicDb().getEditions().CARD_EDITION_COMPARATOR); + return cards.get(0) == input; + } + }), + INVITEM_RARITY("lblRarity", InventoryItem.class, FilterOperator.SINGLE_LIST_OPS, new CustomListEvaluator(Arrays.asList(CardRarity.FILTER_OPTIONS), CardRarity.FN_GET_LONG_NAME, CardRarity.FN_GET_LONG_NAME) { + @Override + protected CardRarity getItemValue(InventoryItem input) { + if (!(input instanceof PaperCard)) { + return CardRarity.Special; + } + return ((PaperCard)input).getRarity(); + } + }), DECK_NAME("lblName", DeckProxy.class, FilterOperator.STRING_OPS, new StringEvaluator() { @Override protected String getItemValue(DeckProxy input) {