1 /*
2 * reserved comment block
3 * DO NOT REMOVE OR ALTER!
4 */
5 /*
6 * Copyright 2005 The Apache Software Foundation.
7 *
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 */
20
21 package com.sun.org.apache.xerces.internal.util;
22
23 import com.sun.org.apache.xerces.internal.impl.Constants;
24 import com.sun.org.apache.xerces.internal.xni.XMLAttributes;
25 import org.xml.sax.AttributeList;
26 import org.xml.sax.ext.Attributes2;
27
28 /**
29 * Wraps {@link XMLAttributes} and makes it look like
30 * {@link AttributeList} and {@link Attributes}.
31 *
32 * @author Arnaud Le Hors, IBM
33 * @author Andy Clark, IBM
34 *
35 */
36 public final class AttributesProxy
37 implements AttributeList, Attributes2 {
38
39 //
40 // Data
41 //
42
43 /** XML attributes. */
44 private XMLAttributes fAttributes;
45
46 //
47 // Constructors
48 //
49
50 public AttributesProxy(XMLAttributes attributes) {
51 fAttributes = attributes;
52 }
53
54 //
55 // Public methods
56 //
57
58 /** Sets the XML attributes to be wrapped. */
59 public void setAttributes(XMLAttributes attributes) {
60 fAttributes = attributes;
61 } // setAttributes(XMLAttributes)
62
63 public XMLAttributes getAttributes() {
64 return fAttributes;
65 }
66
67 /*
68 * Attributes methods
69 */
70
71 public int getLength() {
72 return fAttributes.getLength();
73 }
74
75 public String getQName(int index) {
76 return fAttributes.getQName(index);
77 }
78
79 public String getURI(int index) {
80 // This hides the fact that internally we use null instead of empty string
81 // SAX requires the URI to be a string or an empty string
82 String uri = fAttributes.getURI(index);
83 return uri != null ? uri : XMLSymbols.EMPTY_STRING;
84 }
85
86 public String getLocalName(int index) {
87 return fAttributes.getLocalName(index);
88 }
89
90 public String getType(int i) {
91 return fAttributes.getType(i);
92 }
93
94 public String getType(String name) {
95 return fAttributes.getType(name);
96 }
97
98 public String getType(String uri, String localName) {
99 return uri.equals(XMLSymbols.EMPTY_STRING) ?
100 fAttributes.getType(null, localName) :
101 fAttributes.getType(uri, localName);
102 }
103
104 public String getValue(int i) {
105 return fAttributes.getValue(i);
106 }
107
108 public String getValue(String name) {
109 return fAttributes.getValue(name);
110 }
111
112 public String getValue(String uri, String localName) {
113 return uri.equals(XMLSymbols.EMPTY_STRING) ?
114 fAttributes.getValue(null, localName) :
115 fAttributes.getValue(uri, localName);
116 }
117
118 public int getIndex(String qName) {
119 return fAttributes.getIndex(qName);
120 }
121
122 public int getIndex(String uri, String localPart) {
123 return uri.equals(XMLSymbols.EMPTY_STRING) ?
124 fAttributes.getIndex(null, localPart) :
125 fAttributes.getIndex(uri, localPart);
126 }
127
128 /*
129 * Attributes2 methods
130 */
131
132 public boolean isDeclared(int index) {
133 if (index < 0 || index >= fAttributes.getLength()) {
134 throw new ArrayIndexOutOfBoundsException(index);
135 }
136 return Boolean.TRUE.equals(
137 fAttributes.getAugmentations(index).getItem(
138 Constants.ATTRIBUTE_DECLARED));
139 }
140
141 public boolean isDeclared(String qName) {
142 int index = getIndex(qName);
143 if (index == -1) {
144 throw new IllegalArgumentException(qName);
145 }
146 return Boolean.TRUE.equals(
147 fAttributes.getAugmentations(index).getItem(
148 Constants.ATTRIBUTE_DECLARED));
149 }
150
151 public boolean isDeclared(String uri, String localName) {
152 int index = getIndex(uri, localName);
153 if (index == -1) {
154 throw new IllegalArgumentException(localName);
155 }
156 return Boolean.TRUE.equals(
157 fAttributes.getAugmentations(index).getItem(
158 Constants.ATTRIBUTE_DECLARED));
159 }
160
161 public boolean isSpecified(int index) {
162 if (index < 0 || index >= fAttributes.getLength()) {
163 throw new ArrayIndexOutOfBoundsException(index);
164 }
165 return fAttributes.isSpecified(index);
166 }
167
168 public boolean isSpecified(String qName) {
169 int index = getIndex(qName);
170 if (index == -1) {
171 throw new IllegalArgumentException(qName);
172 }
173 return fAttributes.isSpecified(index);
174 }
175
176 public boolean isSpecified(String uri, String localName) {
177 int index = getIndex(uri, localName);
178 if (index == -1) {
179 throw new IllegalArgumentException(localName);
180 }
181 return fAttributes.isSpecified(index);
182 }
183
184 /*
185 * AttributeList methods
186 */
187
188 public String getName(int i) {
189 return fAttributes.getQName(i);
190 }
191
192 }