blob: b7525064115581b0e899ef79675a48195ec2e171 [file] [log] [blame]
/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
*
* 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 org.apache.harmony.xml.dom;
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;
/**
* Provides a straightforward implementation of the corresponding W3C DOM
* interface. The class is used internally only, thus only notable members that
* are not in the original interface are documented (the W3C docs are quite
* extensive). Hope that's ok.
* <p>
* Some of the fields may have package visibility, so other classes belonging to
* the DOM implementation can easily access them while maintaining the DOM tree
* structure.
* <p>
* This class represents a Node that has neither a parent nor children.
*/
public abstract class NodeImpl implements Node {
private static final NodeList EMPTY_LIST = new NodeListImpl();
// Maintained by InnerNodeImpl and ElementImpl.
DocumentImpl document;
NodeImpl(DocumentImpl document) {
this.document = document;
}
public Node appendChild(Node newChild) throws DOMException {
throw new DOMException(DOMException.HIERARCHY_REQUEST_ERR, null);
}
public Node cloneNode(boolean deep) {
return document.cloneNode(this, deep);
}
public NamedNodeMap getAttributes() {
return null;
}
public NodeList getChildNodes() {
return EMPTY_LIST;
}
public Node getFirstChild() {
return null;
}
public Node getLastChild() {
return null;
}
public String getLocalName() {
return null;
}
public String getNamespaceURI() {
return null;
}
public Node getNextSibling() {
return null;
}
public String getNodeName() {
return null;
}
public abstract short getNodeType();
public String getNodeValue() throws DOMException {
return null;
}
public Document getOwnerDocument() {
return document;
}
public Node getParentNode() {
return null;
}
public String getPrefix() {
return null;
}
public Node getPreviousSibling() {
return null;
}
public boolean hasAttributes() {
return false;
}
public boolean hasChildNodes() {
return false;
}
public Node insertBefore(Node newChild, Node refChild) throws DOMException {
throw new DOMException(DOMException.HIERARCHY_REQUEST_ERR, null);
}
public boolean isSupported(String feature, String version) {
return DOMImplementationImpl.getInstance().hasFeature(feature, version);
}
public void normalize() {
}
public Node removeChild(Node oldChild) throws DOMException {
throw new DOMException(DOMException.HIERARCHY_REQUEST_ERR, null);
}
public Node replaceChild(Node newChild, Node oldChild) throws DOMException {
throw new DOMException(DOMException.HIERARCHY_REQUEST_ERR, null);
}
public void setNodeValue(String nodeValue) throws DOMException {
}
public void setPrefix(String prefix) throws DOMException {
}
/**
* Checks whether a required string matches an actual string. This utility
* method is used for comparing namespaces and such. It takes into account
* null arguments and the "*" special case.
*
* @param required The required string.
* @param actual The actual string.
* @return True if and only if the actual string matches the required one.
*/
private static boolean matchesName(String required, String actual, boolean wildcard) {
if (wildcard && "*".equals(required)) {
return true;
}
if (required == null) {
return (actual == null);
}
return required.equals(actual);
}
/**
* Checks whether this node's name matches a required name. It takes into
* account null arguments and the "*" special case.
*
* @param name The required name.
* @param wildcard TODO
* @return True if and only if the actual name matches the required one.
*/
public boolean matchesName(String name, boolean wildcard) {
return matchesName(name, getNodeName(), wildcard);
}
/**
* Checks whether this node's namespace and local name match a required
* pair of namespace and local name. It takes into account null arguments
* and the "*" special case.
*
* @param namespaceURI The required namespace.
* @param localName The required local name.
* @param wildcard TODO
* @return True if and only if the actual namespace and local name match
* the required pair of namespace and local name.
*/
public boolean matchesNameNS(String namespaceURI, String localName, boolean wildcard) {
return matchesName(namespaceURI, getNamespaceURI(), wildcard) && matchesName(localName, getLocalName(), wildcard);
}
public String getBaseURI() {
return null; // TODO
}
public short compareDocumentPosition(Node other)
throws DOMException {
throw new UnsupportedOperationException(); // TODO
}
public String getTextContent() throws DOMException {
return getNodeValue();
}
void getTextContent(StringBuilder buf) throws DOMException {
String content = getNodeValue();
if (content != null) {
buf.append(content);
}
}
public void setTextContent(String textContent) throws DOMException {
throw new UnsupportedOperationException(); // TODO
}
public boolean isSameNode(Node other) {
throw new UnsupportedOperationException(); // TODO
}
public String lookupPrefix(String namespaceURI) {
throw new UnsupportedOperationException(); // TODO
}
public boolean isDefaultNamespace(String namespaceURI) {
throw new UnsupportedOperationException(); // TODO
}
public String lookupNamespaceURI(String prefix) {
throw new UnsupportedOperationException(); // TODO
}
public boolean isEqualNode(Node arg) {
throw new UnsupportedOperationException(); // TODO
}
public Object getFeature(String feature, String version) {
throw new UnsupportedOperationException(); // TODO
}
public Object setUserData(String key, Object data,
UserDataHandler handler) {
throw new UnsupportedOperationException(); // TODO
}
public Object getUserData(String key) {
throw new UnsupportedOperationException(); // TODO
}
}