/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Eclipse Public License, Version 1.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.eclipse.org/org/documents/epl-v10.php
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.ide.eclipse.editors.mock;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.UserDataHandler;
import java.util.HashMap;
import sun.reflect.generics.reflectiveObjects.NotImplementedException;
/**
* A mock XML node with only a minimal set of information.
*/
public class MockXmlNode implements Node {
MockNodeList mNodeList;
private String mLocalName;
private String mNamespace;
private short mNodeType;
private MockXmlNode mParent;
private MockXmlNode mPreviousSibling;
private MockXmlNode mNextSibling;
private String mAttrValue;
private MockNamedNodeMap mAttributes;
// namespace stuff only set in the root node
/** map from namespace to prefix. */
private HashMap<String, String> mNsMap = null;
/**
* Constructs a node from a given children list.
*
* @param namespace The namespace of the node or null if none
* @param localName The XML local node name.
* @param node_type One of Node.xxx_NODE constants, e.g. Node.ELEMENT_NODE
* @param children The children list. Can be null.
*/
public MockXmlNode(String namespace, String localName, short node_type,
MockXmlNode[] children) {
mLocalName = localName;
mNamespace = namespace;
mNodeType = node_type;
mNodeList = new MockNodeList(children);
fixNavigation();
}
/**
* Constructs an attribute node
*
* @param namespace The namespace of the node or null if none
* @param localName The XML local node name.
* @param value the value of the attribute
*/
public MockXmlNode(String namespace, String localName, String value) {
mLocalName = localName;
mNamespace = namespace;
mAttrValue = value;
mNodeType = Node.ATTRIBUTE_NODE;
mNodeList = new MockNodeList(new MockXmlNode[0]);
fixNavigation();
}
private void fixNavigation() {
MockXmlNode prev = null;
for (MockXmlNode n : mNodeList.getArrayList()) {
n.mParent = this;
n.mPreviousSibling = prev;
if (prev != null) {
prev.mNextSibling = n;
}
n.fixNavigation();
prev = n;
}
}
public void addAttributes(String namespaceURI, String localName, String value) {
if (mAttributes == null) {
mAttributes = new MockNamedNodeMap();
}
MockXmlNode node = mAttributes.addAttribute(namespaceURI, localName, value);
node.mParent = this;
}
public void setPrefix(String namespace, String prefix) {
if (mNsMap == null) {
mNsMap = new HashMap<String, String>();
}
mNsMap.put(namespace, prefix);
}
public String getPrefix(String namespace) {
if (mNsMap != null) {
return mNsMap.get(namespace);
}
return mParent.getPrefix(namespace);
}
// ----------- Node methods
public Node appendChild(Node newChild) throws DOMException {
mNodeList.getArrayList().add((MockXmlNode) newChild);
return newChild;
}
public NamedNodeMap getAttributes() {
return mAttributes;
}
public NodeList getChildNodes() {
return mNodeList;
}
public Node getFirstChild() {
if (mNodeList.getLength() > 0) {
return mNodeList.item(0);
}
return null;
}
public Node getLastChild() {
if (mNodeList.getLength() > 0) {
return mNodeList.item(mNodeList.getLength() - 1);
}
return null;
}
public Node getNextSibling() {
return mNextSibling;
}
public String getNodeName() {
return mLocalName;
}
public String getLocalName() {
return mLocalName;
}
public short getNodeType() {
return mNodeType;
}
public Node getParentNode() {
return mParent;
}
public Node getPreviousSibling() {
return mPreviousSibling;
}
public boolean hasChildNodes() {
return mNodeList.getLength() > 0;
}
public boolean hasAttributes() {
// TODO Auto-generated method stub
throw new NotImplementedException();
//return false;
}
public boolean isSameNode(Node other) {
return this == other;
}
public String getNodeValue() throws DOMException {
return mAttrValue;
}
public String getPrefix() {
return getPrefix(getNamespaceURI());
}
public String getNamespaceURI() {
return mNamespace;
}
// --- methods not implemented ---
public Node cloneNode(boolean deep) {
throw new NotImplementedException();
}
public short compareDocumentPosition(Node other) throws DOMException {
throw new NotImplementedException();
}
public String getBaseURI() {
throw new NotImplementedException();
}
public Object getFeature(String feature, String version) {
throw new NotImplementedException();
}
public Document getOwnerDocument() {
throw new NotImplementedException();
}
public String getTextContent() throws DOMException {
throw new NotImplementedException();
}
public Object getUserData(String key) {
throw new NotImplementedException();
}
public Node insertBefore(Node newChild, Node refChild)
throws DOMException {
throw new NotImplementedException();
}
public boolean isDefaultNamespace(String namespaceURI) {
throw new NotImplementedException();
}
public boolean isEqualNode(Node arg) {
throw new NotImplementedException();
}
public boolean isSupported(String feature, String version) {
throw new NotImplementedException();
}
public String lookupNamespaceURI(String prefix) {
throw new NotImplementedException();
}
public String lookupPrefix(String namespaceURI) {
throw new NotImplementedException();
}
public void normalize() {
throw new NotImplementedException();
}
public Node removeChild(Node oldChild) throws DOMException {
throw new NotImplementedException();
}
public Node replaceChild(Node newChild, Node oldChild)
throws DOMException {
throw new NotImplementedException();
}
public void setNodeValue(String nodeValue) throws DOMException {
throw new NotImplementedException();
}
public void setPrefix(String prefix) throws DOMException {
throw new NotImplementedException();
}
public void setTextContent(String textContent) throws DOMException {
throw new NotImplementedException();
}
public Object setUserData(String key, Object data,
UserDataHandler handler) {
throw new NotImplementedException();
}
}
|