001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the "License"); 007 * you may not use this file except in compliance with the License. 008 * You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 /* 019 * $Id: XPathNamespaceImpl.java 1225426 2011-12-29 04:13:08Z mrglavas $ 020 */ 021 022 023 package org.apache.xpath.domapi; 024 025 import org.w3c.dom.Attr; 026 import org.w3c.dom.DOMException; 027 import org.w3c.dom.Document; 028 import org.w3c.dom.Element; 029 import org.w3c.dom.NamedNodeMap; 030 import org.w3c.dom.Node; 031 import org.w3c.dom.NodeList; 032 import org.w3c.dom.xpath.XPathNamespace; 033 034 import org.w3c.dom.UserDataHandler; 035 036 /** 037 * 038 * 039 * The <code>XPathNamespace</code> interface is returned by 040 * <code>XPathResult</code> interfaces to represent the XPath namespace node 041 * type that DOM lacks. There is no public constructor for this node type. 042 * Attempts to place it into a hierarchy or a NamedNodeMap result in a 043 * <code>DOMException</code> with the code <code>HIERARCHY_REQUEST_ERR</code> 044 * . This node is read only, so methods or setting of attributes that would 045 * mutate the node result in a DOMException with the code 046 * <code>NO_MODIFICATION_ALLOWED_ERR</code>. 047 * <p>The core specification describes attributes of the <code>Node</code> 048 * interface that are different for different node node types but does not 049 * describe <code>XPATH_NAMESPACE_NODE</code>, so here is a description of 050 * those attributes for this node type. All attributes of <code>Node</code> 051 * not described in this section have a <code>null</code> or 052 * <code>false</code> value. 053 * <p><code>ownerDocument</code> matches the <code>ownerDocument</code> of the 054 * <code>ownerElement</code> even if the element is later adopted. 055 * <p><code>prefix</code> is the prefix of the namespace represented by the 056 * node. 057 * <p><code>nodeName</code> is the same as <code>prefix</code>. 058 * <p><code>nodeType</code> is equal to <code>XPATH_NAMESPACE_NODE</code>. 059 * <p><code>namespaceURI</code> is the namespace URI of the namespace 060 * represented by the node. 061 * <p><code>adoptNode</code>, <code>cloneNode</code>, and 062 * <code>importNode</code> fail on this node type by raising a 063 * <code>DOMException</code> with the code <code>NOT_SUPPORTED_ERR</code>.In 064 * future versions of the XPath specification, the definition of a namespace 065 * node may be changed incomatibly, in which case incompatible changes to 066 * field values may be required to implement versions beyond XPath 1.0. 067 * <p>See also the <a href='http://www.w3.org/TR/2004/NOTE-DOM-Level-3-XPath-20040226'>Document Object Model (DOM) Level 3 XPath Specification</a>. 068 * 069 * This implementation wraps the DOM attribute node that contained the 070 * namespace declaration. 071 * @xsl.usage internal 072 */ 073 074 class XPathNamespaceImpl implements XPathNamespace { 075 076 // Node that XPathNamespaceImpl wraps 077 final private Node m_attributeNode; 078 079 /** 080 * Constructor for XPathNamespaceImpl. 081 */ 082 XPathNamespaceImpl(Node node) { 083 m_attributeNode = node; 084 } 085 086 /** 087 * @see org.apache.xalan.dom3.xpath.XPathNamespace#getOwnerElement() 088 */ 089 public Element getOwnerElement() { 090 return ((Attr)m_attributeNode).getOwnerElement(); 091 } 092 093 /** 094 * @see org.w3c.dom.Node#getNodeName() 095 */ 096 public String getNodeName() { 097 return "#namespace"; 098 } 099 100 /** 101 * @see org.w3c.dom.Node#getNodeValue() 102 */ 103 public String getNodeValue() throws DOMException { 104 return m_attributeNode.getNodeValue(); 105 } 106 107 /** 108 * @see org.w3c.dom.Node#setNodeValue(String) 109 */ 110 public void setNodeValue(String arg0) throws DOMException { 111 } 112 113 /** 114 * @see org.w3c.dom.Node#getNodeType() 115 */ 116 public short getNodeType() { 117 return XPathNamespace.XPATH_NAMESPACE_NODE; 118 } 119 120 /** 121 * @see org.w3c.dom.Node#getParentNode() 122 */ 123 public Node getParentNode() { 124 return m_attributeNode.getParentNode(); 125 } 126 127 /** 128 * @see org.w3c.dom.Node#getChildNodes() 129 */ 130 public NodeList getChildNodes() { 131 return m_attributeNode.getChildNodes(); 132 } 133 134 /** 135 * @see org.w3c.dom.Node#getFirstChild() 136 */ 137 public Node getFirstChild() { 138 return m_attributeNode.getFirstChild(); 139 } 140 141 /** 142 * @see org.w3c.dom.Node#getLastChild() 143 */ 144 public Node getLastChild() { 145 return m_attributeNode.getLastChild(); 146 } 147 148 /** 149 * @see org.w3c.dom.Node#getPreviousSibling() 150 */ 151 public Node getPreviousSibling() { 152 return m_attributeNode.getPreviousSibling(); 153 } 154 155 /** 156 * @see org.w3c.dom.Node#getNextSibling() 157 */ 158 public Node getNextSibling() { 159 return m_attributeNode.getNextSibling(); 160 } 161 162 /** 163 * @see org.w3c.dom.Node#getAttributes() 164 */ 165 public NamedNodeMap getAttributes() { 166 return m_attributeNode.getAttributes(); 167 } 168 169 /** 170 * @see org.w3c.dom.Node#getOwnerDocument() 171 */ 172 public Document getOwnerDocument() { 173 return m_attributeNode.getOwnerDocument(); 174 } 175 176 /** 177 * @see org.w3c.dom.Node#insertBefore(Node, Node) 178 */ 179 public Node insertBefore(Node arg0, Node arg1) throws DOMException { 180 return null; 181 } 182 183 /** 184 * @see org.w3c.dom.Node#replaceChild(Node, Node) 185 */ 186 public Node replaceChild(Node arg0, Node arg1) throws DOMException { 187 return null; 188 } 189 190 /** 191 * @see org.w3c.dom.Node#removeChild(Node) 192 */ 193 public Node removeChild(Node arg0) throws DOMException { 194 return null; 195 } 196 197 /** 198 * @see org.w3c.dom.Node#appendChild(Node) 199 */ 200 public Node appendChild(Node arg0) throws DOMException { 201 return null; 202 } 203 204 /** 205 * @see org.w3c.dom.Node#hasChildNodes() 206 */ 207 public boolean hasChildNodes() { 208 return false; 209 } 210 211 /** 212 * @see org.w3c.dom.Node#cloneNode(boolean) 213 */ 214 public Node cloneNode(boolean arg0) { 215 throw new DOMException(DOMException.NOT_SUPPORTED_ERR,null); 216 } 217 218 /** 219 * @see org.w3c.dom.Node#normalize() 220 */ 221 public void normalize() { 222 m_attributeNode.normalize(); 223 } 224 225 /** 226 * @see org.w3c.dom.Node#isSupported(String, String) 227 */ 228 public boolean isSupported(String arg0, String arg1) { 229 return m_attributeNode.isSupported(arg0, arg1); 230 } 231 232 /** 233 * @see org.w3c.dom.Node#getNamespaceURI() 234 */ 235 public String getNamespaceURI() { 236 237 // For namespace node, the namespaceURI is the namespace URI 238 // of the namespace represented by the node. 239 return m_attributeNode.getNodeValue(); 240 } 241 242 /** 243 * @see org.w3c.dom.Node#getPrefix() 244 */ 245 public String getPrefix() { 246 return m_attributeNode.getPrefix(); 247 } 248 249 /** 250 * @see org.w3c.dom.Node#setPrefix(String) 251 */ 252 public void setPrefix(String arg0) throws DOMException { 253 } 254 255 /** 256 * @see org.w3c.dom.Node#getLocalName() 257 */ 258 public String getLocalName() { 259 260 // For namespace node, the local name is the same as the prefix 261 return m_attributeNode.getPrefix(); 262 } 263 264 /** 265 * @see org.w3c.dom.Node#hasAttributes() 266 */ 267 public boolean hasAttributes() { 268 return m_attributeNode.hasAttributes(); 269 } 270 271 public String getBaseURI ( ) { 272 return null; 273 } 274 275 public short compareDocumentPosition(Node other) throws DOMException { 276 return 0; 277 } 278 279 private String textContent; 280 281 public String getTextContent() throws DOMException { 282 return textContent; 283 } 284 285 public void setTextContent(String textContent) throws DOMException { 286 this.textContent = textContent; 287 } 288 289 public boolean isSameNode(Node other) { 290 return false; 291 } 292 293 public String lookupPrefix(String namespaceURI) { 294 return ""; //PENDING 295 } 296 297 public boolean isDefaultNamespace(String namespaceURI) { 298 return false; 299 } 300 301 public String lookupNamespaceURI(String prefix) { 302 return null; 303 } 304 305 public boolean isEqualNode(Node arg) { 306 return false; 307 } 308 309 public Object getFeature(String feature, String version) { 310 return null; //PENDING 311 } 312 313 public Object setUserData(String key, 314 Object data, 315 UserDataHandler handler) { 316 return null; //PENDING 317 } 318 319 public Object getUserData(String key) { 320 return null; 321 } 322 }