/*
 * (C) Copyright Keith Visco 1998, 1999 All rights reserved.
 *
 * The contents of this file are released under an Open Source Definition (OSD) compliant license;
 * you may not use this file execpt in compliance with the license. Please see license.txt,
 * distributed with this file. You may also obtain a copy of the license at
 * http://www.clc-marketing.com/xslp/license.txt
 *
 * The program is provided "as is" without any warranty express or implied, including the warranty
 * of non-infringement and the implied warranties of merchantibility and fitness for a particular
 * purpose. The Copyright owner will not be liable for any damages suffered by you as a result of
 * using the Program. In no event will the Copyright owner be liable for any special, indirect or
 * consequential damages or lost profits even if the Copyright owner has been advised of the
 * possibility of their occurrence.
 *
 * The orginal source for this file is XSL:P
 *
 * $Id$
 */
package org.exolab.castor.xml.util;

import org.w3c.dom.Attr;
import org.w3c.dom.NamedNodeMap;
import org.xml.sax.AttributeList;

/**
 * A class which implements AttributeList by "wrapping" a DOM NamedNodeMap. XSLReader when reading
 * an XSLT stylsheet.
 *
 * @author <a href="mailto:kvisco@ziplink.net">Keith Visco</a>
 * @version $Revision$ $Date: 2003-03-03 00:05:44 -0700 (Mon, 03 Mar 2003) $
 */
public class AttributeListWrapper implements AttributeList {

  NamedNodeMap _map = null;

  public AttributeListWrapper(NamedNodeMap namedNodeMap) {
    _map = namedNodeMap;
  } // -- AtrributeListWrapper

  // -----------------------------/
  // - org.xml.sax.AttributeList -/
  // -----------------------------/

  /**
   * Returns the number of attributes in the list.
   *
   * @return The number of attributes in the list.
   */
  public int getLength() {
    if (_map == null) {
      return 0;
    }
    return _map.getLength();
  } // -- getLength

  /**
   * Returns the name of the attribute at the given index.
   *
   * @param i The position of the attribute in the list.
   * @return The attribute name as a string, or null if there is no attribute at that position.
   */
  public String getName(final int i) {
    if (_map != null) {
      Attr attr = (Attr) _map.item(i);
      return attr.getName();
    }
    return null;
  } // -- getName

  /**
   * Returns the type of the attribute at the specified index.
   *
   * @param i The position of the attribute in the list.
   * @return The attribute type as a string ("NMTOKEN" for an enumeration, and "CDATA" if no
   *         declaration was read), or null if there is no attribute at that position. <br/>
   *         <b>Note:</b> Not supported, will simply return null.
   */
  public String getType(final int i) {
    return null;
  } // -- getType

  /**
   * Return the value of the attribute at the specified index
   *
   * @param i The position of the attribute in the list.
   * @return The attribute value as a string, or null if there is no attribute at that position.
   */
  public String getValue(final int i) {
    if (_map != null) {
      Attr attr = (Attr) _map.item(i);
      return attr.getValue();
    }
    return null;
  } // -- getValue

  /**
   * Return the type of the attribute with the given name.
   *
   * @param name The attribute name.
   * @return The attribute type as a string ("NMTOKEN" for an enumeration, and "CDATA" if no
   *         declaration was read). <br/>
   *         <b>Note:</b> Not supported, will simply return null.
   */
  public String getType(final String name) {
    return null;
  } // -- getType

  /**
   * Get the value of an attribute (by name).
   *
   * @param name The attribute name.
   * @see org.xml.sax.AttributeList#getValue(java.lang.String)
   */
  public String getValue(final String name) {
    if (_map != null) {
      Attr attr = (Attr) _map.getNamedItem(name);
      if (attr != null) {
        return attr.getValue();
      }
    }
    return null;
  } // -- getValue

} // -- AttributeListWrapper
