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: ElemLiteralResult.java 476350 2006-11-17 22:53:23Z minchau $
209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xalan.templates;
229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.util.ArrayList;
249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.util.Iterator;
259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.util.List;
269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.TransformerException;
289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xalan.res.XSLMessages;
309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xalan.res.XSLTErrorResources;
319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xalan.transformer.TransformerImpl;
329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.serializer.SerializationHandler;
339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.utils.StringVector;
349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.XPathContext;
359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.Attr;
369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.DOMException;
379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.Document;
389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.Element;
399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.NamedNodeMap;
409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.Node;
419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.NodeList;
429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.TypeInfo;
439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.UserDataHandler;
449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.xml.sax.SAXException;
459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/**
479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Implement a Literal Result Element.
489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see <a href="http://www.w3.org/TR/xslt#literal-result-element">literal-result-element in XSLT Specification</a>
499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @xsl.usage advanced
509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic class ElemLiteralResult extends ElemUse
529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{
539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    static final long serialVersionUID = -8703409074421657260L;
549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /** The return value as Empty String. */
569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    private static final String EMPTYSTRING = "";
579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Tells if this element represents a root element
609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * that is also the stylesheet element.
619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * TODO: This should be a derived class.
629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @serial
639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private boolean isLiteralResultAsStylesheet = false;
659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Set whether this element represents a root element
689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * that is also the stylesheet element.
699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param b boolean flag indicating whether this element
729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * represents a root element that is also the stylesheet element.
739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void setIsLiteralResultAsStylesheet(boolean b)
759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    isLiteralResultAsStylesheet = b;
779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Return whether this element represents a root element
819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * that is also the stylesheet element.
829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return boolean flag indicating whether this element
859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * represents a root element that is also the stylesheet element.
869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public boolean getIsLiteralResultAsStylesheet()
889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return isLiteralResultAsStylesheet;
909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * This function is called after everything else has been
949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * recomposed, and allows the template to set remaining
959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * values that may be based on some other property that
969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * depends on recomposition.
979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void compose(StylesheetRoot sroot) throws TransformerException
999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    super.compose(sroot);
1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    StylesheetRoot.ComposeState cstate = sroot.getComposeState();
1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    java.util.Vector vnames = cstate.getVariableNames();
1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if (null != m_avts)
1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      int nAttrs = m_avts.size();
1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      for (int i = (nAttrs - 1); i >= 0; i--)
1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      {
1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        AVT avt = (AVT) m_avts.get(i);
1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        avt.fixupVariables(vnames, cstate.getGlobalsSize());
1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      }
1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * The created element node will have the attribute nodes
1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * that were present on the element node in the stylesheet tree,
1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * other than attributes with names in the XSLT namespace.
1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @serial
1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private List m_avts = null;
1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /** List of attributes with the XSLT namespace.
1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *  @serial */
1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private List m_xslAttr = null;
1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Set a literal result attribute (AVTs only).
1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param avt literal result attribute to add (AVT only)
1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void addLiteralResultAttribute(AVT avt)
1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if (null == m_avts)
1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      m_avts = new ArrayList();
1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_avts.add(avt);
1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Set a literal result attribute (used for xsl attributes).
1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param att literal result attribute to add
1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void addLiteralResultAttribute(String att)
1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if (null == m_xslAttr)
1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      m_xslAttr = new ArrayList();
1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_xslAttr.add(att);
1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Set the "xml:space" attribute.
1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * A text node is preserved if an ancestor element of the text node
1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * has an xml:space attribute with a value of preserve, and
1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * no closer ancestor element has xml:space with a value of default.
1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see <a href="http://www.w3.org/TR/xslt#strip">strip in XSLT Specification</a>
1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see <a href="http://www.w3.org/TR/xslt#section-Creating-Text">section-Creating-Text in XSLT Specification</a>
1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param avt  Enumerated value, either Constants.ATTRVAL_PRESERVE
1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * or Constants.ATTRVAL_STRIP.
1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void setXmlSpace(AVT avt)
1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    // This function is a bit-o-hack, I guess...
1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    addLiteralResultAttribute(avt);
1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    String val = avt.getSimpleString();
1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if(val.equals("default"))
1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      super.setXmlSpace(Constants.ATTRVAL_STRIP);
1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    else if(val.equals("preserve"))
1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      super.setXmlSpace(Constants.ATTRVAL_PRESERVE);
1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    // else maybe it's a real AVT, so we can't resolve it at this time.
1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get a literal result attribute by name.
1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param namespaceURI Namespace URI of attribute node to get
1869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param localName Local part of qualified name of attribute node to get
1879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return literal result attribute (AVT)
1899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public AVT getLiteralResultAttributeNS(String namespaceURI, String localName)
1919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if (null != m_avts)
1949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      int nAttrs = m_avts.size();
1969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      for (int i = (nAttrs - 1); i >= 0; i--)
1989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      {
1999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        AVT avt = (AVT) m_avts.get(i);
2009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if (avt.getName().equals(localName) &&
2029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                avt.getURI().equals(namespaceURI))
2039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        {
2049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          return avt;
2059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
2069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      }  // end for
2079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
2089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return null;
2109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
2119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
2139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Return the raw value of the attribute.
2149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param namespaceURI Namespace URI of attribute node to get
2169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param localName Local part of qualified name of attribute node to get
2179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The Attr value as a string, or the empty string if that attribute
2199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * does not have a specified or default value
2209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getAttributeNS(String namespaceURI, String localName)
2229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
2239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    AVT avt = getLiteralResultAttributeNS(namespaceURI, localName);
2259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if ((null != avt))
2279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
2289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      return avt.getSimpleString();
2299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
2309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return EMPTYSTRING;
2329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
2339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
2359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get a literal result attribute by name. The name is namespaceURI:localname
2369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * if namespace is not null.
2379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param name Name of literal result attribute to get
2399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return literal result attribute (AVT)
2419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public AVT getLiteralResultAttribute(String name)
2439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
2449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if (null != m_avts)
2469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
2479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      int nAttrs = m_avts.size();
2489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      String namespace = null;
2499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      for (int i = (nAttrs - 1); i >= 0; i--)
2509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      {
2519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        AVT avt = (AVT) m_avts.get(i);
2529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        namespace = avt.getURI();
2539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if ((namespace != null && (!namespace.equals("")) && (namespace
2559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                +":"+avt.getName()).equals(name))|| ((namespace == null ||
2569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                namespace.equals(""))&& avt.getRawName().equals(name)))
2579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        {
2589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          return avt;
2599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
2609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      }  // end for
2619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
2629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return null;
2649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
2659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
2679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Return the raw value of the attribute.
2689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param namespaceURI:localName or localName if the namespaceURI is null of
2709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * the attribute to get
2719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The Attr value as a string, or the empty string if that attribute
2739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * does not have a specified or default value
2749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getAttribute(String rawName)
2769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
2779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    AVT avt = getLiteralResultAttribute(rawName);
2799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if ((null != avt))
2819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
2829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      return avt.getSimpleString();
2839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
2849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return EMPTYSTRING;
2869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
2879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
2899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get whether or not the passed URL is flagged by
2909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * the "extension-element-prefixes" or "exclude-result-prefixes"
2919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * properties.
2929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see <a href="http://www.w3.org/TR/xslt#extension-element">extension-element in XSLT Specification</a>
2939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param prefix non-null reference to prefix that might be excluded.(not currently used)
2959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param uri reference to namespace that prefix maps to
2969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return true if the prefix should normally be excluded.
2989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public boolean containsExcludeResultPrefix(String prefix, String uri)
3009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
3019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if (uri == null ||
3029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                (null == m_excludeResultPrefixes &&
3039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                 null == m_ExtensionElementURIs)
3049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                )
3059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      return super.containsExcludeResultPrefix(prefix, uri);
3069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if (prefix.length() == 0)
3089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      prefix = Constants.ATTRVAL_DEFAULT_PREFIX;
3099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    // This loop is ok here because this code only runs during
3119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    // stylesheet compile time.
3129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if(m_excludeResultPrefixes!=null)
3139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            for (int i =0; i< m_excludeResultPrefixes.size(); i++)
3149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            {
3159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                if (uri.equals(getNamespaceForPrefix(m_excludeResultPrefixes.elementAt(i))))
3169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                    return true;
3179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            }
3189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        // JJK Bugzilla 1133: Also check locally-scoped extensions
3209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if(m_ExtensionElementURIs!=null && m_ExtensionElementURIs.contains(uri))
3219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson       return true;
3229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        return super.containsExcludeResultPrefix(prefix, uri);
3249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
3259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
3279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Augment resolvePrefixTables, resolving the namespace aliases once
3289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * the superclass has resolved the tables.
3299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
3309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @throws TransformerException
3319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
3329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void resolvePrefixTables() throws TransformerException
3339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
3349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    super.resolvePrefixTables();
3369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    StylesheetRoot stylesheet = getStylesheetRoot();
3389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if ((null != m_namespace) && (m_namespace.length() > 0))
3409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
3419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      NamespaceAlias nsa = stylesheet.getNamespaceAliasComposed(m_namespace);
3429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      if (null != nsa)
3449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      {
3459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        m_namespace = nsa.getResultNamespace();
3469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        // String resultPrefix = nsa.getResultPrefix();
3489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        String resultPrefix = nsa.getStylesheetPrefix();  // As per xsl WG, Mike Kay
3499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if ((null != resultPrefix) && (resultPrefix.length() > 0))
3519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          m_rawName = resultPrefix + ":" + m_localName;
3529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        else
3539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          m_rawName = m_localName;
3549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      }
3559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
3569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if (null != m_avts)
3589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
3599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      int n = m_avts.size();
3609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      for (int i = 0; i < n; i++)
3629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      {
3639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        AVT avt = (AVT) m_avts.get(i);
3649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        // Should this stuff be a method on AVT?
3669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        String ns = avt.getURI();
3679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if ((null != ns) && (ns.length() > 0))
3699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        {
3709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          NamespaceAlias nsa =
3719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            stylesheet.getNamespaceAliasComposed(m_namespace); // %REVIEW% ns?
3729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          if (null != nsa)
3749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
3759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            String namespace = nsa.getResultNamespace();
3769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            // String resultPrefix = nsa.getResultPrefix();
3789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            String resultPrefix = nsa.getStylesheetPrefix();  // As per XSL WG
3799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            String rawName = avt.getName();
3809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            if ((null != resultPrefix) && (resultPrefix.length() > 0))
3829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson              rawName = resultPrefix + ":" + rawName;
3839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            avt.setURI(namespace);
3859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            avt.setRawName(rawName);
3869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
3879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
3889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      }
3899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
3909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
3919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
3939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Return whether we need to check namespace prefixes
3949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * against the exclude result prefixes or extensions lists.
3959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Note that this will create a new prefix table if one
3969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * has not been created already.
3979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
3989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * NEEDSDOC ($objectName$) @return
3999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
4009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  boolean needToCheckExclude()
4019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
4029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if (null == m_excludeResultPrefixes && null == getPrefixTable()
4039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                && m_ExtensionElementURIs==null     // JJK Bugzilla 1133
4049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                )
4059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      return false;
4069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    else
4079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
4089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
4099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      // Create a new prefix table if one has not already been created.
4109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      if (null == getPrefixTable())
4119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        setPrefixTable(new java.util.ArrayList());
4129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
4139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      return true;
4149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
4159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
4169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
4179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
4189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * The namespace of the element to be created.
4199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @serial
4209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
4219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private String m_namespace;
4229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
4239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
4249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Set the namespace URI of the result element to be created.
4259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Note that after resolvePrefixTables has been called, this will
4269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * return the aliased result namespace, not the original stylesheet
4279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * namespace.
4289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
4299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param ns The Namespace URI, or the empty string if the
4309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *        element has no Namespace URI.
4319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
4329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void setNamespace(String ns)
4339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
4349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if(null == ns) // defensive, shouldn't have to do this.
4359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      ns = "";
4369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_namespace = ns;
4379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
4389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
4399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
4409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the original namespace of the Literal Result Element.
4419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
4429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * %REVIEW% Why isn't this overriding the getNamespaceURI method
4439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * rather than introducing a new one?
4449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
4459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The Namespace URI, or the empty string if the
4469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *        element has no Namespace URI.
4479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
4489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getNamespace()
4499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
4509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return m_namespace;
4519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
4529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
4539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
4549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * The local name of the element to be created.
4559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @serial
4569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
4579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private String m_localName;
4589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
4599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
4609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Set the local name of the LRE.
4619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
4629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param localName The local name (without prefix) of the result element
4639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *                  to be created.
4649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
4659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void setLocalName(String localName)
4669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
4679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_localName = localName;
4689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
4699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
4709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
4719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the local name of the Literal Result Element.
4729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Note that after resolvePrefixTables has been called, this will
4739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * return the aliased name prefix, not the original stylesheet
4749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * namespace prefix.
4759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
4769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The local name (without prefix) of the result element
4779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *                  to be created.
4789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
4799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getLocalName()
4809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
4819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return m_localName;
4829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
4839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
4849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
4859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * The raw name of the element to be created.
4869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @serial
4879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
4889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private String m_rawName;
4899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
4909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
4919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Set the raw name of the LRE.
4929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
4939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param rawName The qualified name (with prefix), or the
4949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *        empty string if qualified names are not available.
4959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
4969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void setRawName(String rawName)
4979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
4989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_rawName = rawName;
4999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
5009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
5019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
5029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the raw name of the Literal Result Element.
5039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
5049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return  The qualified name (with prefix), or the
5059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *        empty string if qualified names are not available.
5069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
5079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getRawName()
5089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
5099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return m_rawName;
5109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
5119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
5129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /**
5139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the prefix part of the raw name of the Literal Result Element.
5149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
5159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The prefix, or the empty string if noprefix was provided.
5169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
5179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getPrefix()
5189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
5199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        int len=m_rawName.length()-m_localName.length()-1;
5209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return (len>0)
5219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            ? m_rawName.substring(0,len)
5229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            : "";
5239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
5249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
5259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
5269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
5279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * The "extension-element-prefixes" property, actually contains URIs.
5289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @serial
5299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
5309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private StringVector m_ExtensionElementURIs;
5319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
5329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
5339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Set the "extension-element-prefixes" property.
5349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see <a href="http://www.w3.org/TR/xslt#extension-element">extension-element in XSLT Specification</a>
5359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
5369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param v Vector of URIs (not prefixes) to set as the "extension-element-prefixes" property
5379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
5389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void setExtensionElementPrefixes(StringVector v)
5399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
5409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_ExtensionElementURIs = v;
5419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
5429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
5439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
5449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see org.w3c.dom.Node
5459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
5469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return NamedNodeMap
5479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
5489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public NamedNodeMap getAttributes()
5499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
5509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        return new LiteralElementAttributes();
5519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
5529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
5539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public class LiteralElementAttributes implements NamedNodeMap{
5549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          private int m_count = -1;
5559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
5569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
5579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * Construct a NameNodeMap.
5589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
5599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
5609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public LiteralElementAttributes(){
5619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
5629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
5639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
5649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * Return the number of Attributes on this Element
5659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
5669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return The number of nodes in this map. The range of valid child
5679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * node indices is <code>0</code> to <code>length-1</code> inclusive
5689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
5699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public int getLength()
5709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
5719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            if (m_count == -1)
5729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            {
5739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson               if (null != m_avts) m_count = m_avts.size();
5749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson               else m_count = 0;
5759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            }
5769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            return m_count;
5779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
5789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
5799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
5809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * Retrieves a node specified by name.
5819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @param name The <code>nodeName</code> of a node to retrieve.
5829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return A <code>Node</code> (of any type) with the specified
5839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *   <code>nodeName</code>, or <code>null</code> if it does not
5849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *   identify any node in this map.
5859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
5869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public Node getNamedItem(String name)
5879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
5889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                if (getLength() == 0) return null;
5899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                String uri = null;
5909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                String localName = name;
5919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                int index = name.indexOf(":");
5929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                if (-1 != index){
5939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                         uri = name.substring(0, index);
5949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                         localName = name.substring(index+1);
5959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                }
5969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                Node retNode = null;
5979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                Iterator eum = m_avts.iterator();
5989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                while (eum.hasNext()){
5999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                        AVT avt = (AVT) eum.next();
6009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                        if (localName.equals(avt.getName()))
6019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                        {
6029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                          String nsURI = avt.getURI();
6039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                          if ((uri == null && nsURI == null)
6049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                            || (uri != null && uri.equals(nsURI)))
6059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                          {
6069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                            retNode = new Attribute(avt, ElemLiteralResult.this);
6079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                            break;
6089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                          }
6099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                        }
6109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                }
6119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                return retNode;
6129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
6139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
6149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
6159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * Retrieves a node specified by local name and namespace URI.
6169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @param namespaceURI Namespace URI of attribute node to get
6179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @param localName Local part of qualified name of attribute node to
6189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * get
6199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return A <code>Node</code> (of any type) with the specified
6209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *   <code>nodeName</code>, or <code>null</code> if it does not
6219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *   identify any node in this map.
6229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
6239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public Node getNamedItemNS(String namespaceURI, String localName)
6249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
6259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  if (getLength() == 0) return null;
6269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  Node retNode = null;
6279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  Iterator eum = m_avts.iterator();
6289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  while (eum.hasNext())
6299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  {
6309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                    AVT avt = (AVT) eum.next();
6319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                    if (localName.equals(avt.getName()))
6329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                    {
6339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                      String nsURI = avt.getURI();
6349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                      if ((namespaceURI == null && nsURI == null)
6359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                        || (namespaceURI != null && namespaceURI.equals(nsURI)))
6369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                      {
6379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                        retNode = new Attribute(avt, ElemLiteralResult.this);
6389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                        break;
6399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                      }
6409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                    }
6419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  }
6429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return retNode;
6439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
6449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
6459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
6469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * Returns the <code>index</code>th item in the map. If <code>index
6479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * </code> is greater than or equal to the number of nodes in this
6489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * map, this returns <code>null</code>.
6499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @param i The index of the requested item.
6509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return The node at the <code>index</code>th position in the map,
6519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *   or <code>null</code> if that is not a valid index.
6529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
6539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public Node item(int i)
6549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
6559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                if (getLength() == 0 || i >= m_avts.size()) return null;
6569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                else return
6579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                    new Attribute(((AVT)m_avts.get(i)),
6589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                        ElemLiteralResult.this);
6599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
6609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
6619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
6629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.NamedNodeMap
6639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
6649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @param name of the node to remove
6659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
6669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return The node removed from this map if a node with such
6679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * a name exists.
6689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
6699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @throws DOMException
6709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
6719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public Node removeNamedItem(String name) throws DOMException
6729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
6739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR,
6749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                      XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR);
6759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return null;
6769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
6779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
6789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
6799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.NamedNodeMap
6809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
6819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @param namespaceURI Namespace URI of the node to remove
6829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @param localName Local part of qualified name of the node to remove
6839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
6849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return The node removed from this map if a node with such a local
6859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *  name and namespace URI exists
6869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
6879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @throws DOMException
6889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
6899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public Node removeNamedItemNS(String namespaceURI, String localName)
6909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                throws DOMException
6919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
6929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR,
6939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                      XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR);
6949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return null;
6959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
6969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
6979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
6989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * Unimplemented. See org.w3c.dom.NamedNodeMap
6999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
7009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @param A node to store in this map
7019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
7029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return If the new Node replaces an existing node the replaced
7039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * Node is returned, otherwise null is returned
7049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
7059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @throws DOMException
7069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
7079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public Node setNamedItem(Node arg) throws DOMException
7089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
7099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR,
7109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                      XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR);
7119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return null;
7129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
7139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
7149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
7159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * Unimplemented. See org.w3c.dom.NamedNodeMap
7169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
7179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @param A node to store in this map
7189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
7199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return If the new Node replaces an existing node the replaced
7209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * Node is returned, otherwise null is returned
7219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
7229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @throws DOMException
7239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
7249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public Node setNamedItemNS(Node arg) throws DOMException
7259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
7269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR,
7279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                      XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR);
7289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return null;
7299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
7309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
7319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
7329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public class Attribute implements Attr{
7339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          private AVT m_attribute;
7349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          private Element m_owner = null;
7359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
7369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * Construct a Attr.
7379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
7389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
7399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public Attribute(AVT avt, Element elem){
7409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                m_attribute = avt;
7419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                m_owner = elem;
7429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
7439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
7449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
7459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
7469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
7479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @param newChild New node to append to the list of this node's
7489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * children
7499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
7509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
7519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @throws DOMException
7529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
7539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public Node appendChild(Node newChild) throws DOMException
7549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
7559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR,
7569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                      XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR);
7579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return null;
7589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
7599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
7609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
7619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
7629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
7639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @param deep Flag indicating whether to clone deep
7649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * (clone member variables)
7659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
7669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return Returns a duplicate of this node
7679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
7689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public Node cloneNode(boolean deep)
7699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
7709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return new Attribute(m_attribute, m_owner);
7719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
7729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
7739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
7749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
7759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
7769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return null
7779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
7789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public NamedNodeMap getAttributes()
7799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
7809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            return null;
7819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
7829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
7839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
7849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
7859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
7869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return a NodeList containing no nodes.
7879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
7889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public NodeList getChildNodes()
7899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
7909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return new NodeList(){
7919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                          public int getLength(){
7929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                                  return 0;
7939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                          }
7949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                          public Node item(int index){
7959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                                  return null;
7969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                          }
7979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  };
7989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
7999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
8009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
8019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
8029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
8039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return null
8049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
8059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public Node getFirstChild()
8069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
8079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return null;
8089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
8099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
8109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
8119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
8129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
8139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return null
8149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
8159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public Node getLastChild()
8169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
8179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return null;
8189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
8199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
8209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
8219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
8229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
8239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return the local part of the qualified name of this node
8249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
8259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public String getLocalName()
8269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
8279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return m_attribute.getName();
8289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
8299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
8309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
8319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
8329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
8339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return The namespace URI of this node, or null if it is
8349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * unspecified
8359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
8369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public String getNamespaceURI()
8379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
8389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  String uri = m_attribute.getURI();
8399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return (uri.equals(""))?null:uri;
8409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
8419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
8429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
8439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
8449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
8459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return null
8469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
8479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public Node getNextSibling()
8489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
8499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                return null;
8509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
8519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
8529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
8539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
8549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
8559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return The name of the attribute
8569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
8579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public String getNodeName()
8589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
8599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  String uri = m_attribute.getURI();
8609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  String localName = getLocalName();
8619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return (uri.equals(""))?localName:uri+":"+localName;
8629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
8639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
8649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
8659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
8669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
8679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return The node is an Attr
8689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
8699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public short getNodeType()
8709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
8719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return ATTRIBUTE_NODE;
8729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
8739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
8749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
8759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
8769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
8779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return The value of the attribute
8789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
8799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @throws DOMException
8809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
8819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public String getNodeValue() throws DOMException
8829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
8839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return m_attribute.getSimpleString();
8849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
8859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
8869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
8879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
8889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
8899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return null
8909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
8919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public Document getOwnerDocument()
8929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
8939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            return m_owner.getOwnerDocument();
8949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
8959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
8969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
8979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
8989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
8999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return the containing element node
9009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
9019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public Node getParentNode()
9029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
9039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return m_owner;
9049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
9059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
9069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
9079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
9089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
9099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return The namespace prefix of this node, or null if it is
9109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * unspecified
9119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
9129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public String getPrefix()
9139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
9149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  String uri = m_attribute.getURI();
9159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  String rawName = m_attribute.getRawName();
9169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return (uri.equals(""))?
9179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                        null:rawName.substring(0, rawName.indexOf(":"));
9189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
9199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
9209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
9219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
9229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
9239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return null
9249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
9259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public Node getPreviousSibling()
9269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
9279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return null;
9289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
9299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
9309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
9319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
9329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
9339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return false
9349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
9359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public boolean hasAttributes()
9369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
9379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return false;
9389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
9399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
9409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
9419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
9429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
9439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return false
9449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
9459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public boolean hasChildNodes()
9469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
9479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return false;
9489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
9499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
9509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
9519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
9529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
9539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @param newChild New child node to insert
9549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @param refChild Insert in front of this child
9559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
9569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return null
9579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
9589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @throws DOMException
9599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
9609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public Node insertBefore(Node newChild, Node refChild)
9619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                throws DOMException
9629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
9639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR,
9649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                      XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR);
9659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return null;
9669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
9679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
9689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
9699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
9709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
9719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return Returns <code>false</code>
9729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @since DOM Level 2
9739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
9749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public boolean isSupported(String feature, String version)
9759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
9769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            return false;
9779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
9789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
9799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /** @see org.w3c.dom.Node */
9809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public void normalize(){}
9819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
9829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
9839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
9849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
9859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @param oldChild Child to be removed
9869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
9879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return null
9889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
9899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @throws DOMException
9909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
9919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public Node removeChild(Node oldChild) throws DOMException
9929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
9939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR,
9949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                      XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR);
9959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return null;
9969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
9979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
9989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
9999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
10009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
10019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @param newChild Replace existing child with this one
10029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @param oldChild Existing child to be replaced
10039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
10049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return null
10059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
10069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @throws DOMException
10079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
10089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public Node replaceChild(Node newChild, Node oldChild) throws DOMException
10099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
10109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR,
10119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                      XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR);
10129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return null;
10139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
10149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
10159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
10169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
10179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
10189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @param nodeValue Value to set this node to
10199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
10209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @throws DOMException
10219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
10229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public void setNodeValue(String nodeValue) throws DOMException
10239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
10249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR,
10259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                      XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR);
10269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
10279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
10289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
10299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Node
10309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
10319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @param prefix Prefix to set for this node
10329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
10339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @throws DOMException
10349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
10359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public void setPrefix(String prefix) throws DOMException
10369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
10379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR,
10389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                      XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR);
10399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
10409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
10419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
10429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
10439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return The name of this attribute
10449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
10459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public String getName(){
10469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return m_attribute.getName();
10479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
10489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
10499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
10509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
10519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return The value of this attribute returned as string
10529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
10539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public String getValue(){
10549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return m_attribute.getSimpleString();
10559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
10569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
10579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
10589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
10599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return The Element node this attribute is attached to
10609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * or null if this attribute is not in use
10619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
10629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public Element getOwnerElement(){
10639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return m_owner;
10649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
10659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
10669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
10679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
10689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @return true
10699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
10709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public boolean getSpecified(){
10719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                  return true;
10729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
10739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
10749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          /**
10759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @see org.w3c.dom.Attr
10769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
10779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @param value Value to set this node to
10789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           *
10799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           * @throws DOMException
10809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           */
10819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public void setValue(String value) throws DOMException
10829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          {
10839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR,
10849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR);
10859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
10869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
10879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 	  public TypeInfo getSchemaTypeInfo() { return null; }
10889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
10899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	  public boolean isId( ) { return false; }
10909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
10919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	  public Object setUserData(String key,
10929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                                    Object data,
10939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                                    UserDataHandler handler) {
10949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        	return getOwnerDocument().setUserData( key, data, handler);
10959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	  }
10969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
10979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	  public Object getUserData(String key) {
10989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        	return getOwnerDocument().getUserData( key);
10999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	  }
11009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
11019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	  public Object getFeature(String feature, String version) {
11029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        	return isSupported(feature, version) ? this : null;
11039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   	  }
11049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
11059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public boolean isEqualNode(Node arg) {
11069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          	return arg == this;
11079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
11089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
11099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public String lookupNamespaceURI(String specifiedPrefix) {
11109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson             	return null;
11119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
11129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
11139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public boolean isDefaultNamespace(String namespaceURI) {
11149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            	return false;
11159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          }
11169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
11179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson	  public String lookupPrefix(String namespaceURI) {
11189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson	    	return null;
11199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson	  }
11209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
11219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	  public boolean isSameNode(Node other) {
11229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        	// we do not use any wrapper so the answer is obvious
11239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        	return this == other;
11249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	  }
11259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
11269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	  public void setTextContent(String textContent)
11279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        	throws DOMException {
11289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        	setNodeValue(textContent);
11299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	  }
11309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
11319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	  public String getTextContent() throws DOMException {
11329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            	return getNodeValue();  // overriden in some subclasses
11339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   	  }
11349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
11359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    	  public short compareDocumentPosition(Node other) throws DOMException {
11369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            	return 0;
11379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    	  }
11389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
11399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          public String getBaseURI() {
11409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            	return null;
11419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    	  }
11429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
11439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
11449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
11459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get an "extension-element-prefix" property.
11469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see <a href="http://www.w3.org/TR/xslt#extension-element">extension-element in XSLT Specification</a>
11479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
11489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param i Index of URI ("extension-element-prefix" property) to get
11499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
11509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return URI at given index ("extension-element-prefix" property)
11519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
11529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @throws ArrayIndexOutOfBoundsException
11539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
11549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getExtensionElementPrefix(int i)
11559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          throws ArrayIndexOutOfBoundsException
11569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
11579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
11589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if (null == m_ExtensionElementURIs)
11599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      throw new ArrayIndexOutOfBoundsException();
11609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
11619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return m_ExtensionElementURIs.elementAt(i);
11629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
11639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
11649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
11659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the number of "extension-element-prefixes" Strings.
11669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see <a href="http://www.w3.org/TR/xslt#extension-element">extension-element in XSLT Specification</a>
11679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
11689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return the number of "extension-element-prefixes" Strings
11699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
11709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public int getExtensionElementPrefixCount()
11719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
11729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return (null != m_ExtensionElementURIs)
11739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           ? m_ExtensionElementURIs.size() : 0;
11749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
11759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
11769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
11779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Find out if the given "extension-element-prefix" property is defined.
11789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see <a href="http://www.w3.org/TR/xslt#extension-element">extension-element in XSLT Specification</a>
11799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
11809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param uri The URI to find
11819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
11829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return True if the given URI is found
11839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
11849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public boolean containsExtensionElementURI(String uri)
11859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
11869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
11879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if (null == m_ExtensionElementURIs)
11889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      return false;
11899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
11909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return m_ExtensionElementURIs.contains(uri);
11919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
11929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
11939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
11949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get an int constant identifying the type of element.
11959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see org.apache.xalan.templates.Constants
11969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
11979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The token ID for this element
11989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
11999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public int getXSLToken()
12009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
12019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return Constants.ELEMNAME_LITERALRESULT;
12029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
12039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
12049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
12059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Return the node name.
12069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
12079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The element's name
12089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
12099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getNodeName()
12109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
12119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
12129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    // TODO: Need prefix.
12139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return m_rawName;
12149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
12159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
12169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
12179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * The XSLT version as specified by this element.
12189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @serial
12199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
12209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private String m_version;
12219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
12229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
12239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Set the "version" property.
12249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see <a href="http://www.w3.org/TR/xslt#forwards">forwards in XSLT Specification</a>
12259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
12269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param v Version property value to set
12279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
12289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void setVersion(String v)
12299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
12309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_version = v;
12319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
12329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
12339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
12349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the "version" property.
12359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see <a href="http://www.w3.org/TR/xslt#forwards">forwards in XSLT Specification</a>
12369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
12379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return Version property value
12389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
12399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getVersion()
12409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
12419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return m_version;
12429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
12439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
12449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
12459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * The "exclude-result-prefixes" property.
12469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @serial
12479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
12489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private StringVector m_excludeResultPrefixes;
12499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
12509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
12519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Set the "exclude-result-prefixes" property.
12529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * The designation of a namespace as an excluded namespace is
12539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * effective within the subtree of the stylesheet rooted at
12549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * the element bearing the exclude-result-prefixes or
12559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * xsl:exclude-result-prefixes attribute; a subtree rooted
12569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * at an xsl:stylesheet element does not include any stylesheets
12579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * imported or included by children of that xsl:stylesheet element.
12589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see <a href="http://www.w3.org/TR/xslt#literal-result-element">literal-result-element in XSLT Specification</a>
12599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
12609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param v vector of prefixes that are resolvable to strings.
12619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
12629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void setExcludeResultPrefixes(StringVector v)
12639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
12649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_excludeResultPrefixes = v;
12659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
12669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
12679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
12689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Tell if the result namespace decl should be excluded.  Should be called before
12699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * namespace aliasing (I think).
12709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
12719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param prefix Prefix of namespace to check
12729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param uri URI of namespace to check
12739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
12749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return True if the given namespace should be excluded
12759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
12769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @throws TransformerException
12779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
12789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private boolean excludeResultNSDecl(String prefix, String uri)
12799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          throws TransformerException
12809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
12819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
12829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if (null != m_excludeResultPrefixes)
12839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
12849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      return containsExcludeResultPrefix(prefix, uri);
12859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
12869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
12879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return false;
12889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
12899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
12909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
12919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Copy a Literal Result Element into the Result tree, copy the
12929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * non-excluded namespace attributes, copy the attributes not
12939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * of the XSLT namespace, and execute the children of the LRE.
12949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see <a href="http://www.w3.org/TR/xslt#literal-result-element">literal-result-element in XSLT Specification</a>
12959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
12969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param transformer non-null reference to the the current transform-time state.
12979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
12989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @throws TransformerException
12999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
13009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public void execute(TransformerImpl transformer)
13019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        throws TransformerException
13029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
13039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        SerializationHandler rhandler = transformer.getSerializationHandler();
13049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
13059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        try
13069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        {
13079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
13089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            // JJK Bugzilla 3464, test namespace85 -- make sure LRE's
13099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            // namespace is asserted even if default, since xsl:element
13109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            // may have changed the context.
13119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            rhandler.startPrefixMapping(getPrefix(), getNamespace());
13129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
13139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            // Add namespace declarations.
13149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            executeNSDecls(transformer);
13159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            rhandler.startElement(getNamespace(), getLocalName(), getRawName());
13169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
13179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        catch (SAXException se)
13189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        {
13199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            throw new TransformerException(se);
13209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
13219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
13229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        /*
13239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson         * If we make it to here we have done a successful startElement()
13249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson         * we will do an endElement() call for balance, no matter what happens
13259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson         * in the middle.
13269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson         */
13279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
13289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        // tException remembers if we had an exception "in the middle"
13299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        TransformerException tException = null;
13309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        try
13319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        {
13329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
13339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            // Process any possible attributes from xsl:use-attribute-sets first
13349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            super.execute(transformer);
13359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
13369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            //xsl:version, excludeResultPrefixes???
13379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            // Process the list of avts next
13389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            if (null != m_avts)
13399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            {
13409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                int nAttrs = m_avts.size();
13419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
13429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                for (int i = (nAttrs - 1); i >= 0; i--)
13439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                {
13449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                    AVT avt = (AVT) m_avts.get(i);
13459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                    XPathContext xctxt = transformer.getXPathContext();
13469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                    int sourceNode = xctxt.getCurrentNode();
13479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                    String stringedValue =
13489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                        avt.evaluate(xctxt, sourceNode, this);
13499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
13509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                    if (null != stringedValue)
13519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                    {
13529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
13539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                        // Important Note: I'm not going to check for excluded namespace
13549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                        // prefixes here.  It seems like it's too expensive, and I'm not
13559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                        // even sure this is right.  But I could be wrong, so this needs
13569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                        // to be tested against other implementations.
13579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
13589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                        rhandler.addAttribute(
13599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                            avt.getURI(),
13609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                            avt.getName(),
13619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                            avt.getRawName(),
13629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                            "CDATA",
13639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                            stringedValue, false);
13649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                    }
13659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                } // end for
13669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            }
13679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
13689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            // Now process all the elements in this subtree
13699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            // TODO: Process m_extensionElementPrefixes && m_attributeSetsNames
13709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            transformer.executeChildTemplates(this, true);
13719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
13729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        catch (TransformerException te)
13739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        {
13749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            // thrown in finally to prevent original exception consumed by subsequent exceptions
13759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            tException = te;
13769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
13779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        catch (SAXException se)
13789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        {
13799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            tException = new TransformerException(se);
13809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
13819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
13829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        try
13839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        {
13849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            /* we need to do this endElement() to balance the
13859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson             * successful startElement() call even if
13869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson             * there was an exception in the middle.
13879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson             * Otherwise an exception in the middle could cause a system to hang.
13889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson             */
13899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            rhandler.endElement(getNamespace(), getLocalName(), getRawName());
13909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
13919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        catch (SAXException se)
13929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        {
13939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            /* we did call endElement(). If thee was an exception
13949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson             * in the middle throw that one, otherwise if there
13959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson             * was an exception from endElement() throw that one.
13969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson             */
13979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            if (tException != null)
13989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                throw tException;
13999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            else
14009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                throw new TransformerException(se);
14019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
14029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
14039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        /* If an exception was thrown in the middle but not with startElement() or
14049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson         * or endElement() then its time to let it percolate.
14059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson         */
14069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if (tException != null)
14079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            throw tException;
14089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
14099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        unexecuteNSDecls(transformer);
14109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
14119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        // JJK Bugzilla 3464, test namespace85 -- balance explicit start.
14129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        try
14139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        {
14149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            rhandler.endPrefixMapping(getPrefix());
14159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
14169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        catch (SAXException se)
14179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        {
14189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson            throw new TransformerException(se);
14199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
14209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
14219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
14229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
14239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Compiling templates requires that we be able to list the AVTs
14249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * ADDED 9/5/2000 to support compilation experiment
14259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
14269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return an Enumeration of the literal result attributes associated
14279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * with this element.
14289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
14299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public Iterator enumerateLiteralResultAttributes()
14309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
14319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return (null == m_avts) ? null : m_avts.iterator();
14329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
14339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
14349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
14359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Accept a visitor and call the appropriate method
14369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * for this class.
14379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     *
14389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @param visitor The visitor whose appropriate method will be called.
14399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @return true if the children of the object should be visited.
14409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
14419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    protected boolean accept(XSLTVisitor visitor)
14429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
14439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      return visitor.visitLiteralResultElement(this);
14449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
14459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
14469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
14479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Call the children visitors.
14489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @param visitor The visitor whose appropriate method will be called.
14499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
14509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    protected void callChildVisitors(XSLTVisitor visitor, boolean callAttrs)
14519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
14529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      if (callAttrs && null != m_avts)
14539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      {
14549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        int nAttrs = m_avts.size();
14559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
14569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        for (int i = (nAttrs - 1); i >= 0; i--)
14579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        {
14589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          AVT avt = (AVT) m_avts.get(i);
14599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          avt.callVisitors(visitor);
14609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        }
14619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      }
14629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      super.callChildVisitors(visitor, callAttrs);
14639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
14649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
14659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
14669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Throw a DOMException
14679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     *
14689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @param msg key of the error that occured.
14699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
14709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public void throwDOMException(short code, String msg)
14719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
14729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
14739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      String themsg = XSLMessages.createMessage(msg, null);
14749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
14759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      throw new DOMException(code, themsg);
14769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
14779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
14789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson}
1479