summaryrefslogtreecommitdiffstats
path: root/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/resource/XMLStreamSerializer.java
diff options
context:
space:
mode:
Diffstat (limited to 'branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/resource/XMLStreamSerializer.java')
-rw-r--r--branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/resource/XMLStreamSerializer.java414
1 files changed, 0 insertions, 414 deletions
diff --git a/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/resource/XMLStreamSerializer.java b/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/resource/XMLStreamSerializer.java
deleted file mode 100644
index 2c2dc87aa4..0000000000
--- a/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/resource/XMLStreamSerializer.java
+++ /dev/null
@@ -1,414 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.
- */
-
-package org.apache.tuscany.sdo.util.resource;
-
-import java.util.Map;
-import javax.xml.namespace.NamespaceContext;
-import javax.xml.stream.XMLOutputFactory;
-import javax.xml.stream.XMLStreamConstants;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.tuscany.sdo.api.SDOHelper;
-import org.apache.tuscany.sdo.api.SDOUtil;
-/**
- * The XMLStreamSerializer pulls events from the XMLStreamReader and dumps into the XMLStreamWriter
- */
-public class XMLStreamSerializer implements XMLStreamConstants {
-
- private static int namespaceSuffix = 0;
-
- public static final String NAMESPACE_PREFIX = "ns";
-
- /*
- * The behavior of the serializer is such that it returns when it encounters the starting element for the second time. The depth variable tracks
- * the depth of the serilizer and tells it when to return. Note that it is assumed that this serialization starts on an Element.
- */
-
- /**
- * Field depth
- */
- private int depth = 0;
-
- /**
- * Method serialize.
- *
- * @param node
- * @param writer
- * @throws XMLStreamException
- */
- public void serialize(XMLStreamReader node, XMLStreamWriter writer) throws XMLStreamException {
- serializeNode(node, writer);
- }
-
- public void serialize(XMLStreamReader node, XMLStreamWriter writer, Map options) throws XMLStreamException {
- this.options = options;
- serializeNode(node, writer);
- }
- /**
- * Method serializeNode.
- *
- * @param reader
- * @param writer
- * @throws XMLStreamException
- */
- protected void serializeNode(XMLStreamReader reader, XMLStreamWriter writer) throws XMLStreamException {
- // TODO We get the StAXWriter at this point and uses it hereafter assuming that this is the only entry point to this class.
- // If there can be other classes calling methodes of this we might need to change methode signatures to OMOutputer
- while (reader.hasNext()) {
- int event = reader.next();
- if (event == START_ELEMENT) {
- if(options == null){
- serializeElement(reader, writer);
- }
- else{
- serializeElementWithOptions(reader, writer);
- }
- depth++;
- } else if (event == ATTRIBUTE) {
- serializeAttributes(reader, writer);
- } else if (event == CHARACTERS) {
- serializeText(reader, writer);
- } else if (event == COMMENT) {
- serializeComment(reader, writer);
- } else if (event == CDATA) {
- serializeCData(reader, writer);
- } else if (event == END_ELEMENT) {
- if(options == null){
- serializeEndElement(writer);
- }else{
- serializeEndElementWithOptions(writer);
- }
- depth--;
- } else if (event == START_DOCUMENT) {
- depth++; // if a start document is found then increment the depth
- } else if (event == END_DOCUMENT) {
- if (depth != 0)
- depth--; // for the end document - reduce the depth
- try {
- if(options == null){
- serializeEndElement(writer);
- }
- else{
- serializeEndElementWithOptions(writer);
- }
- } catch (Exception e) {
- // TODO: log exceptions
- }
- }
- if (depth == 0) {
- break;
- }
- }
- }
-
- /**
- * @param reader
- * @param writer
- * @throws XMLStreamException
- */
- protected void serializeElement(XMLStreamReader reader, XMLStreamWriter writer) throws XMLStreamException {
- String prefix = reader.getPrefix();
- String nameSpaceName = reader.getNamespaceURI();
- if (nameSpaceName != null) {
- String writer_prefix = writer.getPrefix(nameSpaceName);
- if (writer_prefix != null) {
- writer.writeStartElement(nameSpaceName, reader.getLocalName());
- } else {
- if (prefix != null) {
- writer.writeStartElement(prefix, reader.getLocalName(), nameSpaceName);
- writer.writeNamespace(prefix, nameSpaceName);
- writer.setPrefix(prefix, nameSpaceName);
- } else {
- writer.writeStartElement(nameSpaceName, reader.getLocalName());
- writer.writeDefaultNamespace(nameSpaceName);
- writer.setDefaultNamespace(nameSpaceName);
- }
- }
- } else {
- writer.writeStartElement(reader.getLocalName());
- }
-
- // add the namespaces
- int count = reader.getNamespaceCount();
- String namespacePrefix;
- for (int i = 0; i < count; i++) {
- namespacePrefix = reader.getNamespacePrefix(i);
- if (namespacePrefix != null && namespacePrefix.length() == 0)
- continue;
-
- serializeNamespace(namespacePrefix, reader.getNamespaceURI(i), writer);
- }
-
- // add attributes
- serializeAttributes(reader, writer);
-
- }
- /**
- * @param reader
- * @param writer
- * @throws XMLStreamException
- */
- protected void serializeElementWithOptions(XMLStreamReader reader, XMLStreamWriter writer) throws XMLStreamException {
- ++nest;
- boolean brk=false;
- if(oldNest != nest){
- if(oldNest < nest) brk = true;
- oldNest = nest;
- }
- startElement(writer);
- String prefix = reader.getPrefix();
- String nameSpaceName = reader.getNamespaceURI();
- if (nameSpaceName != null) {
- String writer_prefix = writer.getPrefix(nameSpaceName);
-
- if (writer_prefix != null) {
- if(brk && nest != 1){
- breakLine(writer, true, true);
- }
- else{
- breakLine(writer, false, true);
- }
-
- writer.writeStartElement(nameSpaceName, reader.getLocalName());
- } else {
- if (prefix != null) {
- if(brk && nest == 1){
- breakLine(writer, false, true);
- }
- writer.writeStartElement(prefix, reader.getLocalName(), nameSpaceName);
- writer.writeNamespace(prefix, nameSpaceName);
- writer.setPrefix(prefix, nameSpaceName);
- } else {
- if(brk && nest == 1){
- breakLine(writer, false, true);
- }
- writer.writeStartElement(nameSpaceName, reader.getLocalName());
- writer.writeDefaultNamespace(nameSpaceName);
- writer.setDefaultNamespace(nameSpaceName);
- if(brk && nest == 1){
- breakLine(writer, false, true);
- }
- }
- }
- } else {
- writer.writeStartElement(reader.getLocalName());
- }
-
- // add the namespaces
- int count = reader.getNamespaceCount();
- String namespacePrefix;
- for (int i = 0; i < count; i++) {
- namespacePrefix = reader.getNamespacePrefix(i);
- if (namespacePrefix != null && namespacePrefix.length() == 0)
- continue;
-
- serializeNamespace(namespacePrefix, reader.getNamespaceURI(i), writer);
- }
-
- // add attributes
- serializeAttributes(reader, writer);
- }
- /**
- * Method serializeEndElement.
- *
- * @param writer
- * @throws XMLStreamException
- */
- protected void serializeEndElement(XMLStreamWriter writer) throws XMLStreamException {
- writer.writeEndElement();
- }
-
- /**
- * Method serializeEndElement.
- *
- * @param writer
- * @throws XMLStreamException
- */
- protected void serializeEndElementWithOptions(XMLStreamWriter writer) throws XMLStreamException {
- --nest;
- if(oldNest > nest+1){
- nest++;
- breakLine(writer, false, true);
- writer.writeEndElement();
- breakLine(writer, true, false);
- nest--;
- }
- else{
- writer.writeEndElement();
- breakLine(writer, true, false);
- }
- }
- /**
- * @param reader
- * @param writer
- * @throws XMLStreamException
- */
- protected void serializeText(XMLStreamReader reader, XMLStreamWriter writer) throws XMLStreamException {
- writer.writeCharacters(reader.getText());
- }
-
- /**
- * Method serializeCData.
- *
- * @param reader
- * @param writer
- * @throws XMLStreamException
- */
- protected void serializeCData(XMLStreamReader reader, XMLStreamWriter writer) throws XMLStreamException {
- writer.writeCData(reader.getText());
- }
-
- /**
- * Method serializeComment.
- *
- * @param reader
- * @param writer
- * @throws XMLStreamException
- */
- protected void serializeComment(XMLStreamReader reader, XMLStreamWriter writer) throws XMLStreamException {
- writer.writeComment(reader.getText());
- }
-
- /**
- * @param reader
- * @param writer
- * @throws XMLStreamException
- */
- protected void serializeAttributes(XMLStreamReader reader, XMLStreamWriter writer)
- throws XMLStreamException {
- int count = reader.getAttributeCount();
- String prefix = null;
- String namespaceName = null;
- String writerPrefix = null;
- for (int i = 0; i < count; i++) {
- prefix = reader.getAttributePrefix(i);
- namespaceName = reader.getAttributeNamespace(i);
- if (namespaceName != null) {
- writerPrefix = writer.getNamespaceContext().getPrefix(namespaceName);
- }
-
- if (!"".equals(namespaceName)) {
- // prefix has already being declared but this particular attrib
- // has a
- // no prefix attached. So use the prefix provided by the writer
- if (writerPrefix != null && (prefix == null || prefix.equals(""))) {
- writer.writeAttribute(writerPrefix,
- namespaceName,
- reader.getAttributeLocalName(i),
- reader.getAttributeValue(i));
-
- // writer prefix is available but different from the current
- // prefix of the attrib. We should be decalring the new
- // prefix
- // as a namespace declaration
- } else if (prefix != null && !"".equals(prefix) && !prefix.equals(writerPrefix)) {
- writer.writeNamespace(prefix, namespaceName);
- writer.writeAttribute(prefix, namespaceName, reader.getAttributeLocalName(i), reader
- .getAttributeValue(i));
-
- // prefix is null (or empty), but the namespace name is
- // valid! it has not
- // being written previously also. So we need to generate a
- // prefix
- // here
- } else if (prefix == null || prefix.equals("")) {
- prefix = generateUniquePrefix(writer.getNamespaceContext());
- writer.writeNamespace(prefix, namespaceName);
- writer.writeAttribute(prefix, namespaceName, reader.getAttributeLocalName(i), reader
- .getAttributeValue(i));
- } else {
- writer.writeAttribute(prefix, namespaceName, reader.getAttributeLocalName(i), reader
- .getAttributeValue(i));
- }
- } else {
- // empty namespace is equal to no namespace!
- writer.writeAttribute(reader.getAttributeLocalName(i), reader.getAttributeValue(i));
- }
-
- }
- }
-
- /**
- * Generates a unique namespace prefix that is not in the scope of the NamespaceContext
- *
- * @param nsCtxt
- * @return string
- */
- private String generateUniquePrefix(NamespaceContext nsCtxt) {
- String prefix = NAMESPACE_PREFIX + namespaceSuffix++;
- // null should be returned if the prefix is not bound!
- while (nsCtxt.getNamespaceURI(prefix) != null) {
- prefix = NAMESPACE_PREFIX + namespaceSuffix++;
- }
-
- return prefix;
- }
-
- /**
- * Method serializeNamespace.
- *
- * @param prefix
- * @param URI
- * @param writer
- * @throws XMLStreamException
- */
- private void serializeNamespace(String prefix, String URI, XMLStreamWriter writer) throws XMLStreamException {
- String prefix1 = writer.getPrefix(URI);
- if (prefix1 == null) {
- writer.writeNamespace(prefix, URI);
- writer.setPrefix(prefix, URI);
- }
- }
- private String lineBreak, indent, margin = null;
-
- private int nest;
- private int oldNest;
-
- private void breakLine(XMLStreamWriter writer, boolean breakLine, boolean others) throws XMLStreamException {
- if (options == null || (lineBreak==null && indent==null && margin==null) )
- return;
- if(breakLine)
- writer.writeCharacters(lineBreak);
-
- if (margin != null){
- if(others)
- writer.writeCharacters(margin);
- }
-
- if (indent != null && others){
- for (int count = nest; count != 1; --count){//!= 0
- writer.writeCharacters(indent);
- }
- }
- }
-
- private Map options;
-
- static private final String STRING_OPTION = "String option";
-
- void startElement(XMLStreamWriter writer) throws XMLStreamException {
- if (options == null)
- return;
- lineBreak = (String) options.get(SDOHelper.XMLOptions.XML_SAVE_LINE_BREAK);
- if (lineBreak == null)
- return;
- margin = (String) options.get(SDOHelper.XMLOptions.XML_SAVE_MARGIN);
- indent = (String) options.get(SDOHelper.XMLOptions.XML_SAVE_INDENT);
- }
-}