19f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/*
29f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one
39f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or more contributor license agreements. See the NOTICE file
49f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed with this work for additional information
59f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * regarding copyright ownership. The ASF licenses this file
69f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to you under the Apache License, Version 2.0 (the  "License");
79f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * you may not use this file except in compliance with the License.
89f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * You may obtain a copy of the License at
99f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *     http://www.apache.org/licenses/LICENSE-2.0
119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Unless required by applicable law or agreed to in writing, software
139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * See the License for the specific language governing permissions and
169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * limitations under the License.
179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/*
199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * $Id: AttList.java 468655 2006-10-28 07:12:06Z minchau $
209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xml.utils;
229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.Attr;
249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.NamedNodeMap;
259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.Node;
269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.xml.sax.Attributes;
289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/**
309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Wraps a DOM attribute list in a SAX Attributes.
319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @xsl.usage internal
329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic class AttList implements Attributes
349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{
359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /** List of attribute nodes          */
379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  NamedNodeMap m_attrs;
389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /** Index of last attribute node          */
409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  int m_lastIndex;
419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  // ARGHH!!  JAXP Uses Xerces without setting the namespace processing to ON!
439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  // DOM2Helper m_dh = new DOM2Helper();
449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /** Local reference to DOMHelper          */
469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  DOMHelper m_dh;
479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//  /**
499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//   * Constructor AttList
509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//   *
519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//   *
529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//   * @param attrs List of attributes this will contain
539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//   */
549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//  public AttList(NamedNodeMap attrs)
559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//  {
569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//
579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//    m_attrs = attrs;
589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//    m_lastIndex = m_attrs.getLength() - 1;
599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//    m_dh = new DOM2Helper();
609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson//  }
619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Constructor AttList
649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param attrs List of attributes this will contain
679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param dh DOMHelper
689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public AttList(NamedNodeMap attrs, DOMHelper dh)
709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_attrs = attrs;
739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_lastIndex = m_attrs.getLength() - 1;
749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_dh = dh;
759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the number of attribute nodes in the list
799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return number of attribute nodes
829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public int getLength()
849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return m_attrs.getLength();
869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Look up an attribute's Namespace URI by index.
909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param index The attribute index (zero-based).
929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The Namespace URI, or the empty string if none
939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         is available, or null if the index is out of
949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         range.
959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getURI(int index)
979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    String ns = m_dh.getNamespaceOfNode(((Attr) m_attrs.item(index)));
999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if(null == ns)
1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      ns = "";
1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return ns;
1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Look up an attribute's local name by index.
1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param index The attribute index (zero-based).
1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The local name, or the empty string if Namespace
1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         processing is not being performed, or null
1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         if the index is out of range.
1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getLocalName(int index)
1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return m_dh.getLocalNameOfNode(((Attr) m_attrs.item(index)));
1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Look up an attribute's qualified name by index.
1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param i The attribute index (zero-based).
1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The attribute's qualified name
1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getQName(int i)
1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return ((Attr) m_attrs.item(i)).getName();
1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the attribute's node type by index
1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param i The attribute index (zero-based)
1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return the attribute's node type
1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getType(int i)
1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return "CDATA";  // for the moment
1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the attribute's node value by index
1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param i The attribute index (zero-based)
1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return the attribute's node value
1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getValue(int i)
1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return ((Attr) m_attrs.item(i)).getValue();
1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the attribute's node type by name
1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param name Attribute name
1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return the attribute's node type
1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getType(String name)
1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return "CDATA";  // for the moment
1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Look up an attribute's type by Namespace name.
1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param uri The Namespace URI, or the empty String if the
1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *        name has no Namespace URI.
1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param localName The local name of the attribute.
1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The attribute type as a string, or null if the
1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         attribute is not in the list or if Namespace
1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         processing is not being performed.
1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getType(String uri, String localName)
1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return "CDATA";  // for the moment
1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Look up an attribute's value by name.
1869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param name The attribute node's name
1899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The attribute node's value
1919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getValue(String name)
1939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    Attr attr = ((Attr) m_attrs.getNamedItem(name));
1959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return (null != attr)
1969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          ? attr.getValue() : null;
1979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
2009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Look up an attribute's value by Namespace name.
2019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param uri The Namespace URI, or the empty String if the
2039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *        name has no Namespace URI.
2049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param localName The local name of the attribute.
2059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The attribute value as a string, or null if the
2069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         attribute is not in the list.
2079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getValue(String uri, String localName)
2099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
2109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson		Node a=m_attrs.getNamedItemNS(uri,localName);
2119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson		return (a==null) ? null : a.getNodeValue();
2129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
2139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
2159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Look up the index of an attribute by Namespace name.
2169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param uri The Namespace URI, or the empty string if
2189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *        the name has no Namespace URI.
2199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param localPart The attribute's local name.
2209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The index of the attribute, or -1 if it does not
2219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         appear in the list.
2229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public int getIndex(String uri, String localPart)
2249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
2259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    for(int i=m_attrs.getLength()-1;i>=0;--i)
2269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
2279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      Node a=m_attrs.item(i);
2289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      String u=a.getNamespaceURI();
2299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      if( (u==null ? uri==null : u.equals(uri))
2309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson	  &&
2319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson	  a.getLocalName().equals(localPart) )
2329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson	return i;
2339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
2349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return -1;
2359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
2369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
2389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Look up the index of an attribute by raw XML 1.0 name.
2399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param qName The qualified (prefixed) name.
2419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The index of the attribute, or -1 if it does not
2429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         appear in the list.
2439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public int getIndex(String qName)
2459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
2469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    for(int i=m_attrs.getLength()-1;i>=0;--i)
2479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
2489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      Node a=m_attrs.item(i);
2499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      if(a.getNodeName().equals(qName) )
2509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson	return i;
2519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
2529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return -1;
2539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
2549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson}
2559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
256