diff options
Diffstat (limited to 'src/com/sun/xml/internal/stream/writers/XMLDOMWriterImpl.java')
-rw-r--r-- | src/com/sun/xml/internal/stream/writers/XMLDOMWriterImpl.java | 742 |
1 files changed, 0 insertions, 742 deletions
diff --git a/src/com/sun/xml/internal/stream/writers/XMLDOMWriterImpl.java b/src/com/sun/xml/internal/stream/writers/XMLDOMWriterImpl.java deleted file mode 100644 index 6ab58d4..0000000 --- a/src/com/sun/xml/internal/stream/writers/XMLDOMWriterImpl.java +++ /dev/null @@ -1,742 +0,0 @@ -/* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code 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 - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package com.sun.xml.internal.stream.writers; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import javax.xml.XMLConstants; -import javax.xml.namespace.NamespaceContext; -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamWriter; -import javax.xml.transform.dom.DOMResult; -import org.w3c.dom.Attr; -import org.w3c.dom.CDATASection; -import org.w3c.dom.Comment; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.EntityReference; -import org.w3c.dom.Node; -import org.w3c.dom.ProcessingInstruction; -import org.w3c.dom.Text; -import org.xml.sax.helpers.NamespaceSupport; - -/** - * This class provides support to build a DOM tree using XMLStreamWriter API's. - * @author K.Venugopal@sun.com - */ - -/* - * TODO : -Venu - * Internal NamespaceManagement - * setPrefix - * support for isRepairNamespace property. - * Some Unsupported Methods. - * Change StringBuffer to StringBuilder, when JDK 1.5 will be minimum requirement for SJSXP. - */ - -public class XMLDOMWriterImpl implements XMLStreamWriter { - - - private Document ownerDoc = null; - private Node currentNode = null; - private Node node = null; - private NamespaceSupport namespaceContext = null; - private Method mXmlVersion = null; - private boolean [] needContextPop = null; - private StringBuffer stringBuffer = null; - private int resizeValue = 20; - private int depth = 0; - /** - * Creates a new instance of XMLDOMwriterImpl - * @param result DOMResult object @javax.xml.transform.dom.DOMResult - */ - public XMLDOMWriterImpl(DOMResult result) { - - node = result.getNode(); - if( node.getNodeType() == Node.DOCUMENT_NODE){ - ownerDoc = (Document)node; - currentNode = ownerDoc; - }else{ - ownerDoc = node.getOwnerDocument(); - currentNode = node; - } - getDLThreeMethods(); - stringBuffer = new StringBuffer(); - needContextPop = new boolean[resizeValue]; - namespaceContext = new NamespaceSupport(); - } - - private void getDLThreeMethods(){ - try{ - mXmlVersion = ownerDoc.getClass().getMethod("setXmlVersion",new Class[] {String.class}); - }catch(NoSuchMethodException mex){ - //log these errors at fine level. - mXmlVersion = null; - }catch(SecurityException se){ - //log these errors at fine level. - mXmlVersion = null; - } - } - - - /** - * This method has no effect when called. - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void close() throws XMLStreamException { - //no-op - } - - /** - * This method has no effect when called. - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void flush() throws XMLStreamException { - //no-op - } - - /** - * {@inheritDoc} - * @return {@inheritDoc} - */ - public javax.xml.namespace.NamespaceContext getNamespaceContext() { - return null; - } - - /** - * {@inheritDoc} - * @param namespaceURI {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - * @return {@inheritDoc} - */ - public String getPrefix(String namespaceURI) throws XMLStreamException { - String prefix = null; - if(this.namespaceContext != null){ - prefix = namespaceContext.getPrefix(namespaceURI); - } - return prefix; - } - - /** - * Is not supported in this implementation. - * @param str {@inheritDoc} - * @throws java.lang.IllegalArgumentException {@inheritDoc} - * @return {@inheritDoc} - */ - public Object getProperty(String str) throws IllegalArgumentException { - throw new UnsupportedOperationException(); - } - - /** - * Is not supported in this version of the implementation. - * @param uri {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void setDefaultNamespace(String uri) throws XMLStreamException { - namespaceContext.declarePrefix(XMLConstants.DEFAULT_NS_PREFIX, uri); - if(!needContextPop[depth]){ - needContextPop[depth] = true; - } - } - - /** - * {@inheritDoc} - * @param namespaceContext {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void setNamespaceContext(javax.xml.namespace.NamespaceContext namespaceContext) throws XMLStreamException { - throw new UnsupportedOperationException(); - } - - /** - * Is not supported in this version of the implementation. - * @param prefix {@inheritDoc} - * @param uri {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void setPrefix(String prefix, String uri) throws XMLStreamException { - if(prefix == null){ - throw new XMLStreamException("Prefix cannot be null"); - } - namespaceContext.declarePrefix(prefix, uri); - if(!needContextPop[depth]){ - needContextPop[depth] = true; - } - } - - /** - * Creates a DOM Atrribute @see org.w3c.dom.Node and associates it with the current DOM element @see org.w3c.dom.Node. - * @param localName {@inheritDoc} - * @param value {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeAttribute(String localName, String value) throws XMLStreamException { - - if(currentNode.getNodeType() == Node.ELEMENT_NODE){ - Attr attr = ownerDoc.createAttribute(localName); - attr.setValue(value); - ((Element)currentNode).setAttributeNode(attr); - }else{ - //Convert node type to String - throw new IllegalStateException("Current DOM Node type is "+ currentNode.getNodeType() + - "and does not allow attributes to be set "); - } - } - - /** - * Creates a DOM Atrribute @see org.w3c.dom.Node and associates it with the current DOM element @see org.w3c.dom.Node. - * @param namespaceURI {@inheritDoc} - * @param localName {@inheritDoc} - * @param value {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeAttribute(String namespaceURI,String localName,String value)throws XMLStreamException { - if(currentNode.getNodeType() == Node.ELEMENT_NODE){ - String prefix = null; - if(namespaceURI == null ){ - throw new XMLStreamException("NamespaceURI cannot be null"); - } - if(localName == null){ - throw new XMLStreamException("Local name cannot be null"); - } - if(namespaceContext != null){ - prefix = namespaceContext.getPrefix(namespaceURI); - } - - if(prefix == null){ - throw new XMLStreamException("Namespace URI "+namespaceURI + - "is not bound to any prefix" ); - } - - String qualifiedName = null; - if(prefix.equals("")){ - qualifiedName = localName; - }else{ - qualifiedName = getQName(prefix,localName); - } - Attr attr = ownerDoc.createAttributeNS(namespaceURI, qualifiedName); - attr.setValue(value); - ((Element)currentNode).setAttributeNode(attr); - }else{ - //Convert node type to String - throw new IllegalStateException("Current DOM Node type is "+ currentNode.getNodeType() + - "and does not allow attributes to be set "); - } - } - - /** - * Creates a DOM Atrribute @see org.w3c.dom.Node and associates it with the current DOM element @see org.w3c.dom.Node. - * @param prefix {@inheritDoc} - * @param namespaceURI {@inheritDoc} - * @param localName {@inheritDoc} - * @param value {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeAttribute(String prefix,String namespaceURI,String localName,String value)throws XMLStreamException { - if(currentNode.getNodeType() == Node.ELEMENT_NODE){ - if(namespaceURI == null ){ - throw new XMLStreamException("NamespaceURI cannot be null"); - } - if(localName == null){ - throw new XMLStreamException("Local name cannot be null"); - } - if(prefix == null){ - throw new XMLStreamException("prefix cannot be null"); - } - String qualifiedName = null; - if(prefix.equals("")){ - qualifiedName = localName; - }else{ - - qualifiedName = getQName(prefix,localName); - } - Attr attr = ownerDoc.createAttributeNS(namespaceURI, qualifiedName); - attr.setValue(value); - ((Element)currentNode).setAttributeNodeNS(attr); - }else{ - //Convert node type to String - throw new IllegalStateException("Current DOM Node type is "+ currentNode.getNodeType() + - "and does not allow attributes to be set "); - } - - } - - /** - * Creates a CDATA object @see org.w3c.dom.CDATASection. - * @param data {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeCData(String data) throws XMLStreamException { - if(data == null){ - throw new XMLStreamException("CDATA cannot be null"); - } - - CDATASection cdata = ownerDoc.createCDATASection(data); - getNode().appendChild(cdata); - } - - /** - * Creates a character object @see org.w3c.dom.Text and appends it to the current - * element in the DOM tree. - * @param charData {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeCharacters(String charData) throws XMLStreamException { - Text text = ownerDoc.createTextNode(charData); - currentNode.appendChild(text); - } - - /** - * Creates a character object @see org.w3c.dom.Text and appends it to the current - * element in the DOM tree. - * @param values {@inheritDoc} - * @param param {@inheritDoc} - * @param param2 {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeCharacters(char[] values, int param, int param2) throws XMLStreamException { - - Text text = ownerDoc.createTextNode(new String(values,param,param2)); - currentNode.appendChild(text); - } - - /** - * Creates a Comment object @see org.w3c.dom.Comment and appends it to the current - * element in the DOM tree. - * @param str {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeComment(String str) throws XMLStreamException { - Comment comment = ownerDoc.createComment(str); - getNode().appendChild(comment); - } - - /** - * This method is not supported in this implementation. - * @param str {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeDTD(String str) throws XMLStreamException { - throw new UnsupportedOperationException(); - } - - /** - * Creates a DOM attribute and adds it to the current element in the DOM tree. - * @param namespaceURI {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeDefaultNamespace(String namespaceURI) throws XMLStreamException { - if(currentNode.getNodeType() == Node.ELEMENT_NODE){ - String qname = XMLConstants.XMLNS_ATTRIBUTE; - ((Element)currentNode).setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI,qname, namespaceURI); - }else{ - //Convert node type to String - throw new IllegalStateException("Current DOM Node type is "+ currentNode.getNodeType() + - "and does not allow attributes to be set "); - } - } - - /** - * creates a DOM Element and appends it to the current element in the tree. - * @param localName {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeEmptyElement(String localName) throws XMLStreamException { - if(ownerDoc != null){ - Element element = ownerDoc.createElement(localName); - if(currentNode!=null){ - currentNode.appendChild(element); - }else{ - ownerDoc.appendChild(element); - } - } - - } - - /** - * creates a DOM Element and appends it to the current element in the tree. - * @param namespaceURI {@inheritDoc} - * @param localName {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeEmptyElement(String namespaceURI, String localName) throws XMLStreamException { - if(ownerDoc != null){ - String qualifiedName = null; - String prefix = null; - if(namespaceURI == null ){ - throw new XMLStreamException("NamespaceURI cannot be null"); - } - if(localName == null){ - throw new XMLStreamException("Local name cannot be null"); - } - - if(namespaceContext != null){ - prefix = namespaceContext.getPrefix(namespaceURI); - } - if(prefix == null){ - throw new XMLStreamException("Namespace URI "+namespaceURI + - "is not bound to any prefix" ); - } - if("".equals(prefix)){ - qualifiedName = localName; - }else{ - - qualifiedName = getQName(prefix,localName); - - } - Element element = ownerDoc.createElementNS(namespaceURI, qualifiedName); - if(currentNode!=null){ - currentNode.appendChild(element); - }else{ - ownerDoc.appendChild(element); - } - //currentNode = element; - } - } - - /** - * creates a DOM Element and appends it to the current element in the tree. - * @param prefix {@inheritDoc} - * @param localName {@inheritDoc} - * @param namespaceURI {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeEmptyElement(String prefix, String localName, String namespaceURI) throws XMLStreamException { - if(ownerDoc != null){ - if(namespaceURI == null ){ - throw new XMLStreamException("NamespaceURI cannot be null"); - } - if(localName == null){ - throw new XMLStreamException("Local name cannot be null"); - } - if(prefix == null){ - throw new XMLStreamException("Prefix cannot be null"); - } - String qualifiedName = null; - if("".equals(prefix)){ - qualifiedName = localName; - }else{ - qualifiedName = getQName(prefix,localName); - } - Element el = ownerDoc.createElementNS(namespaceURI,qualifiedName); - if(currentNode!=null){ - currentNode.appendChild(el); - }else{ - ownerDoc.appendChild(el); - } - - } - } - - /** - * Will reset current Node pointer maintained by the implementation. - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeEndDocument() throws XMLStreamException { - //What do you want me to do eh! :) - currentNode = null; - for(int i=0; i< depth;i++){ - if(needContextPop[depth]){ - needContextPop[depth] = false; - namespaceContext.popContext(); - } - depth--; - } - depth =0; - } - - /** - * Internal current Node pointer will point to the parent of the current Node. - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeEndElement() throws XMLStreamException { - Node node= currentNode.getParentNode(); - if(currentNode.getNodeType() == Node.DOCUMENT_NODE){ - currentNode = null; - }else{ - currentNode = node; - } - if(needContextPop[depth]){ - needContextPop[depth] = false; - namespaceContext.popContext(); - } - depth--; - } - - /** - * Is not supported in this implementation. - * @param name {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeEntityRef(String name) throws XMLStreamException { - EntityReference er = ownerDoc.createEntityReference(name); - currentNode.appendChild(er); - } - - /** - * creates a namespace attribute and will associate it with the current element in - * the DOM tree. - * @param prefix {@inheritDoc} - * @param namespaceURI {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeNamespace(String prefix, String namespaceURI) throws XMLStreamException { - - if (prefix == null) { - throw new XMLStreamException("prefix cannot be null"); - } - - if (namespaceURI == null) { - throw new XMLStreamException("NamespaceURI cannot be null"); - } - - String qname = null; - - if (prefix.equals("")) { - qname = XMLConstants.XMLNS_ATTRIBUTE; - } else { - qname = getQName(XMLConstants.XMLNS_ATTRIBUTE,prefix); - } - - ((Element)currentNode).setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI,qname, namespaceURI); - } - - /** - * is not supported in this release. - * @param target {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeProcessingInstruction(String target) throws XMLStreamException { - if(target == null){ - throw new XMLStreamException("Target cannot be null"); - } - ProcessingInstruction pi = ownerDoc.createProcessingInstruction(target, ""); - currentNode.appendChild(pi); - } - - /** - * is not supported in this release. - * @param target {@inheritDoc} - * @param data {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeProcessingInstruction(String target, String data) throws XMLStreamException { - if(target == null){ - throw new XMLStreamException("Target cannot be null"); - } - ProcessingInstruction pi = ownerDoc.createProcessingInstruction(target, data); - currentNode.appendChild(pi); - } - - /** - * will set version on the Document object when the DOM Node passed to this implementation - * supports DOM Level3 API's. - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeStartDocument() throws XMLStreamException { - try{ - if(mXmlVersion != null){ - mXmlVersion.invoke(ownerDoc, new Object[] {"1.0"}); - } - }catch(IllegalAccessException iae){ - throw new XMLStreamException(iae); - }catch(InvocationTargetException ite){ - throw new XMLStreamException(ite); - } - } - - /** - * will set version on the Document object when the DOM Node passed to this implementation - * supports DOM Level3 API's. - * @param version {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeStartDocument(String version) throws XMLStreamException { - try{ - if(mXmlVersion != null){ - mXmlVersion.invoke(ownerDoc, new Object[] {version}); - } - }catch(IllegalAccessException iae){ - throw new XMLStreamException(iae); - }catch(InvocationTargetException ite){ - throw new XMLStreamException(ite); - } - } - - /** - * will set version on the Document object when the DOM Node passed to this implementation - * supports DOM Level3 API's. - * @param encoding {@inheritDoc} - * @param version {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeStartDocument(String encoding, String version) throws XMLStreamException { - try{ - if(mXmlVersion != null){ - mXmlVersion.invoke(ownerDoc, new Object[] {version}); - } - }catch(IllegalAccessException iae){ - throw new XMLStreamException(iae); - }catch(InvocationTargetException ite){ - throw new XMLStreamException(ite); - } - //TODO: What to do with encoding.-Venu - } - - /** - * creates a DOM Element and appends it to the current element in the tree. - * @param localName {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeStartElement(String localName) throws XMLStreamException { - if(ownerDoc != null){ - Element element = ownerDoc.createElement(localName); - if(currentNode!=null){ - currentNode.appendChild(element); - }else{ - ownerDoc.appendChild(element); - } - currentNode = element; - } - if(needContextPop[depth]){ - namespaceContext.pushContext(); - } - incDepth(); - } - - /** - * creates a DOM Element and appends it to the current element in the tree. - * @param namespaceURI {@inheritDoc} - * @param localName {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeStartElement(String namespaceURI, String localName) throws XMLStreamException { - if(ownerDoc != null){ - String qualifiedName = null; - String prefix = null; - - if(namespaceURI == null ){ - throw new XMLStreamException("NamespaceURI cannot be null"); - } - if(localName == null){ - throw new XMLStreamException("Local name cannot be null"); - } - - if(namespaceContext != null){ - prefix = namespaceContext.getPrefix(namespaceURI); - } - if(prefix == null){ - throw new XMLStreamException("Namespace URI "+namespaceURI + - "is not bound to any prefix" ); - } - if("".equals(prefix)){ - qualifiedName = localName; - }else{ - qualifiedName = getQName(prefix,localName); - } - - Element element = ownerDoc.createElementNS(namespaceURI, qualifiedName); - - if(currentNode!=null){ - currentNode.appendChild(element); - }else{ - ownerDoc.appendChild(element); - } - currentNode = element; - } - if(needContextPop[depth]){ - namespaceContext.pushContext(); - } - incDepth(); - } - - /** - * creates a DOM Element and appends it to the current element in the tree. - * @param prefix {@inheritDoc} - * @param localName {@inheritDoc} - * @param namespaceURI {@inheritDoc} - * @throws javax.xml.stream.XMLStreamException {@inheritDoc} - */ - public void writeStartElement(String prefix, String localName, String namespaceURI) throws XMLStreamException { - - if(ownerDoc != null){ - String qname = null; - if(namespaceURI == null ){ - throw new XMLStreamException("NamespaceURI cannot be null"); - } - if(localName == null){ - throw new XMLStreamException("Local name cannot be null"); - } - if(prefix == null){ - throw new XMLStreamException("Prefix cannot be null"); - } - - if(prefix.equals("")){ - qname = localName; - }else{ - qname = getQName(prefix,localName); - } - - Element el = ownerDoc.createElementNS(namespaceURI,qname); - - if(currentNode!=null){ - currentNode.appendChild(el); - }else{ - ownerDoc.appendChild(el); - } - currentNode = el; - if(needContextPop[depth]){ - namespaceContext.pushContext(); - } - incDepth(); - - } - } - - private String getQName(String prefix , String localName){ - stringBuffer.setLength(0); - stringBuffer.append(prefix); - stringBuffer.append(":"); - stringBuffer.append(localName); - return stringBuffer.toString(); - } - - private Node getNode(){ - if(currentNode == null){ - return ownerDoc; - } else{ - return currentNode; - } - } - private void incDepth() { - depth++; - if (depth == needContextPop.length) { - boolean[] array = new boolean[depth + resizeValue]; - System.arraycopy(needContextPop, 0, array, 0, depth); - needContextPop = array; - } - } -} |