1 /*
2 * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
3 *
4 * This software is open source.
5 * See the bottom of this file for the licence.
6 */
7
8 package org.dom4j.dom;
9
10 import org.w3c.dom.Attr;
11 import org.w3c.dom.DOMException;
12 import org.w3c.dom.Node;
13
14 /***
15 * <p>
16 * <code>DOMAttributeNodeMap</code> implements a W3C NameNodeMap for the
17 * attributes of an element.
18 * </p>
19 *
20 * @author <a href="mailto:james.strachan@metastuff.com">James Strachan </a>
21 * @version $Revision: 1.8 $
22 */
23 public class DOMAttributeNodeMap implements org.w3c.dom.NamedNodeMap {
24 private DOMElement element;
25
26 public DOMAttributeNodeMap(DOMElement element) {
27 this.element = element;
28 }
29
30 // org.w3c.dom.NamedNodeMap interface
31 // -------------------------------------------------------------------------
32 public void foo() throws DOMException {
33 DOMNodeHelper.notSupported();
34 }
35
36 public Node getNamedItem(String name) {
37 return element.getAttributeNode(name);
38 }
39
40 public Node setNamedItem(Node arg) throws DOMException {
41 if (arg instanceof Attr) {
42 return element.setAttributeNode((org.w3c.dom.Attr) arg);
43 } else {
44 throw new DOMException(DOMException.NOT_SUPPORTED_ERR,
45 "Node is not an Attr: " + arg);
46 }
47 }
48
49 public Node removeNamedItem(String name) throws DOMException {
50 org.w3c.dom.Attr attr = element.getAttributeNode(name);
51
52 if (attr == null) {
53 throw new DOMException(DOMException.NOT_FOUND_ERR,
54 "No attribute named " + name);
55 }
56
57 return element.removeAttributeNode(attr);
58 }
59
60 public Node item(int index) {
61 return DOMNodeHelper.asDOMAttr(element.attribute(index));
62 }
63
64 public int getLength() {
65 return element.attributeCount();
66 }
67
68 public Node getNamedItemNS(String namespaceURI, String localName) {
69 return element.getAttributeNodeNS(namespaceURI, localName);
70 }
71
72 public Node setNamedItemNS(Node arg) throws DOMException {
73 if (arg instanceof Attr) {
74 return element.setAttributeNodeNS((org.w3c.dom.Attr) arg);
75 } else {
76 throw new DOMException(DOMException.NOT_SUPPORTED_ERR,
77 "Node is not an Attr: " + arg);
78 }
79 }
80
81 public Node removeNamedItemNS(String namespaceURI, String localName)
82 throws DOMException {
83 org.w3c.dom.Attr attr = element.getAttributeNodeNS(namespaceURI,
84 localName);
85
86 if (attr != null) {
87 return element.removeAttributeNode(attr);
88 }
89
90 return attr;
91 }
92 }
93
94 /*
95 * Redistribution and use of this software and associated documentation
96 * ("Software"), with or without modification, are permitted provided that the
97 * following conditions are met:
98 *
99 * 1. Redistributions of source code must retain copyright statements and
100 * notices. Redistributions must also contain a copy of this document.
101 *
102 * 2. Redistributions in binary form must reproduce the above copyright notice,
103 * this list of conditions and the following disclaimer in the documentation
104 * and/or other materials provided with the distribution.
105 *
106 * 3. The name "DOM4J" must not be used to endorse or promote products derived
107 * from this Software without prior written permission of MetaStuff, Ltd. For
108 * written permission, please contact dom4j-info@metastuff.com.
109 *
110 * 4. Products derived from this Software may not be called "DOM4J" nor may
111 * "DOM4J" appear in their names without prior written permission of MetaStuff,
112 * Ltd. DOM4J is a registered trademark of MetaStuff, Ltd.
113 *
114 * 5. Due credit should be given to the DOM4J Project - http://www.dom4j.org
115 *
116 * THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND
117 * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
118 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
119 * ARE DISCLAIMED. IN NO EVENT SHALL METASTUFF, LTD. OR ITS CONTRIBUTORS BE
120 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
121 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
122 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
123 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
124 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
125 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
126 * POSSIBILITY OF SUCH DAMAGE.
127 *
128 * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
129 */