1
2
3
4
5
6
7
8 package org.dom4j.dom;
9
10 import org.dom4j.CDATA;
11 import org.dom4j.Element;
12 import org.dom4j.tree.DefaultCDATA;
13
14 import org.w3c.dom.DOMException;
15 import org.w3c.dom.Document;
16 import org.w3c.dom.NamedNodeMap;
17 import org.w3c.dom.NodeList;
18
19 /***
20 * <p>
21 * <code>DOMCDATA</code> implements a CDATA Section which supports the W3C DOM
22 * API.
23 * </p>
24 *
25 * @author <a href="mailto:jstrachan@apache.org">James Strachan </a>
26 * @version $Revision: 1.12 $
27 */
28 public class DOMCDATA extends DefaultCDATA implements org.w3c.dom.CDATASection {
29 public DOMCDATA(String text) {
30 super(text);
31 }
32
33 public DOMCDATA(Element parent, String text) {
34 super(parent, text);
35 }
36
37
38
39 public boolean supports(String feature, String version) {
40 return DOMNodeHelper.supports(this, feature, version);
41 }
42
43 public String getNamespaceURI() {
44 return DOMNodeHelper.getNamespaceURI(this);
45 }
46
47 public String getPrefix() {
48 return DOMNodeHelper.getPrefix(this);
49 }
50
51 public void setPrefix(String prefix) throws DOMException {
52 DOMNodeHelper.setPrefix(this, prefix);
53 }
54
55 public String getLocalName() {
56 return DOMNodeHelper.getLocalName(this);
57 }
58
59 public String getNodeName() {
60 return "#cdata-section";
61 }
62
63
64
65
66 public String getNodeValue() throws DOMException {
67 return DOMNodeHelper.getNodeValue(this);
68 }
69
70 public void setNodeValue(String nodeValue) throws DOMException {
71 DOMNodeHelper.setNodeValue(this, nodeValue);
72 }
73
74 public org.w3c.dom.Node getParentNode() {
75 return DOMNodeHelper.getParentNode(this);
76 }
77
78 public NodeList getChildNodes() {
79 return DOMNodeHelper.getChildNodes(this);
80 }
81
82 public org.w3c.dom.Node getFirstChild() {
83 return DOMNodeHelper.getFirstChild(this);
84 }
85
86 public org.w3c.dom.Node getLastChild() {
87 return DOMNodeHelper.getLastChild(this);
88 }
89
90 public org.w3c.dom.Node getPreviousSibling() {
91 return DOMNodeHelper.getPreviousSibling(this);
92 }
93
94 public org.w3c.dom.Node getNextSibling() {
95 return DOMNodeHelper.getNextSibling(this);
96 }
97
98 public NamedNodeMap getAttributes() {
99 return null;
100 }
101
102 public Document getOwnerDocument() {
103 return DOMNodeHelper.getOwnerDocument(this);
104 }
105
106 public org.w3c.dom.Node insertBefore(org.w3c.dom.Node newChild,
107 org.w3c.dom.Node refChild) throws DOMException {
108 checkNewChildNode(newChild);
109
110 return DOMNodeHelper.insertBefore(this, newChild, refChild);
111 }
112
113 public org.w3c.dom.Node replaceChild(org.w3c.dom.Node newChild,
114 org.w3c.dom.Node oldChild) throws DOMException {
115 checkNewChildNode(newChild);
116
117 return DOMNodeHelper.replaceChild(this, newChild, oldChild);
118 }
119
120 public org.w3c.dom.Node removeChild(org.w3c.dom.Node oldChild)
121 throws DOMException {
122 return DOMNodeHelper.removeChild(this, oldChild);
123 }
124
125 public org.w3c.dom.Node appendChild(org.w3c.dom.Node newChild)
126 throws DOMException {
127 checkNewChildNode(newChild);
128
129 return DOMNodeHelper.appendChild(this, newChild);
130 }
131
132 private void checkNewChildNode(org.w3c.dom.Node newChild)
133 throws DOMException {
134 throw new DOMException(DOMException.HIERARCHY_REQUEST_ERR,
135 "CDATASection nodes cannot have children");
136 }
137
138 public boolean hasChildNodes() {
139 return DOMNodeHelper.hasChildNodes(this);
140 }
141
142 public org.w3c.dom.Node cloneNode(boolean deep) {
143 return DOMNodeHelper.cloneNode(this, deep);
144 }
145
146 public void normalize() {
147 DOMNodeHelper.normalize(this);
148 }
149
150 public boolean isSupported(String feature, String version) {
151 return DOMNodeHelper.isSupported(this, feature, version);
152 }
153
154 public boolean hasAttributes() {
155 return DOMNodeHelper.hasAttributes(this);
156 }
157
158
159
160 public String getData() throws DOMException {
161 return DOMNodeHelper.getData(this);
162 }
163
164 public void setData(String data) throws DOMException {
165 DOMNodeHelper.setData(this, data);
166 }
167
168 public int getLength() {
169 return DOMNodeHelper.getLength(this);
170 }
171
172 public String substringData(int offset, int count) throws DOMException {
173 return DOMNodeHelper.substringData(this, offset, count);
174 }
175
176 public void appendData(String arg) throws DOMException {
177 DOMNodeHelper.appendData(this, arg);
178 }
179
180 public void insertData(int offset, String arg) throws DOMException {
181 DOMNodeHelper.insertData(this, offset, arg);
182 }
183
184 public void deleteData(int offset, int count) throws DOMException {
185 DOMNodeHelper.deleteData(this, offset, count);
186 }
187
188 public void replaceData(int offset, int count, String arg)
189 throws DOMException {
190 DOMNodeHelper.replaceData(this, offset, count, arg);
191 }
192
193
194
195 public org.w3c.dom.Text splitText(int offset) throws DOMException {
196 if (isReadOnly()) {
197 throw new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR,
198 "CharacterData node is read only: " + this);
199 } else {
200 String text = getText();
201 int length = (text != null) ? text.length() : 0;
202
203 if ((offset < 0) || (offset >= length)) {
204 throw new DOMException(DOMException.INDEX_SIZE_ERR,
205 "No text at offset: " + offset);
206 } else {
207 String start = text.substring(0, offset);
208 String rest = text.substring(offset);
209 setText(start);
210
211 Element parent = getParent();
212 CDATA newText = createCDATA(rest);
213
214 if (parent != null) {
215 parent.add(newText);
216 }
217
218 return DOMNodeHelper.asDOMText(newText);
219 }
220 }
221 }
222
223
224
225 protected CDATA createCDATA(String text) {
226 return new DOMCDATA(text);
227 }
228 }
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265