blob: 676376b656e48b264d5c2db963c455c8ac8b1934 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses 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 org.apache.vxquery.index;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
public class IndexAttributes implements Attributes {
int length;
List<String> names;
List<String> values;
List<String> uris;
List<String> localnames;
List<String> types;
List<String> qnames;
public IndexAttributes() {
names = new ArrayList<>();
values = new ArrayList<>();
uris = new ArrayList<>();
localnames = new ArrayList<>();
types = new ArrayList<>();
qnames = new ArrayList<>();
}
public void reset() {
length = names.size();
names.clear();
values.clear();
uris.clear();
localnames.clear();
types.clear();
qnames.clear();
}
public void addNames(String name) {
names.add(name);
length = names.size();
}
public void addValues(String value) {
values.add(value);
}
public void addUris(String uri) {
uris.add(uri);
}
public void addLocalNames(String localname) {
localnames.add(localname);
}
public void addTypes(String type) {
types.add(type);
}
public void addqNames(String qname) {
qnames.add(qname);
}
/**
* Return the number of attributes in the list.
* <p>
* Once you know the number of attributes, you can iterate through the list.
* </p>
*
* @return The number of attributes in the list.
* @see #getURI(int)
* @see #getLocalName(int)
* @see #getQName(int)
* @see #getType(int)
* @see #getValue(int)
*/
@Override
public int getLength() {
return length;
}
/**
* Look up an attribute's Namespace URI by index.
*
* @param index
* The attribute index (zero-based).
* @return The Namespace URI, or the empty string if none
* is available, or null if the index is out of
* range.
* @see #getLength
*/
@Override
public String getURI(int index) {
return uris.get(index);
}
/**
* Look up an attribute's local name by index.
*
* @param index
* The attribute index (zero-based).
* @return The local name, or the empty string if Namespace
* processing is not being performed, or null
* if the index is out of range.
* @see #getLength
*/
@Override
public String getLocalName(int index) {
return localnames.get(index);
}
/**
* Look up an attribute's XML qualified (prefixed) name by index.
*
* @param index
* The attribute index (zero-based).
* @return The XML qualified name, or the empty string
* if none is available, or null if the index
* is out of range.
* @see #getLength
*/
@Override
public String getQName(int index) {
return qnames.get(index);
}
/**
* Look up an attribute's type by index.
* <p>
* The attribute type is one of the strings "CDATA", "ID", "IDREF", "IDREFS", "NMTOKEN", "NMTOKENS", "ENTITY",
* "ENTITIES", or "NOTATION" (always in upper case).
* </p>
* <p>
* If the parser has not read a declaration for the attribute, or if the parser does not report attribute types,
* then it must return the value "CDATA" as stated in the XML 1.0 Recommendation (clause 3.3.3,
* "Attribute-Value Normalization").
* </p>
* <p>
* For an enumerated attribute that is not a notation, the parser will report the type as "NMTOKEN".
* </p>
*
* @param index
* The attribute index (zero-based).
* @return The attribute's type as a string, or null if the
* index is out of range.
* @see #getLength
*/
@Override
public String getType(int index) {
return types.get(index);
}
/**
* Look up an attribute's value by index.
* <p>
* If the attribute value is a list of tokens (IDREFS, ENTITIES, or NMTOKENS), the tokens will be concatenated into
* a single string with each token separated by a single space.
* </p>
*
* @param index
* The attribute index (zero-based).
* @return The attribute's value as a string, or null if the
* index is out of range.
* @see #getLength
*/
@Override
public String getValue(int index) {
return values.get(index);
}
////////////////////////////////////////////////////////////////////
// Name-based query.
////////////////////////////////////////////////////////////////////
/**
* Look up the index of an attribute by Namespace name.
*
* @param uri
* The Namespace URI, or the empty string if
* the name has no Namespace URI.
* @param localName
* The attribute's local name.
* @return The index of the attribute, or -1 if it does not
* appear in the list.
*/
@Override
public int getIndex(String uri, String localName) {
for (int i = 0; i < length; i++) {
if (localnames.get(i).equals(localName) && uris.get(i).equals(uri)) {
return i;
}
}
return -1;
}
/**
* Look up the index of an attribute by XML qualified (prefixed) name.
*
* @param qName
* The qualified (prefixed) name.
* @return The index of the attribute, or -1 if it does not
* appear in the list.
*/
@Override
public int getIndex(String qName) {
for (int i = 0; i < length; i++) {
if (qnames.get(i).equals(qName)) {
return i;
}
}
return -1;
}
/**
* Look up an attribute's type by Namespace name.
* <p>
* See {@link #getType(int) getType(int)} for a description of the possible types.
* </p>
*
* @param uri
* The Namespace URI, or the empty String if the
* name has no Namespace URI.
* @param localName
* The local name of the attribute.
* @return The attribute type as a string, or null if the
* attribute is not in the list or if Namespace
* processing is not being performed.
*/
@Override
public String getType(String uri, String localName) {
for (int i = 0; i < length; i++) {
if (localnames.get(i).equals(localName) && uris.get(i).equals(uri)) {
return types.get(i);
}
}
return null;
}
/**
* Look up an attribute's type by XML qualified (prefixed) name.
* <p>
* See {@link #getType(int) getType(int)} for a description of the possible types.
* </p>
*
* @param qName
* The XML qualified name.
* @return The attribute type as a string, or null if the
* attribute is not in the list or if qualified names
* are not available.
*/
@Override
public String getType(String qName) {
for (int i = 0; i < length; i++) {
if (qnames.get(i).equals(qName)) {
return types.get(i);
}
}
return null;
}
/**
* Look up an attribute's value by Namespace name.
* <p>
* See {@link #getValue(int) getValue(int)} for a description of the possible values.
* </p>
*
* @param uri
* The Namespace URI, or the empty String if the
* name has no Namespace URI.
* @param localName
* The local name of the attribute.
* @return The attribute value as a string, or null if the
* attribute is not in the list.
*/
@Override
public String getValue(String uri, String localName) {
for (int i = 0; i < length; i++) {
if (localnames.get(i).equals(localName) && uris.get(i).equals(uri)) {
return values.get(i);
}
}
return null;
}
/**
* Look up an attribute's value by XML qualified (prefixed) name.
* <p>
* See {@link #getValue(int) getValue(int)} for a description of the possible values.
* </p>
*
* @param qName
* The XML qualified name.
* @return The attribute value as a string, or null if the
* attribute is not in the list or if qualified names
* are not available.
*/
@Override
public String getValue(String qName) {
for (int i = 0; i < length; i++) {
if (qnames.get(i).equals(qName)) {
return values.get(i);
}
}
return null;
}
}