diff --git a/forge-gui/pom.xml b/forge-gui/pom.xml
index 63d5e81e111..e3046e142f1 100644
--- a/forge-gui/pom.xml
+++ b/forge-gui/pom.xml
@@ -51,11 +51,5 @@
freemarker
2.3.20
-
- xmlpull
- xmlpull
- 1.1.3.1
- provided
-
diff --git a/forge-gui/src/main/java/forge/card/CardPreferences.java b/forge-gui/src/main/java/forge/card/CardPreferences.java
index ac049ce636a..b35deae24c1 100644
--- a/forge-gui/src/main/java/forge/card/CardPreferences.java
+++ b/forge-gui/src/main/java/forge/card/CardPreferences.java
@@ -1,28 +1,25 @@
package forge.card;
-import javax.xml.stream.*;
-import javax.xml.stream.events.Attribute;
-import javax.xml.stream.events.StartElement;
-import javax.xml.stream.events.XMLEvent;
-
import forge.item.IPaperCard;
import forge.properties.ForgeConstants;
+import forge.util.XmlUtil;
-import java.io.FileInputStream;
import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.Map;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
/**
* Preferences associated with individual cards
*
*/
public class CardPreferences {
- private static final XMLEventFactory EVENT_FACTORY = XMLEventFactory.newInstance();
- private static final XMLEvent NEWLINE = EVENT_FACTORY.createDTD("\n");
- private static final XMLEvent TAB = EVENT_FACTORY.createDTD("\t");
private static Map allPrefs = new HashMap();
public static CardPreferences getPrefs(IPaperCard card) {
@@ -39,77 +36,43 @@ public class CardPreferences {
allPrefs.clear();
try {
- final XMLInputFactory in = XMLInputFactory.newInstance();
- final XMLEventReader reader = in.createXMLEventReader(new FileInputStream(ForgeConstants.CARD_PREFS_FILE));
-
- XMLEvent event;
- StartElement element;
- Iterator> attributes;
- Attribute attribute;
- String tagname;
- CardPreferences prefs;
-
- while (reader.hasNext()) {
- event = reader.nextEvent();
-
- if (event.isStartElement()) {
- element = event.asStartElement();
- tagname = element.getName().getLocalPart();
-
- if (tagname.equals("card")) {
- prefs = new CardPreferences();
- attributes = element.getAttributes();
-
- while (attributes.hasNext()) {
- attribute = (Attribute) attributes.next();
- switch (attribute.getName().toString()) {
- case "name":
- allPrefs.put(attribute.getValue(), prefs);
- break;
- case "stars":
- prefs.starCount = Integer.parseInt(attribute.getValue());
- break;
- }
- }
- }
- }
+ DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ final Document document = builder.parse(ForgeConstants.CARD_PREFS_FILE);
+ final NodeList cards = document.getElementsByTagName("card");
+ for (int i = 0; i < cards.getLength(); i++) {
+ final CardPreferences prefs = new CardPreferences();
+ final Element el = (Element)cards.item(i);
+ allPrefs.put(el.getAttribute("name"), prefs);
+ prefs.starCount = Integer.parseInt(el.getAttribute("stars"));
}
}
- catch (final FileNotFoundException e) {
- /* ignore; it's ok if this file doesn't exist */
+ catch (FileNotFoundException e) {
+ //ok if file not found
}
- catch (final Exception e) {
+ catch (Exception e) {
e.printStackTrace();
}
}
public static void save() {
try {
- final XMLOutputFactory out = XMLOutputFactory.newInstance();
- final XMLEventWriter writer = out.createXMLEventWriter(new FileOutputStream(ForgeConstants.CARD_PREFS_FILE));
-
- writer.add(EVENT_FACTORY.createStartDocument());
- writer.add(NEWLINE);
- writer.add(EVENT_FACTORY.createStartElement("", "", "preferences"));
- writer.add(EVENT_FACTORY.createAttribute("type", "cards"));
- writer.add(NEWLINE);
-
+ DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document document = builder.newDocument();
+ Element root = document.createElement("preferences");
+ root.setAttribute("type", "cards");
+ document.appendChild(root);
+
for (Map.Entry entry : allPrefs.entrySet()) {
if (entry.getValue().starCount > 0) {
- writer.add(TAB);
- writer.add(EVENT_FACTORY.createStartElement("", "", "card"));
- writer.add(EVENT_FACTORY.createAttribute("name", entry.getKey()));
- writer.add(EVENT_FACTORY.createAttribute("stars", String.valueOf(entry.getValue().starCount)));
- writer.add(EVENT_FACTORY.createEndElement("", "", "card"));
- writer.add(NEWLINE);
+ Element card = document.createElement("card");
+ card.setAttribute("name", entry.getKey());
+ card.setAttribute("stars", String.valueOf(entry.getValue().starCount));
+ root.appendChild(card);
}
}
-
- writer.add(EVENT_FACTORY.createEndDocument());
- writer.flush();
- writer.close();
+ XmlUtil.saveDocument(document, ForgeConstants.CARD_PREFS_FILE);
}
- catch (final Exception e) {
+ catch (Exception e) {
e.printStackTrace();
}
}
diff --git a/forge-gui/src/main/java/forge/util/XmlUtil.java b/forge-gui/src/main/java/forge/util/XmlUtil.java
index d2e67698467..1e4f78aae11 100644
--- a/forge-gui/src/main/java/forge/util/XmlUtil.java
+++ b/forge-gui/src/main/java/forge/util/XmlUtil.java
@@ -17,10 +17,8 @@
*/
package forge.util;
+import org.w3c.dom.Document;
import org.w3c.dom.Node;
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserFactory;
-import org.xmlpull.v1.XmlSerializer;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
@@ -30,14 +28,7 @@ import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.InputStreamReader;
import java.io.StringWriter;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Stack;
public class XmlUtil {
@@ -54,6 +45,7 @@ public class XmlUtil {
final Transformer t = TransformerFactory.newInstance().newTransformer();
t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
t.setOutputProperty(OutputKeys.INDENT, "yes");
+ t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
t.transform(new DOMSource(node), new StreamResult(sw));
} catch (final TransformerException te) {
System.out.println("nodeToString Transformer Exception");
@@ -61,135 +53,13 @@ public class XmlUtil {
return sw.toString();
}
- public static void read(String filename, XmlTagReader reader) {
- try {
- XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
- factory.setNamespaceAware(true);
- XmlPullParser xml = factory.newPullParser();
- xml.setInput(new InputStreamReader(new FileInputStream(filename)));
-
- int eventType = xml.getEventType();
- while (eventType != XmlPullParser.END_DOCUMENT) {
- switch (eventType) {
- case XmlPullParser.START_TAG:
- reader.tagStart(xml);
- break;
- case XmlPullParser.END_TAG:
- reader.tagEnd(xml);
- break;
- }
- eventType = xml.next();
- }
- }
- catch (final FileNotFoundException e) {
- /* ignore if file doesn't exist */
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- public static abstract class XmlTagReader {
- public abstract void tagStart(XmlPullParser xml);
- public void tagEnd(XmlPullParser xml) {
- //not required to override but can be
- }
- }
-
- public static void write(String filename, XmlTagWriter writer) {
- FileOutputStream outputStream = null;
- try {
- outputStream = new FileOutputStream(filename);
- XmlPullParserFactory factory = XmlPullParserFactory.newInstance(System.getProperty(XmlPullParserFactory.PROPERTY_NAME), null);
- XmlSerializer xml = factory.newSerializer();
- xml.setOutput(outputStream, null);
- xml.startDocument(null, true);
- xml.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
- writer.writeTags(new XmlWriter(xml));
- xml.endDocument();
- xml.flush();
- outputStream.close();
- }
- catch (Exception e) {
- e.printStackTrace();
- if (outputStream != null) {
- try {
- outputStream.close();
- }
- catch (Exception e1) {
- e1.printStackTrace();
- }
- }
- try {
- new File(filename).delete(); //delete file if exception
- }
- catch (Exception e1) {
- e1.printStackTrace();
- }
- }
- }
-
- public static class XmlWriter {
- private XmlSerializer xml;
- private Stack tagnames;
-
- private XmlWriter(XmlSerializer xml0) {
- xml = xml0;
- }
-
- public void startTag(String tagname) {
- startTag(tagname, null);
- }
- public void startTag(String tagname, Map attrs) {
- try {
- xml.startTag("", tagname);
- if (attrs != null) {
- for (Entry attr : attrs.entrySet()) {
- xml.attribute("", attr.getKey(), attr.getValue());
- }
- }
- tagnames.push(tagname);
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- public void writeTag(String tagname, Map attrs) {
- writeTag(tagname, attrs, null);
- }
- public void writeTag(String tagname, String value) {
- writeTag(tagname, null, value);
- }
- public void writeTag(String tagname, Map attrs, String value) {
- try {
- xml.startTag("", tagname);
- if (attrs != null) {
- for (Entry attr : attrs.entrySet()) {
- xml.attribute("", attr.getKey(), attr.getValue());
- }
- }
- if (value != null) {
- xml.text(value);
- }
- xml.endTag("", tagname);
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- public void endTag() {
- try {
- xml.endTag("", tagnames.pop());
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
-
- public static abstract class XmlTagWriter {
- public abstract void writeTags(XmlWriter xml);
+ public static void saveDocument(final Document document, String filename) throws TransformerException {
+ Transformer t = TransformerFactory.newInstance().newTransformer();
+ t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
+ t.setOutputProperty(OutputKeys.INDENT, "yes");
+ t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
+ DOMSource source = new DOMSource(document);
+ StreamResult result = new StreamResult(new File(filename));
+ t.transform(source, result);
}
}