net.java.textilej.util.FormattingXMLStreamWriter Maven / Gradle / Ivy
The newest version!
package net.java.textilej.util;
import java.util.Stack;
public class FormattingXMLStreamWriter implements XmlStreamWriter {
private XmlStreamWriter delegate;
private int indentLevel;
private Stack childCounts = new Stack();
private int childCount;
private Stack elements = new Stack();
private int lineOffset = 0;
public FormattingXMLStreamWriter(XmlStreamWriter delegate) {
this.delegate = delegate;
}
public void close() {
delegate.close();
}
public void flush() {
delegate.flush();
}
public String getPrefix(String uri) {
return delegate.getPrefix(uri);
}
public void setDefaultNamespace(String uri) {
delegate.setDefaultNamespace(uri);
}
public void setPrefix(String prefix, String uri) {
delegate.setPrefix(prefix, uri);
}
public void writeAttribute(String prefix, String namespaceURI, String localName, String value) {
if (value == null) {
value = "";
}
delegate.writeAttribute(prefix, namespaceURI, localName, value);
}
public void writeAttribute(String namespaceURI, String localName, String value) {
if (value == null) {
value = "";
}
delegate.writeAttribute(namespaceURI, localName, value);
}
public void writeAttribute(String localName, String value) {
if (value == null) {
value = "";
}
delegate.writeAttribute(localName, value);
}
public void writeCData(String data) {
delegate.writeCData(data);
}
public void writeCharacters(char[] text, int start, int len) {
int lineStart = start;
int length = 0;
for (int x = 0;x 0) {
delegate.writeCharacters(text, lineStart, length);
lineOffset += length;
}
}
public void writeCharacters(String text) {
if (text == null) {
return;
}
writeCharacters(text.toCharArray(),0,text.length());
}
public void writeLiteral(String literal) {
delegate.writeLiteral(literal);
}
public void writeComment(String data) {
if (data == null) {
data = "";
}
delegate.writeComment(data);
}
public void writeDefaultNamespace(String namespaceURI) {
delegate.writeDefaultNamespace(namespaceURI);
}
public void writeDTD(String dtd) {
delegate.writeDTD(dtd);
}
public void writeEmptyElement(String prefix, String localName, String namespaceURI) {
++childCount;
maybeIndent();
delegate.writeEmptyElement(prefix, localName, namespaceURI);
}
public void writeEmptyElement(String namespaceURI, String localName) {
++childCount;
maybeIndent();
delegate.writeEmptyElement(namespaceURI, localName);
}
public void writeEmptyElement(String localName) {
++childCount;
maybeIndent();
delegate.writeEmptyElement(localName);
}
public void writeEndDocument() {
delegate.writeEndDocument();
}
public void writeEndElement() {
--indentLevel;
maybeIndent();
elements.pop();
delegate.writeEndElement();
childCount = childCounts.pop();
}
public void writeEntityRef(String name) {
delegate.writeEntityRef(name);
}
public void writeNamespace(String prefix, String namespaceURI) {
delegate.writeNamespace(prefix, namespaceURI);
}
public void writeProcessingInstruction(String target, String data) {
delegate.writeProcessingInstruction(target, data);
}
public void writeProcessingInstruction(String target) {
delegate.writeProcessingInstruction(target);
}
public void writeStartDocument() {
delegate.writeStartDocument();
}
public void writeStartDocument(String encoding, String version) {
delegate.writeStartDocument(encoding, version);
}
public void writeStartDocument(String version) {
delegate.writeStartDocument(version);
}
public void writeStartElement(String prefix, String localName, String namespaceURI) {
++childCount;
maybeIndent();
elements.push(localName);
childCounts.push(childCount);
childCount = 0;
++indentLevel;
delegate.writeStartElement(prefix, localName, namespaceURI);
}
public void writeStartElement(String namespaceURI, String localName) {
++childCount;
maybeIndent();
elements.push(localName);
childCounts.push(childCount);
childCount = 0;
++indentLevel;
delegate.writeStartElement(namespaceURI, localName);
}
public void writeStartElement(String localName) {
++childCount;
maybeIndent();
elements.push(localName);
childCounts.push(childCount);
childCount = 0;
++indentLevel;
delegate.writeStartElement(localName);
}
private void maybeIndent() {
maybeIndent(true,false);
}
private void maybeIndent(boolean withNewline,boolean force) {
if ((childCount == 0 && !force)||preserveWhitespace()) {
return;
}
StringBuilder buf = new StringBuilder();
if (withNewline) {
buf.append('\n');
}
for (int x = 0;x=0;--x) {
if (preserveWhitespace(elements.get(x))) {
return true;
}
}
return false;
}
/**
* Override this method to indicate which elements must have whitespace preserved.
*
* @param elementName the local name of the element
*/
protected boolean preserveWhitespace(String elementName) {
return false;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy