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