diff --git a/.gitattributes b/.gitattributes index 35293393650..b419f3b2254 100644 --- a/.gitattributes +++ b/.gitattributes @@ -11229,8 +11229,8 @@ src/main/java/forge/deck/generate/GenerateDeckUtil.java -text src/main/java/forge/deck/generate/GenerateThemeDeck.java svneol=native#text/plain src/main/java/forge/deck/generate/package-info.java svneol=native#text/plain src/main/java/forge/deck/io/DeckFileHeader.java -text +src/main/java/forge/deck/io/DeckReaderBase.java -text src/main/java/forge/deck/io/DeckSerializer.java -text -src/main/java/forge/deck/io/DeckSerializerBase.java -text src/main/java/forge/deck/io/DeckSetSerializer.java -text src/main/java/forge/deck/io/OldDeckParser.java -text src/main/java/forge/deck/package-info.java svneol=native#text/plain @@ -11321,6 +11321,7 @@ src/main/java/forge/properties/SavePreferencesListener.java svneol=native#text/p src/main/java/forge/properties/package-info.java svneol=native#text/plain src/main/java/forge/quest/ReadPriceList.java svneol=native#text/plain src/main/java/forge/quest/SellRules.java -text +src/main/java/forge/quest/data/PreconReader.java -text src/main/java/forge/quest/data/QuestChallenge.java svneol=native#text/plain src/main/java/forge/quest/data/QuestData.java svneol=native#text/plain src/main/java/forge/quest/data/QuestDataIO.java svneol=native#text/plain @@ -11328,7 +11329,6 @@ src/main/java/forge/quest/data/QuestDeckMap.java -text src/main/java/forge/quest/data/QuestDuel.java svneol=native#text/plain src/main/java/forge/quest/data/QuestEvent.java -text src/main/java/forge/quest/data/QuestEventManager.java svneol=native#text/plain -src/main/java/forge/quest/data/QuestPreconManager.java -text src/main/java/forge/quest/data/QuestPreferences.java svneol=native#text/plain src/main/java/forge/quest/data/QuestUtil.java svneol=native#text/plain src/main/java/forge/quest/data/QuestUtilCards.java -text diff --git a/src/main/java/forge/deck/io/DeckSerializerBase.java b/src/main/java/forge/deck/io/DeckReaderBase.java similarity index 92% rename from src/main/java/forge/deck/io/DeckSerializerBase.java rename to src/main/java/forge/deck/io/DeckReaderBase.java index a173d7df0f3..b33711ee4e9 100644 --- a/src/main/java/forge/deck/io/DeckSerializerBase.java +++ b/src/main/java/forge/deck/io/DeckReaderBase.java @@ -32,13 +32,13 @@ import org.apache.commons.lang3.StringUtils; import forge.error.ErrorViewer; import forge.util.IHasName; -import forge.util.IItemSerializer; +import forge.util.IItemReader; /** * TODO: Write javadoc for this type. * */ -public abstract class DeckSerializerBase implements IItemSerializer { +public abstract class DeckReaderBase implements IItemReader { private final File directory; @@ -47,7 +47,7 @@ public abstract class DeckSerializerBase implements IItemSer } - public DeckSerializerBase(File deckDir0) + public DeckReaderBase(File deckDir0) { directory = deckDir0; diff --git a/src/main/java/forge/deck/io/DeckSerializer.java b/src/main/java/forge/deck/io/DeckSerializer.java index cad7b40602d..5db1d02954e 100644 --- a/src/main/java/forge/deck/io/DeckSerializer.java +++ b/src/main/java/forge/deck/io/DeckSerializer.java @@ -36,6 +36,7 @@ import forge.deck.Deck; import forge.item.CardPrinted; import forge.util.FileSection; import forge.util.FileUtil; +import forge.util.IItemSerializer; import freemarker.template.Configuration; import freemarker.template.DefaultObjectWrapper; import freemarker.template.Template; @@ -45,7 +46,7 @@ import freemarker.template.TemplateException; * TODO: Write javadoc for this type. * */ -public class DeckSerializer extends DeckSerializerBase { +public class DeckSerializer extends DeckReaderBase implements IItemSerializer { public DeckSerializer(File deckDir0) { super(deckDir0); diff --git a/src/main/java/forge/deck/io/DeckSetSerializer.java b/src/main/java/forge/deck/io/DeckSetSerializer.java index bfb4a8a0ff9..52d301c4874 100644 --- a/src/main/java/forge/deck/io/DeckSetSerializer.java +++ b/src/main/java/forge/deck/io/DeckSetSerializer.java @@ -23,12 +23,13 @@ import java.util.List; import forge.deck.Deck; import forge.deck.DeckSet; import forge.util.FileUtil; +import forge.util.IItemSerializer; /** * TODO: Write javadoc for this type. * */ -public class DeckSetSerializer extends DeckSerializerBase { +public class DeckSetSerializer extends DeckReaderBase implements IItemSerializer { /** * TODO: Write javadoc for Constructor. * @param deckDir0 diff --git a/src/main/java/forge/quest/SellRules.java b/src/main/java/forge/quest/SellRules.java index 98c933d94b2..8bffe3dfe9a 100644 --- a/src/main/java/forge/quest/SellRules.java +++ b/src/main/java/forge/quest/SellRules.java @@ -20,6 +20,7 @@ package forge.quest; import java.util.List; import forge.quest.data.QuestData; +import forge.util.FileSection; /** * TODO: Write javadoc for this type. @@ -41,22 +42,12 @@ public class SellRules { if (null == questShop || questShop.isEmpty()) { return; } - - for (String s : questShop) { - String[] kv = s.split("="); - if ("WinsToUnlock".equalsIgnoreCase(kv[0])) { - minWins = Integer.parseInt(kv[1]); - } - else if ("Credits".equalsIgnoreCase(kv[0])) { - cost = Integer.parseInt(kv[1]); - } - else if ("MaxDifficulty".equalsIgnoreCase(kv[0])) { - maxDifficulty = Integer.parseInt(kv[1]); - } - else if ("MinDifficulty".equalsIgnoreCase(kv[0])) { - minDifficulty = Integer.parseInt(kv[1]); - } - } + + FileSection section = FileSection.parse(questShop, "="); + minWins = section.getInt("WinsToUnlock"); + cost = section.getInt("Credits", 250); + maxDifficulty = section.getInt("MaxDifficulty", 5); + minDifficulty = section.getInt("MinDifficulty", 0); } /** diff --git a/src/main/java/forge/quest/data/PreconReader.java b/src/main/java/forge/quest/data/PreconReader.java new file mode 100644 index 00000000000..03ff73e3ce2 --- /dev/null +++ b/src/main/java/forge/quest/data/PreconReader.java @@ -0,0 +1,44 @@ +package forge.quest.data; + +import java.io.File; +import java.io.FilenameFilter; +import forge.deck.io.DeckSerializer; +import forge.deck.io.DeckReaderBase; +import forge.item.PreconDeck; + +/** + * TODO: Write javadoc for this type. + * + */ +public class PreconReader extends DeckReaderBase { + + /** + * TODO: Write javadoc for Constructor. + * @param deckDir0 + */ + public PreconReader(File deckDir0) { + super(deckDir0); + } + + /* (non-Javadoc) + * @see forge.deck.io.DeckSerializerBase#read(java.io.File) + */ + @Override + protected PreconDeck read(File file) { + return new PreconDeck(file); + } + + /* (non-Javadoc) + * @see forge.deck.io.DeckSerializerBase#getFileFilter() + */ + @Override + protected FilenameFilter getFileFilter() { + return DeckSerializer.DCK_FILE_FILTER; + } + + /* (non-Javadoc) + * @see forge.util.IItemReader#readAll() + */ + + +} diff --git a/src/main/java/forge/quest/data/QuestData.java b/src/main/java/forge/quest/data/QuestData.java index 9b816665e34..4b9b13d32dd 100644 --- a/src/main/java/forge/quest/data/QuestData.java +++ b/src/main/java/forge/quest/data/QuestData.java @@ -17,6 +17,7 @@ */ package forge.quest.data; +import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -28,12 +29,15 @@ import forge.item.CardPrinted; import forge.item.InventoryItem; import forge.item.ItemPool; import forge.item.ItemPoolView; +import forge.item.PreconDeck; import forge.properties.ForgeProps; import forge.properties.NewConstants; import forge.quest.data.QuestPreferences.QPref; import forge.quest.data.item.QuestInventory; import forge.quest.data.pet.QuestPetManager; +import forge.util.FolderMapView; import forge.util.IFolderMap; +import forge.util.IFolderMapView; import forge.util.MyRandom; //when you create QuestDataOld and AFTER you copy the AI decks over @@ -166,7 +170,7 @@ public final class QuestData { private transient QuestUtilCards myCards; // This is used by shop. Had no idea where else to place this - private static transient QuestPreconManager preconManager = new QuestPreconManager(ForgeProps.getFile(NewConstants.Quest.PRECONS)); + private static transient IFolderMapView preconManager = new FolderMapView(new PreconReader(ForgeProps.getFile(NewConstants.Quest.PRECONS))); /** The Constant RANK_TITLES. */ public static final String[] RANK_TITLES = new String[] { "Level 0 - Confused Wizard", "Level 1 - Mana Mage", @@ -207,6 +211,8 @@ public final class QuestData { this.decks = new QuestDeckMap(myDecks); this.myCards = new QuestUtilCards(this); + + // to avoid NPE some pools will be created here if they are null if (null == this.getNewCardList()) { this.setNewCardList(new ItemPool(InventoryItem.class)); @@ -646,7 +652,7 @@ public final class QuestData { /** @return QuestPreconManager */ - public static QuestPreconManager getPreconManager() { + public static IFolderMapView getPrecons() { return preconManager; } diff --git a/src/main/java/forge/quest/data/QuestDataIO.java b/src/main/java/forge/quest/data/QuestDataIO.java index 11b9fbe97ba..1787394893f 100644 --- a/src/main/java/forge/quest/data/QuestDataIO.java +++ b/src/main/java/forge/quest/data/QuestDataIO.java @@ -345,12 +345,7 @@ public class QuestDataIO { protected PreconDeck readPreconDeck(final HierarchicalStreamReader reader) { String name = reader.getAttribute("name"); if (name == null) { name = reader.getAttribute("s"); } - for (PreconDeck d : QuestData.getPreconManager().getDecks()) { - if (name.equalsIgnoreCase(d.getName())) { - return d; - } - } - return null; + return QuestData.getPrecons().get(name); } protected BoosterPack readBooster(final HierarchicalStreamReader reader) { diff --git a/src/main/java/forge/quest/data/QuestPreconManager.java b/src/main/java/forge/quest/data/QuestPreconManager.java deleted file mode 100644 index 59c0a9cbdcd..00000000000 --- a/src/main/java/forge/quest/data/QuestPreconManager.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * 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.quest.data; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; -import java.util.NoSuchElementException; - -import javax.swing.JOptionPane; - -import org.apache.commons.lang3.StringUtils; - -import forge.deck.io.DeckSerializer; -import forge.item.PreconDeck; - -/** - * Very simple function - store all precons. - * - */ -public class QuestPreconManager { - - /** The decks. */ - private final List decks = new ArrayList(); - - /** - * Instantiates a new quest precon manager. - * - * @param deckDir the deck dir - */ - public QuestPreconManager(final File deckDir) { - final List decksThatFailedToLoad = new ArrayList(); - final File[] files = deckDir.listFiles(DeckSerializer.DCK_FILE_FILTER); - for (final File file : files) { - try { - this.decks.add(new PreconDeck(file)); - } catch (final NoSuchElementException ex) { - final String message = String.format("%s failed to load because ---- %s", file.getName(), - ex.getMessage()); - decksThatFailedToLoad.add(message); - } - } - - if (!decksThatFailedToLoad.isEmpty()) { - JOptionPane.showMessageDialog(null, - StringUtils.join(decksThatFailedToLoad, System.getProperty("line.separator")), - "Some of your decks were not loaded.", JOptionPane.WARNING_MESSAGE); - } - } - - /** - * TODO: Write javadoc for this method. - * - * @param q the q - * @return the decks for current - */ - public List getDecksForCurrent(final QuestData q) { - final List meetRequirements = new ArrayList(); - for (final PreconDeck deck : this.decks) { - if (deck.getRecommendedDeals().meetsRequiremnts(q)) { - meetRequirements.add(deck); - } - } - return meetRequirements; - } - - /** - * Gets the decks. - * - * @return the decks - */ - public final List getDecks() { - return this.decks; - } - -} diff --git a/src/main/java/forge/quest/data/QuestUtilCards.java b/src/main/java/forge/quest/data/QuestUtilCards.java index b2f0ff1e09b..c1ca25a0ba4 100644 --- a/src/main/java/forge/quest/data/QuestUtilCards.java +++ b/src/main/java/forge/quest/data/QuestUtilCards.java @@ -353,8 +353,13 @@ public final class QuestUtilCards { * the count */ public void generatePreconsInShop(final int count) { - final List validDecks = QuestData.getPreconManager().getDecksForCurrent(this.q); - this.q.getShopList().addAllFlat(Predicate.getTrue(PreconDeck.class).random(validDecks, count)); + final List meetRequirements = new ArrayList(); + for (final PreconDeck deck : QuestData.getPrecons()) { + if (deck.getRecommendedDeals().meetsRequiremnts(q)) { + meetRequirements.add(deck); + } + } + this.q.getShopList().addAllFlat(Predicate.getTrue(PreconDeck.class).random(meetRequirements, count)); } /**