/**
* Copyright 2015 Santhosh Kumar Tekuri
*
* The JLibs authors license this file to you under the Apache License,
* version 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package jlibs.xml.stream;
import org.xml.sax.Attributes;
import javax.xml.stream.XMLStreamReader;
/**
* SAX {@link Attributes} implementation for {@link XMLStreamReader}.
*
* @author Santhosh Kumar T
*/
public class STAXAttributes implements Attributes{
private XMLStreamReader reader;
public STAXAttributes(XMLStreamReader reader){
this.reader = reader;
}
@Override
public int getLength(){
return reader.getAttributeCount();
}
@Override
public String getURI(int index){
String uri = reader.getAttributeNamespace(index);
return uri==null ? "" : uri;
}
@Override
public String getLocalName(int index){
return reader.getAttributeLocalName(index);
}
@Override
public String getQName(int index){
String localName = reader.getAttributeLocalName(index);
String prefix = reader.getAttributePrefix(index);
return prefix==null || prefix.length()==0 ? localName : prefix+':'+localName;
}
@Override
public String getType(int index){
return reader.getAttributeType(index);
}
@Override
public String getValue(int index){
return reader.getAttributeValue(index);
}
@Override
public int getIndex(String uri, String localName){
int count = reader.getAttributeCount();
for(int i=0; i<count; i++){
if(getURI(i).equals(uri) && getLocalName(i).equals(localName))
return i;
}
return -1;
}
@Override
public int getIndex(String qname){
int count = reader.getAttributeCount();
for(int i=0; i<count; i++){
if(getQName(i).equals(qname))
return i;
}
return -1;
}
@Override
public String getType(String uri, String localName){
int index = getIndex(uri, localName);
return index==-1 ? null : getType(index);
}
@Override
public String getType(String qname){
int index = getIndex(qname);
return index==-1 ? null : getType(index);
}
@Override
public String getValue(String uri, String localName){
return reader.getAttributeValue(uri==null?"":uri, localName);
}
@Override
public String getValue(String qname){
int index = getIndex(qname);
return index==-1 ? null : getValue(index);
}
}