You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@abdera.apache.org by jm...@apache.org on 2007/11/16 07:54:40 UTC
svn commit: r595579 - in /incubator/abdera/java/trunk:
core/src/main/java/org/apache/abdera/util/
core/src/main/java/org/apache/abdera/writer/
examples/src/main/java/org/apache/abdera/examples/simple/
parser/src/main/java/org/apache/abdera/parser/stax/
Author: jmsnell
Date: Thu Nov 15 22:54:39 2007
New Revision: 595579
URL: http://svn.apache.org/viewvc?rev=595579&view=rev
Log:
Add an option to enable automatic indenting and formatting of the StreamWriter output
e.g.
abdera.newStreamWriter()
.setAutoIndent(true)
.startDocument()
.startFeed()
.writeTitle("foo")
.endFeed()
.endDocument();
Modified:
incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractStreamWriter.java
incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/writer/StreamWriter.java
incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/simple/StreamWriterExample.java
incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/StaxStreamWriter.java
Modified: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractStreamWriter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractStreamWriter.java?rev=595579&r1=595578&r2=595579&view=diff
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractStreamWriter.java (original)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractStreamWriter.java Thu Nov 15 22:54:39 2007
@@ -40,6 +40,7 @@
protected final String name;
protected boolean autoflush = false;
protected boolean autoclose = false;
+ protected boolean autoindent = false;
protected AbstractStreamWriter(String name) {
this.name = name;
@@ -638,4 +639,8 @@
return startElement(name,namespace,null);
}
+ public StreamWriter setAutoIndent(boolean indent) {
+ this.autoindent = indent;
+ return this;
+ }
}
Modified: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/writer/StreamWriter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/writer/StreamWriter.java?rev=595579&r1=595578&r2=595579&view=diff
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/writer/StreamWriter.java (original)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/writer/StreamWriter.java Thu Nov 15 22:54:39 2007
@@ -727,5 +727,15 @@
*/
StreamWriter writeAttribute(QName qname, String value);
+ /**
+ * Write a new line and indent
+ */
+ StreamWriter indent();
+
+ /**
+ * True to enable automatic indenting
+ */
+ StreamWriter setAutoIndent(boolean indent);
+
}
Modified: incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/simple/StreamWriterExample.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/simple/StreamWriterExample.java?rev=595579&r1=595578&r2=595579&view=diff
==============================================================================
--- incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/simple/StreamWriterExample.java (original)
+++ incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/simple/StreamWriterExample.java Thu Nov 15 22:54:39 2007
@@ -37,6 +37,7 @@
abdera.newStreamWriter()
.setOutputStream(System.out,"UTF-8")
.setAutoflush(false)
+ .setAutoIndent(true)
.startDocument()
.startFeed()
.writeId("http://example.org")
@@ -67,6 +68,9 @@
.startElement(new QName("a","b","c"))
.startElement(new QName("x","y","z"))
.writeElementText("This is a test")
+ .startElement("a")
+ .writeElementText("foo")
+ .endElement()
.endElement()
.endElement()
.endContent()
Modified: incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/StaxStreamWriter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/StaxStreamWriter.java?rev=595579&r1=595578&r2=595579&view=diff
==============================================================================
--- incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/StaxStreamWriter.java (original)
+++ incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/StaxStreamWriter.java Thu Nov 15 22:54:39 2007
@@ -19,6 +19,7 @@
import java.io.OutputStream;
import java.io.Writer;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
@@ -37,6 +38,8 @@
private static final String NAME = "default";
private XMLStreamWriter writer;
+ private int depth = 0;
+ private int textwritten = 0;
public StaxStreamWriter() {
super(NAME);
@@ -116,7 +119,10 @@
public StreamWriter endElement() {
try {
- pop();
+ if (autoindent && textwritten == 0) {
+ pop();
+ indent();
+ } else pop();
writer.writeEndElement();
if (autoflush) writer.flush();
} catch(XMLStreamException e) {
@@ -147,11 +153,21 @@
String namespace,
String prefix) {
try {
+ if (autoindent && textwritten == 0) indent();
push();
- writer.writeStartElement(
- prefix,
- name,
- namespace);
+ if (prefix != null) {
+ writer.writeStartElement(
+ prefix,
+ name,
+ namespace);
+ } else if (namespace != null) {
+ writer.writeStartElement(
+ name,
+ namespace);
+ } else {
+ writer.writeStartElement(
+ name);
+ }
writeNamespace(prefix,namespace,false);
if (autoflush) writer.flush();
} catch(XMLStreamException e) {
@@ -162,6 +178,7 @@
public StreamWriter writeElementText(String value) {
try {
+ textwritten++;
writer.writeCharacters(value);
if (autoflush) writer.flush();
} catch(XMLStreamException e) {
@@ -172,6 +189,7 @@
public StreamWriter writeComment(String value) {
try {
+ if (autoindent) indent();
writer.writeComment(value);
if (autoflush) writer.flush();
} catch(XMLStreamException e) {
@@ -182,6 +200,7 @@
public StreamWriter writePI(String value) {
try {
+ if (autoindent) indent();
writer.writeProcessingInstruction(value);
if (autoflush) writer.flush();
} catch(XMLStreamException e) {
@@ -192,6 +211,7 @@
public StreamWriter writePI(String value, String target) {
try {
+ if (autoindent) indent();
writer.writeProcessingInstruction(value,target);
if (autoflush) writer.flush();
} catch(XMLStreamException e) {
@@ -232,9 +252,12 @@
private void push() {
namespaces.push(new HashMap<String,String>());
+ depth++;
}
private void pop() {
+ depth--;
+ if (textwritten > 0) textwritten--;
if (!namespaces.isEmpty()) namespaces.pop();
}
@@ -259,6 +282,18 @@
public StreamWriter flush() {
try {
writer.flush();
+ } catch (XMLStreamException e) {
+ throw new RuntimeException(e);
+ }
+ return this;
+ }
+
+ public StreamWriter indent() {
+ try {
+ char[] indent = new char[depth*2];
+ Arrays.fill(indent, ' ');
+ writer.writeCharacters("\n");
+ writer.writeCharacters(indent,0,indent.length);
} catch (XMLStreamException e) {
throw new RuntimeException(e);
}