diff options
| author | Robert Schuster <theBohemian@gmx.net> | 2006-01-08 19:31:37 +0000 |
|---|---|---|
| committer | Robert Schuster <theBohemian@gmx.net> | 2006-01-08 19:31:37 +0000 |
| commit | 02fda0d645f6e36b41c1df01fb4fd99494874416 (patch) | |
| tree | 9f2a37d2aa3214e6ccfed6e44b79ff3c0f513598 /gnu/java/beans/encoder/StAXWriter.java | |
| parent | 15e0b4b02c35a90525b1fa6b272443373e9d1823 (diff) | |
| download | classpath-02fda0d645f6e36b41c1df01fb4fd99494874416.tar.gz | |
2006-01-08 Robert Schuster <robertschuster@fsfe.org>
* java/beans/Statement.java: Doc fixes.
(doExecute): Workaround for Class.forName call.
(toString): Made output look more like on the JDK.
* java/beans/Expression.java: Doc fixes.
(toString): Made output look more like on the JDK.
* java/beans/PersistenceDelegate.java,
java/beans/DefaultPersistenceDelegate.java,
java/beans/Encoder.java,
java/beans/XMLEncoder.java: New file.
* gnu/java/beans/encoder/ArrayPersistenceDelegate.java,
gnu/java/beans/encoder/ClassPersistenceDelegate.java,
gnu/java/beans/encoder/CollectionPersistenceDelegate.java,
gnu/java/beans/encoder/Context.java,
gnu/java/beans/encoder/GenericScannerState.java,
gnu/java/beans/encoder/IgnoringScannerState.java,
gnu/java/beans/encoder/MapPersistenceDelegate.java,
gnu/java/beans/encoder/ObjectId.java,
gnu/java/beans/encoder/PrimitivePersistenceDelegate.java,
gnu/java/beans/encoder/ReportingScannerState.java,
gnu/java/beans/encoder/Root.java,
gnu/java/beans/encoder/ScanEngine.java,
gnu/java/beans/encoder/ScannerState.java,
gnu/java/beans/encoder/StAXWriter.java,
gnu/java/beans/encoder/Writer.java: New file.
* gnu/java/beans/encoder/elements/Array_Get.java,
gnu/java/beans/encoder/elements/Element.java,
gnu/java/beans/encoder/elements/List_Set.java,
gnu/java/beans/encoder/elements/Array_Set.java,
gnu/java/beans/encoder/elements/NullObject.java,
gnu/java/beans/encoder/elements/StaticMethodInvocation.java,
gnu/java/beans/encoder/elements/StaticFieldAccess.java,
gnu/java/beans/encoder/elements/StringReference.java,
gnu/java/beans/encoder/elements/ClassResolution.java,
gnu/java/beans/encoder/elements/ArrayInstantiation.java,
gnu/java/beans/encoder/elements/PrimitiveInstantiation.java,
gnu/java/beans/encoder/elements/ObjectReference.java,
gnu/java/beans/encoder/elements/ObjectInstantiation.java,
gnu/java/beans/encoder/elements/List_Get.java,
gnu/java/beans/encoder/elements/MethodInvocation.java: New file.
Diffstat (limited to 'gnu/java/beans/encoder/StAXWriter.java')
| -rw-r--r-- | gnu/java/beans/encoder/StAXWriter.java | 233 |
1 files changed, 233 insertions, 0 deletions
diff --git a/gnu/java/beans/encoder/StAXWriter.java b/gnu/java/beans/encoder/StAXWriter.java new file mode 100644 index 000000000..fdb5f7d45 --- /dev/null +++ b/gnu/java/beans/encoder/StAXWriter.java @@ -0,0 +1,233 @@ +/* StAXWriter.java + Copyright (C) 2005 Free Software Foundation, Inc. + + This file is part of GNU Classpath. + + GNU Classpath is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU Classpath is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU Classpath; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301 USA. + + Linking this library statically or dynamically with other modules is + making a combined work based on this library. Thus, the terms and + conditions of the GNU General Public License cover the whole + combination. + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent + modules, and to copy and distribute the resulting executable under + terms of your choice, provided that you also meet, for each linked + independent module, the terms and conditions of the license of that + module. An independent module is a module which is not derived from + or based on this library. If you modify this library, you may extend + this exception to your version of the library, but you are not + obligated to do so. If you do not wish to do so, delete this + exception statement from your version. */ + + +package gnu.java.beans.encoder; + +import java.io.OutputStream; + +import javax.xml.stream.XMLOutputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamWriter; + +/** A {@link Writer} implementation based on the StAX API. + * + * @author Robert Schuster (robertschuster@fsfe.org) + * + */ +public class StAXWriter implements Writer +{ + XMLStreamWriter writer; + + int indent = 0; + + public StAXWriter(OutputStream os) + { + try + { + XMLOutputFactory factory = XMLOutputFactory.newInstance(); + writer = factory.createXMLStreamWriter(os); + } + catch (XMLStreamException se) + { + throw (InternalError) + new InternalError( + "Could not instantiate a streaming XML writer.") + .initCause(se); + } + + } + + public void flush() + { + if (writer != null) + { + try + { + writer.flush(); + } + catch (XMLStreamException xse) + { + // TODO: find out + } + } + + } + + public void close() + { + if (writer != null) + { + try + { + writer.close(); + } + catch (XMLStreamException xse) + { + // TODO: find out + } + writer = null; + } + + } + + public void writePreamble() + { + try + { + writer.writeStartDocument("UTF-8", "1.0"); + } + catch (XMLStreamException xmlse) + { + + } + } + + public void writeEnd(boolean wasEmpty) + { + try + { + indent -= 2; + + if (wasEmpty) + return; + + for (int i = 0; i < indent; i++) + writer.writeCharacters(" "); + + writer.writeEndElement(); + + writer.writeCharacters("\n"); + } + catch (XMLStreamException xmlse) + { + + } + } + + public void writeEndNoChildren() + { + try + { + writer.writeEndElement(); + writer.writeCharacters("\n"); + } + catch (XMLStreamException xmlse) + { + + } + } + + public void write(String tagName, boolean empty) + { + write(tagName, null, null, null, empty); + } + + public void write(String tagName, String value) + { + write(tagName, value, null, null, value == null); + } + + public void writeNoChildren(String tagName, String value) + { + try + { + for (int i = 0; i < indent; i++) + writer.writeCharacters(" "); + + writer.writeStartElement(tagName); + + writer.writeCharacters(value); + } + catch (XMLStreamException xmlse) + { + + } + } + + public void write(String tagName, String attributeName, + String attributeValue, boolean empty) + { + write(tagName, null, new String[] { attributeName }, + new String[] { attributeValue }, empty); + } + + public void write(String tagName, String value, String[] attributeNames, + String[] attributeValues, boolean empty) + { + try + { + for (int i = 0; i < indent; i++) + + writer.writeCharacters(" "); + + if (empty) + writer.writeEmptyElement(tagName); + else + writer.writeStartElement(tagName); + + if (attributeNames != null) + for (int i = 0; i < attributeNames.length; i++) + writer.writeAttribute(attributeNames[i], attributeValues[i]); + + writer.writeCharacters("\n"); + + indent += 2; + + if (value != null) + { + for (int i = 0; i < indent; i++) + writer.writeCharacters(" "); + + writer.writeCharacters(value); + + writer.writeCharacters("\n"); + } + } + catch (XMLStreamException xmlse) + { + + } + } + + public void write(String tagName, String[] attributeNames, + String[] attributeValues, boolean empty) + { + write(tagName, null, attributeNames, attributeValues, empty); + } + +} |
