diff --git a/.gitattributes b/.gitattributes index 713fe30b31a..d9fae88d094 100644 --- a/.gitattributes +++ b/.gitattributes @@ -11374,6 +11374,7 @@ src/main/java/forge/util/Base64Coder.java svneol=native#text/plain src/main/java/forge/util/CopyFiles.java svneol=native#text/plain src/main/java/forge/util/FileFinder.java svneol=native#text/plain src/main/java/forge/util/FileSection.java -text +src/main/java/forge/util/FileStorageReader.java -text src/main/java/forge/util/FileUtil.java svneol=native#text/plain src/main/java/forge/util/FolderMap.java svneol=native#text/plain src/main/java/forge/util/FolderMapView.java -text diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index a851ca0be91..5c61256a2ec 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -8354,7 +8354,7 @@ public class Card extends GameEntity implements Comparable { * @return a {@link java.lang.String} object. */ public final String getMostRecentSet() { - return CardDb.instance().getCard(this.getName()).getSet(); + return CardDb.instance().getCard(this.getName()).getEdition(); } /** diff --git a/src/main/java/forge/CardUtil.java b/src/main/java/forge/CardUtil.java index 8b109c9d004..f5fd79e0c6a 100644 --- a/src/main/java/forge/CardUtil.java +++ b/src/main/java/forge/CardUtil.java @@ -696,8 +696,8 @@ public final class CardUtil { * @return the string */ public static String buildFilename(final CardPrinted card) { - final int maxIndex = card.getCard().getSetInfo(card.getSet()).getCopiesCount(); - return CardUtil.buildFilename(card.getName(), card.getSet(), card.getArtIndex(), maxIndex, false); + final int maxIndex = card.getCard().getSetInfo(card.getEdition()).getCopiesCount(); + return CardUtil.buildFilename(card.getName(), card.getEdition(), card.getArtIndex(), maxIndex, false); } /** @@ -710,8 +710,8 @@ public final class CardUtil { * @return the string */ public static String buildFilename(final CardPrinted card, final String nameToUse) { - final int maxIndex = card.getCard().getSetInfo(card.getSet()).getCopiesCount(); - return CardUtil.buildFilename(nameToUse, card.getSet(), card.getArtIndex(), maxIndex, false); + final int maxIndex = card.getCard().getSetInfo(card.getEdition()).getCopiesCount(); + return CardUtil.buildFilename(nameToUse, card.getEdition(), card.getArtIndex(), maxIndex, false); } private static String buildFilename(final String cardName, final String setName, final int artIndex, diff --git a/src/main/java/forge/GuiDownloadSetPicturesLQ.java b/src/main/java/forge/GuiDownloadSetPicturesLQ.java index 11d23c4b2df..d84f2566bcd 100644 --- a/src/main/java/forge/GuiDownloadSetPicturesLQ.java +++ b/src/main/java/forge/GuiDownloadSetPicturesLQ.java @@ -70,7 +70,7 @@ public class GuiDownloadSetPicturesLQ extends GuiDownloader { protected final void addCardToList(final ArrayList cList, final CardPrinted c, final String cardName) { final String urlBase = ForgeProps.getProperty(NewConstants.CARDFORGE_URL) + "/fpics/"; - final String setCode3 = c.getSet(); + final String setCode3 = c.getEdition(); final CardEdition thisSet = AllZone.getEditions().getEditionByCode(setCode3); final String setCode2 = thisSet.getCode2(); @@ -107,7 +107,7 @@ public class GuiDownloadSetPicturesLQ extends GuiDownloader { final ArrayList cList = new ArrayList(); for (final CardPrinted c : CardDb.instance().getAllCards()) { - final String setCode3 = c.getSet(); + final String setCode3 = c.getEdition(); if (StringUtils.isBlank(setCode3) || "???".equals(setCode3)) { continue; // we don't want cards from unknown sets } diff --git a/src/main/java/forge/deck/Deck.java b/src/main/java/forge/deck/Deck.java index 38de847163b..80a2a46e29c 100644 --- a/src/main/java/forge/deck/Deck.java +++ b/src/main/java/forge/deck/Deck.java @@ -203,11 +203,11 @@ public class Deck extends DeckBase implements Serializable, IHasName { final List out = new ArrayList(); for (final Entry e : main2sort) { final CardPrinted card = e.getKey(); - final boolean hasBadSetInfo = "???".equals(card.getSet()) || StringUtils.isBlank(card.getSet()); + final boolean hasBadSetInfo = "???".equals(card.getEdition()) || StringUtils.isBlank(card.getEdition()); if (hasBadSetInfo) { out.add(String.format("%d %s", e.getValue(), card.getName())); } else { - out.add(String.format("%d %s|%s", e.getValue(), card.getName(), card.getSet())); + out.add(String.format("%d %s|%s", e.getValue(), card.getName(), card.getEdition())); } } return out; diff --git a/src/main/java/forge/game/GameNew.java b/src/main/java/forge/game/GameNew.java index 7507cf0bb82..910092469ff 100644 --- a/src/main/java/forge/game/GameNew.java +++ b/src/main/java/forge/game/GameNew.java @@ -126,9 +126,9 @@ public class GameNew { for (int i = 0; i < stackOfCards.getValue(); i++) { final Card card = c.getCard(cardPrinted.getName(), AllZone.getHumanPlayer()); - card.setCurSetCode(cardPrinted.getSet()); + card.setCurSetCode(cardPrinted.getEdition()); - final int cntVariants = cardPrinted.getCard().getSetInfo(cardPrinted.getSet()).getCopiesCount(); + final int cntVariants = cardPrinted.getCard().getSetInfo(cardPrinted.getEdition()).getCopiesCount(); if (cntVariants > 1) { card.setRandomPicture(generator.nextInt(cntVariants - 1) + 1); } @@ -168,9 +168,9 @@ public class GameNew { for (int i = 0; i < stackOfCards.getValue(); i++) { final Card card = c.getCard(cardPrinted.getName(), AllZone.getComputerPlayer()); - card.setCurSetCode(cardPrinted.getSet()); + card.setCurSetCode(cardPrinted.getEdition()); - final int cntVariants = cardPrinted.getCard().getSetInfo(cardPrinted.getSet()).getCopiesCount(); + final int cntVariants = cardPrinted.getCard().getSetInfo(cardPrinted.getEdition()).getCopiesCount(); if (cntVariants > 1) { card.setRandomPicture(generator.nextInt(cntVariants - 1) + 1); } diff --git a/src/main/java/forge/game/limited/BoosterDraft.java b/src/main/java/forge/game/limited/BoosterDraft.java index f75cf725e0c..2e4277891b4 100644 --- a/src/main/java/forge/game/limited/BoosterDraft.java +++ b/src/main/java/forge/game/limited/BoosterDraft.java @@ -89,7 +89,7 @@ public final class BoosterDraft implements IBoosterDraft { this.packs.add(picker); } - IBoosterDraft.LAND_SET_CODE[0] = CardDb.instance().getCard("Plains").getSet(); + IBoosterDraft.LAND_SET_CODE[0] = CardDb.instance().getCard("Plains").getEdition(); break; case Block: // Draft from cards by block or set @@ -326,7 +326,7 @@ public final class BoosterDraft implements IBoosterDraft { if (Constant.Runtime.UPLOAD_DRAFT[0]) { for (int i = 0; i < thisBooster.size(); i++) { final CardPrinted cc = thisBooster.get(i); - final String cnBk = cc.getName() + "|" + cc.getSet(); + final String cnBk = cc.getName() + "|" + cc.getEdition(); float pickValue = 0; if (cc.equals(c)) { diff --git a/src/main/java/forge/game/limited/SealedDeck.java b/src/main/java/forge/game/limited/SealedDeck.java index c9ca1dcc68b..cfa9959d3a3 100644 --- a/src/main/java/forge/game/limited/SealedDeck.java +++ b/src/main/java/forge/game/limited/SealedDeck.java @@ -75,7 +75,7 @@ public class SealedDeck { this.packs.add(picker); } - this.getLandSetCode()[0] = CardDb.instance().getCard("Plains").getSet(); + this.getLandSetCode()[0] = CardDb.instance().getCard("Plains").getEdition(); } else if (sealedType.equals("Block")) { final Object o = GuiUtils.getChoice("Choose Block", AllZone.getEditions().getBlocks().toArray()); diff --git a/src/main/java/forge/gui/CardListViewer.java b/src/main/java/forge/gui/CardListViewer.java index 4de0b0a8772..59a695cd74f 100644 --- a/src/main/java/forge/gui/CardListViewer.java +++ b/src/main/java/forge/gui/CardListViewer.java @@ -218,7 +218,7 @@ public class CardListViewer { } if (null == this.cache[row]) { final Card card = AllZone.getCardFactory().getCard(cp.getName(), null); - card.setCurSetCode(cp.getSet()); + card.setCurSetCode(cp.getEdition()); card.setImageFilename(CardUtil.buildFilename(card)); this.cache[row] = card; } diff --git a/src/main/java/forge/gui/deckeditor/DeckImport.java b/src/main/java/forge/gui/deckeditor/DeckImport.java index 7d9de41d96b..ba2ab407f46 100644 --- a/src/main/java/forge/gui/deckeditor/DeckImport.java +++ b/src/main/java/forge/gui/deckeditor/DeckImport.java @@ -276,7 +276,7 @@ public class DeckImport extends JDialog { switch (token.getType()) { case KnownCard: return String.format("
%s * %s [%s] %s
", token.getNumber(), token.getCard() - .getName(), token.getCard().getSet(), token.getCard().isFoil() ? "foil" : ""); + .getName(), token.getCard().getEdition(), token.getCard().isFoil() ? "foil" : ""); case UnknownCard: return String.format("
%s * %s
", token.getNumber(), token.getText()); case SectionName: diff --git a/src/main/java/forge/gui/deckeditor/PresetColumns.java b/src/main/java/forge/gui/deckeditor/PresetColumns.java index b3e2ff35213..f5892548fae 100644 --- a/src/main/java/forge/gui/deckeditor/PresetColumns.java +++ b/src/main/java/forge/gui/deckeditor/PresetColumns.java @@ -55,12 +55,12 @@ public abstract class PresetColumns { } private static CardEdition toSetCmp(final InventoryItem i) { - return i instanceof InventoryItemFromSet ? AllZone.getEditions().getEditionByCode(((InventoryItemFromSet) i).getSet()) + return i instanceof InventoryItemFromSet ? AllZone.getEditions().getEditionByCode(((InventoryItemFromSet) i).getEdition()) : CardEdition.UNKNOWN; } private static String toSetStr(final InventoryItem i) { - return i instanceof InventoryItemFromSet ? ((InventoryItemFromSet) i).getSet() : "n/a"; + return i instanceof InventoryItemFromSet ? ((InventoryItemFromSet) i).getEdition() : "n/a"; } private static Integer toAiCmp(final InventoryItem i) { diff --git a/src/main/java/forge/gui/deckeditor/elements/CardPanelLite.java b/src/main/java/forge/gui/deckeditor/elements/CardPanelLite.java index e4c4144f03e..5fe59f01255 100644 --- a/src/main/java/forge/gui/deckeditor/elements/CardPanelLite.java +++ b/src/main/java/forge/gui/deckeditor/elements/CardPanelLite.java @@ -116,7 +116,7 @@ public class CardPanelLite extends CardPanelBase { } else { if (card instanceof BoosterPack) { final BoosterPack booster = (BoosterPack) card; - final CardEdition set = AllZone.getEditions().getEditionByCodeOrThrow(booster.getSet()); + final CardEdition set = AllZone.getEditions().getEditionByCodeOrThrow(booster.getEdition()); final String tpl = "%s booster pack.%n%nContains %d cards.%n%nBuy it to reveal the cards and add them to your inventory."; this.description.setText(String.format(tpl, set.getName(), set.getBoosterData().getTotal())); } else if (card instanceof PreconDeck) { diff --git a/src/main/java/forge/item/BoosterPack.java b/src/main/java/forge/item/BoosterPack.java index 445a118aae4..af114be0c2d 100644 --- a/src/main/java/forge/item/BoosterPack.java +++ b/src/main/java/forge/item/BoosterPack.java @@ -77,7 +77,7 @@ public class BoosterPack implements InventoryItemFromSet { * @return String */ @Override - public final String getSet() { + public final String getEdition() { return this.cardSet.getCode(); } diff --git a/src/main/java/forge/item/CardDb.java b/src/main/java/forge/item/CardDb.java index 8efd239e757..242a03b0b0c 100644 --- a/src/main/java/forge/item/CardDb.java +++ b/src/main/java/forge/item/CardDb.java @@ -392,10 +392,10 @@ public final class CardDb { // Find card with maximal set index result = namedCards.get(0); - int resIndex = AllZone.getEditions().getEditionByCode((result).getSet()).getIndex(); + int resIndex = AllZone.getEditions().getEditionByCode((result).getEdition()).getIndex(); for (final CardPrinted card : namedCards) { - final int thisIndex = AllZone.getEditions().getEditionByCode((card).getSet()).getIndex(); + final int thisIndex = AllZone.getEditions().getEditionByCode((card).getEdition()).getIndex(); if (thisIndex > resIndex) { result = card; resIndex = thisIndex; diff --git a/src/main/java/forge/item/CardPrinted.java b/src/main/java/forge/item/CardPrinted.java index 299ffe16f68..e6c137bc51f 100644 --- a/src/main/java/forge/item/CardPrinted.java +++ b/src/main/java/forge/item/CardPrinted.java @@ -46,7 +46,7 @@ public final class CardPrinted implements Comparable, InventoryItem // These fields are kinda PK for PrintedCard private final String name; - private final String cardSet; + private final String edition; private final int artIndex; private final boolean foiled; @@ -88,8 +88,8 @@ public final class CardPrinted implements Comparable, InventoryItem * @return String */ @Override - public String getSet() { - return this.cardSet; + public String getEdition() { + return this.edition; } /** @@ -171,10 +171,10 @@ public final class CardPrinted implements Comparable, InventoryItem }; // 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, final boolean foil) { + private CardPrinted(final CardRules c, final String edition0, final CardRarity rare, final int index, final boolean foil) { this.card = c; this.name = c.getName(); - this.cardSet = set; + this.edition = edition0; this.artIndex = index; this.foiled = foil; this.rarity = rare; @@ -187,7 +187,7 @@ public final class CardPrinted implements Comparable, InventoryItem * * @param c * the c - * @param set + * @param edition * the set * @param rare * the rare @@ -195,8 +195,8 @@ public final class CardPrinted implements Comparable, InventoryItem * the index * @return the card printed */ - static CardPrinted build(final CardRules c, final String set, final CardRarity rare, final int index) { - return new CardPrinted(c, set, rare, index, false); + static CardPrinted build(final CardRules c, final String edition, final CardRarity rare, final int index) { + return new CardPrinted(c, edition, rare, index, false); } /* foiled don't need to stay in CardDb's structures, so u'r free to create */ @@ -208,7 +208,7 @@ public final class CardPrinted implements Comparable, InventoryItem * @return the card printed */ public static CardPrinted makeFoiled(final CardPrinted c) { - return new CardPrinted(c.card, c.cardSet, c.rarity, c.artIndex, true); + return new CardPrinted(c.card, c.edition, c.rarity, c.artIndex, true); } // Want this class to be a key for HashTable @@ -233,7 +233,7 @@ public final class CardPrinted implements Comparable, InventoryItem if (!this.name.equals(other.name)) { return false; } - if (!this.cardSet.equals(other.cardSet)) { + if (!this.edition.equals(other.edition)) { return false; } if ((other.foiled != this.foiled) || (other.artIndex != this.artIndex)) { @@ -250,7 +250,7 @@ public final class CardPrinted implements Comparable, InventoryItem */ @Override public int hashCode() { - final int code = (this.nameLcase.hashCode() * 11) + (this.cardSet.hashCode() * 59) + (this.artIndex * 2); + final int code = (this.nameLcase.hashCode() * 11) + (this.edition.hashCode() * 59) + (this.artIndex * 2); if (this.foiled) { return code + 1; } @@ -277,7 +277,7 @@ public final class CardPrinted implements Comparable, InventoryItem public Card toForgeCard() { final Card c = AllZone.getCardFactory().getCard(this.name, null); if (c != null) { - c.setCurSetCode(this.getSet()); + c.setCurSetCode(this.getEdition()); c.setRandomPicture(this.artIndex + 1); c.setImageFilename(this.getImageFilename()); if (c.isFlip()) { @@ -307,7 +307,7 @@ public final class CardPrinted implements Comparable, InventoryItem return nameCmp; } // TODO compare sets properly - return this.cardSet.compareTo(o.cardSet); + return this.edition.compareTo(o.edition); } /** @@ -414,7 +414,7 @@ public final class CardPrinted implements Comparable, InventoryItem @Override public boolean isTrue(final CardPrinted card) { - return this.sets.contains(card.cardSet) == this.mustContain; + return this.sets.contains(card.edition) == this.mustContain; } public PredicateSets(final List wantSets, final boolean shouldContain) { diff --git a/src/main/java/forge/item/InventoryItemFromSet.java b/src/main/java/forge/item/InventoryItemFromSet.java index 69d7c420c8c..6d206633dde 100644 --- a/src/main/java/forge/item/InventoryItemFromSet.java +++ b/src/main/java/forge/item/InventoryItemFromSet.java @@ -44,5 +44,5 @@ public interface InventoryItemFromSet extends InventoryItem { * * @return the sets the */ - String getSet(); + String getEdition(); } diff --git a/src/main/java/forge/item/PreconDeck.java b/src/main/java/forge/item/PreconDeck.java index f5c81eabd25..9a8649bff85 100644 --- a/src/main/java/forge/item/PreconDeck.java +++ b/src/main/java/forge/item/PreconDeck.java @@ -120,7 +120,7 @@ public class PreconDeck implements InventoryItemFromSet { * @see forge.item.InventoryItemFromSet#getSet() */ @Override - public String getSet() { + public String getEdition() { return this.set; } diff --git a/src/main/java/forge/quest/data/QuestDataIO.java b/src/main/java/forge/quest/data/QuestDataIO.java index 1787394893f..6fa734bb211 100644 --- a/src/main/java/forge/quest/data/QuestDataIO.java +++ b/src/main/java/forge/quest/data/QuestDataIO.java @@ -273,7 +273,7 @@ public class QuestDataIO { protected void write(final CardPrinted cref, final Integer count, final HierarchicalStreamWriter writer) { writer.startNode("card"); writer.addAttribute("c", cref.getName()); - writer.addAttribute("s", cref.getSet()); + writer.addAttribute("s", cref.getEdition()); if (cref.isFoil()) { writer.addAttribute("foil", "1"); } @@ -286,7 +286,7 @@ public class QuestDataIO { protected void write(final BoosterPack booster, final Integer count, final HierarchicalStreamWriter writer) { writer.startNode("booster"); - writer.addAttribute("s", booster.getSet()); + writer.addAttribute("s", booster.getEdition()); writer.addAttribute("n", count.toString()); writer.endNode(); } diff --git a/src/main/java/forge/quest/data/QuestEventManager.java b/src/main/java/forge/quest/data/QuestEventManager.java index 6b5edd0397c..621484e8553 100644 --- a/src/main/java/forge/quest/data/QuestEventManager.java +++ b/src/main/java/forge/quest/data/QuestEventManager.java @@ -21,8 +21,11 @@ import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Random; +import org.apache.commons.lang3.StringUtils; + import forge.AllZone; import forge.Singletons; import forge.deck.Deck; @@ -31,6 +34,7 @@ import forge.properties.ForgeProps; import forge.properties.NewConstants; import forge.quest.data.QuestPreferences.QPref; import forge.util.FileUtil; +import forge.util.SectionUtil; /** *

@@ -72,28 +76,25 @@ public class QuestEventManager { this.allDuels = new ArrayList(); this.allChallenges = new ArrayList(); - List contents; QuestEvent tempEvent; final File[] allFiles = ForgeProps.getFile(NewConstants.Quest.DECKS).listFiles(DeckSerializer.DCK_FILE_FILTER); for (final File f : allFiles) { - contents = FileUtil.readFile(f); - - if (contents.get(0).trim().equals("[quest]")) { - tempEvent = new QuestChallenge(); - this.assembleChallengeUniquedata(contents, (QuestChallenge) tempEvent); + Map> contents = SectionUtil.parseSections(FileUtil.readFile(f)); + + if (contents.containsKey("quest")) { + tempEvent = readChallenge(contents.get("quest")); this.allChallenges.add((QuestChallenge) tempEvent); } // End if([quest]) else { - tempEvent = new QuestDuel(); - this.assembleDuelUniquedata(contents, (QuestDuel) tempEvent); + tempEvent = readDuel(contents.get("metadata")); this.allDuels.add((QuestDuel) tempEvent); } // Assemble metadata (may not be necessary later) and deck object. - this.assembleEventMetadata(contents, tempEvent); - tempEvent.setEventDeck(Deck.fromLines(contents)); + this.readMetadata(contents.get("metadata"), tempEvent); + tempEvent.setEventDeck(Deck.fromSections(contents)); } // End for(allFiles) this.assembleDuelDifficultyLists(); @@ -125,18 +126,13 @@ public class QuestEventManager { * @param contents * @param qd */ - private void assembleDuelUniquedata(final List contents, final QuestDuel qd) { + private QuestDuel readDuel(final List contents) { + final QuestDuel qd = new QuestDuel(); int eqpos; String key, value; for (final String s : contents) { - if (s.equals("[metadata]")) { - break; - } - if (s.equals("[duel]")) { - continue; - } - if (s.equals("")) { + if (s.equals("")) { continue; } @@ -151,6 +147,7 @@ public class QuestEventManager { qd.setName(value); } } + return qd; } /** @@ -162,19 +159,14 @@ public class QuestEventManager { * @param contents * @param qc */ - private void assembleChallengeUniquedata(final List contents, final QuestChallenge qc) { + private QuestChallenge readChallenge(final List contents) { int eqpos; String key, value; + final QuestChallenge qc = new QuestChallenge(); // Unique properties for (final String s : contents) { - if (s.equals("[metadata]")) { - break; - } - if (s.equals("[quest]")) { - continue; - } - if (s.equals("")) { + if (StringUtils.isBlank(s)) { continue; } @@ -224,6 +216,7 @@ public class QuestEventManager { qc.setCardRewardList(QuestUtil.generateCardRewardList(value)); } } + return qc; } /** @@ -235,7 +228,7 @@ public class QuestEventManager { * @param contents * @param qe */ - private void assembleEventMetadata(final List contents, final QuestEvent qe) { + private void readMetadata(final List contents, final QuestEvent qe) { int eqpos; String key, value; diff --git a/src/main/java/forge/util/FileSection.java b/src/main/java/forge/util/FileSection.java index 1645b2fca48..fdfc8309445 100644 --- a/src/main/java/forge/util/FileSection.java +++ b/src/main/java/forge/util/FileSection.java @@ -2,6 +2,7 @@ package forge.util; import java.util.Map; import java.util.TreeMap; +import java.util.regex.Pattern; /** * TODO: Write javadoc for this type. @@ -13,11 +14,24 @@ public class FileSection { private FileSection() {} - public static FileSection parse(Iterable lines, String kvSeparator) { + public static FileSection parse(String line, String kvSeparator, String pairSeparator) { + String[] pairs = line.split(Pattern.quote(pairSeparator)); + Pattern splitter = Pattern.compile(Pattern.quote(kvSeparator)); FileSection result = new FileSection(); + for (final String dd : pairs) { + final String[] v = splitter.split(dd, 2); + result.lines.put(v[0], v.length > 1 ? v[1].trim() : ""); + } + + return result; + } + + public static FileSection parse(Iterable lines, String kvSeparator) { + FileSection result = new FileSection(); + Pattern splitter = Pattern.compile(Pattern.quote(kvSeparator)); for (final String dd : lines) { - final String[] v = dd.split(kvSeparator, 2); + final String[] v = splitter.split(dd, 2); result.lines.put(v[0], v.length > 1 ? v[1].trim() : ""); } diff --git a/src/main/java/forge/util/FileStorageReader.java b/src/main/java/forge/util/FileStorageReader.java new file mode 100644 index 00000000000..418731917f1 --- /dev/null +++ b/src/main/java/forge/util/FileStorageReader.java @@ -0,0 +1,98 @@ +/* + * Forge: Play Magic: the Gathering. + * Copyright (C) 2011 Nate + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package forge.util; + +import java.io.File; +import java.util.ArrayList; +import java.util.Map; +import java.util.TreeMap; + +import javax.swing.JOptionPane; + +import net.slightlymagic.braids.util.lambda.Lambda1; + +import org.apache.commons.lang3.StringUtils; + +/** + * TODO: Write javadoc for this type. + * + */ +public abstract class FileStorageReader implements IItemReader { + + private final File file; + + public FileStorageReader(File file0) { + file = file0; + } + + // only accepts numbers, letters or dashes up to 20 characters in length + /** + * + * Clean deck name. + * + * @param in + * a String + * @return a String + */ + + + + @Override + public Map readAll() { + final Map result = new TreeMap(); + final ArrayList fData = FileUtil.readFile(file); + Lambda1 filter = getLineFilter(); + + for (final String s : fData) { + if (!filter.apply(s)) { + continue; + } + + T item = read(s); + if ( null == item ) { + String msg = "An object stored in " + file.getPath() + " failed to load.\nPlease submit this as a bug with the mentioned file attached."; + JOptionPane.showMessageDialog(null, msg); // This becomes bugged if uncommented, but i need these messages to debug other peoples decks // Max Mtg + continue; + } + + result.put( item.getName(), item ); + } + + return result; + } + + + /** + * TODO: Write javadoc for this method. + * @param file + * @return + */ + protected abstract T read(String line); + + + protected Lambda1 getLineFilter() { + return new Lambda1() { + + @Override + public Boolean apply(String arg1) { + return !StringUtils.isBlank(arg1) && !arg1.trim().startsWith("#"); + } + }; + } + +} diff --git a/src/main/java/forge/view/match/QuestWinLoseCardViewer.java b/src/main/java/forge/view/match/QuestWinLoseCardViewer.java index 5a5a2f83570..0892c57da61 100644 --- a/src/main/java/forge/view/match/QuestWinLoseCardViewer.java +++ b/src/main/java/forge/view/match/QuestWinLoseCardViewer.java @@ -120,7 +120,7 @@ public class QuestWinLoseCardViewer extends FPanel { } if (null == this.cache[row]) { final Card card = AllZone.getCardFactory().getCard(cp.getName(), null); - card.setCurSetCode(cp.getSet()); + card.setCurSetCode(cp.getEdition()); card.setImageFilename(CardUtil.buildFilename(card)); this.cache[row] = card; } diff --git a/src/main/java/forge/view/toolbox/CardViewer.java b/src/main/java/forge/view/toolbox/CardViewer.java index 6ef8b34d717..766da19f9dd 100644 --- a/src/main/java/forge/view/toolbox/CardViewer.java +++ b/src/main/java/forge/view/toolbox/CardViewer.java @@ -109,7 +109,7 @@ public class CardViewer extends JPanel { } if (null == this.cache[row]) { final Card card = AllZone.getCardFactory().getCard(cp.getName(), null); - card.setCurSetCode(cp.getSet()); + card.setCurSetCode(cp.getEdition()); card.setImageFilename(CardUtil.buildFilename(card)); this.cache[row] = card; }