package org.simantics.xml.sax.base; import javax.xml.namespace.NamespaceContext; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; /** * Rather dummy indenting XML Stream Writer. * * @author Marko Luukkainen * */ public class IndentingXMLStreamWriter implements XMLStreamWriter{ XMLStreamWriter delegate; int depth = 0; boolean indent = true; public IndentingXMLStreamWriter(XMLStreamWriter delegate) { this.delegate = delegate; } @Override public void close() throws XMLStreamException { delegate.close(); } @Override public void flush() throws XMLStreamException { delegate.close(); } @Override public NamespaceContext getNamespaceContext() { return delegate.getNamespaceContext(); } @Override public String getPrefix(String uri) throws XMLStreamException { return delegate.getPrefix(uri); } @Override public Object getProperty(String name) throws IllegalArgumentException { return delegate.getProperty(name); } @Override public void setDefaultNamespace(String uri) throws XMLStreamException { delegate.setDefaultNamespace(uri); } @Override public void setPrefix(String prefix, String uri) throws XMLStreamException { delegate.setPrefix(prefix, uri); } private String getIdent() { String s = "\n"; for (int i = 0; i < depth; i++) s += " "; return s; } @Override public void writeStartElement(String localName) throws XMLStreamException { if(indent) delegate.writeCharacters(getIdent()); delegate.writeStartElement(localName); depth++; indent = true; } @Override public void writeStartElement(String namespaceURI, String localName) throws XMLStreamException { if (indent) delegate.writeCharacters(getIdent()); delegate.writeStartElement(namespaceURI, localName); depth++; indent = true; } @Override public void writeStartElement(String prefix, String localName, String namespaceURI) throws XMLStreamException { if (indent) delegate.writeCharacters(getIdent()); delegate.writeStartElement(prefix, localName, namespaceURI); depth++; indent = true; } @Override public void writeStartDocument() throws XMLStreamException { delegate.writeStartDocument(); depth++; indent = true; } @Override public void writeStartDocument(String version) throws XMLStreamException { delegate.writeStartDocument(version); depth++; indent = true; } @Override public void writeStartDocument(String encoding, String version) throws XMLStreamException { delegate.writeStartDocument(encoding, version); depth++; indent = true; } @Override public void writeEndElement() throws XMLStreamException { depth--; if(indent) delegate.writeCharacters(getIdent()); delegate.writeEndElement(); indent = true; } @Override public void writeEndDocument() throws XMLStreamException { depth--; if (indent) delegate.writeCharacters(getIdent()); delegate.writeEndDocument(); indent = true; } @Override public void writeEmptyElement(String namespaceURI, String localName) throws XMLStreamException { delegate.writeEmptyElement(namespaceURI, localName); indent = true; } @Override public void writeEmptyElement(String prefix, String localName, String namespaceURI) throws XMLStreamException { delegate.writeEmptyElement(prefix, localName, namespaceURI); indent = true; } @Override public void writeEmptyElement(String localName) throws XMLStreamException { delegate.writeEmptyElement(localName); indent = true; } @Override public void writeAttribute(String localName, String value) throws XMLStreamException { delegate.writeAttribute( localName, value); } @Override public void writeAttribute(String prefix, String namespaceURI, String localName, String value) throws XMLStreamException { delegate.writeAttribute(prefix, namespaceURI, localName, value); } @Override public void writeAttribute(String namespaceURI, String localName, String value) throws XMLStreamException { delegate.writeAttribute(namespaceURI, localName, value); } @Override public void writeNamespace(String prefix, String namespaceURI) throws XMLStreamException { delegate.writeNamespace(prefix, namespaceURI); } @Override public void writeDefaultNamespace(String namespaceURI) throws XMLStreamException { delegate.writeDefaultNamespace(namespaceURI); } @Override public void writeComment(String data) throws XMLStreamException { delegate.writeComment(data); } @Override public void writeProcessingInstruction(String target) throws XMLStreamException { delegate.writeProcessingInstruction(target); } @Override public void writeProcessingInstruction(String target, String data) throws XMLStreamException { delegate.writeProcessingInstruction(target, data); } @Override public void writeCData(String data) throws XMLStreamException { delegate.writeCData(data); } @Override public void writeDTD(String dtd) throws XMLStreamException { delegate.writeDTD(dtd); } @Override public void writeEntityRef(String name) throws XMLStreamException { delegate.writeEntityRef(name); } @Override public void writeCharacters(String text) throws XMLStreamException { delegate.writeCharacters(text); indent=false; } @Override public void writeCharacters(char[] text, int start, int len) throws XMLStreamException { delegate.writeCharacters(text, start, len); indent=false; } @Override public void setNamespaceContext(NamespaceContext context) throws XMLStreamException { delegate.setNamespaceContext(context); } }