1 /* |
|
2 * reserved comment block |
|
3 * DO NOT REMOVE OR ALTER! |
|
4 */ |
|
5 /* |
|
6 * Licensed to the Apache Software Foundation (ASF) under one or more |
|
7 * contributor license agreements. See the NOTICE file distributed with |
|
8 * this work for additional information regarding copyright ownership. |
|
9 * The ASF licenses this file to You under the Apache License, Version 2.0 |
|
10 * (the "License"); you may not use this file except in compliance with |
|
11 * the License. You may obtain a copy of the License at |
|
12 * |
|
13 * http://www.apache.org/licenses/LICENSE-2.0 |
|
14 * |
|
15 * Unless required by applicable law or agreed to in writing, software |
|
16 * distributed under the License is distributed on an "AS IS" BASIS, |
|
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
18 * See the License for the specific language governing permissions and |
|
19 * limitations under the License. |
|
20 */ |
|
21 |
|
22 package com.sun.org.apache.xml.internal.serializer.utils; |
|
23 |
|
24 import org.w3c.dom.Attr; |
|
25 import org.w3c.dom.NamedNodeMap; |
|
26 import org.w3c.dom.Node; |
|
27 |
|
28 import org.xml.sax.Attributes; |
|
29 |
|
30 /** |
|
31 * Wraps a DOM attribute list in a SAX Attributes. |
|
32 * |
|
33 * This class is a copy of the one in com.sun.org.apache.xml.internal.utils. |
|
34 * It exists to cut the serializers dependancy on that package. |
|
35 * A minor changes from that package are: |
|
36 * DOMHelper reference changed to DOM2Helper, class is not "public" |
|
37 * |
|
38 * This class is not a public API, it is only public because it is |
|
39 * used in com.sun.org.apache.xml.internal.serializer. |
|
40 * |
|
41 * @xsl.usage internal |
|
42 */ |
|
43 public final class AttList implements Attributes |
|
44 { |
|
45 |
|
46 /** List of attribute nodes */ |
|
47 NamedNodeMap m_attrs; |
|
48 |
|
49 /** Index of last attribute node */ |
|
50 int m_lastIndex; |
|
51 |
|
52 // ARGHH!! JAXP Uses Xerces without setting the namespace processing to ON! |
|
53 // DOM2Helper m_dh = new DOM2Helper(); |
|
54 |
|
55 /** Local reference to DOMHelper */ |
|
56 DOM2Helper m_dh; |
|
57 |
|
58 // /** |
|
59 // * Constructor AttList |
|
60 // * |
|
61 // * |
|
62 // * @param attrs List of attributes this will contain |
|
63 // */ |
|
64 // public AttList(NamedNodeMap attrs) |
|
65 // { |
|
66 // |
|
67 // m_attrs = attrs; |
|
68 // m_lastIndex = m_attrs.getLength() - 1; |
|
69 // m_dh = new DOM2Helper(); |
|
70 // } |
|
71 |
|
72 /** |
|
73 * Constructor AttList |
|
74 * |
|
75 * |
|
76 * @param attrs List of attributes this will contain |
|
77 * @param dh DOMHelper |
|
78 */ |
|
79 public AttList(NamedNodeMap attrs, DOM2Helper dh) |
|
80 { |
|
81 |
|
82 m_attrs = attrs; |
|
83 m_lastIndex = m_attrs.getLength() - 1; |
|
84 m_dh = dh; |
|
85 } |
|
86 |
|
87 /** |
|
88 * Get the number of attribute nodes in the list |
|
89 * |
|
90 * |
|
91 * @return number of attribute nodes |
|
92 */ |
|
93 public int getLength() |
|
94 { |
|
95 return m_attrs.getLength(); |
|
96 } |
|
97 |
|
98 /** |
|
99 * Look up an attribute's Namespace URI by index. |
|
100 * |
|
101 * @param index The attribute index (zero-based). |
|
102 * @return The Namespace URI, or the empty string if none |
|
103 * is available, or null if the index is out of |
|
104 * range. |
|
105 */ |
|
106 public String getURI(int index) |
|
107 { |
|
108 String ns = m_dh.getNamespaceOfNode(((Attr) m_attrs.item(index))); |
|
109 if(null == ns) |
|
110 ns = ""; |
|
111 return ns; |
|
112 } |
|
113 |
|
114 /** |
|
115 * Look up an attribute's local name by index. |
|
116 * |
|
117 * @param index The attribute index (zero-based). |
|
118 * @return The local name, or the empty string if Namespace |
|
119 * processing is not being performed, or null |
|
120 * if the index is out of range. |
|
121 */ |
|
122 public String getLocalName(int index) |
|
123 { |
|
124 return m_dh.getLocalNameOfNode(((Attr) m_attrs.item(index))); |
|
125 } |
|
126 |
|
127 /** |
|
128 * Look up an attribute's qualified name by index. |
|
129 * |
|
130 * |
|
131 * @param i The attribute index (zero-based). |
|
132 * |
|
133 * @return The attribute's qualified name |
|
134 */ |
|
135 public String getQName(int i) |
|
136 { |
|
137 return ((Attr) m_attrs.item(i)).getName(); |
|
138 } |
|
139 |
|
140 /** |
|
141 * Get the attribute's node type by index |
|
142 * |
|
143 * |
|
144 * @param i The attribute index (zero-based) |
|
145 * |
|
146 * @return the attribute's node type |
|
147 */ |
|
148 public String getType(int i) |
|
149 { |
|
150 return "CDATA"; // for the moment |
|
151 } |
|
152 |
|
153 /** |
|
154 * Get the attribute's node value by index |
|
155 * |
|
156 * |
|
157 * @param i The attribute index (zero-based) |
|
158 * |
|
159 * @return the attribute's node value |
|
160 */ |
|
161 public String getValue(int i) |
|
162 { |
|
163 return ((Attr) m_attrs.item(i)).getValue(); |
|
164 } |
|
165 |
|
166 /** |
|
167 * Get the attribute's node type by name |
|
168 * |
|
169 * |
|
170 * @param name Attribute name |
|
171 * |
|
172 * @return the attribute's node type |
|
173 */ |
|
174 public String getType(String name) |
|
175 { |
|
176 return "CDATA"; // for the moment |
|
177 } |
|
178 |
|
179 /** |
|
180 * Look up an attribute's type by Namespace name. |
|
181 * |
|
182 * @param uri The Namespace URI, or the empty String if the |
|
183 * name has no Namespace URI. |
|
184 * @param localName The local name of the attribute. |
|
185 * @return The attribute type as a string, or null if the |
|
186 * attribute is not in the list or if Namespace |
|
187 * processing is not being performed. |
|
188 */ |
|
189 public String getType(String uri, String localName) |
|
190 { |
|
191 return "CDATA"; // for the moment |
|
192 } |
|
193 |
|
194 /** |
|
195 * Look up an attribute's value by name. |
|
196 * |
|
197 * |
|
198 * @param name The attribute node's name |
|
199 * |
|
200 * @return The attribute node's value |
|
201 */ |
|
202 public String getValue(String name) |
|
203 { |
|
204 Attr attr = ((Attr) m_attrs.getNamedItem(name)); |
|
205 return (null != attr) |
|
206 ? attr.getValue() : null; |
|
207 } |
|
208 |
|
209 /** |
|
210 * Look up an attribute's value by Namespace name. |
|
211 * |
|
212 * @param uri The Namespace URI, or the empty String if the |
|
213 * name has no Namespace URI. |
|
214 * @param localName The local name of the attribute. |
|
215 * @return The attribute value as a string, or null if the |
|
216 * attribute is not in the list. |
|
217 */ |
|
218 public String getValue(String uri, String localName) |
|
219 { |
|
220 Node a=m_attrs.getNamedItemNS(uri,localName); |
|
221 return (a==null) ? null : a.getNodeValue(); |
|
222 } |
|
223 |
|
224 /** |
|
225 * Look up the index of an attribute by Namespace name. |
|
226 * |
|
227 * @param uri The Namespace URI, or the empty string if |
|
228 * the name has no Namespace URI. |
|
229 * @param localPart The attribute's local name. |
|
230 * @return The index of the attribute, or -1 if it does not |
|
231 * appear in the list. |
|
232 */ |
|
233 public int getIndex(String uri, String localPart) |
|
234 { |
|
235 for(int i=m_attrs.getLength()-1;i>=0;--i) |
|
236 { |
|
237 Node a=m_attrs.item(i); |
|
238 String u=a.getNamespaceURI(); |
|
239 if( (u==null ? uri==null : u.equals(uri)) |
|
240 && |
|
241 a.getLocalName().equals(localPart) ) |
|
242 return i; |
|
243 } |
|
244 return -1; |
|
245 } |
|
246 |
|
247 /** |
|
248 * Look up the index of an attribute by raw XML 1.0 name. |
|
249 * |
|
250 * @param qName The qualified (prefixed) name. |
|
251 * @return The index of the attribute, or -1 if it does not |
|
252 * appear in the list. |
|
253 */ |
|
254 public int getIndex(String qName) |
|
255 { |
|
256 for(int i=m_attrs.getLength()-1;i>=0;--i) |
|
257 { |
|
258 Node a=m_attrs.item(i); |
|
259 if(a.getNodeName().equals(qName) ) |
|
260 return i; |
|
261 } |
|
262 return -1; |
|
263 } |
|
264 } |
|