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
26package com.sun.xml.internal.messaging.saaj.soap;
27
28import com.sun.xml.internal.messaging.saaj.soap.impl.NodeListImpl;
29import org.w3c.dom.*;
30
31/**
32 * SAAJ wrapper for {@link DocumentFragment}
33 *
34 * @author Yan GAO.
35 */
36public 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}
235