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(SOAPDocumentImpl soapDocument, DocumentFragment documentFragment) {
  47         this.soapDocument = soapDocument;
  48         this.documentFragment = documentFragment;
  49     }
  50 
  51     public SOAPDocumentFragment() {}
  52 
  53     @Override
  54     public boolean hasAttributes() {
  55         return documentFragment.hasAttributes();
  56     }
  57 
  58     @Override
  59     public boolean isSameNode(Node other) {
  60         return documentFragment.isSameNode(getDomNode(other));
  61     }
  62 
  63     @Override
  64     public String lookupNamespaceURI(String prefix) {
  65         return documentFragment.lookupNamespaceURI(prefix);
  66     }
  67 
  68     @Override
  69     public Node getParentNode() {
  70         return soapDocument.findIfPresent(documentFragment.getParentNode());
  71     }
  72 
  73     @Override
  74     public Node getFirstChild() {
  75         return soapDocument.findIfPresent(documentFragment.getFirstChild());
  76     }
  77 
  78     @Override
  79     public Object getUserData(String key) {
  80         return documentFragment.getUserData(key);
  81     }
  82 
  83     @Override
  84     public String getTextContent() throws DOMException {
  85         return documentFragment.getTextContent();
  86     }
  87     @Override
  88     public short getNodeType() {
  89         return documentFragment.getNodeType();
  90     }
  91 
  92     public Node getDomNode(Node node) {
  93         return soapDocument.getDomNode(node);
  94     }
  95 
  96     @Override
  97     public Node appendChild(Node newChild) throws DOMException {
  98         Node node = soapDocument.importNode(newChild, true);
  99         return soapDocument.findIfPresent(documentFragment.appendChild(getDomNode(node)));
 100     }
 101 
 102     @Override
 103     public Node removeChild(Node oldChild) throws DOMException {
 104         return soapDocument.findIfPresent(documentFragment.removeChild(getDomNode(oldChild)));
 105     }
 106 
 107     @Override
 108     public NamedNodeMap getAttributes() {
 109         return documentFragment.getAttributes();
 110     }
 111 
 112     @Override
 113     public short compareDocumentPosition(Node other) throws DOMException {
 114         return documentFragment.compareDocumentPosition(getDomNode(other));
 115     }
 116     @Override
 117     public void setTextContent(String textContent) throws DOMException {
 118         documentFragment.setTextContent(textContent);
 119     }
 120     @Override
 121     public Node insertBefore(Node newChild, Node refChild) throws DOMException {
 122         Node node = soapDocument.importNode(newChild, true);
 123         return soapDocument.findIfPresent(documentFragment.insertBefore(getDomNode(node), getDomNode(refChild)));
 124     }
 125     @Override
 126     public Object setUserData(String key, Object data, UserDataHandler handler) {
 127         return documentFragment.setUserData(key, data, handler);
 128     }
 129     @Override
 130     public boolean isDefaultNamespace(String namespaceURI) {
 131         return documentFragment.isDefaultNamespace(namespaceURI);
 132     }
 133 
 134     @Override
 135     public Node getLastChild() {
 136         return soapDocument.findIfPresent(documentFragment.getLastChild());
 137     }
 138 
 139     @Override
 140     public void setPrefix(String prefix) throws DOMException {
 141         documentFragment.setPrefix(prefix);
 142     }
 143     @Override
 144     public String getNodeName() {
 145         return documentFragment.getNodeName();
 146     }
 147 
 148     @Override
 149     public void setNodeValue(String nodeValue) throws DOMException {
 150         documentFragment.setNodeValue(nodeValue);
 151     }
 152     @Override
 153     public Node replaceChild(Node newChild, Node oldChild) throws DOMException {
 154         Node node = soapDocument.importNode(newChild, true);
 155         return soapDocument.findIfPresent(documentFragment.replaceChild(getDomNode(node), getDomNode(oldChild)));
 156     }
 157     @Override
 158     public String getLocalName() {
 159         return documentFragment.getLocalName();
 160     }
 161 
 162     @Override
 163     public void normalize() {
 164         documentFragment.normalize();
 165     }
 166 
 167     @Override
 168     public Node cloneNode(boolean deep) {
 169         Node node= documentFragment.cloneNode(deep);
 170         soapDocument.registerChildNodes(node, deep);
 171         return soapDocument.findIfPresent(node);
 172     }
 173 
 174     @Override
 175     public boolean isSupported(String feature, String version) {
 176         return documentFragment.isSupported(feature, version);
 177     }
 178 
 179     @Override
 180     public boolean isEqualNode(Node arg) {
 181         return documentFragment.isEqualNode(getDomNode(arg));
 182     }
 183 
 184     @Override
 185     public boolean hasChildNodes() {
 186         return documentFragment.hasChildNodes();
 187     }
 188 
 189     @Override
 190     public String lookupPrefix(String namespaceURI) {
 191         return documentFragment.lookupPrefix(namespaceURI);
 192     }
 193 
 194     @Override
 195     public String getNodeValue() throws DOMException {
 196         return documentFragment.getNodeValue();
 197     }
 198     @Override
 199     public Document getOwnerDocument() {
 200         return soapDocument;
 201     }
 202     @Override
 203     public Object getFeature(String feature, String version) {
 204         return documentFragment.getFeature(feature, version);
 205     }
 206 
 207     @Override
 208     public Node getPreviousSibling() {
 209         return soapDocument.findIfPresent(documentFragment.getPreviousSibling());
 210     }
 211 
 212     @Override
 213     public NodeList getChildNodes() {
 214         return new NodeListImpl(soapDocument, documentFragment.getChildNodes());
 215     }
 216 
 217     @Override
 218     public String getBaseURI() {
 219         return documentFragment.getBaseURI();
 220     }
 221 
 222     @Override
 223     public Node getNextSibling() {
 224         return soapDocument.findIfPresent(documentFragment.getNextSibling());
 225     }
 226 
 227     @Override
 228     public String getPrefix() {
 229         return documentFragment.getPrefix();
 230     }
 231 
 232     @Override
 233     public String getNamespaceURI() {
 234         return documentFragment.getNamespaceURI();
 235     }
 236     public Document getSoapDocument() {
 237         return soapDocument;
 238     }
 239 
 240     public Node getDomNode() {
 241         return documentFragment;
 242     }
 243 }