1 /********************************************** 2 * Copyright (C) 2010 Lukas Laag 3 * This file is part of lib-gwt-svg. 4 * 5 * libgwtsvg is free software: you can redistribute it and/or modify 6 * it under the terms of the GNU Lesser General Public License as published by 7 * the Free Software Foundation, either version 3 of the License, or 8 * (at your option) any later version. 9 * 10 * libgwtsvg is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public License 16 * along with libgwtsvg. If not, see http://www.gnu.org/licenses/ 17 **********************************************/ 18 /* 19 * Copyright (c) 2004 World Wide Web Consortium, 20 * 21 * (Massachusetts Institute of Technology, European Research Consortium for 22 * Informatics and Mathematics, Keio University). All Rights Reserved. This 23 * work is distributed under the W3C(r) Software License [1] in the hope that 24 * it will be useful, but WITHOUT ANY WARRANTY; without even the implied 25 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 26 * 27 * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 28 */ 29 package org.vectomatic.dom.svg.impl; 30 31 import org.w3c.dom.DOMException; 32 33 import com.google.gwt.core.client.JavaScriptException; 34 import com.google.gwt.core.client.JavaScriptObject; 35 import com.google.gwt.dom.client.Node; 36 37 /** 38 * Overlay class for DOM NamedNodeMap 39 * @author laaglu 40 */ 41 public class NamedNodeMap<T extends Node> extends JavaScriptObject { 42 protected NamedNodeMap() { 43 } 44 /** 45 * Retrieves a node specified by name. 46 * @param name The <code>nodeName</code> of a node to retrieve. 47 * @return A <code>Node</code> (of any type) with the specified 48 * <code>nodeName</code>, or <code>null</code> if it does not identify 49 * any node in this map. 50 */ 51 public final native T getNamedItem(String name) /*-{ 52 return this.getNamedItem(name); 53 }-*/; 54 55 /** 56 * Adds a node using its <code>nodeName</code> attribute. If a node with 57 * that name is already present in this map, it is replaced by the new 58 * one. Replacing a node by itself has no effect. 59 * <br>As the <code>nodeName</code> attribute is used to derive the name 60 * which the node must be stored under, multiple nodes of certain types 61 * (those that have a "special" string value) cannot be stored as the 62 * names would clash. This is seen as preferable to allowing nodes to be 63 * aliased. 64 * @param arg A node to store in this map. The node will later be 65 * accessible using the value of its <code>nodeName</code> attribute. 66 * @return If the new <code>Node</code> replaces an existing node the 67 * replaced <code>Node</code> is returned, otherwise <code>null</code> 68 * is returned. 69 * @exception DOMException 70 * WRONG_DOCUMENT_ERR: Raised if <code>arg</code> was created from a 71 * different document than the one that created this map. 72 * <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this map is readonly. 73 * <br>INUSE_ATTRIBUTE_ERR: Raised if <code>arg</code> is an 74 * <code>Attr</code> that is already an attribute of another 75 * <code>Element</code> object. The DOM user must explicitly clone 76 * <code>Attr</code> nodes to re-use them in other elements. 77 * <br>HIERARCHY_REQUEST_ERR: Raised if an attempt is made to add a node 78 * doesn't belong in this NamedNodeMap. Examples would include trying 79 * to insert something other than an Attr node into an Element's map 80 * of attributes, or a non-Entity node into the DocumentType's map of 81 * Entities. 82 */ 83 public final native T setNamedItem(Node arg) throws JavaScriptException /*-{ 84 return this.setNamedItem(arg); 85 }-*/; 86 87 /** 88 * Removes a node specified by name. When this map contains the attributes 89 * attached to an element, if the removed attribute is known to have a 90 * default value, an attribute immediately appears containing the 91 * default value as well as the corresponding namespace URI, local name, 92 * and prefix when applicable. 93 * @param name The <code>nodeName</code> of the node to remove. 94 * @return The node removed from this map if a node with such a name 95 * exists. 96 * @exception DOMException 97 * NOT_FOUND_ERR: Raised if there is no node named <code>name</code> in 98 * this map. 99 * <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this map is readonly. 100 */ 101 public final native T removeNamedItem(String name) throws JavaScriptException /*-{ 102 return this.removeNamedItem(name); 103 }-*/; 104 105 /** 106 * Returns the <code>index</code>th item in the map. If <code>index</code> 107 * is greater than or equal to the number of nodes in this map, this 108 * returns <code>null</code>. 109 * @param index Index into this map. 110 * @return The node at the <code>index</code>th position in the map, or 111 * <code>null</code> if that is not a valid index. 112 */ 113 public final native T item(int index) /*-{ 114 return this.item(index); 115 }-*/; 116 117 /** 118 * The number of nodes in this map. The range of valid child node indices 119 * is <code>0</code> to <code>length-1</code> inclusive. 120 * @return The number of nodes in this map 121 */ 122 public final native int getLength() /*-{ 123 return this.length; 124 }-*/; 125 126 /** 127 * Retrieves a node specified by local name and namespace URI. 128 * <br>Per [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>] 129 * , applications must use the value null as the namespaceURI parameter 130 * for methods if they wish to have no namespace. 131 * @param namespaceURI The namespace URI of the node to retrieve. 132 * @param localName The local name of the node to retrieve. 133 * @return A <code>Node</code> (of any type) with the specified local 134 * name and namespace URI, or <code>null</code> if they do not 135 * identify any node in this map. 136 * @exception DOMException 137 * NOT_SUPPORTED_ERR: May be raised if the implementation does not 138 * support the feature "XML" and the language exposed through the 139 * Document does not support XML Namespaces (such as [<a href='http://www.w3.org/TR/1999/REC-html401-19991224/'>HTML 4.01</a>]). 140 */ 141 public final native T getNamedItemNS(String namespaceURI, String localName) throws JavaScriptException /*-{ 142 return this.getNamedItem(namespaceURI, localName); 143 }-*/; 144 145 /** 146 * Adds a node using its <code>namespaceURI</code> and 147 * <code>localName</code>. If a node with that namespace URI and that 148 * local name is already present in this map, it is replaced by the new 149 * one. Replacing a node by itself has no effect. 150 * <br>Per [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>] 151 * , applications must use the value null as the namespaceURI parameter 152 * for methods if they wish to have no namespace. 153 * @param arg A node to store in this map. The node will later be 154 * accessible using the value of its <code>namespaceURI</code> and 155 * <code>localName</code> attributes. 156 * @return If the new <code>Node</code> replaces an existing node the 157 * replaced <code>Node</code> is returned, otherwise <code>null</code> 158 * is returned. 159 * @exception DOMException 160 * WRONG_DOCUMENT_ERR: Raised if <code>arg</code> was created from a 161 * different document than the one that created this map. 162 * <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this map is readonly. 163 * <br>INUSE_ATTRIBUTE_ERR: Raised if <code>arg</code> is an 164 * <code>Attr</code> that is already an attribute of another 165 * <code>Element</code> object. The DOM user must explicitly clone 166 * <code>Attr</code> nodes to re-use them in other elements. 167 * <br>HIERARCHY_REQUEST_ERR: Raised if an attempt is made to add a node 168 * doesn't belong in this NamedNodeMap. Examples would include trying 169 * to insert something other than an Attr node into an Element's map 170 * of attributes, or a non-Entity node into the DocumentType's map of 171 * Entities. 172 * <br>NOT_SUPPORTED_ERR: May be raised if the implementation does not 173 * support the feature "XML" and the language exposed through the 174 * Document does not support XML Namespaces (such as [<a href='http://www.w3.org/TR/1999/REC-html401-19991224/'>HTML 4.01</a>]). 175 */ 176 public final native T setNamedItemNS(Node arg) throws JavaScriptException /*-{ 177 return this.setNamedItem(arg); 178 }-*/; 179 180 /** 181 * Removes a node specified by local name and namespace URI. A removed 182 * attribute may be known to have a default value when this map contains 183 * the attributes attached to an element, as returned by the attributes 184 * attribute of the <code>Node</code> interface. If so, an attribute 185 * immediately appears containing the default value as well as the 186 * corresponding namespace URI, local name, and prefix when applicable. 187 * <br>Per [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>] 188 * , applications must use the value null as the namespaceURI parameter 189 * for methods if they wish to have no namespace. 190 * @param namespaceURI The namespace URI of the node to remove. 191 * @param localName The local name of the node to remove. 192 * @return The node removed from this map if a node with such a local 193 * name and namespace URI exists. 194 * @exception DOMException 195 * NOT_FOUND_ERR: Raised if there is no node with the specified 196 * <code>namespaceURI</code> and <code>localName</code> in this map. 197 * <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this map is readonly. 198 * <br>NOT_SUPPORTED_ERR: May be raised if the implementation does not 199 * support the feature "XML" and the language exposed through the 200 * Document does not support XML Namespaces (such as [<a href='http://www.w3.org/TR/1999/REC-html401-19991224/'>HTML 4.01</a>]). 201 */ 202 public final native T removeNamedItemNS(String namespaceURI, String localName) throws JavaScriptException /*-{ 203 return this.removeNamedItem(namespaceURI, localName); 204 }-*/; 205 }