001 /*
002 * Copyright (c) 2007 Mozilla Foundation
003 *
004 * Permission is hereby granted, free of charge, to any person obtaining a
005 * copy of this software and associated documentation files (the "Software"),
006 * to deal in the Software without restriction, including without limitation
007 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
008 * and/or sell copies of the Software, and to permit persons to whom the
009 * Software is furnished to do so, subject to the following conditions:
010 *
011 * The above copyright notice and this permission notice shall be included in
012 * all copies or substantial portions of the Software.
013 *
014 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
015 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
016 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
017 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
018 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
019 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
020 * DEALINGS IN THE SOFTWARE.
021 */
022
023 package nu.validator.xml;
024
025 import org.xml.sax.Attributes;
026
027 public final class IdnessChangingAttributesWrapper implements Attributes {
028
029 private Attributes delegate;
030
031 private int xmlIdIndex;
032
033 private int idIndex;
034
035 private String xmlIdValue;
036
037 /**
038 * @param delegate
039 * @param xmlIdIndex
040 * @param idIndex
041 */
042 public IdnessChangingAttributesWrapper(Attributes delegate, int xmlIdIndex, int idIndex, String xmlIdValue) {
043 this.delegate = delegate;
044 this.xmlIdIndex = xmlIdIndex;
045 this.idIndex = idIndex;
046 this.xmlIdValue = xmlIdValue;
047 }
048
049 public IdnessChangingAttributesWrapper() {
050 this.delegate = null;
051 this.xmlIdIndex = -1;
052 this.idIndex = -1;
053 this.xmlIdValue = null;
054 }
055
056 public void setFields(Attributes delegate, int xmlIdIndex, int idIndex, String xmlIdValue) {
057 this.delegate = delegate;
058 this.xmlIdIndex = xmlIdIndex;
059 this.idIndex = idIndex;
060 this.xmlIdValue = xmlIdValue;
061 }
062
063 /**
064 * @param arg0
065 * @param arg1
066 * @return
067 * @see org.xml.sax.Attributes#getIndex(java.lang.String, java.lang.String)
068 */
069 public int getIndex(String arg0, String arg1) {
070 return delegate.getIndex(arg0, arg1);
071 }
072
073 /**
074 * @param arg0
075 * @return
076 * @see org.xml.sax.Attributes#getIndex(java.lang.String)
077 */
078 public int getIndex(String arg0) {
079 return delegate.getIndex(arg0);
080 }
081
082 /**
083 * @return
084 * @see org.xml.sax.Attributes#getLength()
085 */
086 public int getLength() {
087 return delegate.getLength();
088 }
089
090 /**
091 * @param arg0
092 * @return
093 * @see org.xml.sax.Attributes#getLocalName(int)
094 */
095 public String getLocalName(int arg0) {
096 return delegate.getLocalName(arg0);
097 }
098
099 /**
100 * @param arg0
101 * @return
102 * @see org.xml.sax.Attributes#getQName(int)
103 */
104 public String getQName(int arg0) {
105 return delegate.getQName(arg0);
106 }
107
108 /**
109 * @param index
110 * @return
111 * @see org.xml.sax.Attributes#getType(int)
112 */
113 public String getType(int index) {
114 if (idIndex == index || xmlIdIndex == index) {
115 return "ID";
116 } else {
117 return delegate.getType(index);
118 }
119 }
120
121 /**
122 * @param uri
123 * @param localName
124 * @return
125 * @see org.xml.sax.Attributes#getType(java.lang.String, java.lang.String)
126 */
127 public String getType(String uri, String localName) {
128 int index = getIndex(uri, localName);
129 if (index >= 0) {
130 return getType(index);
131 } else {
132 return null;
133 }
134 }
135
136 /**
137 * @param qName
138 * @return
139 * @see org.xml.sax.Attributes#getType(java.lang.String)
140 */
141 public String getType(String qName) {
142 int index = getIndex(qName);
143 if (index >= 0) {
144 return getType(index);
145 } else {
146 return null;
147 }
148 }
149
150 /**
151 * @param arg0
152 * @return
153 * @see org.xml.sax.Attributes#getURI(int)
154 */
155 public String getURI(int arg0) {
156 return delegate.getURI(arg0);
157 }
158
159 /**
160 * @param index
161 * @return
162 * @see org.xml.sax.Attributes#getValue(int)
163 */
164 public String getValue(int index) {
165 if (xmlIdValue == null) {
166 return delegate.getValue(index);
167 } else {
168 if (xmlIdIndex == index) {
169 return xmlIdValue;
170 } else {
171 return delegate.getValue(index);
172 }
173 }
174 }
175
176 /**
177 * @param uri
178 * @param localName
179 * @return
180 * @see org.xml.sax.Attributes#getValue(java.lang.String, java.lang.String)
181 */
182 public String getValue(String uri, String localName) {
183 if (xmlIdValue == null) {
184 return delegate.getValue(uri, localName);
185 } else {
186 int index = getIndex(uri, localName);
187 if (index < 0) {
188 return null;
189 } else if (xmlIdIndex == index) {
190 return xmlIdValue;
191 } else {
192 return delegate.getValue(index);
193 }
194 }
195 }
196
197 /**
198 * @param qName
199 * @return
200 * @see org.xml.sax.Attributes#getValue(java.lang.String)
201 */
202 public String getValue(String qName) {
203 if (xmlIdValue == null) {
204 return delegate.getValue(qName);
205 } else {
206 int index = getIndex(qName);
207 if (index < 0) {
208 return null;
209 } else if (xmlIdIndex == index) {
210 return xmlIdValue;
211 } else {
212 return delegate.getValue(index);
213 }
214 }
215 }
216
217 }