removed redundant imports

CardPrinted now supports getImageFinelame()
SetInfoUtil refactored, its dependencies updated
This commit is contained in:
Maxmtg
2011-08-30 23:30:14 +00:00
parent 138a85b5de
commit 558e835f85
10 changed files with 156 additions and 271 deletions

View File

@@ -6,7 +6,6 @@ import java.util.Map;
import net.slightlymagic.braids.util.UtilFunctions; import net.slightlymagic.braids.util.UtilFunctions;
import forge.card.cardFactory.CardFactoryInterface; import forge.card.cardFactory.CardFactoryInterface;
import forge.card.cardFactory.LazyCardFactory;
import forge.card.cardFactory.PreloadingCardFactory; import forge.card.cardFactory.PreloadingCardFactory;
import forge.card.mana.ManaPool; import forge.card.mana.ManaPool;
import forge.card.trigger.TriggerHandler; import forge.card.trigger.TriggerHandler;

View File

@@ -1,5 +1,6 @@
package forge; package forge;
import forge.card.CardPrinted;
import forge.card.mana.ManaCost; import forge.card.mana.ManaCost;
import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellAbilityList; import forge.card.spellability.SpellAbilityList;
@@ -11,10 +12,13 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Random; import java.util.Random;
import java.util.Set; import java.util.Set;
import org.apache.commons.lang3.StringUtils;
/** /**
* <p>CardUtil class.</p> * <p>CardUtil class.</p>
@@ -489,80 +493,52 @@ public final class CardUtil {
* @return a {@link java.lang.String} object. * @return a {@link java.lang.String} object.
*/ */
public static String buildFilename(final Card card) { public static String buildFilename(final Card card) {
File path = null; boolean token = card.isToken() && !card.isCopiedToken();
if (card.isToken() && !card.isCopiedToken()) { return buildFilename(card.getName(), card.getCurSetCode(), card.getRandomPicture(), token);
path = ForgeProps.getFile(NewConstants.IMAGE_TOKEN);
} else {
path = ForgeProps.getFile(NewConstants.IMAGE_BASE);
} }
StringBuilder sbKey = new StringBuilder(); public static String buildFilename(final CardPrinted card) {
return buildFilename(card.getName(), card.getSet(), card.getArtIndex(), false);
}
private static String buildFilename(final String cardName, final String setName,
final int artIndex, final boolean isToken)
{
File path = ForgeProps.getFile(isToken ? NewConstants.IMAGE_TOKEN : NewConstants.IMAGE_BASE);
String nn = artIndex > 0 ? Integer.toString(artIndex) : "";
String cleanCardName = GuiDisplayUtil.cleanString(cardName);
File f = null; File f = null;
if (!card.getCurSetCode().equals("")) { if (StringUtils.isNotBlank(setName)) {
String nn = ""; String mwsCardName = GuiDisplayUtil.cleanStringMWS(cardName);
if (card.getRandomPicture() > 0) {
nn = Integer.toString(card.getRandomPicture());
}
//First try 3 letter set code with MWS filename format //First, try 3 letter set code with MWS filename format
sbKey.append(card.getCurSetCode() + "/"); String mwsSet3 = String.format("%s/%s%s.full", setName, mwsCardName, nn);
sbKey.append(GuiDisplayUtil.cleanStringMWS(card.getName()) + nn + ".full"); f = new File(path, mwsSet3 + ".jpg");
if (f.exists()) { return mwsSet3; }
f = new File(path, sbKey.toString() + ".jpg");
if (f.exists()) {
return sbKey.toString();
}
sbKey = new StringBuilder();
//Second, try 2 letter set code with MWS filename format //Second, try 2 letter set code with MWS filename format
sbKey.append(SetInfoUtil.getSetCode2_SetCode3(card.getCurSetCode()) + "/"); String mwsSet2 = String.format("%s/%s%s.full", SetInfoUtil.getCode2ByCode(setName), mwsCardName, nn);
sbKey.append(GuiDisplayUtil.cleanStringMWS(card.getName()) + nn + ".full"); f = new File(path, mwsSet2 + ".jpg");
if (f.exists()) { return mwsSet2; }
f = new File(path, sbKey.toString() + ".jpg");
if (f.exists()) {
return sbKey.toString();
}
sbKey = new StringBuilder();
//Third, try 3 letter set code with Forge filename format //Third, try 3 letter set code with Forge filename format
sbKey.append(card.getCurSetCode() + "/"); String forgeSet3 = String.format("%s/%s%s", setName, cleanCardName, nn);
sbKey.append(GuiDisplayUtil.cleanString(card.getName()) + nn); f = new File(path, forgeSet3 + ".jpg");
if (f.exists()) { return forgeSet3; }
f = new File(path, sbKey.toString() + ".jpg");
if (f.exists()) {
return sbKey.toString();
}
sbKey = new StringBuilder();
} }
//Last, give up with set images, go with the old picture type //Last, give up with set images, go with the old picture type
sbKey.append(GuiDisplayUtil.cleanString(card.getImageName())); String forgePlain = String.format("%s%s", cleanCardName, nn);
if (card.getRandomPicture() > 1) {
sbKey.append(card.getRandomPicture());
}
f = new File(path, sbKey.toString() + ".jpg"); f = new File(path, forgePlain + ".jpg");
if (f.exists()) { if (f.exists()) { return forgePlain; }
return sbKey.toString();
}
sbKey = new StringBuilder(); // give up with art index
f = new File(path, cleanCardName + ".jpg");
//Really last-ditch effort, forget the picture number if (f.exists()) { return cleanCardName; }
sbKey.append(GuiDisplayUtil.cleanString(card.getImageName()));
f = new File(path, sbKey.toString() + ".jpg");
if (f.exists()) {
return sbKey.toString();
}
//if still no file, download if option enabled? //if still no file, download if option enabled?
return "none"; return "none";
} }

View File

@@ -17,6 +17,7 @@ import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.Random; import java.util.Random;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
@@ -389,7 +390,7 @@ public class Gui_DeckEditor extends JFrame implements CardContainer, DeckDisplay
String SC = ""; String SC = "";
if (!(searchSetCombo.getSelectedItem().toString().equals(""))) { if (!(searchSetCombo.getSelectedItem().toString().equals(""))) {
SC = SetInfoUtil.getSetCode3_SetName(searchSetCombo.getSelectedItem().toString()); SC = SetInfoUtil.getCode3ByName(searchSetCombo.getSelectedItem().toString());
boolean result = false; boolean result = false;
@@ -959,8 +960,11 @@ public class Gui_DeckEditor extends JFrame implements CardContainer, DeckDisplay
searchSetCombo.removeAllItems(); searchSetCombo.removeAllItems();
searchSetCombo.addItem(""); searchSetCombo.addItem("");
for (int i = 0; i < SetInfoUtil.getSetNameList().size(); i++) List<String> allSetsNames = SetInfoUtil.getNameList();
searchSetCombo.addItem(SetInfoUtil.getSetNameList().get(i)); for (String s : allSetsNames) {
searchSetCombo.addItem(s);
}
this.getContentPane().add(searchSetCombo, "wmin 150, grow"); this.getContentPane().add(searchSetCombo, "wmin 150, grow");
this.getContentPane().add(statsLabel2, "cell 0 4"); this.getContentPane().add(statsLabel2, "cell 0 4");

View File

@@ -394,7 +394,7 @@ public class Gui_DownloadSetPictures_LQ extends DefaultBoundedRangeModel impleme
for (int j = 0; j < cSetInfo.size(); j++) { for (int j = 0; j < cSetInfo.size(); j++) {
c.setCurSetCode(cSetInfo.get(j).Code); c.setCurSetCode(cSetInfo.get(j).Code);
String SC3 = c.getCurSetCode(); String SC3 = c.getCurSetCode();
String SC2 = SetInfoUtil.getSetCode2_SetCode3(c.getCurSetCode()); String SC2 = SetInfoUtil.getCode2ByCode(c.getCurSetCode());
int n = 0; int n = 0;
if (cSetInfo.get(j).PicCount > 0) { if (cSetInfo.get(j).PicCount > 0) {

View File

@@ -402,7 +402,7 @@ public class Gui_MigrateLocalMWSSetPictures_HQ extends DefaultBoundedRangeModel
for (int j = 0; j < cSetInfo.size(); j++) { for (int j = 0; j < cSetInfo.size(); j++) {
c.setCurSetCode(cSetInfo.get(j).Code); c.setCurSetCode(cSetInfo.get(j).Code);
String SC3 = c.getCurSetCode(); String SC3 = c.getCurSetCode();
String SC2 = SetInfoUtil.getSetCode2_SetCode3(c.getCurSetCode()); String SC2 = SetInfoUtil.getCode2ByCode(c.getCurSetCode());
int n = 0; int n = 0;
if (cSetInfo.get(j).PicCount > 0) { if (cSetInfo.get(j).PicCount > 0) {

View File

@@ -1,7 +1,14 @@
package forge; package forge;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import net.slightlymagic.maxmtg.Predicate;
import forge.card.CardSet;
/** /**
* <p>SetInfoUtil class.</p> * <p>SetInfoUtil class.</p>
@@ -11,7 +18,8 @@ import java.util.HashMap;
*/ */
public class SetInfoUtil { public class SetInfoUtil {
/** Constant <code>setData</code> */ /** Constant <code>setData</code> */
private static ArrayList<HashMap<String, String>> setData = new ArrayList<HashMap<String, String>>(); private static HashMap<String, CardSet> setsByCode = new HashMap<String, CardSet>();
private static List<CardSet> allSets = new ArrayList<CardSet>();
/** /**
* <p>loadSetData.</p> * <p>loadSetData.</p>
@@ -19,57 +27,51 @@ public class SetInfoUtil {
private static void loadSetData() { private static void loadSetData() {
ArrayList<String> fData = FileUtil.readFile("res/blockdata/setdata.txt"); ArrayList<String> fData = FileUtil.readFile("res/blockdata/setdata.txt");
if (fData.size() > 0) { for (String s : fData) {
for (int i = 0; i < fData.size(); i++) { if (s.length() < 6) { continue; }
String s = fData.get(i);
if (s.length() > 5) {
HashMap<String, String> sm = new HashMap<String, String>();
String ss[] = s.split("\\|"); String[] sParts = s.trim().split("\\|");
for (int j = 0; j < ss.length; j++) { String code = null, code2 = null, name = null;
String kv[] = ss[j].split(":");
sm.put(kv[0], kv[1]);
}
setData.add(sm); int index = -1;
String alias = null;
for (String sPart : sParts) {
String[] kv = sPart.split(":", 2);
String key = kv[0].toLowerCase();
if ("code3".equals(key)) {
code = kv[1];
} else if ("code2".equals(key)) {
code2 = kv[1];
} else if ("name".equals(key)) {
name = kv[1];
} else if ("index".equals(key)) {
index = Integer.parseInt(kv[1]);
} else if ("alias".equals(key)) {
alias = kv[1];
} }
} }
CardSet set = new CardSet(index, name, code, code2);
setsByCode.put(code, set);
if (alias != null) { setsByCode.put(alias, set); }
allSets.add(set);
} }
Collections.sort(allSets);
} }
/** public static CardSet getSetByCode(final String code) {
* <p>getSetCode2List.</p> if (setsByCode.isEmpty()) { loadSetData(); }
* return setsByCode.get(code);
* @return a {@link java.util.ArrayList} object. }
*/ public static CardSet getSetByCodeOrThrow(final String code) {
public static ArrayList<String> getSetCode2List() { if (setsByCode.isEmpty()) { loadSetData(); }
ArrayList<String> scl = new ArrayList<String>(); CardSet set = setsByCode.get(code);
if (null == set) { throw new RuntimeException(String.format("Set with code '%s' not found", code)); }
if (setData.size() == 0) return set;
loadSetData();
for (int i = 0; i < setData.size(); i++)
scl.add(setData.get(i).get("Code2"));
return scl;
} }
/** public static List<String> getCodeList() {
* <p>getSetCode3List.</p> if (setsByCode.isEmpty()) { loadSetData(); }
* return new ArrayList<String>(setsByCode.keySet());
* @return a {@link java.util.ArrayList} object.
*/
public static ArrayList<String> getSetCode3List() {
ArrayList<String> scl = new ArrayList<String>();
if (setData.size() == 0)
loadSetData();
for (int i = 0; i < setData.size(); i++)
scl.add(setData.get(i).get("Code3"));
return scl;
} }
/** /**
@@ -77,101 +79,26 @@ public class SetInfoUtil {
* *
* @return a {@link java.util.ArrayList} object. * @return a {@link java.util.ArrayList} object.
*/ */
public static ArrayList<String> getSetNameList() { public static List<String> getNameList() {
ArrayList<String> snl = new ArrayList<String>(); if (setsByCode.isEmpty()) { loadSetData(); }
if (setData.size() == 0) return Predicate.getTrue(CardSet.class).select(allSets, CardSet.fn1, CardSet.fnGetName);
loadSetData();
for (int i = 0; i < setData.size(); i++)
snl.add(setData.get(i).get("Name"));
return snl;
} }
/** public static String getCode3ByName(final String setName) {
* <p>getSetCode2_SetName.</p> if (setsByCode.isEmpty()) { loadSetData(); }
*
* @param SetName a {@link java.lang.String} object.
* @return a {@link java.lang.String} object.
*/
public static String getSetCode2_SetName(String SetName) {
if (setData.size() == 0)
loadSetData();
for (int i = 0; i < setData.size(); i++) for (CardSet s : setsByCode.values()) {
if (setData.get(i).get("Name").equals(SetName)) if (s.getName().equals(setName)) { return s.getCode(); }
return setData.get(i).get("Code2"); }
return ""; return "";
} }
/** public static String getCode2ByCode(final String code) {
* <p>getSetCode3_SetName.</p> if (setsByCode.isEmpty()) { loadSetData(); }
* CardSet set = setsByCode.get(code);
* @param SetName a {@link java.lang.String} object. return set == null ? "" : set.getCode2();
* @return a {@link java.lang.String} object.
*/
public static String getSetCode3_SetName(String SetName) {
if (setData.size() == 0)
loadSetData();
for (int i = 0; i < setData.size(); i++)
if (setData.get(i).get("Name").equals(SetName))
return setData.get(i).get("Code3");
return "";
}
/**
* <p>getSetCode2_SetCode3.</p>
*
* @param SetCode3 a {@link java.lang.String} object.
* @return a {@link java.lang.String} object.
*/
public static String getSetCode2_SetCode3(String SetCode3) {
if (setData.size() == 0)
loadSetData();
for (int i = 0; i < setData.size(); i++)
if (setData.get(i).get("Code3").equals(SetCode3))
return setData.get(i).get("Code2");
return "";
}
/**
* <p>getSetCode3_SetCode2.</p>
*
* @param SetCode2 a {@link java.lang.String} object.
* @return a {@link java.lang.String} object.
*/
public static String getSetCode3_SetCode2(String SetCode2) {
if (setData.size() == 0)
loadSetData();
for (int i = 0; i < setData.size(); i++)
if (setData.get(i).get("Code2").equals(SetCode2))
return setData.get(i).get("Code3");
return "";
}
/**
* <p>getSetName_SetCode2.</p>
*
* @param SetCode2 a {@link java.lang.String} object.
* @return a {@link java.lang.String} object.
*/
public static String getSetName_SetCode2(String SetCode2) {
if (setData.size() == 0)
loadSetData();
for (int i = 0; i < setData.size(); i++)
if (setData.get(i).get("Code2").equals(SetCode2))
return setData.get(i).get("Name");
return "";
} }
/** /**
@@ -180,15 +107,10 @@ public class SetInfoUtil {
* @param SetCode3 a {@link java.lang.String} object. * @param SetCode3 a {@link java.lang.String} object.
* @return a {@link java.lang.String} object. * @return a {@link java.lang.String} object.
*/ */
public static String getSetName_SetCode3(String SetCode3) { public static String getNameByCode(String code) {
if (setData.size() == 0) if (setsByCode.isEmpty()) { loadSetData(); }
loadSetData(); CardSet set = setsByCode.get(code);
return set == null ? "" : set.getName();
for (int i = 0; i < setData.size(); i++)
if (setData.get(i).get("Code3").equals(SetCode3))
return setData.get(i).get("Name");
return "";
} }
/** /**
@@ -197,28 +119,18 @@ public class SetInfoUtil {
* @param alSI a {@link java.util.ArrayList} object. * @param alSI a {@link java.util.ArrayList} object.
* @return a {@link java.lang.String} object. * @return a {@link java.lang.String} object.
*/ */
public static String getMostRecentSet(ArrayList<SetInfo> alSI) { public static String getMostRecentSet(final ArrayList<SetInfo> alSI) {
if (setData.size() == 0) if (setsByCode.isEmpty()) { loadSetData(); }
loadSetData();
int mostRecent = -1; int size = alSI.size();
if (size == 0) { return ""; }
if (size == 1) { return alSI.get(0).Code; }
for (SetInfo s : alSI) { CardSet[] sets = new CardSet[size];
for (int j = 0; j < setData.size(); j++) { for (int i = 0; i < size; i++) { sets[i] = setsByCode.get(alSI.get(i).Code); }
if (setData.get(j).get("Code3").equals(s.Code)) { Arrays.sort(sets);
if (j > mostRecent) {
mostRecent = j;
break;
}
}
}
} return sets[sets.length - 1].getCode();
if (mostRecent > -1)
return setData.get(mostRecent).get("Code3");
return "";
} }
/** /**
@@ -233,8 +145,7 @@ public class SetInfoUtil {
for (int i = 0; i < SetList.size(); i++) { for (int i = 0; i < SetList.size(); i++) {
si = SetList.get(i); si = SetList.get(i);
if (si.Code.equals(SetCode)) if (si.Code.equals(SetCode)) { return si; }
return si;
} }
return null; return null;
@@ -246,16 +157,10 @@ public class SetInfoUtil {
* @param SetCode a {@link java.lang.String} object. * @param SetCode a {@link java.lang.String} object.
* @return a int. * @return a int.
*/ */
public static int getSetIndex(String SetCode) { public static int getIndexByCode(final String code) {
if (setData.size() == 0) if (setsByCode.isEmpty()) { loadSetData(); }
loadSetData(); CardSet set = setsByCode.get(code);
return set == null ? 0 : set.getIndex();
for (int i = 0; i < setData.size(); i++) {
if (setData.get(i).get("Code3").equals(SetCode))
return Integer.parseInt(setData.get(i).get("Index"));
}
return 0;
} }
/** Constant <code>blockData</code> */ /** Constant <code>blockData</code> */

View File

@@ -119,8 +119,8 @@ public class TableSorter implements Comparator<Card>, NewConstants {
bCom = getValue(b); bCom = getValue(b);
} else if (column == 7 && col7mod == true)//Set } else if (column == 7 && col7mod == true)//Set
{ {
aCom = SetInfoUtil.getSetIndex(a.getCurSetCode()); aCom = SetInfoUtil.getIndexByCode(a.getCurSetCode());
bCom = SetInfoUtil.getSetIndex(b.getCurSetCode()); bCom = SetInfoUtil.getIndexByCode(b.getCurSetCode());
} else if (column == 8)//AI } else if (column == 8)//AI
{ {
aCom = getAI(a); aCom = getAI(a);

View File

@@ -4,8 +4,6 @@ import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import org.apache.commons.lang3.StringUtils;
/** /**
* <p>CardManaCost class.</p> * <p>CardManaCost class.</p>
* *

View File

@@ -1,11 +1,13 @@
package forge.card; package forge.card;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import net.slightlymagic.braids.util.lambda.Lambda1; import net.slightlymagic.braids.util.lambda.Lambda1;
import net.slightlymagic.maxmtg.Predicate; import net.slightlymagic.maxmtg.Predicate;
import forge.AllZone; import forge.AllZone;
import forge.Card; import forge.Card;
import forge.CardUtil;
/** /**
* <p>CardReference class.</p> * <p>CardReference class.</p>
@@ -27,7 +29,10 @@ public final class CardPrinted implements Comparable<CardPrinted> {
private final transient CardRarity rarity; // rarity is given in ctor when set is assigned private final transient CardRarity rarity; // rarity is given in ctor when set is assigned
// need this to be sure that different cased names won't break the system (and create uniqie cardref entries) // need this to be sure that different cased names won't break the system (and create uniqie cardref entries)
private final transient String _name_lcase; private final transient String nameLcase;
// image filename is calculated only after someone request it
private transient String imageFilename = null;
// field RO accessors // field RO accessors
public String getName() { return name; } public String getName() { return name; }
@@ -36,7 +41,10 @@ public final class CardPrinted implements Comparable<CardPrinted> {
public boolean isFoil() { return foiled; } public boolean isFoil() { return foiled; }
public CardRules getCard() { return card; } public CardRules getCard() { return card; }
public CardRarity getRarity() { return rarity; } public CardRarity getRarity() { return rarity; }
public String getImageFilename() {
if (imageFilename == null) { imageFilename = CardUtil.buildFilename(this); }
return imageFilename;
}
// Lambda to get rules for selects from list of printed cards // Lambda to get rules for selects from list of printed cards
public static final Lambda1<CardRules, CardPrinted> fnGetRules = new Lambda1<CardRules, CardPrinted>() { public static final Lambda1<CardRules, CardPrinted> fnGetRules = new Lambda1<CardRules, CardPrinted>() {
@@ -44,14 +52,16 @@ public final class CardPrinted implements Comparable<CardPrinted> {
}; };
// Constructor is private. All non-foiled instances are stored in CardDb // Constructor is private. All non-foiled instances are stored in CardDb
private CardPrinted(final CardRules c, final String set, final CardRarity rare, final int index, boolean foil) { private CardPrinted(final CardRules c, final String set, final CardRarity rare,
final int index, final boolean foil)
{
card = c; card = c;
name = c.getName(); name = c.getName();
cardSet = set; cardSet = set;
artIndex = index; artIndex = index;
foiled = foil; foiled = foil;
rarity = rare; rarity = rare;
_name_lcase = name.toLowerCase(); nameLcase = name.toLowerCase();
} }
/* package visibility */ /* package visibility */
@@ -81,7 +91,7 @@ public final class CardPrinted implements Comparable<CardPrinted> {
@Override @Override
public int hashCode() { public int hashCode() {
int code = _name_lcase.hashCode() * 11 + cardSet.hashCode() * 59 + artIndex * 2; int code = nameLcase.hashCode() * 11 + cardSet.hashCode() * 59 + artIndex * 2;
if (foiled) { return code + 1; } if (foiled) { return code + 1; }
return code; return code;
} }
@@ -93,13 +103,18 @@ public final class CardPrinted implements Comparable<CardPrinted> {
public Card toForgeCard() { public Card toForgeCard() {
Card c = AllZone.getCardFactory().getCard(name, null); Card c = AllZone.getCardFactory().getCard(name, null);
if (c != null) {
c.setCurSetCode(getSet()); c.setCurSetCode(getSet());
c.setRandomPicture(artIndex);
c.setImageFilename(getImageFilename());
}
// else throw "Unsupported card";
return c; return c;
} }
@Override @Override
public int compareTo(final CardPrinted o) { public int compareTo(final CardPrinted o) {
int nameCmp = _name_lcase.compareTo(o._name_lcase); int nameCmp = nameLcase.compareTo(o.nameLcase);
if (0 != nameCmp) { return nameCmp; } if (0 != nameCmp) { return nameCmp; }
// TODO: compare sets properly // TODO: compare sets properly
return cardSet.compareTo(o.cardSet); return cardSet.compareTo(o.cardSet);
@@ -111,9 +126,9 @@ public final class CardPrinted implements Comparable<CardPrinted> {
{ {
return new PredicateRarity(value, isEqual); return new PredicateRarity(value, isEqual);
} }
public static Predicate<CardPrinted> printedInSets(final String[] value) public static Predicate<CardPrinted> printedInSets(final List<String> value, final boolean shouldContain)
{ {
return new PredicateSets(value); return new PredicateSets(value, shouldContain);
} }
private static class PredicateRarity extends Predicate<CardPrinted> { private static class PredicateRarity extends Predicate<CardPrinted> {
@@ -132,16 +147,20 @@ public final class CardPrinted implements Comparable<CardPrinted> {
} }
private static class PredicateSets extends Predicate<CardPrinted> { private static class PredicateSets extends Predicate<CardPrinted> {
private final String[] sets; private final List<String> sets;
private final boolean mustContain;
@Override public boolean isTrue(final CardPrinted card) { @Override public boolean isTrue(final CardPrinted card) {
return Arrays.binarySearch(sets, card.rarity) >= 0; return sets.contains(card.cardSet) == mustContain;
} }
public PredicateSets(final String[] wantSets) { public PredicateSets(final List<String> wantSets, boolean shouldContain) {
sets = wantSets.clone(); sets = wantSets; // maybe should make a copy here?
Arrays.sort(sets); mustContain = shouldContain;
} }
} }
/**
* Pre-built predicates are stored here to allow their re-usage and easier access from code
*/
public abstract static class Presets { public abstract static class Presets {
// Think twice before using these, since rarity is a prop of printed card. // Think twice before using these, since rarity is a prop of printed card.
public static final Predicate<CardPrinted> isCommon = rarity(true, CardRarity.Common); public static final Predicate<CardPrinted> isCommon = rarity(true, CardRarity.Common);
@@ -149,14 +168,12 @@ public final class CardPrinted implements Comparable<CardPrinted> {
public static final Predicate<CardPrinted> isRare = rarity(true, CardRarity.Rare); public static final Predicate<CardPrinted> isRare = rarity(true, CardRarity.Rare);
public static final Predicate<CardPrinted> isMythicRare = rarity(true, CardRarity.MythicRare); public static final Predicate<CardPrinted> isMythicRare = rarity(true, CardRarity.MythicRare);
public static final Predicate<CardPrinted> isRareOrMythic = Predicate.or(isRare, isMythicRare); public static final Predicate<CardPrinted> isRareOrMythic = Predicate.or(isRare, isMythicRare);
public static final Predicate<CardPrinted> isSpecial = rarity(true, CardRarity.Special); public static final Predicate<CardPrinted> isSpecial = rarity(true, CardRarity.Special);
public static final Predicate<CardPrinted> exceptLands = rarity(false, CardRarity.BasicLand); public static final Predicate<CardPrinted> exceptLands = rarity(false, CardRarity.BasicLand);
// TODO: Update this code on each rotation (or move this list to a file) // TODO: Update this code on each rotation (or move this list to a file)
public static final Predicate<CardPrinted> isStandard = printedInSets( public static final Predicate<CardPrinted> isStandard = printedInSets(
new String[] {"M12", "NPH", "MBS", "SOM", "M11", "ROE", "WWK", "ZEN"}); Arrays.asList(new String[] {"M12", "NPH", "MBS", "SOM", "M11", "ROE", "WWK", "ZEN"}), true);
} }
} }

View File

@@ -1,25 +1,11 @@
package forge.card; package forge.card;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
//import java.util.Enumeration;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
//import java.util.zip.ZipEntry;
//import java.util.zip.ZipFile;
import forge.card.CardManaCost.ManaParser; import forge.card.CardManaCost.ManaParser;
import forge.error.ErrorViewer;
import forge.properties.NewConstants;
/** /**