moved precon decks to FolderMapView rails, cleaned up DeckSerializerBase - it was just deckReader by functionality

This commit is contained in:
Maxmtg
2012-02-19 19:56:55 +00:00
parent 2fa016c2e8
commit fa9cdee559
10 changed files with 76 additions and 124 deletions

4
.gitattributes vendored
View File

@@ -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/GenerateThemeDeck.java svneol=native#text/plain
src/main/java/forge/deck/generate/package-info.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/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/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/DeckSetSerializer.java -text
src/main/java/forge/deck/io/OldDeckParser.java -text src/main/java/forge/deck/io/OldDeckParser.java -text
src/main/java/forge/deck/package-info.java svneol=native#text/plain 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/properties/package-info.java svneol=native#text/plain
src/main/java/forge/quest/ReadPriceList.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/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/QuestChallenge.java svneol=native#text/plain
src/main/java/forge/quest/data/QuestData.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 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/QuestDuel.java svneol=native#text/plain
src/main/java/forge/quest/data/QuestEvent.java -text 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/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/QuestPreferences.java svneol=native#text/plain
src/main/java/forge/quest/data/QuestUtil.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 src/main/java/forge/quest/data/QuestUtilCards.java -text

View File

@@ -32,13 +32,13 @@ import org.apache.commons.lang3.StringUtils;
import forge.error.ErrorViewer; import forge.error.ErrorViewer;
import forge.util.IHasName; import forge.util.IHasName;
import forge.util.IItemSerializer; import forge.util.IItemReader;
/** /**
* TODO: Write javadoc for this type. * TODO: Write javadoc for this type.
* *
*/ */
public abstract class DeckSerializerBase<T extends IHasName> implements IItemSerializer<T> { public abstract class DeckReaderBase<T extends IHasName> implements IItemReader<T> {
private final File directory; private final File directory;
@@ -47,7 +47,7 @@ public abstract class DeckSerializerBase<T extends IHasName> implements IItemSer
} }
public DeckSerializerBase(File deckDir0) public DeckReaderBase(File deckDir0)
{ {
directory = deckDir0; directory = deckDir0;

View File

@@ -36,6 +36,7 @@ import forge.deck.Deck;
import forge.item.CardPrinted; import forge.item.CardPrinted;
import forge.util.FileSection; import forge.util.FileSection;
import forge.util.FileUtil; import forge.util.FileUtil;
import forge.util.IItemSerializer;
import freemarker.template.Configuration; import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper; import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template; import freemarker.template.Template;
@@ -45,7 +46,7 @@ import freemarker.template.TemplateException;
* TODO: Write javadoc for this type. * TODO: Write javadoc for this type.
* *
*/ */
public class DeckSerializer extends DeckSerializerBase<Deck> { public class DeckSerializer extends DeckReaderBase<Deck> implements IItemSerializer<Deck> {
public DeckSerializer(File deckDir0) { public DeckSerializer(File deckDir0) {
super(deckDir0); super(deckDir0);

View File

@@ -23,12 +23,13 @@ import java.util.List;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckSet; import forge.deck.DeckSet;
import forge.util.FileUtil; import forge.util.FileUtil;
import forge.util.IItemSerializer;
/** /**
* TODO: Write javadoc for this type. * TODO: Write javadoc for this type.
* *
*/ */
public class DeckSetSerializer extends DeckSerializerBase<DeckSet> { public class DeckSetSerializer extends DeckReaderBase<DeckSet> implements IItemSerializer<DeckSet> {
/** /**
* TODO: Write javadoc for Constructor. * TODO: Write javadoc for Constructor.
* @param deckDir0 * @param deckDir0

View File

@@ -20,6 +20,7 @@ package forge.quest;
import java.util.List; import java.util.List;
import forge.quest.data.QuestData; import forge.quest.data.QuestData;
import forge.util.FileSection;
/** /**
* TODO: Write javadoc for this type. * TODO: Write javadoc for this type.
@@ -41,22 +42,12 @@ public class SellRules {
if (null == questShop || questShop.isEmpty()) { if (null == questShop || questShop.isEmpty()) {
return; return;
} }
for (String s : questShop) { FileSection section = FileSection.parse(questShop, "=");
String[] kv = s.split("="); minWins = section.getInt("WinsToUnlock");
if ("WinsToUnlock".equalsIgnoreCase(kv[0])) { cost = section.getInt("Credits", 250);
minWins = Integer.parseInt(kv[1]); maxDifficulty = section.getInt("MaxDifficulty", 5);
} minDifficulty = section.getInt("MinDifficulty", 0);
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]);
}
}
} }
/** /**

View File

@@ -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<PreconDeck> {
/**
* 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()
*/
}

View File

@@ -17,6 +17,7 @@
*/ */
package forge.quest.data; package forge.quest.data;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@@ -28,12 +29,15 @@ import forge.item.CardPrinted;
import forge.item.InventoryItem; import forge.item.InventoryItem;
import forge.item.ItemPool; import forge.item.ItemPool;
import forge.item.ItemPoolView; import forge.item.ItemPoolView;
import forge.item.PreconDeck;
import forge.properties.ForgeProps; import forge.properties.ForgeProps;
import forge.properties.NewConstants; import forge.properties.NewConstants;
import forge.quest.data.QuestPreferences.QPref; import forge.quest.data.QuestPreferences.QPref;
import forge.quest.data.item.QuestInventory; import forge.quest.data.item.QuestInventory;
import forge.quest.data.pet.QuestPetManager; import forge.quest.data.pet.QuestPetManager;
import forge.util.FolderMapView;
import forge.util.IFolderMap; import forge.util.IFolderMap;
import forge.util.IFolderMapView;
import forge.util.MyRandom; import forge.util.MyRandom;
//when you create QuestDataOld and AFTER you copy the AI decks over //when you create QuestDataOld and AFTER you copy the AI decks over
@@ -166,7 +170,7 @@ public final class QuestData {
private transient QuestUtilCards myCards; private transient QuestUtilCards myCards;
// This is used by shop. Had no idea where else to place this // 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<PreconDeck> preconManager = new FolderMapView<PreconDeck>(new PreconReader(ForgeProps.getFile(NewConstants.Quest.PRECONS)));
/** The Constant RANK_TITLES. */ /** The Constant RANK_TITLES. */
public static final String[] RANK_TITLES = new String[] { "Level 0 - Confused Wizard", "Level 1 - Mana Mage", 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.decks = new QuestDeckMap(myDecks);
this.myCards = new QuestUtilCards(this); this.myCards = new QuestUtilCards(this);
// to avoid NPE some pools will be created here if they are null // to avoid NPE some pools will be created here if they are null
if (null == this.getNewCardList()) { if (null == this.getNewCardList()) {
this.setNewCardList(new ItemPool<InventoryItem>(InventoryItem.class)); this.setNewCardList(new ItemPool<InventoryItem>(InventoryItem.class));
@@ -646,7 +652,7 @@ public final class QuestData {
/** @return QuestPreconManager */ /** @return QuestPreconManager */
public static QuestPreconManager getPreconManager() { public static IFolderMapView<PreconDeck> getPrecons() {
return preconManager; return preconManager;
} }

View File

@@ -345,12 +345,7 @@ public class QuestDataIO {
protected PreconDeck readPreconDeck(final HierarchicalStreamReader reader) { protected PreconDeck readPreconDeck(final HierarchicalStreamReader reader) {
String name = reader.getAttribute("name"); String name = reader.getAttribute("name");
if (name == null) { name = reader.getAttribute("s"); } if (name == null) { name = reader.getAttribute("s"); }
for (PreconDeck d : QuestData.getPreconManager().getDecks()) { return QuestData.getPrecons().get(name);
if (name.equalsIgnoreCase(d.getName())) {
return d;
}
}
return null;
} }
protected BoosterPack readBooster(final HierarchicalStreamReader reader) { protected BoosterPack readBooster(final HierarchicalStreamReader reader) {

View File

@@ -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 <http://www.gnu.org/licenses/>.
*/
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<PreconDeck> decks = new ArrayList<PreconDeck>();
/**
* Instantiates a new quest precon manager.
*
* @param deckDir the deck dir
*/
public QuestPreconManager(final File deckDir) {
final List<String> decksThatFailedToLoad = new ArrayList<String>();
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<PreconDeck> getDecksForCurrent(final QuestData q) {
final List<PreconDeck> meetRequirements = new ArrayList<PreconDeck>();
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<PreconDeck> getDecks() {
return this.decks;
}
}

View File

@@ -353,8 +353,13 @@ public final class QuestUtilCards {
* the count * the count
*/ */
public void generatePreconsInShop(final int count) { public void generatePreconsInShop(final int count) {
final List<PreconDeck> validDecks = QuestData.getPreconManager().getDecksForCurrent(this.q); final List<PreconDeck> meetRequirements = new ArrayList<PreconDeck>();
this.q.getShopList().addAllFlat(Predicate.getTrue(PreconDeck.class).random(validDecks, count)); 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));
} }
/** /**