1 /*
   2  * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package com.sun.xml.internal.messaging.saaj.soap;
  27 
  28 import com.sun.xml.internal.messaging.saaj.soap.impl.NodeListImpl;
  29 import org.w3c.dom.*;
  30 
  31 /**
  32  * SAAJ wrapper for {@link DocumentFragment}
  33  *
  34  * @author Yan GAO.
  35  */
  36 public class SOAPDocumentFragment implements DocumentFragment {
  37 
  38     private SOAPDocumentImpl soapDocument;
  39     private DocumentFragment documentFragment;
  40 
  41     public SOAPDocumentFragment(SOAPDocumentImpl ownerDoc) {
  42         this.soapDocument = ownerDoc;
  43         this.documentFragment = soapDocument.getDomDocument().createDocumentFragment();
  44     }
  45 
  46     public SOAPDocumentFragment() {}
  47 
  48     @Override
  49     public boolean hasAttributes() {
  50         return documentFragment.hasAttributes();
  51     }
  52 
  53     @Override
  54     public boolean isSameNode(Node other) {
  55         return documentFragment.isSameNode(getDomNode(other));
  56     }
  57 
  58     @Override
  59     public String lookupNamespaceURI(String prefix) {
  60         return documentFragment.lookupNamespaceURI(prefix);
  61     }
  62 
  63     @Override
  64     public Node getParentNode() {
  65         return soapDocument.findIfPresent(documentFragment.getParentNode());
  66     }
  67 
  68     @Override
  69     public Node getFirstChild() {
  70         return soapDocument.findIfPresent(documentFragment.getFirstChild());
  71     }
  72 
  73     @Override
  74     public Object getUserData(String key) {
  75         return documentFragment.getUserData(key);
  76     }
  77 
  78     @Override
  79     public String getTextContent() throws DOMException {
  80         return documentFragment.getTextContent();
  81     }
  82     @Override
  83     public short getNodeType() {
  84         return documentFragment.getNodeType();
  85     }
  86 
  87     public Node getDomNode(Node node) {
  88         return soapDocument.getDomNode(node);
  89     }
  90 
  91     @Override
  92     public Node appendChild(Node newChild) throws DOMException {
  93         Node node = soapDocument.importNode(newChild, true);
  94         return soapDocument.findIfPresent(documentFragment.appendChild(getDomNode(node)));
  95     }
  96 
  97     @Override
  98     public Node removeChild(Node oldChild) throws DOMException {
  99         return soapDocument.findIfPresent(documentFragment.removeChild(getDomNode(oldChild)));
 100     }
 101 
 102     @Override
 103     public NamedNodeMap getAttributes() {
 104         return documentFragment.getAttributes();
 105     }
 106 
 107     @Override
 108     public short compareDocumentPosition(Node other) throws DOMException {
 109         return documentFragment.compareDocumentPosition(getDomNode(other));
 110     }
 111     @Override
 112     public void setTextContent(String textContent) throws DOMException {
 113         documentFragment.setTextContent(textContent);
 114     }
 115     @Override
 116     public Node insertBefore(Node newChild, Node refChild) throws DOMException {
 117         Node node = soapDocument.importNode(newChild, true);
 118         return soapDocument.findIfPresent(documentFragment.insertBefore(getDomNode(node), getDomNode(refChild)));
 119     }
 120     @Override
 121     public Object setUserData(String key, Object data, UserDataHandler handler) {
 122         return documentFragment.setUserData(key, data, handler);
 123     }
 124     @Override
 125     public boolean isDefaultNamespace(String namespaceURI) {
 126         return documentFragment.isDefaultNamespace(namespaceURI);
 127     }
 128 
 129     @Override
 130     public Node getLastChild() {
 131         return soapDocument.findIfPresent(documentFragment.getLastChild());
 132     }
 133 
 134     @Override
 135     public void setPrefix(String prefix) throws DOMException {
 136         documentFragment.setPrefix(prefix);
 137     }
 138     @Override
 139     public String getNodeName() {
 140         return documentFragment.getNodeName();
 141     }
 142 
 143     @Override
 144     public void setNodeValue(String nodeValue) throws DOMException {
 145         documentFragment.setNodeValue(nodeValue);
 146     }
 147     @Override
 148     public Node replaceChild(Node newChild, Node oldChild) throws DOMException {
 149         Node node = soapDocument.importNode(newChild, true);
 150         return soapDocument.findIfPresent(documentFragment.replaceChild(getDomNode(node), getDomNode(oldChild)));
 151     }
 152     @Override
 153     public String getLocalName() {
 154         return documentFragment.getLocalName();
 155     }
 156 
 157     @Override
 158     public void normalize() {
 159         documentFragment.normalize();
 160     }
 161 
 162     @Override
 163     public Node cloneNode(boolean deep) {
 164         Node node= documentFragment.cloneNode(deep);
 165         soapDocument.registerChildNodes(node, deep);
 166         return soapDocument.findIfPresent(node);
 167     }
 168 
 169     @Override
 170     public boolean isSupported(String feature, String version) {
 171         return documentFragment.isSupported(feature, version);
 172     }
 173 
 174     @Override
 175     public boolean isEqualNode(Node arg) {
 176         return documentFragment.isEqualNode(getDomNode(arg));
 177     }
 178 
 179     @Override
 180     public boolean hasChildNodes() {
 181         return documentFragment.hasChildNodes();
 182     }
 183 
 184     @Override
 185     public String lookupPrefix(String namespaceURI) {
 186         return documentFragment.lookupPrefix(namespaceURI);
 187     }
 188 
 189     @Override
 190     public String getNodeValue() throws DOMException {
 191         return documentFragment.getNodeValue();
 192     }
 193     @Override
 194     public Document getOwnerDocument() {
 195         return documentFragment.getOwnerDocument();
 196     }
 197     @Override
 198     public Object getFeature(String feature, String version) {
 199         return documentFragment.getFeature(feature, version);
 200     }
 201 
 202     @Override
 203     public Node getPreviousSibling() {
 204         return soapDocument.findIfPresent(documentFragment.getPreviousSibling());
 205     }
 206 
 207     @Override
 208     public NodeList getChildNodes() {
 209         return new NodeListImpl(soapDocument, documentFragment.getChildNodes());
 210     }
 211 
 212     @Override
 213     public String getBaseURI() {
 214         return documentFragment.getBaseURI();
 215     }
 216 
 217     @Override
 218     public Node getNextSibling() {
 219         return soapDocument.findIfPresent(documentFragment.getNextSibling());
 220     }
 221 
 222     @Override
 223     public String getPrefix() {
 224         return documentFragment.getPrefix();
 225     }
 226 
 227     @Override
 228     public String getNamespaceURI() {
 229         return documentFragment.getNamespaceURI();
 230     }
 231     public Document getSoapDocument() {
 232         return soapDocument;
 233     }
 234 }