package graphtea.extensions.io; import graphtea.graph.graph.Edge; import graphtea.graph.graph.GPoint; import graphtea.graph.graph.GraphModel; import graphtea.graph.graph.Vertex; import org.w3c.dom.*; import org.xml.sax.SAXException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import java.io.File; import java.io.IOException; /** * * @author Sebastian Glass * @since 03.05.2015 * */ public class MapFileReader { private GraphModel graph; private String background; public MapFileReader(String path){ try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse( new File(path.replace(".data", ".xml")) ); NodeList nList = document.getElementsByTagName("map"); background = ((Element)nList.item(0)).getElementsByTagName("File").item(0).getTextContent(); nList = document.getElementsByTagName("vertex"); GraphModel g2 = new GraphModel(false); g2.setAllowLoops(true); Vertex root = new Vertex(); root.setLocation(new GPoint(0,0)); g2.addVertex(root); for (int temp = 0; temp < nList.getLength(); temp++) { Node nNode = nList.item(temp); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; boolean isRoot= eElement.getAttribute("type").equals("root"); String id = eElement.getAttribute("id"); int x = Integer.parseInt(eElement.getElementsByTagName("x").item(0).getTextContent()); int y = Integer.parseInt(eElement.getElementsByTagName("y").item(0).getTextContent()); int value; Vertex newVertex = new Vertex(); newVertex.setLocation(new GPoint(x, y)); newVertex.setLabel(id); if(!isRoot){ g2.addVertex(newVertex); value = Integer.parseInt(eElement.getElementsByTagName("value").item(0).getTextContent()); Edge e = new Edge(newVertex, root); e.setWeight(value); g2.addEdge(e); }else{ root.setLocation(newVertex.getLocation()); root.setLabel(newVertex.getLabel()); // root = newVertex; } } } this.setGraph(g2); } catch (DOMException | ParserConfigurationException | SAXException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public GraphModel getGraph() { return graph; } public void setGraph(GraphModel graph) { this.graph = graph; } public String getBackground() { return background; } }