From 69152d07c3920423e7245bc1ccfda1c8a5f6bdad Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Mon, 5 Sep 2011 10:47:08 +0000 Subject: [PATCH] Deck class no longer contains metadata - please create new classes for extra data you want stored along with the deck, incapsulate deck there if needed. Accelerated Quest startup by removing N reads of N files (n=number of decks) that happened before displaying list of battles Data specific for quest battle moved to QuestEvent --- .gitattributes | 1 + src/main/java/forge/deck/Deck.java | 113 ++++-------------- src/main/java/forge/deck/DeckManager.java | 32 +++-- .../forge/quest/data/QuestBattleManager.java | 44 +++++++ .../java/forge/quest/data/QuestEvent.java | 19 +++ .../forge/quest/gui/main/QuestBattle.java | 32 +++-- .../java/forge/view/swing/OldGuiNewGame.java | 8 +- 7 files changed, 130 insertions(+), 119 deletions(-) create mode 100644 src/main/java/forge/quest/data/QuestEvent.java diff --git a/.gitattributes b/.gitattributes index afbf5f24319..47a862454e8 100644 --- a/.gitattributes +++ b/.gitattributes @@ -9842,6 +9842,7 @@ src/main/java/forge/quest/data/QuestBattleManager.java svneol=native#text/plain src/main/java/forge/quest/data/QuestBoosterPack.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/QuestEvent.java -text src/main/java/forge/quest/data/QuestMatchState.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 diff --git a/src/main/java/forge/deck/Deck.java b/src/main/java/forge/deck/Deck.java index f5bbaf5aaf1..8bfeee91964 100644 --- a/src/main/java/forge/deck/Deck.java +++ b/src/main/java/forge/deck/Deck.java @@ -1,6 +1,7 @@ package forge.deck; import forge.Constant; +import forge.PlayerType; import forge.card.CardDb; import forge.card.CardPool; import forge.card.CardPoolView; @@ -23,21 +24,17 @@ public final class Deck implements Comparable, Serializable { //gameType is from Constant.GameType, like Constant.GameType.Regular - private Map metadata = new HashMap(); - + private String name; + private String deckType; + private String comment; + private PlayerType playerType; + private CardPool main; private CardPool sideboard; - /** Constant NAME="Name" */ - public static final String NAME = "Name"; - /** Constant DECK_TYPE="Deck Type" */ - public static final String DECK_TYPE = "Deck Type"; - /** Constant COMMENT="Comment" */ - public static final String COMMENT = "Comment"; - /** Constant DESCRIPTION="Description" */ - public static final String DESCRIPTION = "Description"; - /** Constant DIFFICULTY="Difficulty" */ - public static final String DIFFICULTY = "Difficulty"; + + + //gameType is from Constant.GameType, like Constant.GameType.Regular @@ -99,7 +96,7 @@ public final class Deck implements Comparable, Serializable { * @return a {@link java.lang.String} object. */ public String getDeckType() { - return metadata.get(DECK_TYPE); + return deckType; } //can only call this method ONCE @@ -119,7 +116,7 @@ public final class Deck implements Comparable, Serializable { "Deck : setDeckType() error, invalid deck type - " + deckType); } - metadata.put(DECK_TYPE, deckType); + this.deckType = deckType; } /** @@ -128,7 +125,7 @@ public final class Deck implements Comparable, Serializable { * @param s a {@link java.lang.String} object. */ public void setName(String s) { - metadata.put(NAME, s); + name = s; } /** @@ -137,7 +134,7 @@ public final class Deck implements Comparable, Serializable { * @return a {@link java.lang.String} object. */ public String getName() { - return metadata.get(NAME); + return name; } /** @@ -146,7 +143,7 @@ public final class Deck implements Comparable, Serializable { * @param comment a {@link java.lang.String} object. */ public void setComment(String comment) { - metadata.put(COMMENT, comment); + this.comment = comment; } /** @@ -155,7 +152,7 @@ public final class Deck implements Comparable, Serializable { * @return a {@link java.lang.String} object. */ public String getComment() { - return metadata.get(COMMENT); + return comment; } @@ -242,44 +239,6 @@ public final class Deck implements Comparable, Serializable { return getName(); } - - // The setters and getters below are for Quest decks - /** - *

setDifficulty.

- * - * @param s a {@link java.lang.String} object. - */ - public void setDifficulty(String s) { - metadata.put(DIFFICULTY, s); - } - - /** - *

getDifficulty.

- * - * @return a {@link java.lang.String} object. - */ - public String getDifficulty() { - return metadata.get(DIFFICULTY); - } - - /** - *

setDescription.

- * - * @param s a {@link java.lang.String} object. - */ - public void setDescription(String s) { - metadata.put(DESCRIPTION, s); - } - - /** - *

getDescription.

- * - * @return a {@link java.lang.String} object. - */ - public String getDescription() { - return metadata.get(DESCRIPTION); - } - /** *

compareTo.

* @@ -299,41 +258,6 @@ public final class Deck implements Comparable, Serializable { return false; } - /** - *

Getter for the field metadata.

- * - * @return a {@link java.util.Set} object. - */ - public Set> getMetadata() { - return metadata.entrySet(); - } - - /** - *

Getter for the field metadata.

- * - * @param key a {@link java.lang.String} object. - * @return a {@link java.lang.String} object. - * @since 1.0.15 - */ - public String getMetadata(String key) { - if (metadata.containsKey(key)) - return metadata.get(key); - - System.err.println("In forge.deck/Deck.java, getMetadata() failed "+ - "for property '"+key+"' in deck '"+getName()+"'."); - return ""; - } - - /** - *

addMetaData.

- * - * @param key a {@link java.lang.String} object. - * @param value a {@link java.lang.String} object. - */ - public void addMetaData(String key, String value) { - metadata.put(key, value); - } - public void clearSideboard() { sideboard.clear(); } @@ -343,4 +267,11 @@ public final class Deck implements Comparable, Serializable { } + public final PlayerType getPlayerType() { + return playerType; + } + + public final void setPlayerType(PlayerType recommendedPlayer0) { + this.playerType = recommendedPlayer0; + } } diff --git a/src/main/java/forge/deck/DeckManager.java b/src/main/java/forge/deck/DeckManager.java index 5c1a2a934ef..55ed3dd5e8e 100644 --- a/src/main/java/forge/deck/DeckManager.java +++ b/src/main/java/forge/deck/DeckManager.java @@ -2,6 +2,7 @@ package forge.deck; import forge.Constant; +import forge.PlayerType; import forge.card.CardPrinted; import forge.error.ErrorViewer; @@ -42,6 +43,10 @@ public class DeckManager { } }; + private static final String NAME = "Name"; + private static final String DECK_TYPE = "Deck Type"; + private static final String COMMENT = "Comment"; + private static final String PLAYER = "Player"; private File deckDir; Map deckMap; @@ -255,7 +260,6 @@ public class DeckManager { * @return a {@link forge.deck.Deck} object. */ public static Deck readDeck(File deckFile) { - List lines = new LinkedList(); try { @@ -286,7 +290,20 @@ public class DeckManager { //read metadata while (!(line = lineIterator.next()).equals("[main]")) { String[] linedata = line.split("=", 2); - d.addMetaData(linedata[0], linedata[1]); + String field = linedata[0].toLowerCase(); + if (NAME.equalsIgnoreCase(field)) { + d.setName(linedata[1]); + } else if (COMMENT.equalsIgnoreCase(field)) { + d.setComment(linedata[1]); + } else if (DECK_TYPE.equalsIgnoreCase(field)) { + d.setDeckType(linedata[1]); + } else if (PLAYER.equalsIgnoreCase(field)) { + if ("human".equalsIgnoreCase(linedata[1])) { + d.setPlayerType(PlayerType.HUMAN); + } else { + d.setPlayerType(PlayerType.COMPUTER); + } + } } addCardList(lineIterator, d); @@ -301,7 +318,7 @@ public class DeckManager { * @param iterator a {@link java.util.ListIterator} object. * @return a {@link forge.deck.Deck} object. */ - private static Deck readDeckOld(ListIterator iterator) { + private static Deck readDeckOld(final ListIterator iterator) { String line; //readDeck name @@ -449,10 +466,11 @@ public class DeckManager { private static void writeDeck(Deck d, BufferedWriter out) throws IOException { out.write("[metadata]\n"); - for (Entry entry : d.getMetadata()) { - if (entry.getValue() != null) - out.write(format("%s=%s%n", entry.getKey(), entry.getValue().replaceAll("\n", ""))); - } + + out.write(format("%s=%s%n", NAME, d.getName().replaceAll("\n", ""))); + out.write(format("%s=%s%n", DECK_TYPE, d.getDeckType().replaceAll("\n", ""))); + out.write(format("%s=%s%n", PLAYER, d.getPlayerType())); + out.write(format("%s=%s%n", COMMENT, d.getComment().replaceAll("\n", ""))); out.write(format("%s%n", "[main]")); for (Entry e : d.getMain()) { diff --git a/src/main/java/forge/quest/data/QuestBattleManager.java b/src/main/java/forge/quest/data/QuestBattleManager.java index ca7d18f11b8..97c2f887b4f 100644 --- a/src/main/java/forge/quest/data/QuestBattleManager.java +++ b/src/main/java/forge/quest/data/QuestBattleManager.java @@ -11,6 +11,8 @@ import forge.properties.NewConstants; import java.io.File; import java.util.*; +import org.apache.commons.lang3.StringUtils; + /** *

QuestBattleManager class.

* @@ -116,6 +118,21 @@ public class QuestBattleManager { return manager.getDeck(deckName); } + /** + *

getQuestEventFromFile.

+ * Returns QuestEvent data for the challenge stored in that file name. + * + * @param deckName a {@link java.lang.String} object. + * @return a {@link forge.deck.Deck} object. + */ + public static QuestEvent getQuestEventFromFile(String deckName) { + final File deckPath = ForgeProps.getFile(NewConstants.QUEST.DECKS); + File deckFile = new File(deckPath, deckName + ".dck"); + + QuestEvent result = readQuestBattleMetadataFromDeckFile(deckFile); + return result; + } + /** *

readFile.

* A reader util for accessing the AI deck list text files. @@ -147,4 +164,31 @@ public class QuestBattleManager { return list; } + private static QuestEvent readQuestBattleMetadataFromDeckFile(final File f) { + QuestEvent out = new QuestEvent(); + List contents = FileUtil.readFile(f); + + for (String s : contents) { + if ("[main]".equals(s)) { break; } + if (StringUtils.isBlank(s) || s.charAt(0) == '[') { continue; } + + int eqPos = s.indexOf('='); + if (eqPos < 0) { continue; } // no equals sign here + String key = s.substring(0, eqPos); + String value = s.substring(eqPos + 1); + + if ("DisplayName".equalsIgnoreCase(key)) { + out.displayName = value; + } else if ("Difficulty".equalsIgnoreCase(key)) { + out.difficulty = value; + } else if ("Description".equalsIgnoreCase(key)) { + out.description = value; + } else if ("Icon".equalsIgnoreCase(key)) { + out.icon = value; + } + } + + return out; + } + } diff --git a/src/main/java/forge/quest/data/QuestEvent.java b/src/main/java/forge/quest/data/QuestEvent.java new file mode 100644 index 00000000000..c2b09d41c76 --- /dev/null +++ b/src/main/java/forge/quest/data/QuestEvent.java @@ -0,0 +1,19 @@ +package forge.quest.data; + +import forge.deck.Deck; + +/** + * TODO: Write javadoc for this type. + * + */ +public class QuestEvent { + String displayName; + String difficulty; + String description; + String icon; + + public final String getDisplayName() { return displayName; } + public final String getDifficulty() { return difficulty; } + public final String getDescription() { return description; } + public final String getIcon() { return icon; } +} diff --git a/src/main/java/forge/quest/gui/main/QuestBattle.java b/src/main/java/forge/quest/gui/main/QuestBattle.java index 90f40d18e6e..affd68d69ff 100644 --- a/src/main/java/forge/quest/gui/main/QuestBattle.java +++ b/src/main/java/forge/quest/gui/main/QuestBattle.java @@ -4,6 +4,7 @@ package forge.quest.gui.main; import forge.deck.Deck; import forge.gui.GuiUtils; import forge.quest.data.QuestBattleManager; +import forge.quest.data.QuestEvent; import javax.swing.*; @@ -23,12 +24,7 @@ public class QuestBattle extends QuestSelectablePanel { private String deckName; - private static String oppName; - private static String oppDiff; - private static String oppDesc; - private static String oppIconAddress; - private static ImageIcon icon; - private static Deck oppDeck; + /** *

Constructor for QuestBattle.

@@ -59,19 +55,21 @@ public class QuestBattle extends QuestSelectablePanel { String[] oppDecks = QuestBattleManager.generateBattles(); for (String oppDeckName : oppDecks) { // Get deck object and properties for this opponent. - oppDeck = QuestBattleManager.getAIDeckFromFile(oppDeckName); - - oppName = oppDeck.getMetadata("DisplayName"); - oppDiff = oppDeck.getMetadata("Difficulty"); - oppDesc = oppDeck.getMetadata("Description"); - oppIconAddress = oppDeck.getMetadata("Icon"); - - icon = GuiUtils.getIconFromFile(oppName + ".jpg"); - + QuestEvent event1 = QuestBattleManager.getQuestEventFromFile(oppDeckName); + + String oppName = event1.getDisplayName(); + String oppDiff = event1.getDifficulty(); + String oppDesc = event1.getDescription(); + String oppIconAddress = event1.getIcon(); + + ImageIcon icon; // If non-default icon defined, use it - if(!oppIconAddress.equals("")) { - icon = GuiUtils.getIconFromFile(oppIconAddress + ".jpg"); + if(oppIconAddress.equals("")) { + icon = GuiUtils.getIconFromFile(oppName + ".jpg"); } + else + icon = GuiUtils.getIconFromFile(oppIconAddress + ".jpg"); + // Add to list of current quest opponents. opponentList.add( diff --git a/src/main/java/forge/view/swing/OldGuiNewGame.java b/src/main/java/forge/view/swing/OldGuiNewGame.java index 4682f9c6583..d747a82cb4a 100644 --- a/src/main/java/forge/view/swing/OldGuiNewGame.java +++ b/src/main/java/forge/view/swing/OldGuiNewGame.java @@ -339,14 +339,14 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. ForgeProps.getLocalized(NEW_GAME_TEXT.SAVE_SEALED_MSG), ForgeProps.getLocalized(NEW_GAME_TEXT.SAVE_SEALED_TTL), JOptionPane.QUESTION_MESSAGE); deck.setName(sDeckName); - deck.addMetaData("PlayerType", "Human"); + deck.setPlayerType(PlayerType.HUMAN); Constant.Runtime.HumanDeck[0] = deck; Constant.Runtime.GameType[0] = Constant.GameType.Sealed; Deck aiDeck = sd.buildAIDeck(sDeck.toForgeCardList()); aiDeck.setName("AI_" + sDeckName); - aiDeck.addMetaData("PlayerType", "AI"); + aiDeck.setPlayerType(PlayerType.COMPUTER); deckManager.addDeck(aiDeck); deckManager.writeAllDecks(); deckManager.readAllDecks(); @@ -1128,9 +1128,9 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. for (Deck allDeck : allDecks) { if (allDeck.getDeckType().equals(Constant.GameType.Sealed)) { - if (allDeck.getMetadata("PlayerType").equals("Human")) { + if (allDeck.getPlayerType() == PlayerType.HUMAN) { humanComboBox.addItem(allDeck.getName()); - } else if (allDeck.getMetadata("PlayerType").equals("AI")) { + } else if (allDeck.getPlayerType() == PlayerType.COMPUTER) { computerComboBox.addItem(allDeck.getName()); } }