• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2007 The Android Open Source Project
3  *
4  * Licensed under the Eclipse Public License, Version 1.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.eclipse.org/org/documents/epl-v10.php
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.ide.eclipse.adt.internal.editors.mock;
18 
19 import org.w3c.dom.DOMException;
20 import org.w3c.dom.Document;
21 import org.w3c.dom.NamedNodeMap;
22 import org.w3c.dom.Node;
23 import org.w3c.dom.NodeList;
24 import org.w3c.dom.UserDataHandler;
25 
26 import java.util.HashMap;
27 
28 
29 /**
30  * A mock XML node with only a minimal set of information.
31  */
32 public class MockXmlNode implements Node {
33 
34     MockNodeList mNodeList;
35     private String mLocalName;
36     private String mNamespace;
37     private short mNodeType;
38     private MockXmlNode mParent;
39     private MockXmlNode mPreviousSibling;
40     private MockXmlNode mNextSibling;
41     private String mAttrValue;
42     private MockNamedNodeMap mAttributes;
43 
44     // namespace stuff only set in the root node
45     /** map from namespace to prefix. */
46     private HashMap<String, String> mNsMap = null;
47 
48     /**
49      * Constructs a node from a given children list.
50      *
51      * @param namespace The namespace of the node or null if none
52      * @param localName The XML local node name.
53      * @param node_type One of Node.xxx_NODE constants, e.g. Node.ELEMENT_NODE
54      * @param children The children list. Can be null.
55      */
MockXmlNode(String namespace, String localName, short node_type, MockXmlNode[] children)56     public MockXmlNode(String namespace, String localName, short node_type,
57             MockXmlNode[] children) {
58         mLocalName = localName;
59         mNamespace = namespace;
60         mNodeType = node_type;
61         mNodeList = new MockNodeList(children);
62         fixNavigation();
63     }
64 
65     /**
66      * Constructs an attribute node
67      *
68      * @param namespace The namespace of the node or null if none
69      * @param localName The XML local node name.
70      * @param value the value of the attribute
71      */
MockXmlNode(String namespace, String localName, String value)72     public MockXmlNode(String namespace, String localName, String value) {
73         mLocalName = localName;
74         mNamespace = namespace;
75         mAttrValue = value;
76         mNodeType = Node.ATTRIBUTE_NODE;
77         mNodeList = new MockNodeList(new MockXmlNode[0]);
78         fixNavigation();
79     }
80 
fixNavigation()81     private void fixNavigation() {
82         MockXmlNode prev = null;
83         for (MockXmlNode n : mNodeList.getArrayList()) {
84             n.mParent = this;
85             n.mPreviousSibling = prev;
86             if (prev != null) {
87                 prev.mNextSibling = n;
88             }
89             n.fixNavigation();
90             prev = n;
91         }
92     }
93 
addAttributes(String namespaceURI, String localName, String value)94     public void addAttributes(String namespaceURI, String localName, String value) {
95         if (mAttributes == null) {
96             mAttributes = new MockNamedNodeMap();
97         }
98 
99         MockXmlNode node = mAttributes.addAttribute(namespaceURI, localName, value);
100         node.mParent = this;
101     }
102 
setPrefix(String namespace, String prefix)103     public void setPrefix(String namespace, String prefix) {
104         if (mNsMap == null) {
105             mNsMap = new HashMap<String, String>();
106         }
107 
108         mNsMap.put(namespace, prefix);
109     }
110 
getPrefix(String namespace)111     public String getPrefix(String namespace) {
112         if (mNsMap != null) {
113             return mNsMap.get(namespace);
114         }
115 
116         return mParent.getPrefix(namespace);
117     }
118 
119 
120     // ----------- Node methods
121 
appendChild(Node newChild)122     public Node appendChild(Node newChild) throws DOMException {
123         mNodeList.getArrayList().add((MockXmlNode) newChild);
124         return newChild;
125     }
126 
getAttributes()127     public NamedNodeMap getAttributes() {
128         return mAttributes;
129     }
130 
getChildNodes()131     public NodeList getChildNodes() {
132         return mNodeList;
133     }
134 
getFirstChild()135     public Node getFirstChild() {
136         if (mNodeList.getLength() > 0) {
137             return mNodeList.item(0);
138         }
139         return null;
140     }
141 
getLastChild()142     public Node getLastChild() {
143         if (mNodeList.getLength() > 0) {
144             return mNodeList.item(mNodeList.getLength() - 1);
145         }
146         return null;
147     }
148 
getNextSibling()149     public Node getNextSibling() {
150         return mNextSibling;
151     }
152 
getNodeName()153     public String getNodeName() {
154         return mLocalName;
155     }
156 
getLocalName()157     public String getLocalName() {
158         return mLocalName;
159     }
160 
getNodeType()161     public short getNodeType() {
162         return mNodeType;
163     }
164 
getParentNode()165     public Node getParentNode() {
166         return mParent;
167     }
168 
getPreviousSibling()169     public Node getPreviousSibling() {
170         return mPreviousSibling;
171     }
172 
hasChildNodes()173     public boolean hasChildNodes() {
174         return mNodeList.getLength() > 0;
175     }
176 
hasAttributes()177     public boolean hasAttributes() {
178         throw new UnsupportedOperationException("Operation not implemented.");  //$NON-NLS-1$
179     }
180 
isSameNode(Node other)181     public boolean isSameNode(Node other) {
182         return this == other;
183     }
184 
getNodeValue()185     public String getNodeValue() throws DOMException {
186         return mAttrValue;
187     }
188 
getPrefix()189     public String getPrefix() {
190         return getPrefix(getNamespaceURI());
191     }
192 
getNamespaceURI()193     public String getNamespaceURI() {
194         return mNamespace;
195     }
196 
197 
198     // --- methods not implemented ---
199 
cloneNode(boolean deep)200     public Node cloneNode(boolean deep) {
201         throw new UnsupportedOperationException("Operation not implemented.");  //$NON-NLS-1$
202     }
203 
compareDocumentPosition(Node other)204     public short compareDocumentPosition(Node other) throws DOMException {
205         throw new UnsupportedOperationException("Operation not implemented.");  //$NON-NLS-1$
206     }
207 
getBaseURI()208     public String getBaseURI() {
209         throw new UnsupportedOperationException("Operation not implemented.");  //$NON-NLS-1$
210     }
211 
getFeature(String feature, String version)212     public Object getFeature(String feature, String version) {
213         throw new UnsupportedOperationException("Operation not implemented.");  //$NON-NLS-1$
214     }
215 
getOwnerDocument()216     public Document getOwnerDocument() {
217         throw new UnsupportedOperationException("Operation not implemented.");  //$NON-NLS-1$
218     }
219 
getTextContent()220     public String getTextContent() throws DOMException {
221         throw new UnsupportedOperationException("Operation not implemented.");  //$NON-NLS-1$
222     }
223 
getUserData(String key)224     public Object getUserData(String key) {
225         throw new UnsupportedOperationException("Operation not implemented.");  //$NON-NLS-1$
226     }
227 
insertBefore(Node newChild, Node refChild)228     public Node insertBefore(Node newChild, Node refChild)
229             throws DOMException {
230         throw new UnsupportedOperationException("Operation not implemented.");  //$NON-NLS-1$
231     }
232 
isDefaultNamespace(String namespaceURI)233     public boolean isDefaultNamespace(String namespaceURI) {
234         throw new UnsupportedOperationException("Operation not implemented.");  //$NON-NLS-1$
235     }
236 
isEqualNode(Node arg)237     public boolean isEqualNode(Node arg) {
238         throw new UnsupportedOperationException("Operation not implemented.");  //$NON-NLS-1$
239     }
240 
isSupported(String feature, String version)241     public boolean isSupported(String feature, String version) {
242         throw new UnsupportedOperationException("Operation not implemented.");  //$NON-NLS-1$
243     }
244 
lookupNamespaceURI(String prefix)245     public String lookupNamespaceURI(String prefix) {
246         throw new UnsupportedOperationException("Operation not implemented.");  //$NON-NLS-1$
247     }
248 
lookupPrefix(String namespaceURI)249     public String lookupPrefix(String namespaceURI) {
250         throw new UnsupportedOperationException("Operation not implemented.");  //$NON-NLS-1$
251     }
252 
normalize()253     public void normalize() {
254         throw new UnsupportedOperationException("Operation not implemented.");  //$NON-NLS-1$
255     }
256 
removeChild(Node oldChild)257     public Node removeChild(Node oldChild) throws DOMException {
258         throw new UnsupportedOperationException("Operation not implemented.");  //$NON-NLS-1$
259     }
260 
replaceChild(Node newChild, Node oldChild)261     public Node replaceChild(Node newChild, Node oldChild)
262             throws DOMException {
263         throw new UnsupportedOperationException("Operation not implemented.");  //$NON-NLS-1$
264     }
265 
setNodeValue(String nodeValue)266     public void setNodeValue(String nodeValue) throws DOMException {
267         throw new UnsupportedOperationException("Operation not implemented.");  //$NON-NLS-1$
268     }
269 
setPrefix(String prefix)270     public void setPrefix(String prefix) throws DOMException {
271         throw new UnsupportedOperationException("Operation not implemented.");  //$NON-NLS-1$
272     }
273 
setTextContent(String textContent)274     public void setTextContent(String textContent) throws DOMException {
275         throw new UnsupportedOperationException("Operation not implemented.");  //$NON-NLS-1$
276     }
277 
setUserData(String key, Object data, UserDataHandler handler)278     public Object setUserData(String key, Object data,
279             UserDataHandler handler) {
280         throw new UnsupportedOperationException("Operation not implemented.");  //$NON-NLS-1$
281     }
282 }
283