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 2006/08/28 18:27:17 UTC

svn commit: r437742 - in /incubator/abdera/java/trunk: build/ parser/src/main/java/org/apache/abdera/parser/stax/util/ parser/src/main/resources/ parser/src/main/resources/META-INF/ parser/src/main/resources/META-INF/services/

Author: jmsnell
Date: Mon Aug 28 09:27:16 2006
New Revision: 437742

URL: http://svn.apache.org/viewvc?rev=437742&view=rev
Log:
Pretty Printing!  NamedWriter that will output the XML with line breaks and indents

Example use:

  Abdera abdera = new Abdera();
  Factory factory = abdera.getFactory();

  Entry entry = factory.newEntry();
  entry.setId(FOMHelper.generateUuid());
  entry.setUpdated(new java.util.Date());
  entry.addAuthor("James");
  entry.setContent("<a><b><c><d>foo</d></c></b></a>", Content.Type.XML);
  
  Writer pw = (Writer)abdera.getWriterFactory().getWriter("PrettyXML");
  pw.writeTo(entry,System.out);

The output produced looks like;

  <?xml version="1.0" encoding="UTF-8"?>
  <entry xmlns="http://www.w3.org/2005/Atom">
    <id>urn:uuid:...</id>
    <updated>...</updated>
    <author>
      <name>James</name>
    </author>
    <content type="application/xml">
      <a>
        <b>
          <c>
            <d>foo</d>
          </c>
        </b>
      </a>
    </content>
  </entry>

The width of the indent is currently hard coded at 2 spaces.  We could make that 
configurable.

Added:
    incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/util/PrettyWriter.java
    incubator/abdera/java/trunk/parser/src/main/resources/
    incubator/abdera/java/trunk/parser/src/main/resources/META-INF/
    incubator/abdera/java/trunk/parser/src/main/resources/META-INF/services/
    incubator/abdera/java/trunk/parser/src/main/resources/META-INF/services/org.apache.abdera.writer.NamedWriter
Modified:
    incubator/abdera/java/trunk/build/build.xml

Modified: incubator/abdera/java/trunk/build/build.xml
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/build/build.xml?rev=437742&r1=437741&r2=437742&view=diff
==============================================================================
--- incubator/abdera/java/trunk/build/build.xml (original)
+++ incubator/abdera/java/trunk/build/build.xml Mon Aug 28 09:27:16 2006
@@ -43,6 +43,7 @@
   <property name="core.jar" value="${dist}/${ant.project.name}.core.${version}.jar" />
   <property name="parser" value="${basedir}/parser" />
   <property name="parser.src" value="${parser}/src/main/java" />
+  <property name="parser.resources" value="${parser}/src/main/resources" />
   <property name="parser.test" value="${parser}/src/test" />
   <property name="parser.test.java" value="${parser}/src/test/java" />
   <property name="parser.test.resources" value="${parser}/src/test/resources" />
@@ -204,6 +205,9 @@
         <include name="LICENSE" />
         <include name="NOTICE" />
       </fileset>
+    </copy>
+    <copy todir="${parser.work}">
+      <fileset dir="${parser.resources}" includes="**/*" />
     </copy>
     <copy todir="${test}">
       <fileset dir="${parser.test.resources}">

Added: incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/util/PrettyWriter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/util/PrettyWriter.java?rev=437742&view=auto
==============================================================================
--- incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/util/PrettyWriter.java (added)
+++ incubator/abdera/java/trunk/parser/src/main/java/org/apache/abdera/parser/stax/util/PrettyWriter.java Mon Aug 28 09:27:16 2006
@@ -0,0 +1,262 @@
+package org.apache.abdera.parser.stax.util;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.abdera.model.Base;
+import org.apache.abdera.model.Document;
+import org.apache.abdera.writer.NamedWriter;
+import org.apache.axiom.om.OMDocument;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.util.StAXUtils;
+
+public class PrettyWriter implements NamedWriter {
+
+  public String getName() {
+    return "PrettyXML";
+  }
+
+  public Object write(Base base) throws IOException {
+    ByteArrayOutputStream out = new ByteArrayOutputStream();
+    writeTo(base,out);
+    return out.toString();
+  }
+
+  public void writeTo(Base base, OutputStream out) throws IOException {
+    writeTo(base,new OutputStreamWriter(out));
+  }
+
+  public void writeTo(Base base, Writer out) throws IOException {
+    try {
+      XMLStreamWriter w = StAXUtils.createXMLStreamWriter(out);
+      XMLStreamWriter pw = new PrettyStreamWriter(w);
+      OMElement om = (base instanceof Document) ? 
+        (OMElement)((Document)base).getRoot() : 
+        (OMElement)base;
+      if (om.getParent() != null && om.getParent() instanceof OMDocument) {
+        OMDocument doc = (OMDocument) om.getParent();
+        pw.writeStartDocument(doc.getCharsetEncoding(), doc.getXMLVersion());
+      }
+      om.serialize(pw);
+      pw.writeEndDocument();
+    } catch (XMLStreamException e) {
+      throw new RuntimeException(e);
+    }
+  }
+
+  private static class PrettyStreamWriter implements XMLStreamWriter {
+    
+    private static final int INDENT = 2;
+    
+    private XMLStreamWriter internal = null;
+    private int depth = 0;
+    private boolean prev_was_end_element = false;
+    
+    public PrettyStreamWriter(XMLStreamWriter writer) {
+      this.internal = writer;
+    }
+
+    public void close() throws XMLStreamException {
+      internal.close();
+    }
+
+    public void flush() throws XMLStreamException {
+      internal.flush();
+    }
+
+    public NamespaceContext getNamespaceContext() {
+      return internal.getNamespaceContext();
+    }
+
+    public String getPrefix(String arg0) throws XMLStreamException {
+      return internal.getPrefix(arg0);
+    }
+
+    public Object getProperty(String arg0) throws IllegalArgumentException {
+      return internal.getProperty(arg0);
+    }
+
+    public void setDefaultNamespace(String arg0) throws XMLStreamException {
+      internal.setDefaultNamespace(arg0);
+    }
+
+    public void setNamespaceContext(NamespaceContext arg0) throws XMLStreamException {
+      internal.setNamespaceContext(arg0);
+    }
+
+    public void setPrefix(String arg0, String arg1) throws XMLStreamException {
+      internal.setPrefix(arg0, arg1);
+    }
+
+    public void writeAttribute(String arg0, String arg1) throws XMLStreamException {
+      internal.writeAttribute(arg0, arg1);
+      prev_was_end_element = false;
+    }
+
+    public void writeAttribute(String arg0, String arg1, String arg2) throws XMLStreamException {
+      internal.writeAttribute(arg0, arg1, arg2);
+      prev_was_end_element = false;
+    }
+
+    public void writeAttribute(String arg0, String arg1, String arg2, String arg3) throws XMLStreamException {
+      internal.writeAttribute(arg0, arg1, arg2, arg3);
+      prev_was_end_element = false;
+    }
+
+    public void writeCData(String arg0) throws XMLStreamException {
+      internal.writeCData(arg0);
+      prev_was_end_element = false;
+    }
+
+    public void writeCharacters(String arg0) throws XMLStreamException {
+      internal.writeCharacters(arg0);
+      prev_was_end_element = false;
+    }
+
+    public void writeCharacters(char[] arg0, int arg1, int arg2) throws XMLStreamException {
+      internal.writeCharacters(arg0,arg1,arg2);
+      prev_was_end_element = false;
+    }
+
+    public void writeComment(String arg0) throws XMLStreamException {
+      writeIndent();
+      internal.writeComment(arg0);
+      prev_was_end_element = true;
+    }
+
+    public void writeDTD(String arg0) throws XMLStreamException {
+      internal.writeDTD(arg0);
+      prev_was_end_element = true;
+    }
+
+    public void writeDefaultNamespace(String arg0) throws XMLStreamException {
+      internal.writeDefaultNamespace(arg0);
+      prev_was_end_element = false;
+    }
+
+    public void writeEmptyElement(String arg0) throws XMLStreamException {
+      writeIndent();
+      internal.writeEmptyElement(arg0);
+      prev_was_end_element = true;
+    }
+
+    public void writeEmptyElement(String arg0, String arg1) throws XMLStreamException {
+      writeIndent();
+      internal.writeEmptyElement(arg0, arg1);
+      prev_was_end_element = true;
+    }
+
+    public void writeEmptyElement(String arg0, String arg1, String arg2) throws XMLStreamException {
+      writeIndent();
+      internal.writeEmptyElement(arg0, arg1, arg2);
+      prev_was_end_element = true;
+    }
+
+    public void writeEndDocument() throws XMLStreamException {
+      internal.writeEndDocument();
+      prev_was_end_element = false;
+    }
+
+    public void writeEndElement() throws XMLStreamException {
+      depth--;
+      if (prev_was_end_element) writeIndent();
+      internal.writeEndElement();
+      prev_was_end_element = true;
+    }
+
+    public void writeEntityRef(String arg0) throws XMLStreamException {
+      internal.writeEntityRef(arg0);
+      prev_was_end_element = false;
+    }
+
+    public void writeNamespace(String arg0, String arg1) throws XMLStreamException {
+      internal.writeNamespace(arg0, arg1);
+      prev_was_end_element = false;
+    }
+
+    public void writeProcessingInstruction(String arg0) throws XMLStreamException {
+      writeIndent();
+      internal.writeProcessingInstruction(arg0);
+      prev_was_end_element = true;
+    }
+
+    public void writeProcessingInstruction(String arg0, String arg1) throws XMLStreamException {
+      writeIndent();
+      internal.writeProcessingInstruction(arg0,arg1);
+      prev_was_end_element = true;
+    }
+
+    public void writeStartDocument() throws XMLStreamException {
+      internal.writeStartDocument();
+      prev_was_end_element = false;
+    }
+
+    public void writeStartDocument(String arg0) throws XMLStreamException {
+      internal.writeStartDocument(arg0);
+      prev_was_end_element = false;
+    }
+
+    public void writeStartDocument(String arg0, String arg1) throws XMLStreamException {
+      internal.writeStartDocument(arg0, arg1);
+      prev_was_end_element = false;
+    }
+
+    public void writeStartElement(String arg0) throws XMLStreamException {
+      writeIndent();
+      depth++;
+      internal.writeStartElement(arg0);
+      prev_was_end_element = false;
+    }
+
+    public void writeStartElement(String arg0, String arg1) throws XMLStreamException {
+      writeIndent();
+      depth++;
+      internal.writeStartElement(arg0,arg1);
+      prev_was_end_element = false;
+    }
+
+    public void writeStartElement(String arg0, String arg1, String arg2) throws XMLStreamException {
+      writeIndent();
+      depth++;
+      internal.writeStartElement(arg0,arg1,arg2);
+      prev_was_end_element = false;
+    }
+   
+    private void writeIndent() throws XMLStreamException {
+      internal.writeCharacters("\n");
+      char[] spaces = getSpaces();
+      internal.writeCharacters(spaces, 0, spaces.length);
+    }
+    
+    private char[] getSpaces() {
+      char[] spaces = new char[INDENT * depth];
+      java.util.Arrays.fill(spaces, ' ');
+      return spaces;
+    }
+  }
+}

Added: incubator/abdera/java/trunk/parser/src/main/resources/META-INF/services/org.apache.abdera.writer.NamedWriter
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/parser/src/main/resources/META-INF/services/org.apache.abdera.writer.NamedWriter?rev=437742&view=auto
==============================================================================
--- incubator/abdera/java/trunk/parser/src/main/resources/META-INF/services/org.apache.abdera.writer.NamedWriter (added)
+++ incubator/abdera/java/trunk/parser/src/main/resources/META-INF/services/org.apache.abdera.writer.NamedWriter Mon Aug 28 09:27:16 2006
@@ -0,0 +1 @@
+org.apache.abdera.parser.stax.util.PrettyWriter
\ No newline at end of file



Re: svn commit: r437742 - in /incubator/abdera/java/trunk: build/ parser/src/main/java/org/apache/abdera/parser/stax/util/ parser/src/main/resources/ parser/src/main/resources/META-INF/ parser/src/main/resources/META-INF/services/

Posted by James M Snell <ja...@gmail.com>.
Heh.. had an itch, really had to scratch it.  I've been doing some
debugging on some server side code and the unformatted output was
getting very annoying.

Garrett Rooney wrote:
> [snip]
> Nice!  Looks very similar to the half finished version I've got
> sitting in my working copy ;-)
> 
> -garrett
> 

Re: svn commit: r437742 - in /incubator/abdera/java/trunk: build/ parser/src/main/java/org/apache/abdera/parser/stax/util/ parser/src/main/resources/ parser/src/main/resources/META-INF/ parser/src/main/resources/META-INF/services/

Posted by Garrett Rooney <ro...@electricjellyfish.net>.
On 8/28/06, jmsnell@apache.org <jm...@apache.org> wrote:
> Author: jmsnell
> Date: Mon Aug 28 09:27:16 2006
> New Revision: 437742
>
> URL: http://svn.apache.org/viewvc?rev=437742&view=rev
> Log:
> Pretty Printing!  NamedWriter that will output the XML with line breaks and indents
>
> Example use:
>
>   Abdera abdera = new Abdera();
>   Factory factory = abdera.getFactory();
>
>   Entry entry = factory.newEntry();
>   entry.setId(FOMHelper.generateUuid());
>   entry.setUpdated(new java.util.Date());
>   entry.addAuthor("James");
>   entry.setContent("<a><b><c><d>foo</d></c></b></a>", Content.Type.XML);
>
>   Writer pw = (Writer)abdera.getWriterFactory().getWriter("PrettyXML");
>   pw.writeTo(entry,System.out);
>
> The output produced looks like;
>
>   <?xml version="1.0" encoding="UTF-8"?>
>   <entry xmlns="http://www.w3.org/2005/Atom">
>     <id>urn:uuid:...</id>
>     <updated>...</updated>
>     <author>
>       <name>James</name>
>     </author>
>     <content type="application/xml">
>       <a>
>         <b>
>           <c>
>             <d>foo</d>
>           </c>
>         </b>
>       </a>
>     </content>
>   </entry>
>
> The width of the indent is currently hard coded at 2 spaces.  We could make that
> configurable.

Nice!  Looks very similar to the half finished version I've got
sitting in my working copy ;-)

-garrett