From 4e5457cfaa8a874ff4456aa36d3abfde7d36e138 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Sun, 28 Aug 2011 10:12:16 +0000 Subject: [PATCH] carddb and manaparser less related to mtg-data.txt and support alternative sources of data. --- src/main/java/forge/card/CardDb.java | 14 +++++++------- src/main/java/forge/card/CardManaCost.java | 19 ++++++++++++------- src/main/java/forge/card/MtgDataParser.java | 10 ++++++++-- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/main/java/forge/card/CardDb.java b/src/main/java/forge/card/CardDb.java index e56236dda86..0180d4d960d 100644 --- a/src/main/java/forge/card/CardDb.java +++ b/src/main/java/forge/card/CardDb.java @@ -2,6 +2,7 @@ package forge.card; import java.util.ArrayList; import java.util.Hashtable; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.NoSuchElementException; @@ -10,16 +11,13 @@ import java.util.Map.Entry; import org.apache.commons.lang3.StringUtils; import forge.Card; -import forge.FileUtil; -import forge.properties.ForgeProps; -import forge.properties.NewConstants; /** - *

CardOracleDatabase class.

+ *

CardDb class.

* * @author Forge - * @version $Id: CardOracleDatabase.java 9708 2011-08-09 19:34:12Z jendave $ + * @version $Id: CardDb.java 9708 2011-08-09 19:34:12Z jendave $ */ public final class CardDb { private static volatile CardDb onlyInstance = null; // 'volatile' keyword makes this working @@ -46,8 +44,10 @@ public final class CardDb { private CardDb() { - List mtgDataLines = FileUtil.readFile(ForgeProps.getFile(NewConstants.MTG_DATA)); - MtgDataParser parser = new MtgDataParser(mtgDataLines); + this(new MtgDataParser()); // I wish cardname.txt parser was be here. + } + + private CardDb(final Iterator parser) { while (parser.hasNext()) { addNewCard(parser.next()); } diff --git a/src/main/java/forge/card/CardManaCost.java b/src/main/java/forge/card/CardManaCost.java index 6ccd1d527fd..e5953ac5638 100644 --- a/src/main/java/forge/card/CardManaCost.java +++ b/src/main/java/forge/card/CardManaCost.java @@ -4,10 +4,8 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; - import org.apache.commons.lang3.StringUtils; - /** *

CardManaCost class.

* @@ -15,7 +13,6 @@ import org.apache.commons.lang3.StringUtils; * @version $Id: CardManaCost.java 9708 2011-08-09 19:34:12Z jendave $ */ - public final class CardManaCost implements Comparable { private final List shards = new ArrayList(); private final int genericCost; @@ -35,7 +32,10 @@ public final class CardManaCost implements Comparable { public static final CardManaCost empty = new CardManaCost(); public CardManaCost(final String cost) { - ParserMtgData parser = new ParserMtgData(cost); + this(new ParserMtgData(cost)); + } + + public CardManaCost(final ManaParser parser) { if (!parser.hasNext()) { throw new RuntimeException("Empty manacost passed to parser (this should have been handled before)"); } @@ -44,7 +44,7 @@ public final class CardManaCost implements Comparable { CardManaCostShard shard = parser.next(); if (shard != null) { shards.add(shard); } // null is OK - that was generic mana } - genericCost = parser.getColorlessCost(); // collect generic mana here + genericCost = parser.getTotalColorlessCost(); // collect generic mana here stringValue = getSimpleString(); } @@ -93,7 +93,12 @@ public final class CardManaCost implements Comparable { return stringValue; } - public class ParserMtgData implements Iterator { + public interface ManaParser extends Iterator + { + int getTotalColorlessCost(); + } + + public static class ParserMtgData implements ManaParser { private final String cost; private int nextBracket; @@ -107,7 +112,7 @@ public final class CardManaCost implements Comparable { colorlessCost = 0; } - public int getColorlessCost() { + public int getTotalColorlessCost() { if ( hasNext() ) { throw new RuntimeException("Colorless cost should be obtained after iteration is complete"); } diff --git a/src/main/java/forge/card/MtgDataParser.java b/src/main/java/forge/card/MtgDataParser.java index b18b5eb631f..a373ee2c03f 100644 --- a/src/main/java/forge/card/MtgDataParser.java +++ b/src/main/java/forge/card/MtgDataParser.java @@ -6,11 +6,17 @@ import java.util.List; import org.apache.commons.lang3.StringUtils; +import forge.FileUtil; +import forge.properties.ForgeProps; +import forge.properties.NewConstants; + public final class MtgDataParser implements Iterator { private Iterator it; - public MtgDataParser(final Iterable data) { - it = data.iterator(); + private final List mtgDataLines; + public MtgDataParser() { + mtgDataLines = FileUtil.readFile(ForgeProps.getFile(NewConstants.MTG_DATA)); + it = mtgDataLines.iterator(); skipSetList(); }