summaryrefslogtreecommitdiff
path: root/ihl/utils/IHLXMLParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'ihl/utils/IHLXMLParser.java')
-rw-r--r--ihl/utils/IHLXMLParser.java141
1 files changed, 141 insertions, 0 deletions
diff --git a/ihl/utils/IHLXMLParser.java b/ihl/utils/IHLXMLParser.java
new file mode 100644
index 0000000..67d246b
--- /dev/null
+++ b/ihl/utils/IHLXMLParser.java
@@ -0,0 +1,141 @@
+package ihl.utils;
+
+import ihl.IHLMod;
+import ihl.guidebook.IHLGuidebookGui;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.LineNumberReader;
+import java.io.OutputStreamWriter;
+import java.net.URL;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.w3c.dom.*;
+import org.xml.sax.SAXException;
+
+import com.google.common.io.Files;
+
+
+public class IHLXMLParser {
+
+ public DocumentBuilderFactory dbf;
+ public DocumentBuilder db;
+
+ public IHLXMLParser() throws ParserConfigurationException
+ {
+ dbf = DocumentBuilderFactory.newInstance();
+ db = dbf.newDocumentBuilder();
+ }
+
+ public void visit(Node node, int level, int sectionNumber1, IHLGuidebookGui ihlGuidebookGui)
+ {
+ IHLMod.log.debug("Visiting node.");
+ IHLMod.log.debug("Current section="+sectionNumber1);
+ IHLMod.log.debug("Node name="+node.getNodeName());
+ int sectionNumber = sectionNumber1;
+ NodeList list = node.getChildNodes();
+ IHLMod.log.debug("child size="+list.getLength());
+ if (node instanceof Element)
+ {
+ IHLMod.log.debug("node instance of Element.");
+ Element e = (Element) node;
+ IHLMod.log.debug("Node tagname="+e.getTagName());
+ IHLMod.log.debug("Node text content="+e.getTextContent());
+ if(e.getTagName().equals("title"))
+ {
+ ihlGuidebookGui.setTitle(IHLUtils.trim(e.getTextContent()));
+ }
+ else if(e.getTagName().equals("itemstack"))
+ {
+ String[] innername = IHLUtils.trim(e.getTextContent()).split(":");
+ ihlGuidebookGui.addItemStack(IHLUtils.getOtherModItemStackWithDamage(innername[0], innername[1], Integer.parseInt(e.getAttribute("damage"))));
+ }
+ else if(e.getTagName().equals("text"))
+ {
+ ihlGuidebookGui.addTextBlock(IHLUtils.trim(e.getTextContent()));
+ }
+ else if(e.getTagName().equals("image"))
+ {
+ ihlGuidebookGui.setPicture(IHLUtils.trim(e.getTextContent()).replace(" ", ""), Integer.parseInt(e.getAttribute("width")),Integer.parseInt(e.getAttribute("height")));
+ }
+ }
+ for (int i = 0; i < list.getLength(); i++)
+ {
+ Node childNode = list.item(i);
+ if(childNode instanceof Element && ((Element) childNode).getTagName().equals("section"))
+ {
+ Element e = (Element) childNode;
+ int id = Integer.parseInt(e.getAttribute("id"));
+ ihlGuidebookGui.setMaxSectionNumber(id);
+ if(sectionNumber==id)
+ {
+ visit(childNode, level + 1, sectionNumber, ihlGuidebookGui);
+ }
+ else
+ {
+ if(sectionNumber > ihlGuidebookGui.getMaxSectionNumber())
+ {
+ sectionNumber=0;
+ ihlGuidebookGui.setSectionNumber(0);
+ visit(childNode, level + 1, sectionNumber, ihlGuidebookGui);
+ }
+ }
+ }
+ else
+ {
+ visit(childNode, level + 1, sectionNumber, ihlGuidebookGui);
+ }
+ }
+ }
+
+ public void setupGuidebookGUI(IHLGuidebookGui ihlGuidebookGui, int sectionNumber) throws SAXException, IOException
+ {
+ Document doc = db.parse(IHLMod.class.getResourceAsStream("/assets/ihl/config/ihl-guidebook.xml"));
+ visit(doc, 0, sectionNumber, ihlGuidebookGui);
+ }
+
+ private File getGuidebookFile() throws IOException
+ {
+ File folder = new File(IHLMod.proxy.getMinecraftDir(), "config");
+ folder.mkdirs();
+ File file = new File(folder, "ihl-guidebook.xml");
+ if(!file.exists())
+ {
+ InputStream in = IHLMod.class.getResourceAsStream("/assets/ihl/config/ihl-guidebook.xml");
+ InputStreamReader isReader = new InputStreamReader(in, "UTF-8");
+ LineNumberReader reader = new LineNumberReader(isReader);
+ OutputStreamWriter osWriter = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
+ BufferedWriter writer = new BufferedWriter(osWriter);
+ String line;
+ while ((line = reader.readLine()) != null)
+ {
+ writer.append(line);
+ writer.newLine();
+ }
+ writer.close();
+ osWriter.close();
+ in = IHLMod.class.getResourceAsStream("/assets/ihl/config/adress.xsd");
+ isReader = new InputStreamReader(in, "UTF-8");
+ reader = new LineNumberReader(isReader);
+ file = new File(folder, "adress.xsd");
+ osWriter = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
+ writer = new BufferedWriter(osWriter);
+ while ((line = reader.readLine()) != null)
+ {
+ writer.append(line);
+ writer.newLine();
+ }
+ writer.close();
+ osWriter.close();
+ }
+ return file;
+ }
+
+}