From 05c78126859231a68e199dc34613689bd0978e2f Mon Sep 17 00:00:00 2001 From: Foghrye4 Date: Mon, 11 Apr 2016 19:44:54 +0300 Subject: Initial commit --- ihl/utils/IHLXMLParser.java | 141 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 ihl/utils/IHLXMLParser.java (limited to 'ihl/utils/IHLXMLParser.java') 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; + } + +} -- cgit v1.2.3