diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestCommander.java b/forge-gui/src/main/java/forge/planarconquest/ConquestCommander.java index a04f855d0a7..943ceaac233 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestCommander.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestCommander.java @@ -4,17 +4,20 @@ import forge.deck.Deck; import forge.deck.generation.DeckGenPool; import forge.item.InventoryItem; import forge.item.PaperCard; +import forge.model.FModel; import forge.planarconquest.ConquestPlane.Region; +import forge.util.XmlReader; import forge.util.XmlWriter; import forge.util.XmlWriter.IXmlWritable; public class ConquestCommander implements InventoryItem, IXmlWritable { private final PaperCard card; - private final Deck deck; private final ConquestRecord record; private final ConquestPlane originPlane; private final String originRegionName; + private Deck deck; + public ConquestCommander(PaperCard card0) { this(card0, new Deck(card0.getName())); } @@ -22,9 +25,12 @@ public class ConquestCommander implements InventoryItem, IXmlWritable { this(card0, ConquestUtil.generateDeck(card0, cardPool0, forAi)); } private ConquestCommander(PaperCard card0, Deck deck0) { + this(card0, deck0, new ConquestRecord()); + } + private ConquestCommander(PaperCard card0, Deck deck0, ConquestRecord record0) { card = card0; deck = deck0; - record = new ConquestRecord(); + record = record0; //determine origin of commander ConquestPlane originPlane0 = null; @@ -45,6 +51,15 @@ public class ConquestCommander implements InventoryItem, IXmlWritable { originRegionName = originRegionName0; } + public ConquestCommander(XmlReader xml) { + this(xml.read("card", FModel.getMagicDb().getCommonCards()), null, xml.read("record", ConquestRecord.class)); + } + @Override + public void saveToXml(XmlWriter xml) { + xml.write("card", card); + xml.write("record", record); + } + public String getName() { return card.getName(); } @@ -66,6 +81,12 @@ public class ConquestCommander implements InventoryItem, IXmlWritable { } public Deck getDeck() { + if (deck == null) { //if deck not yet initialized, attempt to load deck file + deck = FModel.getConquest().getDecks().get(card.getName()); + if (deck == null) { + deck = new Deck(card.getName()); + } + } return deck; } @@ -95,10 +116,4 @@ public class ConquestCommander implements InventoryItem, IXmlWritable { public String toString() { return card.getName(); } - - @Override - public void saveToXml(XmlWriter xml) { - xml.write("card", card); - xml.write("record", record); - } } diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestData.java b/forge-gui/src/main/java/forge/planarconquest/ConquestData.java index b487f290bd0..968f60f381f 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestData.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestData.java @@ -93,9 +93,9 @@ public final class ConquestData { try { XmlReader xml = new XmlReader(xmlFilename); CardDb cardDb = FModel.getMagicDb().getCommonCards(); - planeswalker = xml.read("planeswalker", planeswalker, cardDb); + planeswalker = xml.read("planeswalker", cardDb); aetherShards = xml.read("aetherShards", aetherShards); - currentLocation = xml.read("currentLocation", currentLocation, ConquestLocation.class); + currentLocation = xml.read("currentLocation", ConquestLocation.class); xml.read("unlockedCards", unlockedCards, cardDb); xml.read("newCards", newCards, cardDb); xml.read("commanders", commanders, ConquestCommander.class); diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestLocation.java b/forge-gui/src/main/java/forge/planarconquest/ConquestLocation.java index ff181c317e2..18d3501cd2f 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestLocation.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestLocation.java @@ -27,7 +27,7 @@ public class ConquestLocation implements IXmlWritable { } public ConquestLocation(XmlReader xml) { - plane = xml.read("plane", ConquestPlane.class); + plane = xml.read("plane", ConquestPlane.Alara); regionIndex = xml.read("regionIndex", 0); row = xml.read("row", 0); col = xml.read("col", 0); diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestPlaneData.java b/forge-gui/src/main/java/forge/planarconquest/ConquestPlaneData.java index 2adc7400d97..d1ce811f293 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestPlaneData.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestPlaneData.java @@ -17,7 +17,7 @@ public class ConquestPlaneData implements IXmlWritable { } public ConquestPlaneData(XmlReader xml) { - plane = xml.read("plane", ConquestPlane.class); + plane = xml.read("plane", ConquestPlane.Alara); eventResults = new ConquestRecord[plane.getEventCount()]; xml.read("eventResults", eventResults, ConquestRecord.class); } diff --git a/forge-gui/src/main/java/forge/util/XmlReader.java b/forge-gui/src/main/java/forge/util/XmlReader.java index b0ba4585508..55050b99077 100644 --- a/forge-gui/src/main/java/forge/util/XmlReader.java +++ b/forge-gui/src/main/java/forge/util/XmlReader.java @@ -37,12 +37,6 @@ public class XmlReader { } return defaultValue; } - public > E read(String key, Class enumType) { - if (currentElement.hasAttribute(key)) { - return Enum.valueOf(enumType, currentElement.getAttribute(key)); - } - return null; - } public int read(String key, int defaultValue) { if (currentElement.hasAttribute(key)) { return Integer.parseInt(currentElement.getAttribute(key)); @@ -61,26 +55,26 @@ public class XmlReader { } return defaultValue; } - public PaperCard read(String key, PaperCard defaultValue, CardDb cardDb) { + public PaperCard read(String key, CardDb cardDb) { paperCardBuilder.setup(this, cardDb); - return read(key, defaultValue, paperCardBuilder); + return parseChildElements(key, paperCardBuilder); } public > void read(String key, T collectionToLoad, CardDb cardDb) { paperCardBuilder.setup(this, cardDb); - read(key, collectionToLoad, null, paperCardBuilder); + parseChildElements(key, collectionToLoad, null, paperCardBuilder); } public > T read(String key, Class collectionType, CardDb cardDb) { paperCardBuilder.setup(this, cardDb); - return read(key, null, collectionType, paperCardBuilder); + return parseChildElements(key, null, collectionType, paperCardBuilder); } - public T read(String key, T defaultValue, Class type) { - return read(key, defaultValue, new GenericBuilder(type)); + public T read(String key, Class type) { + return parseChildElements(key, new GenericBuilder(type)); } public > void read(String key, T collectionToLoad, Class elementType) { - read(key, collectionToLoad, null, new GenericBuilder(elementType)); + parseChildElements(key, collectionToLoad, null, new GenericBuilder(elementType)); } public > T read(String key, Class collectionType, Class elementType) { - return read(key, null, collectionType, new GenericBuilder(elementType)); + return parseChildElements(key, null, collectionType, new GenericBuilder(elementType)); } public void read(final String key, final V[] array, final Class elementType) { parseChildElements(key, new Evaluator() { @@ -135,16 +129,28 @@ public class XmlReader { /* Private helper methods */ - private T read(String key, T defaultValue, final Evaluator builder) { - T result = parseChildElements(key, builder); - if (result == null) { - result = defaultValue; + private T parseChildElements(String findKey, Evaluator handler) { + Element parentElement = currentElement; + NodeList childNodes = currentElement.getChildNodes(); + for (int i = 0; i < childNodes.getLength(); i++) { + Node node = childNodes.item(i); + if (node instanceof Element) { + Element element = (Element)node; + if (findKey == null || element.getTagName().equals(findKey)) { + currentElement = (Element)node; + T result = handler.evaluate(); + currentElement = parentElement; + if (findKey != null) { + return result; + } + } + } } - return result; + return null; } - private > T read(String key, final T collectionToLoad, final Class collectionType, final Evaluator builder) { - return read(key, collectionToLoad, new Evaluator() { + private > T parseChildElements(String key, final T collectionToLoad, final Class collectionType, final Evaluator builder) { + T result = parseChildElements(key, new Evaluator() { @Override public T evaluate() { final T result; @@ -173,26 +179,10 @@ public class XmlReader { return result; } }); - } - - private T parseChildElements(String findKey, Evaluator handler) { - Element parentElement = currentElement; - NodeList childNodes = currentElement.getChildNodes(); - for (int i = 0; i < childNodes.getLength(); i++) { - Node node = childNodes.item(i); - if (node instanceof Element) { - Element element = (Element)node; - if (findKey == null || element.getTagName().equals(findKey)) { - currentElement = (Element)node; - T result = handler.evaluate(); - currentElement = parentElement; - if (findKey != null) { - return result; - } - } - } + if (result == null) { + result = collectionToLoad; } - return null; + return result; } private static final PaperCardBuilder paperCardBuilder = new PaperCardBuilder();