Fixed DeckSection serialization for quest mode.

This commit is contained in:
Maxmtg
2012-02-01 21:00:40 +00:00
parent 932e1b0ba8
commit b15ac88f81
2 changed files with 63 additions and 14 deletions

View File

@@ -5,6 +5,7 @@ import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.FilenameFilter;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
@@ -361,7 +362,13 @@ public class ControlQuest {
// end block which can be deleted
// Iterate over files and load quest datas for each.
File[] arrFiles = dirQuests.listFiles();
FilenameFilter takeDatFiles = new FilenameFilter() {
@Override
public boolean accept(final File dir, final String name) {
return name.endsWith(".dat");
}
};
File[] arrFiles = dirQuests.listFiles(takeDatFiles);
arrQuests = new HashMap<String, QuestData>();
for (File f : arrFiles) {
arrQuests.put(f.getName(), QuestDataIO.loadData(f));

View File

@@ -45,6 +45,7 @@ import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.mapper.MapperWrapper;
import forge.deck.DeckSection;
import forge.error.ErrorViewer;
import forge.game.GameType;
import forge.item.BoosterPack;
@@ -107,8 +108,10 @@ public class QuestDataIO {
final IgnoringXStream xStream = new IgnoringXStream();
xStream.registerConverter(new CardPoolToXml());
xStream.registerConverter(new DeckSectionToXml());
xStream.registerConverter(new GameTypeToXml());
xStream.alias("CardPool", ItemPool.class);
xStream.alias("DeckSection", DeckSection.class);
data = (QuestData) xStream.fromXML(xml.toString());
data.setName(name);
@@ -193,7 +196,9 @@ public class QuestDataIO {
try {
final XStream xStream = new XStream();
xStream.registerConverter(new CardPoolToXml());
xStream.registerConverter(new DeckSectionToXml());
xStream.alias("CardPool", ItemPool.class);
xStream.alias("DeckSection", DeckSection.class);
final File f = new File(ForgeProps.getFile(NewConstants.Quest.DATA_DIR) + "/" + qd.getName() + ".dat");
final BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(f));
@@ -265,7 +270,7 @@ public class QuestDataIO {
return clasz.equals(ItemPool.class);
}
private void write(final CardPrinted cref, final Integer count, final HierarchicalStreamWriter writer) {
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());
@@ -279,16 +284,16 @@ public class QuestDataIO {
writer.endNode();
}
private void write(final BoosterPack booster, final Integer count, final HierarchicalStreamWriter writer) {
protected void write(final BoosterPack booster, final Integer count, final HierarchicalStreamWriter writer) {
writer.startNode("booster");
writer.addAttribute("s", booster.getSet());
writer.addAttribute("n", count.toString());
writer.endNode();
}
private void write(final PreconDeck deck, final Integer count, final HierarchicalStreamWriter writer) {
protected void write(final PreconDeck deck, final Integer count, final HierarchicalStreamWriter writer) {
writer.startNode("precon");
writer.addAttribute("s", deck.getName());
writer.addAttribute("name", deck.getName());
writer.addAttribute("n", count.toString());
writer.endNode();
}
@@ -337,8 +342,9 @@ public class QuestDataIO {
return result;
}
private PreconDeck readPreconDeck(final HierarchicalStreamReader reader) {
final String name = reader.getAttribute("s");
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;
@@ -347,12 +353,12 @@ public class QuestDataIO {
return null;
}
private BoosterPack readBooster(final HierarchicalStreamReader reader) {
protected BoosterPack readBooster(final HierarchicalStreamReader reader) {
final String set = reader.getAttribute("s");
return new BoosterPack(set);
}
private CardPrinted readCardPrinted(final HierarchicalStreamReader reader) {
protected CardPrinted readCardPrinted(final HierarchicalStreamReader reader) {
final String name = reader.getAttribute("c");
final String set = reader.getAttribute("s");
final String sIndex = reader.getAttribute("i");
@@ -362,4 +368,40 @@ public class QuestDataIO {
return foil ? CardPrinted.makeFoiled(card) : card;
}
}
private static class DeckSectionToXml extends CardPoolToXml {
@SuppressWarnings("rawtypes")
@Override
public boolean canConvert(final Class clasz) {
return clasz.equals(DeckSection.class);
}
@Override
public void marshal(final Object source, final HierarchicalStreamWriter writer, final MarshallingContext context) {
for (final Entry<CardPrinted, Integer> e : (DeckSection) source) {
this.write(e.getKey(), e.getValue(), writer);
}
}
@Override
public Object unmarshal(final HierarchicalStreamReader reader, final UnmarshallingContext context) {
final DeckSection result = new DeckSection();
while (reader.hasMoreChildren()) {
reader.moveDown();
final String sCnt = reader.getAttribute("n");
final int cnt = StringUtils.isNumeric(sCnt) ? Integer.parseInt(sCnt) : 1;
final String nodename = reader.getNodeName();
if ("string".equals(nodename)) {
result.add(CardDb.instance().getCard(reader.getValue()));
} else if ("card".equals(nodename)) { // new format
result.add(this.readCardPrinted(reader), cnt);
}
reader.moveUp();
}
return result;
}
}
}