Mercurial > hg > truffle
changeset 22332:fdc687bad5d4
GraphPrintVisitor: factor out implementation
author | Andreas Woess <andreas.woess@oracle.com> |
---|---|
date | Wed, 28 Oct 2015 14:04:33 +0100 |
parents | 920c3ec54499 |
children | 1801b7f11c64 |
files | truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/GraphPrintVisitor.java |
diffstat | 1 files changed, 134 insertions(+), 66 deletions(-) [+] |
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/GraphPrintVisitor.java Wed Oct 28 14:00:16 2015 +0100 +++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/GraphPrintVisitor.java Wed Oct 28 14:04:33 2015 +0100 @@ -59,13 +59,12 @@ public static final String GraphVisualizerAddress = "127.0.0.1"; public static final int GraphVisualizerPort = 4444; - private static final XMLOutputFactory XML_OUTPUT_FACTORY = XMLOutputFactory.newInstance(); private Map<Object, NodeElement> nodeMap; private List<EdgeElement> edgeList; private Map<Object, NodeElement> prevNodeMap; private int id; - private XMLStreamWriter xmlstream; + private Impl xmlstream; private OutputStream outputStream; private int openGroupCount; private int openGraphCount; @@ -120,66 +119,140 @@ } } + private static class Impl { + private static final XMLOutputFactory XML_OUTPUT_FACTORY = XMLOutputFactory.newInstance(); + private final XMLStreamWriter xmlstream; + + protected Impl(OutputStream outputStream) { + try { + this.xmlstream = XML_OUTPUT_FACTORY.createXMLStreamWriter(outputStream); + } catch (XMLStreamException | FactoryConfigurationError e) { + throw new RuntimeException(e); + } + } + + public void writeStartDocument() { + try { + xmlstream.writeStartDocument(); + } catch (XMLStreamException e) { + throw new RuntimeException(e); + } + } + + public void writeEndDocument() { + try { + xmlstream.writeEndDocument(); + } catch (XMLStreamException e) { + throw new RuntimeException(e); + } + } + + public void writeStartElement(String name) { + try { + xmlstream.writeStartElement(name); + } catch (XMLStreamException e) { + throw new RuntimeException(e); + } + } + + public void writeEndElement() { + try { + xmlstream.writeEndElement(); + } catch (XMLStreamException e) { + throw new RuntimeException(e); + } + } + + public void writeAttribute(String name, String value) { + try { + xmlstream.writeAttribute(name, value); + } catch (XMLStreamException e) { + throw new RuntimeException(e); + } + } + + public void writeCharacters(String text) { + try { + xmlstream.writeCharacters(text); + } catch (XMLStreamException e) { + throw new RuntimeException(e); + } + } + + public void flush() { + try { + xmlstream.flush(); + } catch (XMLStreamException e) { + throw new RuntimeException(e); + } + } + + public void close() { + try { + xmlstream.close(); + } catch (XMLStreamException e) { + throw new RuntimeException(e); + } + } + } + public GraphPrintVisitor() { this(new ByteArrayOutputStream()); } public GraphPrintVisitor(OutputStream outputStream) { this.outputStream = outputStream; - try { - this.xmlstream = XML_OUTPUT_FACTORY.createXMLStreamWriter(outputStream); - this.xmlstream.writeStartDocument(); - this.xmlstream.writeStartElement("graphDocument"); - } catch (XMLStreamException | FactoryConfigurationError e) { - throw new RuntimeException(e); + this.xmlstream = new Impl(outputStream); + this.xmlstream.writeStartDocument(); + this.xmlstream.writeStartElement("graphDocument"); + } + + private void ensureOpen() { + if (xmlstream == null) { + throw new IllegalStateException("printer is closed"); } } public GraphPrintVisitor beginGroup(String groupName) { + ensureOpen(); maybeEndGraph(); openGroupCount++; - try { - xmlstream.writeStartElement("group"); - xmlstream.writeStartElement("properties"); - - if (!groupName.isEmpty()) { - // set group name - xmlstream.writeStartElement("p"); - xmlstream.writeAttribute("name", "name"); - xmlstream.writeCharacters(groupName); - xmlstream.writeEndElement(); - } + xmlstream.writeStartElement("group"); + xmlstream.writeStartElement("properties"); - xmlstream.writeEndElement(); // properties + if (!groupName.isEmpty()) { + // set group name + xmlstream.writeStartElement("p"); + xmlstream.writeAttribute("name", "name"); + xmlstream.writeCharacters(groupName); + xmlstream.writeEndElement(); + } - // forget old nodes - prevNodeMap = null; - nodeMap = new IdentityHashMap<>(); - edgeList = new ArrayList<>(); + xmlstream.writeEndElement(); // properties - return this; - } catch (XMLStreamException e) { - throw new RuntimeException(e); - } + // forget old nodes + prevNodeMap = null; + nodeMap = new IdentityHashMap<>(); + edgeList = new ArrayList<>(); + + return this; } public GraphPrintVisitor endGroup() { + ensureOpen(); if (openGroupCount <= 0) { throw new IllegalArgumentException("no open group"); } maybeEndGraph(); openGroupCount--; - try { - xmlstream.writeEndElement(); // group - } catch (XMLStreamException e) { - throw new RuntimeException(e); - } + xmlstream.writeEndElement(); // group return this; } public GraphPrintVisitor beginGraph(String graphName) { + ensureOpen(); if (openGroupCount == 0) { beginGroup(graphName); } @@ -204,43 +277,40 @@ } public GraphPrintVisitor endGraph() { + ensureOpen(); if (openGraphCount <= 0) { throw new IllegalArgumentException("no open graph"); } openGraphCount--; - try { - xmlstream.writeStartElement("graph"); + xmlstream.writeStartElement("graph"); - xmlstream.writeStartElement("properties"); + xmlstream.writeStartElement("properties"); - // set graph name - xmlstream.writeStartElement("p"); - xmlstream.writeAttribute("name", "name"); - xmlstream.writeCharacters(currentGraphName); - xmlstream.writeEndElement(); + // set graph name + xmlstream.writeStartElement("p"); + xmlstream.writeAttribute("name", "name"); + xmlstream.writeCharacters(currentGraphName); + xmlstream.writeEndElement(); - xmlstream.writeEndElement(); // properties + xmlstream.writeEndElement(); // properties - xmlstream.writeStartElement("nodes"); - writeNodes(); - xmlstream.writeEndElement(); // nodes + xmlstream.writeStartElement("nodes"); + writeNodes(); + xmlstream.writeEndElement(); // nodes - xmlstream.writeStartElement("edges"); - writeEdges(); - xmlstream.writeEndElement(); // edges + xmlstream.writeStartElement("edges"); + writeEdges(); + xmlstream.writeEndElement(); // edges - xmlstream.writeEndElement(); // graph + xmlstream.writeEndElement(); // graph - xmlstream.flush(); - } catch (XMLStreamException e) { - throw new RuntimeException(e); - } + xmlstream.flush(); return this; } - private void writeNodes() throws XMLStreamException { + private void writeNodes() { for (NodeElement node : nodeMap.values()) { xmlstream.writeStartElement("node"); xmlstream.writeAttribute("id", String.valueOf(node.getId())); @@ -258,7 +328,7 @@ } } - private void writeEdges() throws XMLStreamException { + private void writeEdges() { for (EdgeElement edge : edgeList) { xmlstream.writeStartElement("edge"); @@ -315,18 +385,16 @@ if (xmlstream == null) { return; } - try { - while (openGroupCount > 0) { - endGroup(); - } + while (openGroupCount > 0) { + endGroup(); + } + assert openGraphCount == 0 && openGroupCount == 0; - xmlstream.writeEndElement(); // graphDocument - xmlstream.writeEndDocument(); - xmlstream.flush(); - xmlstream = null; - } catch (XMLStreamException e) { - throw new RuntimeException(e); - } + xmlstream.writeEndElement(); // graphDocument + xmlstream.writeEndDocument(); + xmlstream.flush(); + xmlstream.close(); + xmlstream = null; } private int nextId() {