<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    /*<a name="line.1"></a>
<FONT color="green">002</FONT>     * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<FONT color="green">003</FONT>     * or more contributor license agreements. See the NOTICE file<a name="line.3"></a>
<FONT color="green">004</FONT>     * distributed with this work for additional information<a name="line.4"></a>
<FONT color="green">005</FONT>     * regarding copyright ownership. The ASF licenses this file<a name="line.5"></a>
<FONT color="green">006</FONT>     * to you under the Apache License, Version 2.0 (the  "License");<a name="line.6"></a>
<FONT color="green">007</FONT>     * you may not use this file except in compliance with the License.<a name="line.7"></a>
<FONT color="green">008</FONT>     * You may obtain a copy of the License at<a name="line.8"></a>
<FONT color="green">009</FONT>     *<a name="line.9"></a>
<FONT color="green">010</FONT>     *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<FONT color="green">011</FONT>     *<a name="line.11"></a>
<FONT color="green">012</FONT>     * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
<FONT color="green">013</FONT>     * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
<FONT color="green">014</FONT>     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
<FONT color="green">015</FONT>     * See the License for the specific language governing permissions and<a name="line.15"></a>
<FONT color="green">016</FONT>     * limitations under the License.<a name="line.16"></a>
<FONT color="green">017</FONT>     */<a name="line.17"></a>
<FONT color="green">018</FONT>    /*<a name="line.18"></a>
<FONT color="green">019</FONT>     * $Id: ElemLiteralResult.java 1225375 2011-12-28 23:03:43Z mrglavas $<a name="line.19"></a>
<FONT color="green">020</FONT>     */<a name="line.20"></a>
<FONT color="green">021</FONT>    package org.apache.xalan.templates;<a name="line.21"></a>
<FONT color="green">022</FONT>    <a name="line.22"></a>
<FONT color="green">023</FONT>    import java.util.ArrayList;<a name="line.23"></a>
<FONT color="green">024</FONT>    import java.util.Iterator;<a name="line.24"></a>
<FONT color="green">025</FONT>    import java.util.List;<a name="line.25"></a>
<FONT color="green">026</FONT>    <a name="line.26"></a>
<FONT color="green">027</FONT>    import javax.xml.transform.TransformerException;<a name="line.27"></a>
<FONT color="green">028</FONT>    <a name="line.28"></a>
<FONT color="green">029</FONT>    import org.apache.xalan.res.XSLMessages;<a name="line.29"></a>
<FONT color="green">030</FONT>    import org.apache.xalan.res.XSLTErrorResources;<a name="line.30"></a>
<FONT color="green">031</FONT>    import org.apache.xalan.transformer.TransformerImpl;<a name="line.31"></a>
<FONT color="green">032</FONT>    import org.apache.xml.serializer.SerializationHandler;<a name="line.32"></a>
<FONT color="green">033</FONT>    import org.apache.xml.utils.StringVector;<a name="line.33"></a>
<FONT color="green">034</FONT>    import org.apache.xpath.XPathContext;<a name="line.34"></a>
<FONT color="green">035</FONT>    import org.w3c.dom.Attr;<a name="line.35"></a>
<FONT color="green">036</FONT>    import org.w3c.dom.DOMException;<a name="line.36"></a>
<FONT color="green">037</FONT>    import org.w3c.dom.Document;<a name="line.37"></a>
<FONT color="green">038</FONT>    import org.w3c.dom.Element;<a name="line.38"></a>
<FONT color="green">039</FONT>    import org.w3c.dom.NamedNodeMap;<a name="line.39"></a>
<FONT color="green">040</FONT>    import org.w3c.dom.Node;<a name="line.40"></a>
<FONT color="green">041</FONT>    import org.w3c.dom.NodeList;<a name="line.41"></a>
<FONT color="green">042</FONT>    import org.w3c.dom.TypeInfo;<a name="line.42"></a>
<FONT color="green">043</FONT>    import org.w3c.dom.UserDataHandler;<a name="line.43"></a>
<FONT color="green">044</FONT>    import org.xml.sax.SAXException;<a name="line.44"></a>
<FONT color="green">045</FONT>    <a name="line.45"></a>
<FONT color="green">046</FONT>    /**<a name="line.46"></a>
<FONT color="green">047</FONT>     * Implement a Literal Result Element.<a name="line.47"></a>
<FONT color="green">048</FONT>     * @see &lt;a href="http://www.w3.org/TR/xslt#literal-result-element"&gt;literal-result-element in XSLT Specification&lt;/a&gt;<a name="line.48"></a>
<FONT color="green">049</FONT>     * @xsl.usage advanced<a name="line.49"></a>
<FONT color="green">050</FONT>     */<a name="line.50"></a>
<FONT color="green">051</FONT>    public class ElemLiteralResult extends ElemUse<a name="line.51"></a>
<FONT color="green">052</FONT>    {<a name="line.52"></a>
<FONT color="green">053</FONT>        static final long serialVersionUID = -8703409074421657260L;<a name="line.53"></a>
<FONT color="green">054</FONT>    <a name="line.54"></a>
<FONT color="green">055</FONT>        /** The return value as Empty String. */<a name="line.55"></a>
<FONT color="green">056</FONT>        private static final String EMPTYSTRING = "";<a name="line.56"></a>
<FONT color="green">057</FONT>    <a name="line.57"></a>
<FONT color="green">058</FONT>      /**<a name="line.58"></a>
<FONT color="green">059</FONT>       * Tells if this element represents a root element<a name="line.59"></a>
<FONT color="green">060</FONT>       * that is also the stylesheet element.<a name="line.60"></a>
<FONT color="green">061</FONT>       * TODO: This should be a derived class.<a name="line.61"></a>
<FONT color="green">062</FONT>       * @serial<a name="line.62"></a>
<FONT color="green">063</FONT>       */<a name="line.63"></a>
<FONT color="green">064</FONT>      private boolean isLiteralResultAsStylesheet = false;<a name="line.64"></a>
<FONT color="green">065</FONT>    <a name="line.65"></a>
<FONT color="green">066</FONT>      /**<a name="line.66"></a>
<FONT color="green">067</FONT>       * Set whether this element represents a root element<a name="line.67"></a>
<FONT color="green">068</FONT>       * that is also the stylesheet element.<a name="line.68"></a>
<FONT color="green">069</FONT>       *<a name="line.69"></a>
<FONT color="green">070</FONT>       *<a name="line.70"></a>
<FONT color="green">071</FONT>       * @param b boolean flag indicating whether this element<a name="line.71"></a>
<FONT color="green">072</FONT>       * represents a root element that is also the stylesheet element.<a name="line.72"></a>
<FONT color="green">073</FONT>       */<a name="line.73"></a>
<FONT color="green">074</FONT>      public void setIsLiteralResultAsStylesheet(boolean b)<a name="line.74"></a>
<FONT color="green">075</FONT>      {<a name="line.75"></a>
<FONT color="green">076</FONT>        isLiteralResultAsStylesheet = b;<a name="line.76"></a>
<FONT color="green">077</FONT>      }<a name="line.77"></a>
<FONT color="green">078</FONT>    <a name="line.78"></a>
<FONT color="green">079</FONT>      /**<a name="line.79"></a>
<FONT color="green">080</FONT>       * Return whether this element represents a root element<a name="line.80"></a>
<FONT color="green">081</FONT>       * that is also the stylesheet element.<a name="line.81"></a>
<FONT color="green">082</FONT>       *<a name="line.82"></a>
<FONT color="green">083</FONT>       *<a name="line.83"></a>
<FONT color="green">084</FONT>       * @return boolean flag indicating whether this element<a name="line.84"></a>
<FONT color="green">085</FONT>       * represents a root element that is also the stylesheet element.<a name="line.85"></a>
<FONT color="green">086</FONT>       */<a name="line.86"></a>
<FONT color="green">087</FONT>      public boolean getIsLiteralResultAsStylesheet()<a name="line.87"></a>
<FONT color="green">088</FONT>      {<a name="line.88"></a>
<FONT color="green">089</FONT>        return isLiteralResultAsStylesheet;<a name="line.89"></a>
<FONT color="green">090</FONT>      }<a name="line.90"></a>
<FONT color="green">091</FONT>      <a name="line.91"></a>
<FONT color="green">092</FONT>      /**<a name="line.92"></a>
<FONT color="green">093</FONT>       * This function is called after everything else has been<a name="line.93"></a>
<FONT color="green">094</FONT>       * recomposed, and allows the template to set remaining<a name="line.94"></a>
<FONT color="green">095</FONT>       * values that may be based on some other property that<a name="line.95"></a>
<FONT color="green">096</FONT>       * depends on recomposition.<a name="line.96"></a>
<FONT color="green">097</FONT>       */<a name="line.97"></a>
<FONT color="green">098</FONT>      public void compose(StylesheetRoot sroot) throws TransformerException<a name="line.98"></a>
<FONT color="green">099</FONT>      {<a name="line.99"></a>
<FONT color="green">100</FONT>        super.compose(sroot);<a name="line.100"></a>
<FONT color="green">101</FONT>        StylesheetRoot.ComposeState cstate = sroot.getComposeState();<a name="line.101"></a>
<FONT color="green">102</FONT>        java.util.Vector vnames = cstate.getVariableNames();<a name="line.102"></a>
<FONT color="green">103</FONT>        if (null != m_avts)<a name="line.103"></a>
<FONT color="green">104</FONT>        {<a name="line.104"></a>
<FONT color="green">105</FONT>          int nAttrs = m_avts.size();<a name="line.105"></a>
<FONT color="green">106</FONT>    <a name="line.106"></a>
<FONT color="green">107</FONT>          for (int i = (nAttrs - 1); i &gt;= 0; i--)<a name="line.107"></a>
<FONT color="green">108</FONT>          {<a name="line.108"></a>
<FONT color="green">109</FONT>            AVT avt = (AVT) m_avts.get(i);<a name="line.109"></a>
<FONT color="green">110</FONT>            avt.fixupVariables(vnames, cstate.getGlobalsSize());<a name="line.110"></a>
<FONT color="green">111</FONT>          } <a name="line.111"></a>
<FONT color="green">112</FONT>        }   <a name="line.112"></a>
<FONT color="green">113</FONT>      }<a name="line.113"></a>
<FONT color="green">114</FONT>      <a name="line.114"></a>
<FONT color="green">115</FONT>      /**<a name="line.115"></a>
<FONT color="green">116</FONT>       * The created element node will have the attribute nodes<a name="line.116"></a>
<FONT color="green">117</FONT>       * that were present on the element node in the stylesheet tree,<a name="line.117"></a>
<FONT color="green">118</FONT>       * other than attributes with names in the XSLT namespace.<a name="line.118"></a>
<FONT color="green">119</FONT>       * @serial<a name="line.119"></a>
<FONT color="green">120</FONT>       */<a name="line.120"></a>
<FONT color="green">121</FONT>      private List m_avts = null;<a name="line.121"></a>
<FONT color="green">122</FONT>    <a name="line.122"></a>
<FONT color="green">123</FONT>      /** List of attributes with the XSLT namespace.<a name="line.123"></a>
<FONT color="green">124</FONT>       *  @serial */<a name="line.124"></a>
<FONT color="green">125</FONT>      private List m_xslAttr = null;<a name="line.125"></a>
<FONT color="green">126</FONT>    <a name="line.126"></a>
<FONT color="green">127</FONT>      /**<a name="line.127"></a>
<FONT color="green">128</FONT>       * Set a literal result attribute (AVTs only).<a name="line.128"></a>
<FONT color="green">129</FONT>       *<a name="line.129"></a>
<FONT color="green">130</FONT>       * @param avt literal result attribute to add (AVT only)<a name="line.130"></a>
<FONT color="green">131</FONT>       */<a name="line.131"></a>
<FONT color="green">132</FONT>      public void addLiteralResultAttribute(AVT avt)<a name="line.132"></a>
<FONT color="green">133</FONT>      {<a name="line.133"></a>
<FONT color="green">134</FONT>    <a name="line.134"></a>
<FONT color="green">135</FONT>        if (null == m_avts)<a name="line.135"></a>
<FONT color="green">136</FONT>          m_avts = new ArrayList();<a name="line.136"></a>
<FONT color="green">137</FONT>    <a name="line.137"></a>
<FONT color="green">138</FONT>        m_avts.add(avt);<a name="line.138"></a>
<FONT color="green">139</FONT>      }<a name="line.139"></a>
<FONT color="green">140</FONT>    <a name="line.140"></a>
<FONT color="green">141</FONT>      /**<a name="line.141"></a>
<FONT color="green">142</FONT>       * Set a literal result attribute (used for xsl attributes).<a name="line.142"></a>
<FONT color="green">143</FONT>       *<a name="line.143"></a>
<FONT color="green">144</FONT>       * @param att literal result attribute to add<a name="line.144"></a>
<FONT color="green">145</FONT>       */<a name="line.145"></a>
<FONT color="green">146</FONT>      public void addLiteralResultAttribute(String att)<a name="line.146"></a>
<FONT color="green">147</FONT>      {<a name="line.147"></a>
<FONT color="green">148</FONT>    <a name="line.148"></a>
<FONT color="green">149</FONT>        if (null == m_xslAttr)<a name="line.149"></a>
<FONT color="green">150</FONT>          m_xslAttr = new ArrayList();<a name="line.150"></a>
<FONT color="green">151</FONT>    <a name="line.151"></a>
<FONT color="green">152</FONT>        m_xslAttr.add(att);<a name="line.152"></a>
<FONT color="green">153</FONT>      }<a name="line.153"></a>
<FONT color="green">154</FONT>      <a name="line.154"></a>
<FONT color="green">155</FONT>      /**<a name="line.155"></a>
<FONT color="green">156</FONT>       * Set the "xml:space" attribute.<a name="line.156"></a>
<FONT color="green">157</FONT>       * A text node is preserved if an ancestor element of the text node<a name="line.157"></a>
<FONT color="green">158</FONT>       * has an xml:space attribute with a value of preserve, and<a name="line.158"></a>
<FONT color="green">159</FONT>       * no closer ancestor element has xml:space with a value of default.<a name="line.159"></a>
<FONT color="green">160</FONT>       * @see &lt;a href="http://www.w3.org/TR/xslt#strip"&gt;strip in XSLT Specification&lt;/a&gt;<a name="line.160"></a>
<FONT color="green">161</FONT>       * @see &lt;a href="http://www.w3.org/TR/xslt#section-Creating-Text"&gt;section-Creating-Text in XSLT Specification&lt;/a&gt;<a name="line.161"></a>
<FONT color="green">162</FONT>       *<a name="line.162"></a>
<FONT color="green">163</FONT>       * @param avt  Enumerated value, either Constants.ATTRVAL_PRESERVE <a name="line.163"></a>
<FONT color="green">164</FONT>       * or Constants.ATTRVAL_STRIP.<a name="line.164"></a>
<FONT color="green">165</FONT>       */<a name="line.165"></a>
<FONT color="green">166</FONT>      public void setXmlSpace(AVT avt)<a name="line.166"></a>
<FONT color="green">167</FONT>      {<a name="line.167"></a>
<FONT color="green">168</FONT>        // This function is a bit-o-hack, I guess...<a name="line.168"></a>
<FONT color="green">169</FONT>        addLiteralResultAttribute(avt);<a name="line.169"></a>
<FONT color="green">170</FONT>        String val = avt.getSimpleString();<a name="line.170"></a>
<FONT color="green">171</FONT>        if(val.equals("default"))<a name="line.171"></a>
<FONT color="green">172</FONT>        {<a name="line.172"></a>
<FONT color="green">173</FONT>          super.setXmlSpace(Constants.ATTRVAL_STRIP);<a name="line.173"></a>
<FONT color="green">174</FONT>        }<a name="line.174"></a>
<FONT color="green">175</FONT>        else if(val.equals("preserve"))<a name="line.175"></a>
<FONT color="green">176</FONT>        {<a name="line.176"></a>
<FONT color="green">177</FONT>          super.setXmlSpace(Constants.ATTRVAL_PRESERVE);<a name="line.177"></a>
<FONT color="green">178</FONT>        }<a name="line.178"></a>
<FONT color="green">179</FONT>        // else maybe it's a real AVT, so we can't resolve it at this time.<a name="line.179"></a>
<FONT color="green">180</FONT>      }<a name="line.180"></a>
<FONT color="green">181</FONT>    <a name="line.181"></a>
<FONT color="green">182</FONT>      /**<a name="line.182"></a>
<FONT color="green">183</FONT>       * Get a literal result attribute by name.<a name="line.183"></a>
<FONT color="green">184</FONT>       *<a name="line.184"></a>
<FONT color="green">185</FONT>       * @param namespaceURI Namespace URI of attribute node to get<a name="line.185"></a>
<FONT color="green">186</FONT>       * @param localName Local part of qualified name of attribute node to get<a name="line.186"></a>
<FONT color="green">187</FONT>       *<a name="line.187"></a>
<FONT color="green">188</FONT>       * @return literal result attribute (AVT)<a name="line.188"></a>
<FONT color="green">189</FONT>       */<a name="line.189"></a>
<FONT color="green">190</FONT>      public AVT getLiteralResultAttributeNS(String namespaceURI, String localName)<a name="line.190"></a>
<FONT color="green">191</FONT>      {<a name="line.191"></a>
<FONT color="green">192</FONT>    <a name="line.192"></a>
<FONT color="green">193</FONT>        if (null != m_avts)<a name="line.193"></a>
<FONT color="green">194</FONT>        {<a name="line.194"></a>
<FONT color="green">195</FONT>          int nAttrs = m_avts.size();<a name="line.195"></a>
<FONT color="green">196</FONT>    <a name="line.196"></a>
<FONT color="green">197</FONT>          for (int i = (nAttrs - 1); i &gt;= 0; i--)<a name="line.197"></a>
<FONT color="green">198</FONT>          {<a name="line.198"></a>
<FONT color="green">199</FONT>            AVT avt = (AVT) m_avts.get(i);<a name="line.199"></a>
<FONT color="green">200</FONT>    <a name="line.200"></a>
<FONT color="green">201</FONT>            if (avt.getName().equals(localName) &amp;&amp; <a name="line.201"></a>
<FONT color="green">202</FONT>                    avt.getURI().equals(namespaceURI))<a name="line.202"></a>
<FONT color="green">203</FONT>            {<a name="line.203"></a>
<FONT color="green">204</FONT>              return avt;<a name="line.204"></a>
<FONT color="green">205</FONT>            }<a name="line.205"></a>
<FONT color="green">206</FONT>          }  // end for<a name="line.206"></a>
<FONT color="green">207</FONT>        }<a name="line.207"></a>
<FONT color="green">208</FONT>    <a name="line.208"></a>
<FONT color="green">209</FONT>        return null;<a name="line.209"></a>
<FONT color="green">210</FONT>      }<a name="line.210"></a>
<FONT color="green">211</FONT>    <a name="line.211"></a>
<FONT color="green">212</FONT>      /**<a name="line.212"></a>
<FONT color="green">213</FONT>       * Return the raw value of the attribute.<a name="line.213"></a>
<FONT color="green">214</FONT>       *<a name="line.214"></a>
<FONT color="green">215</FONT>       * @param namespaceURI Namespace URI of attribute node to get<a name="line.215"></a>
<FONT color="green">216</FONT>       * @param localName Local part of qualified name of attribute node to get<a name="line.216"></a>
<FONT color="green">217</FONT>       *<a name="line.217"></a>
<FONT color="green">218</FONT>       * @return The Attr value as a string, or the empty string if that attribute <a name="line.218"></a>
<FONT color="green">219</FONT>       * does not have a specified or default value<a name="line.219"></a>
<FONT color="green">220</FONT>       */<a name="line.220"></a>
<FONT color="green">221</FONT>      public String getAttributeNS(String namespaceURI, String localName)<a name="line.221"></a>
<FONT color="green">222</FONT>      {<a name="line.222"></a>
<FONT color="green">223</FONT>    <a name="line.223"></a>
<FONT color="green">224</FONT>        AVT avt = getLiteralResultAttributeNS(namespaceURI, localName);<a name="line.224"></a>
<FONT color="green">225</FONT>    <a name="line.225"></a>
<FONT color="green">226</FONT>        if ((null != avt))<a name="line.226"></a>
<FONT color="green">227</FONT>        {<a name="line.227"></a>
<FONT color="green">228</FONT>          return avt.getSimpleString();<a name="line.228"></a>
<FONT color="green">229</FONT>        }<a name="line.229"></a>
<FONT color="green">230</FONT>    <a name="line.230"></a>
<FONT color="green">231</FONT>        return EMPTYSTRING;<a name="line.231"></a>
<FONT color="green">232</FONT>      }<a name="line.232"></a>
<FONT color="green">233</FONT>    <a name="line.233"></a>
<FONT color="green">234</FONT>      /**<a name="line.234"></a>
<FONT color="green">235</FONT>       * Get a literal result attribute by name. The name is namespaceURI:localname  <a name="line.235"></a>
<FONT color="green">236</FONT>       * if namespace is not null.<a name="line.236"></a>
<FONT color="green">237</FONT>       *<a name="line.237"></a>
<FONT color="green">238</FONT>       * @param name Name of literal result attribute to get<a name="line.238"></a>
<FONT color="green">239</FONT>       *<a name="line.239"></a>
<FONT color="green">240</FONT>       * @return literal result attribute (AVT)<a name="line.240"></a>
<FONT color="green">241</FONT>       */<a name="line.241"></a>
<FONT color="green">242</FONT>      public AVT getLiteralResultAttribute(String name)<a name="line.242"></a>
<FONT color="green">243</FONT>      {<a name="line.243"></a>
<FONT color="green">244</FONT>    <a name="line.244"></a>
<FONT color="green">245</FONT>        if (null != m_avts)<a name="line.245"></a>
<FONT color="green">246</FONT>        {<a name="line.246"></a>
<FONT color="green">247</FONT>          int nAttrs = m_avts.size();<a name="line.247"></a>
<FONT color="green">248</FONT>          String namespace = null;<a name="line.248"></a>
<FONT color="green">249</FONT>          for (int i = (nAttrs - 1); i &gt;= 0; i--)<a name="line.249"></a>
<FONT color="green">250</FONT>          {<a name="line.250"></a>
<FONT color="green">251</FONT>            AVT avt = (AVT) m_avts.get(i);<a name="line.251"></a>
<FONT color="green">252</FONT>            namespace = avt.getURI();<a name="line.252"></a>
<FONT color="green">253</FONT>            <a name="line.253"></a>
<FONT color="green">254</FONT>            if ((namespace != null &amp;&amp; (namespace.length() != 0) &amp;&amp; (namespace <a name="line.254"></a>
<FONT color="green">255</FONT>                    +":"+avt.getName()).equals(name))|| ((namespace == null || <a name="line.255"></a>
<FONT color="green">256</FONT>                    namespace.length() == 0)&amp;&amp; avt.getRawName().equals(name)))<a name="line.256"></a>
<FONT color="green">257</FONT>            {<a name="line.257"></a>
<FONT color="green">258</FONT>              return avt;<a name="line.258"></a>
<FONT color="green">259</FONT>            }<a name="line.259"></a>
<FONT color="green">260</FONT>          }  // end for<a name="line.260"></a>
<FONT color="green">261</FONT>        }<a name="line.261"></a>
<FONT color="green">262</FONT>    <a name="line.262"></a>
<FONT color="green">263</FONT>        return null;<a name="line.263"></a>
<FONT color="green">264</FONT>      }<a name="line.264"></a>
<FONT color="green">265</FONT>    <a name="line.265"></a>
<FONT color="green">266</FONT>      /**<a name="line.266"></a>
<FONT color="green">267</FONT>       * Return the raw value of the attribute.<a name="line.267"></a>
<FONT color="green">268</FONT>       *<a name="line.268"></a>
<FONT color="green">269</FONT>       * @param namespaceURI:localName or localName if the namespaceURI is null of <a name="line.269"></a>
<FONT color="green">270</FONT>       * the attribute to get<a name="line.270"></a>
<FONT color="green">271</FONT>       *<a name="line.271"></a>
<FONT color="green">272</FONT>       * @return The Attr value as a string, or the empty string if that attribute <a name="line.272"></a>
<FONT color="green">273</FONT>       * does not have a specified or default value<a name="line.273"></a>
<FONT color="green">274</FONT>       */<a name="line.274"></a>
<FONT color="green">275</FONT>      public String getAttribute(String rawName)<a name="line.275"></a>
<FONT color="green">276</FONT>      {<a name="line.276"></a>
<FONT color="green">277</FONT>    <a name="line.277"></a>
<FONT color="green">278</FONT>        AVT avt = getLiteralResultAttribute(rawName);<a name="line.278"></a>
<FONT color="green">279</FONT>    <a name="line.279"></a>
<FONT color="green">280</FONT>        if ((null != avt))<a name="line.280"></a>
<FONT color="green">281</FONT>        {<a name="line.281"></a>
<FONT color="green">282</FONT>          return avt.getSimpleString();<a name="line.282"></a>
<FONT color="green">283</FONT>        }<a name="line.283"></a>
<FONT color="green">284</FONT>    <a name="line.284"></a>
<FONT color="green">285</FONT>        return EMPTYSTRING;<a name="line.285"></a>
<FONT color="green">286</FONT>      }<a name="line.286"></a>
<FONT color="green">287</FONT>      <a name="line.287"></a>
<FONT color="green">288</FONT>      /**<a name="line.288"></a>
<FONT color="green">289</FONT>       * Get whether or not the passed URL is flagged by<a name="line.289"></a>
<FONT color="green">290</FONT>       * the "extension-element-prefixes" or "exclude-result-prefixes"<a name="line.290"></a>
<FONT color="green">291</FONT>       * properties.<a name="line.291"></a>
<FONT color="green">292</FONT>       * @see &lt;a href="http://www.w3.org/TR/xslt#extension-element"&gt;extension-element in XSLT Specification&lt;/a&gt;<a name="line.292"></a>
<FONT color="green">293</FONT>       *<a name="line.293"></a>
<FONT color="green">294</FONT>       * @param prefix non-null reference to prefix that might be excluded.(not currently used)<a name="line.294"></a>
<FONT color="green">295</FONT>       * @param uri reference to namespace that prefix maps to<a name="line.295"></a>
<FONT color="green">296</FONT>       *<a name="line.296"></a>
<FONT color="green">297</FONT>       * @return true if the prefix should normally be excluded.<a name="line.297"></a>
<FONT color="green">298</FONT>       */<a name="line.298"></a>
<FONT color="green">299</FONT>      public boolean containsExcludeResultPrefix(String prefix, String uri)<a name="line.299"></a>
<FONT color="green">300</FONT>      {<a name="line.300"></a>
<FONT color="green">301</FONT>        if (uri == null ||<a name="line.301"></a>
<FONT color="green">302</FONT>                    (null == m_excludeResultPrefixes &amp;&amp;<a name="line.302"></a>
<FONT color="green">303</FONT>                     null == m_ExtensionElementURIs)<a name="line.303"></a>
<FONT color="green">304</FONT>                    )<a name="line.304"></a>
<FONT color="green">305</FONT>          return super.containsExcludeResultPrefix(prefix, uri);<a name="line.305"></a>
<FONT color="green">306</FONT>    <a name="line.306"></a>
<FONT color="green">307</FONT>        if (prefix.length() == 0)<a name="line.307"></a>
<FONT color="green">308</FONT>          prefix = Constants.ATTRVAL_DEFAULT_PREFIX;<a name="line.308"></a>
<FONT color="green">309</FONT>    <a name="line.309"></a>
<FONT color="green">310</FONT>        // This loop is ok here because this code only runs during<a name="line.310"></a>
<FONT color="green">311</FONT>        // stylesheet compile time.    <a name="line.311"></a>
<FONT color="green">312</FONT>            if(m_excludeResultPrefixes!=null)<a name="line.312"></a>
<FONT color="green">313</FONT>                for (int i =0; i&lt; m_excludeResultPrefixes.size(); i++)<a name="line.313"></a>
<FONT color="green">314</FONT>                {<a name="line.314"></a>
<FONT color="green">315</FONT>                    if (uri.equals(getNamespaceForPrefix(m_excludeResultPrefixes.elementAt(i))))<a name="line.315"></a>
<FONT color="green">316</FONT>                        return true;<a name="line.316"></a>
<FONT color="green">317</FONT>                }    <a name="line.317"></a>
<FONT color="green">318</FONT>            <a name="line.318"></a>
<FONT color="green">319</FONT>            // JJK Bugzilla 1133: Also check locally-scoped extensions<a name="line.319"></a>
<FONT color="green">320</FONT>        if(m_ExtensionElementURIs!=null &amp;&amp; m_ExtensionElementURIs.contains(uri))<a name="line.320"></a>
<FONT color="green">321</FONT>           return true;<a name="line.321"></a>
<FONT color="green">322</FONT>    <a name="line.322"></a>
<FONT color="green">323</FONT>            return super.containsExcludeResultPrefix(prefix, uri);<a name="line.323"></a>
<FONT color="green">324</FONT>      }<a name="line.324"></a>
<FONT color="green">325</FONT>    <a name="line.325"></a>
<FONT color="green">326</FONT>      /**<a name="line.326"></a>
<FONT color="green">327</FONT>       * Augment resolvePrefixTables, resolving the namespace aliases once<a name="line.327"></a>
<FONT color="green">328</FONT>       * the superclass has resolved the tables.<a name="line.328"></a>
<FONT color="green">329</FONT>       *<a name="line.329"></a>
<FONT color="green">330</FONT>       * @throws TransformerException<a name="line.330"></a>
<FONT color="green">331</FONT>       */<a name="line.331"></a>
<FONT color="green">332</FONT>      public void resolvePrefixTables() throws TransformerException<a name="line.332"></a>
<FONT color="green">333</FONT>      {<a name="line.333"></a>
<FONT color="green">334</FONT>    <a name="line.334"></a>
<FONT color="green">335</FONT>        super.resolvePrefixTables();<a name="line.335"></a>
<FONT color="green">336</FONT>    <a name="line.336"></a>
<FONT color="green">337</FONT>        StylesheetRoot stylesheet = getStylesheetRoot();<a name="line.337"></a>
<FONT color="green">338</FONT>    <a name="line.338"></a>
<FONT color="green">339</FONT>        if ((null != m_namespace) &amp;&amp; (m_namespace.length() &gt; 0))<a name="line.339"></a>
<FONT color="green">340</FONT>        {<a name="line.340"></a>
<FONT color="green">341</FONT>          NamespaceAlias nsa = stylesheet.getNamespaceAliasComposed(m_namespace);<a name="line.341"></a>
<FONT color="green">342</FONT>    <a name="line.342"></a>
<FONT color="green">343</FONT>          if (null != nsa)<a name="line.343"></a>
<FONT color="green">344</FONT>          {<a name="line.344"></a>
<FONT color="green">345</FONT>            m_namespace = nsa.getResultNamespace();<a name="line.345"></a>
<FONT color="green">346</FONT>    <a name="line.346"></a>
<FONT color="green">347</FONT>            // String resultPrefix = nsa.getResultPrefix();<a name="line.347"></a>
<FONT color="green">348</FONT>            String resultPrefix = nsa.getStylesheetPrefix();  // As per xsl WG, Mike Kay<a name="line.348"></a>
<FONT color="green">349</FONT>    <a name="line.349"></a>
<FONT color="green">350</FONT>            if ((null != resultPrefix) &amp;&amp; (resultPrefix.length() &gt; 0))<a name="line.350"></a>
<FONT color="green">351</FONT>              m_rawName = resultPrefix + ":" + m_localName;<a name="line.351"></a>
<FONT color="green">352</FONT>            else<a name="line.352"></a>
<FONT color="green">353</FONT>              m_rawName = m_localName;<a name="line.353"></a>
<FONT color="green">354</FONT>          }<a name="line.354"></a>
<FONT color="green">355</FONT>        }<a name="line.355"></a>
<FONT color="green">356</FONT>    <a name="line.356"></a>
<FONT color="green">357</FONT>        if (null != m_avts)<a name="line.357"></a>
<FONT color="green">358</FONT>        {<a name="line.358"></a>
<FONT color="green">359</FONT>          int n = m_avts.size();<a name="line.359"></a>
<FONT color="green">360</FONT>    <a name="line.360"></a>
<FONT color="green">361</FONT>          for (int i = 0; i &lt; n; i++)<a name="line.361"></a>
<FONT color="green">362</FONT>          {<a name="line.362"></a>
<FONT color="green">363</FONT>            AVT avt = (AVT) m_avts.get(i);<a name="line.363"></a>
<FONT color="green">364</FONT>    <a name="line.364"></a>
<FONT color="green">365</FONT>            // Should this stuff be a method on AVT?<a name="line.365"></a>
<FONT color="green">366</FONT>            String ns = avt.getURI();<a name="line.366"></a>
<FONT color="green">367</FONT>    <a name="line.367"></a>
<FONT color="green">368</FONT>            if ((null != ns) &amp;&amp; (ns.length() &gt; 0))<a name="line.368"></a>
<FONT color="green">369</FONT>            {<a name="line.369"></a>
<FONT color="green">370</FONT>              NamespaceAlias nsa =<a name="line.370"></a>
<FONT color="green">371</FONT>                stylesheet.getNamespaceAliasComposed(m_namespace); // %REVIEW% ns?<a name="line.371"></a>
<FONT color="green">372</FONT>    <a name="line.372"></a>
<FONT color="green">373</FONT>              if (null != nsa)<a name="line.373"></a>
<FONT color="green">374</FONT>              {<a name="line.374"></a>
<FONT color="green">375</FONT>                String namespace = nsa.getResultNamespace();<a name="line.375"></a>
<FONT color="green">376</FONT>    <a name="line.376"></a>
<FONT color="green">377</FONT>                // String resultPrefix = nsa.getResultPrefix();<a name="line.377"></a>
<FONT color="green">378</FONT>                String resultPrefix = nsa.getStylesheetPrefix();  // As per XSL WG<a name="line.378"></a>
<FONT color="green">379</FONT>                String rawName = avt.getName();<a name="line.379"></a>
<FONT color="green">380</FONT>    <a name="line.380"></a>
<FONT color="green">381</FONT>                if ((null != resultPrefix) &amp;&amp; (resultPrefix.length() &gt; 0))<a name="line.381"></a>
<FONT color="green">382</FONT>                  rawName = resultPrefix + ":" + rawName;<a name="line.382"></a>
<FONT color="green">383</FONT>    <a name="line.383"></a>
<FONT color="green">384</FONT>                avt.setURI(namespace);<a name="line.384"></a>
<FONT color="green">385</FONT>                avt.setRawName(rawName);<a name="line.385"></a>
<FONT color="green">386</FONT>              }<a name="line.386"></a>
<FONT color="green">387</FONT>            }<a name="line.387"></a>
<FONT color="green">388</FONT>          }<a name="line.388"></a>
<FONT color="green">389</FONT>        }<a name="line.389"></a>
<FONT color="green">390</FONT>      }<a name="line.390"></a>
<FONT color="green">391</FONT>    <a name="line.391"></a>
<FONT color="green">392</FONT>      /**<a name="line.392"></a>
<FONT color="green">393</FONT>       * Return whether we need to check namespace prefixes<a name="line.393"></a>
<FONT color="green">394</FONT>       * against the exclude result prefixes or extensions lists.<a name="line.394"></a>
<FONT color="green">395</FONT>       * Note that this will create a new prefix table if one<a name="line.395"></a>
<FONT color="green">396</FONT>       * has not been created already.<a name="line.396"></a>
<FONT color="green">397</FONT>       *<a name="line.397"></a>
<FONT color="green">398</FONT>       * NEEDSDOC ($objectName$) @return<a name="line.398"></a>
<FONT color="green">399</FONT>       */<a name="line.399"></a>
<FONT color="green">400</FONT>      boolean needToCheckExclude()<a name="line.400"></a>
<FONT color="green">401</FONT>      {<a name="line.401"></a>
<FONT color="green">402</FONT>        if (null == m_excludeResultPrefixes &amp;&amp; null == getPrefixTable()<a name="line.402"></a>
<FONT color="green">403</FONT>                    &amp;&amp; m_ExtensionElementURIs==null     // JJK Bugzilla 1133<a name="line.403"></a>
<FONT color="green">404</FONT>                    )<a name="line.404"></a>
<FONT color="green">405</FONT>          return false;<a name="line.405"></a>
<FONT color="green">406</FONT>        else<a name="line.406"></a>
<FONT color="green">407</FONT>        {<a name="line.407"></a>
<FONT color="green">408</FONT>    <a name="line.408"></a>
<FONT color="green">409</FONT>          // Create a new prefix table if one has not already been created.<a name="line.409"></a>
<FONT color="green">410</FONT>          if (null == getPrefixTable())<a name="line.410"></a>
<FONT color="green">411</FONT>            setPrefixTable(new java.util.ArrayList());<a name="line.411"></a>
<FONT color="green">412</FONT>    <a name="line.412"></a>
<FONT color="green">413</FONT>          return true;<a name="line.413"></a>
<FONT color="green">414</FONT>        }<a name="line.414"></a>
<FONT color="green">415</FONT>      }<a name="line.415"></a>
<FONT color="green">416</FONT>    <a name="line.416"></a>
<FONT color="green">417</FONT>      /**<a name="line.417"></a>
<FONT color="green">418</FONT>       * The namespace of the element to be created.<a name="line.418"></a>
<FONT color="green">419</FONT>       * @serial<a name="line.419"></a>
<FONT color="green">420</FONT>       */<a name="line.420"></a>
<FONT color="green">421</FONT>      private String m_namespace;<a name="line.421"></a>
<FONT color="green">422</FONT>    <a name="line.422"></a>
<FONT color="green">423</FONT>      /**<a name="line.423"></a>
<FONT color="green">424</FONT>       * Set the namespace URI of the result element to be created.<a name="line.424"></a>
<FONT color="green">425</FONT>       * Note that after resolvePrefixTables has been called, this will<a name="line.425"></a>
<FONT color="green">426</FONT>       * return the aliased result namespace, not the original stylesheet<a name="line.426"></a>
<FONT color="green">427</FONT>       * namespace.<a name="line.427"></a>
<FONT color="green">428</FONT>       *<a name="line.428"></a>
<FONT color="green">429</FONT>       * @param ns The Namespace URI, or the empty string if the<a name="line.429"></a>
<FONT color="green">430</FONT>       *        element has no Namespace URI.<a name="line.430"></a>
<FONT color="green">431</FONT>       */<a name="line.431"></a>
<FONT color="green">432</FONT>      public void setNamespace(String ns)<a name="line.432"></a>
<FONT color="green">433</FONT>      {<a name="line.433"></a>
<FONT color="green">434</FONT>        if(null == ns) // defensive, shouldn't have to do this.<a name="line.434"></a>
<FONT color="green">435</FONT>          ns = "";<a name="line.435"></a>
<FONT color="green">436</FONT>        m_namespace = ns;<a name="line.436"></a>
<FONT color="green">437</FONT>      }<a name="line.437"></a>
<FONT color="green">438</FONT>    <a name="line.438"></a>
<FONT color="green">439</FONT>      /**<a name="line.439"></a>
<FONT color="green">440</FONT>       * Get the original namespace of the Literal Result Element.<a name="line.440"></a>
<FONT color="green">441</FONT>       * <a name="line.441"></a>
<FONT color="green">442</FONT>       * %REVIEW% Why isn't this overriding the getNamespaceURI method<a name="line.442"></a>
<FONT color="green">443</FONT>       * rather than introducing a new one?<a name="line.443"></a>
<FONT color="green">444</FONT>       *<a name="line.444"></a>
<FONT color="green">445</FONT>       * @return The Namespace URI, or the empty string if the<a name="line.445"></a>
<FONT color="green">446</FONT>       *        element has no Namespace URI.<a name="line.446"></a>
<FONT color="green">447</FONT>       */<a name="line.447"></a>
<FONT color="green">448</FONT>      public String getNamespace()<a name="line.448"></a>
<FONT color="green">449</FONT>      {<a name="line.449"></a>
<FONT color="green">450</FONT>        return m_namespace;<a name="line.450"></a>
<FONT color="green">451</FONT>      }<a name="line.451"></a>
<FONT color="green">452</FONT>    <a name="line.452"></a>
<FONT color="green">453</FONT>      /**<a name="line.453"></a>
<FONT color="green">454</FONT>       * The local name of the element to be created.<a name="line.454"></a>
<FONT color="green">455</FONT>       * @serial<a name="line.455"></a>
<FONT color="green">456</FONT>       */<a name="line.456"></a>
<FONT color="green">457</FONT>      private String m_localName;<a name="line.457"></a>
<FONT color="green">458</FONT>    <a name="line.458"></a>
<FONT color="green">459</FONT>      /**<a name="line.459"></a>
<FONT color="green">460</FONT>       * Set the local name of the LRE.<a name="line.460"></a>
<FONT color="green">461</FONT>       *<a name="line.461"></a>
<FONT color="green">462</FONT>       * @param localName The local name (without prefix) of the result element<a name="line.462"></a>
<FONT color="green">463</FONT>       *                  to be created.<a name="line.463"></a>
<FONT color="green">464</FONT>       */<a name="line.464"></a>
<FONT color="green">465</FONT>      public void setLocalName(String localName)<a name="line.465"></a>
<FONT color="green">466</FONT>      {<a name="line.466"></a>
<FONT color="green">467</FONT>        m_localName = localName;<a name="line.467"></a>
<FONT color="green">468</FONT>      }<a name="line.468"></a>
<FONT color="green">469</FONT>    <a name="line.469"></a>
<FONT color="green">470</FONT>      /**<a name="line.470"></a>
<FONT color="green">471</FONT>       * Get the local name of the Literal Result Element.<a name="line.471"></a>
<FONT color="green">472</FONT>       * Note that after resolvePrefixTables has been called, this will<a name="line.472"></a>
<FONT color="green">473</FONT>       * return the aliased name prefix, not the original stylesheet<a name="line.473"></a>
<FONT color="green">474</FONT>       * namespace prefix.<a name="line.474"></a>
<FONT color="green">475</FONT>       *<a name="line.475"></a>
<FONT color="green">476</FONT>       * @return The local name (without prefix) of the result element<a name="line.476"></a>
<FONT color="green">477</FONT>       *                  to be created.<a name="line.477"></a>
<FONT color="green">478</FONT>       */<a name="line.478"></a>
<FONT color="green">479</FONT>      public String getLocalName()<a name="line.479"></a>
<FONT color="green">480</FONT>      {<a name="line.480"></a>
<FONT color="green">481</FONT>        return m_localName;<a name="line.481"></a>
<FONT color="green">482</FONT>      }<a name="line.482"></a>
<FONT color="green">483</FONT>    <a name="line.483"></a>
<FONT color="green">484</FONT>      /**<a name="line.484"></a>
<FONT color="green">485</FONT>       * The raw name of the element to be created.<a name="line.485"></a>
<FONT color="green">486</FONT>       * @serial<a name="line.486"></a>
<FONT color="green">487</FONT>       */<a name="line.487"></a>
<FONT color="green">488</FONT>      private String m_rawName;<a name="line.488"></a>
<FONT color="green">489</FONT>    <a name="line.489"></a>
<FONT color="green">490</FONT>      /**<a name="line.490"></a>
<FONT color="green">491</FONT>       * Set the raw name of the LRE.<a name="line.491"></a>
<FONT color="green">492</FONT>       *<a name="line.492"></a>
<FONT color="green">493</FONT>       * @param rawName The qualified name (with prefix), or the<a name="line.493"></a>
<FONT color="green">494</FONT>       *        empty string if qualified names are not available.<a name="line.494"></a>
<FONT color="green">495</FONT>       */<a name="line.495"></a>
<FONT color="green">496</FONT>      public void setRawName(String rawName)<a name="line.496"></a>
<FONT color="green">497</FONT>      {<a name="line.497"></a>
<FONT color="green">498</FONT>        m_rawName = rawName;<a name="line.498"></a>
<FONT color="green">499</FONT>      }<a name="line.499"></a>
<FONT color="green">500</FONT>    <a name="line.500"></a>
<FONT color="green">501</FONT>      /**<a name="line.501"></a>
<FONT color="green">502</FONT>       * Get the raw name of the Literal Result Element.<a name="line.502"></a>
<FONT color="green">503</FONT>       *<a name="line.503"></a>
<FONT color="green">504</FONT>       * @return  The qualified name (with prefix), or the<a name="line.504"></a>
<FONT color="green">505</FONT>       *        empty string if qualified names are not available.<a name="line.505"></a>
<FONT color="green">506</FONT>       */<a name="line.506"></a>
<FONT color="green">507</FONT>      public String getRawName()<a name="line.507"></a>
<FONT color="green">508</FONT>      {<a name="line.508"></a>
<FONT color="green">509</FONT>        return m_rawName;<a name="line.509"></a>
<FONT color="green">510</FONT>      }<a name="line.510"></a>
<FONT color="green">511</FONT>        <a name="line.511"></a>
<FONT color="green">512</FONT>     /**<a name="line.512"></a>
<FONT color="green">513</FONT>       * Get the prefix part of the raw name of the Literal Result Element.<a name="line.513"></a>
<FONT color="green">514</FONT>       *<a name="line.514"></a>
<FONT color="green">515</FONT>       * @return The prefix, or the empty string if noprefix was provided.<a name="line.515"></a>
<FONT color="green">516</FONT>       */<a name="line.516"></a>
<FONT color="green">517</FONT>      public String getPrefix()<a name="line.517"></a>
<FONT color="green">518</FONT>      {<a name="line.518"></a>
<FONT color="green">519</FONT>            int len=m_rawName.length()-m_localName.length()-1;<a name="line.519"></a>
<FONT color="green">520</FONT>        return (len&gt;0)<a name="line.520"></a>
<FONT color="green">521</FONT>                ? m_rawName.substring(0,len)<a name="line.521"></a>
<FONT color="green">522</FONT>                : "";<a name="line.522"></a>
<FONT color="green">523</FONT>      }<a name="line.523"></a>
<FONT color="green">524</FONT>    <a name="line.524"></a>
<FONT color="green">525</FONT>    <a name="line.525"></a>
<FONT color="green">526</FONT>      /**<a name="line.526"></a>
<FONT color="green">527</FONT>       * The "extension-element-prefixes" property, actually contains URIs.<a name="line.527"></a>
<FONT color="green">528</FONT>       * @serial<a name="line.528"></a>
<FONT color="green">529</FONT>       */<a name="line.529"></a>
<FONT color="green">530</FONT>      private StringVector m_ExtensionElementURIs;<a name="line.530"></a>
<FONT color="green">531</FONT>    <a name="line.531"></a>
<FONT color="green">532</FONT>      /**<a name="line.532"></a>
<FONT color="green">533</FONT>       * Set the "extension-element-prefixes" property.<a name="line.533"></a>
<FONT color="green">534</FONT>       * @see &lt;a href="http://www.w3.org/TR/xslt#extension-element"&gt;extension-element in XSLT Specification&lt;/a&gt;<a name="line.534"></a>
<FONT color="green">535</FONT>       *<a name="line.535"></a>
<FONT color="green">536</FONT>       * @param v Vector of URIs (not prefixes) to set as the "extension-element-prefixes" property<a name="line.536"></a>
<FONT color="green">537</FONT>       */<a name="line.537"></a>
<FONT color="green">538</FONT>      public void setExtensionElementPrefixes(StringVector v)<a name="line.538"></a>
<FONT color="green">539</FONT>      {<a name="line.539"></a>
<FONT color="green">540</FONT>        m_ExtensionElementURIs = v;<a name="line.540"></a>
<FONT color="green">541</FONT>      }<a name="line.541"></a>
<FONT color="green">542</FONT>    <a name="line.542"></a>
<FONT color="green">543</FONT>      /**<a name="line.543"></a>
<FONT color="green">544</FONT>       * @see org.w3c.dom.Node<a name="line.544"></a>
<FONT color="green">545</FONT>       *<a name="line.545"></a>
<FONT color="green">546</FONT>       * @return NamedNodeMap<a name="line.546"></a>
<FONT color="green">547</FONT>       */<a name="line.547"></a>
<FONT color="green">548</FONT>      public NamedNodeMap getAttributes()<a name="line.548"></a>
<FONT color="green">549</FONT>      {<a name="line.549"></a>
<FONT color="green">550</FONT>            return new LiteralElementAttributes();<a name="line.550"></a>
<FONT color="green">551</FONT>      }<a name="line.551"></a>
<FONT color="green">552</FONT>    <a name="line.552"></a>
<FONT color="green">553</FONT>      public class LiteralElementAttributes implements NamedNodeMap{<a name="line.553"></a>
<FONT color="green">554</FONT>              private int m_count = -1;<a name="line.554"></a>
<FONT color="green">555</FONT>              <a name="line.555"></a>
<FONT color="green">556</FONT>              /**<a name="line.556"></a>
<FONT color="green">557</FONT>               * Construct a NameNodeMap.<a name="line.557"></a>
<FONT color="green">558</FONT>               *<a name="line.558"></a>
<FONT color="green">559</FONT>               */<a name="line.559"></a>
<FONT color="green">560</FONT>              public LiteralElementAttributes(){         <a name="line.560"></a>
<FONT color="green">561</FONT>              }<a name="line.561"></a>
<FONT color="green">562</FONT>              <a name="line.562"></a>
<FONT color="green">563</FONT>              /**<a name="line.563"></a>
<FONT color="green">564</FONT>               * Return the number of Attributes on this Element<a name="line.564"></a>
<FONT color="green">565</FONT>               *<a name="line.565"></a>
<FONT color="green">566</FONT>               * @return The number of nodes in this map. The range of valid child <a name="line.566"></a>
<FONT color="green">567</FONT>               * node indices is &lt;code&gt;0&lt;/code&gt; to &lt;code&gt;length-1&lt;/code&gt; inclusive<a name="line.567"></a>
<FONT color="green">568</FONT>               */<a name="line.568"></a>
<FONT color="green">569</FONT>              public int getLength()<a name="line.569"></a>
<FONT color="green">570</FONT>              {<a name="line.570"></a>
<FONT color="green">571</FONT>                if (m_count == -1)<a name="line.571"></a>
<FONT color="green">572</FONT>                {<a name="line.572"></a>
<FONT color="green">573</FONT>                   if (null != m_avts) m_count = m_avts.size();<a name="line.573"></a>
<FONT color="green">574</FONT>                   else m_count = 0;<a name="line.574"></a>
<FONT color="green">575</FONT>                }<a name="line.575"></a>
<FONT color="green">576</FONT>                return m_count;<a name="line.576"></a>
<FONT color="green">577</FONT>              }<a name="line.577"></a>
<FONT color="green">578</FONT>    <a name="line.578"></a>
<FONT color="green">579</FONT>              /**<a name="line.579"></a>
<FONT color="green">580</FONT>               * Retrieves a node specified by name.<a name="line.580"></a>
<FONT color="green">581</FONT>               * @param name The &lt;code&gt;nodeName&lt;/code&gt; of a node to retrieve.<a name="line.581"></a>
<FONT color="green">582</FONT>               * @return A &lt;code&gt;Node&lt;/code&gt; (of any type) with the specified<a name="line.582"></a>
<FONT color="green">583</FONT>               *   &lt;code&gt;nodeName&lt;/code&gt;, or &lt;code&gt;null&lt;/code&gt; if it does not <a name="line.583"></a>
<FONT color="green">584</FONT>               *   identify any node in this map.<a name="line.584"></a>
<FONT color="green">585</FONT>               */<a name="line.585"></a>
<FONT color="green">586</FONT>              public Node getNamedItem(String name)<a name="line.586"></a>
<FONT color="green">587</FONT>              {<a name="line.587"></a>
<FONT color="green">588</FONT>                    if (getLength() == 0) return null;<a name="line.588"></a>
<FONT color="green">589</FONT>                    String uri = null;<a name="line.589"></a>
<FONT color="green">590</FONT>                    String localName = name; <a name="line.590"></a>
<FONT color="green">591</FONT>                    int index = name.indexOf(":"); <a name="line.591"></a>
<FONT color="green">592</FONT>                    if (-1 != index){<a name="line.592"></a>
<FONT color="green">593</FONT>                             uri = name.substring(0, index);<a name="line.593"></a>
<FONT color="green">594</FONT>                             localName = name.substring(index+1);<a name="line.594"></a>
<FONT color="green">595</FONT>                    }<a name="line.595"></a>
<FONT color="green">596</FONT>                    Node retNode = null;<a name="line.596"></a>
<FONT color="green">597</FONT>                    Iterator eum = m_avts.iterator();<a name="line.597"></a>
<FONT color="green">598</FONT>                    while (eum.hasNext()){<a name="line.598"></a>
<FONT color="green">599</FONT>                            AVT avt = (AVT) eum.next();<a name="line.599"></a>
<FONT color="green">600</FONT>                            if (localName.equals(avt.getName()))<a name="line.600"></a>
<FONT color="green">601</FONT>                            {<a name="line.601"></a>
<FONT color="green">602</FONT>                              String nsURI = avt.getURI(); <a name="line.602"></a>
<FONT color="green">603</FONT>                              if ((uri == null &amp;&amp; nsURI == null)<a name="line.603"></a>
<FONT color="green">604</FONT>                                || (uri != null &amp;&amp; uri.equals(nsURI)))<a name="line.604"></a>
<FONT color="green">605</FONT>                              {<a name="line.605"></a>
<FONT color="green">606</FONT>                                retNode = new Attribute(avt, ElemLiteralResult.this);<a name="line.606"></a>
<FONT color="green">607</FONT>                                break;<a name="line.607"></a>
<FONT color="green">608</FONT>                              }<a name="line.608"></a>
<FONT color="green">609</FONT>                            }<a name="line.609"></a>
<FONT color="green">610</FONT>                    }<a name="line.610"></a>
<FONT color="green">611</FONT>                    return retNode;<a name="line.611"></a>
<FONT color="green">612</FONT>              }<a name="line.612"></a>
<FONT color="green">613</FONT>    <a name="line.613"></a>
<FONT color="green">614</FONT>              /**<a name="line.614"></a>
<FONT color="green">615</FONT>               * Retrieves a node specified by local name and namespace URI.<a name="line.615"></a>
<FONT color="green">616</FONT>               * @param namespaceURI Namespace URI of attribute node to get<a name="line.616"></a>
<FONT color="green">617</FONT>               * @param localName Local part of qualified name of attribute node to <a name="line.617"></a>
<FONT color="green">618</FONT>               * get<a name="line.618"></a>
<FONT color="green">619</FONT>               * @return A &lt;code&gt;Node&lt;/code&gt; (of any type) with the specified<a name="line.619"></a>
<FONT color="green">620</FONT>               *   &lt;code&gt;nodeName&lt;/code&gt;, or &lt;code&gt;null&lt;/code&gt; if it does not <a name="line.620"></a>
<FONT color="green">621</FONT>               *   identify any node in this map.<a name="line.621"></a>
<FONT color="green">622</FONT>               */<a name="line.622"></a>
<FONT color="green">623</FONT>              public Node getNamedItemNS(String namespaceURI, String localName)<a name="line.623"></a>
<FONT color="green">624</FONT>              {<a name="line.624"></a>
<FONT color="green">625</FONT>                      if (getLength() == 0) return null;<a name="line.625"></a>
<FONT color="green">626</FONT>                      Node retNode = null;<a name="line.626"></a>
<FONT color="green">627</FONT>                      Iterator eum = m_avts.iterator();<a name="line.627"></a>
<FONT color="green">628</FONT>                      while (eum.hasNext())<a name="line.628"></a>
<FONT color="green">629</FONT>                      {<a name="line.629"></a>
<FONT color="green">630</FONT>                        AVT avt = (AVT) eum.next();      <a name="line.630"></a>
<FONT color="green">631</FONT>                        if (localName.equals(avt.getName()))<a name="line.631"></a>
<FONT color="green">632</FONT>                        {<a name="line.632"></a>
<FONT color="green">633</FONT>                          String nsURI = avt.getURI(); <a name="line.633"></a>
<FONT color="green">634</FONT>                          if ((namespaceURI == null &amp;&amp; nsURI == null)<a name="line.634"></a>
<FONT color="green">635</FONT>                            || (namespaceURI != null &amp;&amp; namespaceURI.equals(nsURI)))<a name="line.635"></a>
<FONT color="green">636</FONT>                          {<a name="line.636"></a>
<FONT color="green">637</FONT>                            retNode = new Attribute(avt, ElemLiteralResult.this);<a name="line.637"></a>
<FONT color="green">638</FONT>                            break;<a name="line.638"></a>
<FONT color="green">639</FONT>                          }<a name="line.639"></a>
<FONT color="green">640</FONT>                        }<a name="line.640"></a>
<FONT color="green">641</FONT>                      }<a name="line.641"></a>
<FONT color="green">642</FONT>                      return retNode;<a name="line.642"></a>
<FONT color="green">643</FONT>              }<a name="line.643"></a>
<FONT color="green">644</FONT>              <a name="line.644"></a>
<FONT color="green">645</FONT>              /**<a name="line.645"></a>
<FONT color="green">646</FONT>               * Returns the &lt;code&gt;index&lt;/code&gt;th item in the map. If &lt;code&gt;index<a name="line.646"></a>
<FONT color="green">647</FONT>               * &lt;/code&gt; is greater than or equal to the number of nodes in this <a name="line.647"></a>
<FONT color="green">648</FONT>               * map, this returns &lt;code&gt;null&lt;/code&gt;.<a name="line.648"></a>
<FONT color="green">649</FONT>               * @param i The index of the requested item.<a name="line.649"></a>
<FONT color="green">650</FONT>               * @return The node at the &lt;code&gt;index&lt;/code&gt;th position in the map, <a name="line.650"></a>
<FONT color="green">651</FONT>               *   or &lt;code&gt;null&lt;/code&gt; if that is not a valid index.<a name="line.651"></a>
<FONT color="green">652</FONT>               */<a name="line.652"></a>
<FONT color="green">653</FONT>              public Node item(int i)<a name="line.653"></a>
<FONT color="green">654</FONT>              {<a name="line.654"></a>
<FONT color="green">655</FONT>                    if (getLength() == 0 || i &gt;= m_avts.size()) return null;<a name="line.655"></a>
<FONT color="green">656</FONT>                    else return <a name="line.656"></a>
<FONT color="green">657</FONT>                        new Attribute(((AVT)m_avts.get(i)), <a name="line.657"></a>
<FONT color="green">658</FONT>                            ElemLiteralResult.this);<a name="line.658"></a>
<FONT color="green">659</FONT>              }<a name="line.659"></a>
<FONT color="green">660</FONT>              <a name="line.660"></a>
<FONT color="green">661</FONT>              /**<a name="line.661"></a>
<FONT color="green">662</FONT>               * @see org.w3c.dom.NamedNodeMap<a name="line.662"></a>
<FONT color="green">663</FONT>               *<a name="line.663"></a>
<FONT color="green">664</FONT>               * @param name of the node to remove<a name="line.664"></a>
<FONT color="green">665</FONT>               * <a name="line.665"></a>
<FONT color="green">666</FONT>               * @return The node removed from this map if a node with such <a name="line.666"></a>
<FONT color="green">667</FONT>               * a name exists. <a name="line.667"></a>
<FONT color="green">668</FONT>               *<a name="line.668"></a>
<FONT color="green">669</FONT>               * @throws DOMException<a name="line.669"></a>
<FONT color="green">670</FONT>               */<a name="line.670"></a>
<FONT color="green">671</FONT>              public Node removeNamedItem(String name) throws DOMException<a name="line.671"></a>
<FONT color="green">672</FONT>              {<a name="line.672"></a>
<FONT color="green">673</FONT>                      throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, <a name="line.673"></a>
<FONT color="green">674</FONT>                          XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR); <a name="line.674"></a>
<FONT color="green">675</FONT>                      return null;<a name="line.675"></a>
<FONT color="green">676</FONT>              }<a name="line.676"></a>
<FONT color="green">677</FONT>              <a name="line.677"></a>
<FONT color="green">678</FONT>              /**<a name="line.678"></a>
<FONT color="green">679</FONT>               * @see org.w3c.dom.NamedNodeMap<a name="line.679"></a>
<FONT color="green">680</FONT>               *<a name="line.680"></a>
<FONT color="green">681</FONT>               * @param namespaceURI Namespace URI of the node to remove<a name="line.681"></a>
<FONT color="green">682</FONT>               * @param localName Local part of qualified name of the node to remove<a name="line.682"></a>
<FONT color="green">683</FONT>               * <a name="line.683"></a>
<FONT color="green">684</FONT>               * @return The node removed from this map if a node with such a local<a name="line.684"></a>
<FONT color="green">685</FONT>               *  name and namespace URI exists<a name="line.685"></a>
<FONT color="green">686</FONT>               *<a name="line.686"></a>
<FONT color="green">687</FONT>               * @throws DOMException<a name="line.687"></a>
<FONT color="green">688</FONT>               */<a name="line.688"></a>
<FONT color="green">689</FONT>              public Node removeNamedItemNS(String namespaceURI, String localName) <a name="line.689"></a>
<FONT color="green">690</FONT>                    throws DOMException<a name="line.690"></a>
<FONT color="green">691</FONT>              {<a name="line.691"></a>
<FONT color="green">692</FONT>                      throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, <a name="line.692"></a>
<FONT color="green">693</FONT>                          XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR); <a name="line.693"></a>
<FONT color="green">694</FONT>                      return null;<a name="line.694"></a>
<FONT color="green">695</FONT>              } <a name="line.695"></a>
<FONT color="green">696</FONT>              <a name="line.696"></a>
<FONT color="green">697</FONT>              /**<a name="line.697"></a>
<FONT color="green">698</FONT>               * Unimplemented. See org.w3c.dom.NamedNodeMap<a name="line.698"></a>
<FONT color="green">699</FONT>               *<a name="line.699"></a>
<FONT color="green">700</FONT>               * @param A node to store in this map<a name="line.700"></a>
<FONT color="green">701</FONT>               * <a name="line.701"></a>
<FONT color="green">702</FONT>               * @return If the new Node replaces an existing node the replaced <a name="line.702"></a>
<FONT color="green">703</FONT>               * Node is returned, otherwise null is returned<a name="line.703"></a>
<FONT color="green">704</FONT>               *<a name="line.704"></a>
<FONT color="green">705</FONT>               * @throws DOMException<a name="line.705"></a>
<FONT color="green">706</FONT>               */<a name="line.706"></a>
<FONT color="green">707</FONT>              public Node setNamedItem(Node arg) throws DOMException<a name="line.707"></a>
<FONT color="green">708</FONT>              {<a name="line.708"></a>
<FONT color="green">709</FONT>                      throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, <a name="line.709"></a>
<FONT color="green">710</FONT>                          XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR); <a name="line.710"></a>
<FONT color="green">711</FONT>                      return null;<a name="line.711"></a>
<FONT color="green">712</FONT>              }<a name="line.712"></a>
<FONT color="green">713</FONT>              <a name="line.713"></a>
<FONT color="green">714</FONT>              /**<a name="line.714"></a>
<FONT color="green">715</FONT>               * Unimplemented. See org.w3c.dom.NamedNodeMap<a name="line.715"></a>
<FONT color="green">716</FONT>               *<a name="line.716"></a>
<FONT color="green">717</FONT>               * @param A node to store in this map<a name="line.717"></a>
<FONT color="green">718</FONT>               * <a name="line.718"></a>
<FONT color="green">719</FONT>               * @return If the new Node replaces an existing node the replaced <a name="line.719"></a>
<FONT color="green">720</FONT>               * Node is returned, otherwise null is returned<a name="line.720"></a>
<FONT color="green">721</FONT>               *<a name="line.721"></a>
<FONT color="green">722</FONT>               * @throws DOMException<a name="line.722"></a>
<FONT color="green">723</FONT>               */<a name="line.723"></a>
<FONT color="green">724</FONT>              public Node setNamedItemNS(Node arg) throws DOMException<a name="line.724"></a>
<FONT color="green">725</FONT>              {<a name="line.725"></a>
<FONT color="green">726</FONT>                      throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, <a name="line.726"></a>
<FONT color="green">727</FONT>                          XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR); <a name="line.727"></a>
<FONT color="green">728</FONT>                      return null;<a name="line.728"></a>
<FONT color="green">729</FONT>              }                                                                         <a name="line.729"></a>
<FONT color="green">730</FONT>      }<a name="line.730"></a>
<FONT color="green">731</FONT>    <a name="line.731"></a>
<FONT color="green">732</FONT>      public class Attribute implements Attr{<a name="line.732"></a>
<FONT color="green">733</FONT>              private AVT m_attribute;<a name="line.733"></a>
<FONT color="green">734</FONT>              private Element m_owner = null;<a name="line.734"></a>
<FONT color="green">735</FONT>              /**<a name="line.735"></a>
<FONT color="green">736</FONT>               * Construct a Attr.<a name="line.736"></a>
<FONT color="green">737</FONT>               *<a name="line.737"></a>
<FONT color="green">738</FONT>               */<a name="line.738"></a>
<FONT color="green">739</FONT>              public Attribute(AVT avt, Element elem){<a name="line.739"></a>
<FONT color="green">740</FONT>                    m_attribute = avt;<a name="line.740"></a>
<FONT color="green">741</FONT>                    m_owner = elem;<a name="line.741"></a>
<FONT color="green">742</FONT>              }<a name="line.742"></a>
<FONT color="green">743</FONT>    <a name="line.743"></a>
<FONT color="green">744</FONT>              /**<a name="line.744"></a>
<FONT color="green">745</FONT>               * @see org.w3c.dom.Node<a name="line.745"></a>
<FONT color="green">746</FONT>               *<a name="line.746"></a>
<FONT color="green">747</FONT>               * @param newChild New node to append to the list of this node's <a name="line.747"></a>
<FONT color="green">748</FONT>               * children<a name="line.748"></a>
<FONT color="green">749</FONT>               *<a name="line.749"></a>
<FONT color="green">750</FONT>               *<a name="line.750"></a>
<FONT color="green">751</FONT>               * @throws DOMException<a name="line.751"></a>
<FONT color="green">752</FONT>               */<a name="line.752"></a>
<FONT color="green">753</FONT>              public Node appendChild(Node newChild) throws DOMException<a name="line.753"></a>
<FONT color="green">754</FONT>              {<a name="line.754"></a>
<FONT color="green">755</FONT>                      throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, <a name="line.755"></a>
<FONT color="green">756</FONT>                          XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR); <a name="line.756"></a>
<FONT color="green">757</FONT>                      return null;<a name="line.757"></a>
<FONT color="green">758</FONT>              }<a name="line.758"></a>
<FONT color="green">759</FONT>    <a name="line.759"></a>
<FONT color="green">760</FONT>              /**<a name="line.760"></a>
<FONT color="green">761</FONT>               * @see org.w3c.dom.Node<a name="line.761"></a>
<FONT color="green">762</FONT>               *<a name="line.762"></a>
<FONT color="green">763</FONT>               * @param deep Flag indicating whether to clone deep <a name="line.763"></a>
<FONT color="green">764</FONT>               * (clone member variables)<a name="line.764"></a>
<FONT color="green">765</FONT>               *<a name="line.765"></a>
<FONT color="green">766</FONT>               * @return Returns a duplicate of this node<a name="line.766"></a>
<FONT color="green">767</FONT>               */<a name="line.767"></a>
<FONT color="green">768</FONT>              public Node cloneNode(boolean deep)<a name="line.768"></a>
<FONT color="green">769</FONT>              {<a name="line.769"></a>
<FONT color="green">770</FONT>                      return new Attribute(m_attribute, m_owner);<a name="line.770"></a>
<FONT color="green">771</FONT>              }<a name="line.771"></a>
<FONT color="green">772</FONT>              <a name="line.772"></a>
<FONT color="green">773</FONT>              /**<a name="line.773"></a>
<FONT color="green">774</FONT>               * @see org.w3c.dom.Node<a name="line.774"></a>
<FONT color="green">775</FONT>               *<a name="line.775"></a>
<FONT color="green">776</FONT>               * @return null<a name="line.776"></a>
<FONT color="green">777</FONT>               */<a name="line.777"></a>
<FONT color="green">778</FONT>              public NamedNodeMap getAttributes()<a name="line.778"></a>
<FONT color="green">779</FONT>              {<a name="line.779"></a>
<FONT color="green">780</FONT>                return null;<a name="line.780"></a>
<FONT color="green">781</FONT>              }<a name="line.781"></a>
<FONT color="green">782</FONT>    <a name="line.782"></a>
<FONT color="green">783</FONT>              /**<a name="line.783"></a>
<FONT color="green">784</FONT>               * @see org.w3c.dom.Node<a name="line.784"></a>
<FONT color="green">785</FONT>               *<a name="line.785"></a>
<FONT color="green">786</FONT>               * @return a NodeList containing no nodes. <a name="line.786"></a>
<FONT color="green">787</FONT>               */<a name="line.787"></a>
<FONT color="green">788</FONT>              public NodeList getChildNodes()<a name="line.788"></a>
<FONT color="green">789</FONT>              {<a name="line.789"></a>
<FONT color="green">790</FONT>                      return new NodeList(){<a name="line.790"></a>
<FONT color="green">791</FONT>                              public int getLength(){<a name="line.791"></a>
<FONT color="green">792</FONT>                                      return 0;<a name="line.792"></a>
<FONT color="green">793</FONT>                              }<a name="line.793"></a>
<FONT color="green">794</FONT>                              public Node item(int index){<a name="line.794"></a>
<FONT color="green">795</FONT>                                      return null;<a name="line.795"></a>
<FONT color="green">796</FONT>                              }<a name="line.796"></a>
<FONT color="green">797</FONT>                      };<a name="line.797"></a>
<FONT color="green">798</FONT>              }<a name="line.798"></a>
<FONT color="green">799</FONT>    <a name="line.799"></a>
<FONT color="green">800</FONT>              /**<a name="line.800"></a>
<FONT color="green">801</FONT>               * @see org.w3c.dom.Node<a name="line.801"></a>
<FONT color="green">802</FONT>               *<a name="line.802"></a>
<FONT color="green">803</FONT>               * @return null<a name="line.803"></a>
<FONT color="green">804</FONT>               */<a name="line.804"></a>
<FONT color="green">805</FONT>              public Node getFirstChild()<a name="line.805"></a>
<FONT color="green">806</FONT>              {<a name="line.806"></a>
<FONT color="green">807</FONT>                      return null;<a name="line.807"></a>
<FONT color="green">808</FONT>              }<a name="line.808"></a>
<FONT color="green">809</FONT>    <a name="line.809"></a>
<FONT color="green">810</FONT>              /**<a name="line.810"></a>
<FONT color="green">811</FONT>               * @see org.w3c.dom.Node<a name="line.811"></a>
<FONT color="green">812</FONT>               *<a name="line.812"></a>
<FONT color="green">813</FONT>               * @return null<a name="line.813"></a>
<FONT color="green">814</FONT>               */<a name="line.814"></a>
<FONT color="green">815</FONT>              public Node getLastChild()<a name="line.815"></a>
<FONT color="green">816</FONT>              {<a name="line.816"></a>
<FONT color="green">817</FONT>                      return null;<a name="line.817"></a>
<FONT color="green">818</FONT>              }<a name="line.818"></a>
<FONT color="green">819</FONT>              <a name="line.819"></a>
<FONT color="green">820</FONT>              /**<a name="line.820"></a>
<FONT color="green">821</FONT>               * @see org.w3c.dom.Node<a name="line.821"></a>
<FONT color="green">822</FONT>               *<a name="line.822"></a>
<FONT color="green">823</FONT>               * @return the local part of the qualified name of this node<a name="line.823"></a>
<FONT color="green">824</FONT>               */<a name="line.824"></a>
<FONT color="green">825</FONT>              public String getLocalName()<a name="line.825"></a>
<FONT color="green">826</FONT>              {<a name="line.826"></a>
<FONT color="green">827</FONT>                      return m_attribute.getName();<a name="line.827"></a>
<FONT color="green">828</FONT>              }<a name="line.828"></a>
<FONT color="green">829</FONT>              <a name="line.829"></a>
<FONT color="green">830</FONT>              /**<a name="line.830"></a>
<FONT color="green">831</FONT>               * @see org.w3c.dom.Node<a name="line.831"></a>
<FONT color="green">832</FONT>               *<a name="line.832"></a>
<FONT color="green">833</FONT>               * @return The namespace URI of this node, or null if it is <a name="line.833"></a>
<FONT color="green">834</FONT>               * unspecified<a name="line.834"></a>
<FONT color="green">835</FONT>               */<a name="line.835"></a>
<FONT color="green">836</FONT>              public String getNamespaceURI()<a name="line.836"></a>
<FONT color="green">837</FONT>              {<a name="line.837"></a>
<FONT color="green">838</FONT>                      String uri = m_attribute.getURI();<a name="line.838"></a>
<FONT color="green">839</FONT>                      return (uri.length() == 0)?null:uri;<a name="line.839"></a>
<FONT color="green">840</FONT>              }<a name="line.840"></a>
<FONT color="green">841</FONT>    <a name="line.841"></a>
<FONT color="green">842</FONT>              /**<a name="line.842"></a>
<FONT color="green">843</FONT>               * @see org.w3c.dom.Node<a name="line.843"></a>
<FONT color="green">844</FONT>               *<a name="line.844"></a>
<FONT color="green">845</FONT>               * @return null<a name="line.845"></a>
<FONT color="green">846</FONT>               */<a name="line.846"></a>
<FONT color="green">847</FONT>              public Node getNextSibling()<a name="line.847"></a>
<FONT color="green">848</FONT>              {<a name="line.848"></a>
<FONT color="green">849</FONT>                    return null;<a name="line.849"></a>
<FONT color="green">850</FONT>              }<a name="line.850"></a>
<FONT color="green">851</FONT>              <a name="line.851"></a>
<FONT color="green">852</FONT>              /**<a name="line.852"></a>
<FONT color="green">853</FONT>               * @see org.w3c.dom.Node<a name="line.853"></a>
<FONT color="green">854</FONT>               *<a name="line.854"></a>
<FONT color="green">855</FONT>               * @return The name of the attribute<a name="line.855"></a>
<FONT color="green">856</FONT>               */<a name="line.856"></a>
<FONT color="green">857</FONT>              public String getNodeName()<a name="line.857"></a>
<FONT color="green">858</FONT>              {<a name="line.858"></a>
<FONT color="green">859</FONT>                      String uri = m_attribute.getURI();<a name="line.859"></a>
<FONT color="green">860</FONT>                      String localName = getLocalName();<a name="line.860"></a>
<FONT color="green">861</FONT>                      return (uri.length() == 0)?localName:uri+":"+localName;<a name="line.861"></a>
<FONT color="green">862</FONT>              }<a name="line.862"></a>
<FONT color="green">863</FONT>              <a name="line.863"></a>
<FONT color="green">864</FONT>              /**<a name="line.864"></a>
<FONT color="green">865</FONT>               * @see org.w3c.dom.Node<a name="line.865"></a>
<FONT color="green">866</FONT>               *<a name="line.866"></a>
<FONT color="green">867</FONT>               * @return The node is an Attr<a name="line.867"></a>
<FONT color="green">868</FONT>               */<a name="line.868"></a>
<FONT color="green">869</FONT>              public short getNodeType()<a name="line.869"></a>
<FONT color="green">870</FONT>              {<a name="line.870"></a>
<FONT color="green">871</FONT>                      return ATTRIBUTE_NODE;<a name="line.871"></a>
<FONT color="green">872</FONT>              }<a name="line.872"></a>
<FONT color="green">873</FONT>              <a name="line.873"></a>
<FONT color="green">874</FONT>              /**<a name="line.874"></a>
<FONT color="green">875</FONT>               * @see org.w3c.dom.Node<a name="line.875"></a>
<FONT color="green">876</FONT>               *<a name="line.876"></a>
<FONT color="green">877</FONT>               * @return The value of the attribute<a name="line.877"></a>
<FONT color="green">878</FONT>               *<a name="line.878"></a>
<FONT color="green">879</FONT>               * @throws DOMException<a name="line.879"></a>
<FONT color="green">880</FONT>               */<a name="line.880"></a>
<FONT color="green">881</FONT>              public String getNodeValue() throws DOMException<a name="line.881"></a>
<FONT color="green">882</FONT>              {<a name="line.882"></a>
<FONT color="green">883</FONT>                      return m_attribute.getSimpleString();<a name="line.883"></a>
<FONT color="green">884</FONT>              }<a name="line.884"></a>
<FONT color="green">885</FONT>    <a name="line.885"></a>
<FONT color="green">886</FONT>              /**<a name="line.886"></a>
<FONT color="green">887</FONT>               * @see org.w3c.dom.Node<a name="line.887"></a>
<FONT color="green">888</FONT>               *<a name="line.888"></a>
<FONT color="green">889</FONT>               * @return null<a name="line.889"></a>
<FONT color="green">890</FONT>               */<a name="line.890"></a>
<FONT color="green">891</FONT>              public Document getOwnerDocument()<a name="line.891"></a>
<FONT color="green">892</FONT>              {<a name="line.892"></a>
<FONT color="green">893</FONT>                return m_owner.getOwnerDocument();<a name="line.893"></a>
<FONT color="green">894</FONT>              }<a name="line.894"></a>
<FONT color="green">895</FONT>    <a name="line.895"></a>
<FONT color="green">896</FONT>              /**<a name="line.896"></a>
<FONT color="green">897</FONT>               * @see org.w3c.dom.Node<a name="line.897"></a>
<FONT color="green">898</FONT>               *<a name="line.898"></a>
<FONT color="green">899</FONT>               * @return the containing element node<a name="line.899"></a>
<FONT color="green">900</FONT>               */<a name="line.900"></a>
<FONT color="green">901</FONT>              public Node getParentNode()<a name="line.901"></a>
<FONT color="green">902</FONT>              {<a name="line.902"></a>
<FONT color="green">903</FONT>                      return m_owner;<a name="line.903"></a>
<FONT color="green">904</FONT>              }<a name="line.904"></a>
<FONT color="green">905</FONT>                        <a name="line.905"></a>
<FONT color="green">906</FONT>              /**<a name="line.906"></a>
<FONT color="green">907</FONT>               * @see org.w3c.dom.Node<a name="line.907"></a>
<FONT color="green">908</FONT>               *<a name="line.908"></a>
<FONT color="green">909</FONT>               * @return The namespace prefix of this node, or null if it is <a name="line.909"></a>
<FONT color="green">910</FONT>               * unspecified<a name="line.910"></a>
<FONT color="green">911</FONT>               */<a name="line.911"></a>
<FONT color="green">912</FONT>              public String getPrefix()<a name="line.912"></a>
<FONT color="green">913</FONT>              {<a name="line.913"></a>
<FONT color="green">914</FONT>                      String uri = m_attribute.getURI();<a name="line.914"></a>
<FONT color="green">915</FONT>                      String rawName = m_attribute.getRawName();<a name="line.915"></a>
<FONT color="green">916</FONT>                      return (uri.length() == 0)? <a name="line.916"></a>
<FONT color="green">917</FONT>                            null:rawName.substring(0, rawName.indexOf(":"));<a name="line.917"></a>
<FONT color="green">918</FONT>              }<a name="line.918"></a>
<FONT color="green">919</FONT>    <a name="line.919"></a>
<FONT color="green">920</FONT>              /**<a name="line.920"></a>
<FONT color="green">921</FONT>               * @see org.w3c.dom.Node<a name="line.921"></a>
<FONT color="green">922</FONT>               *<a name="line.922"></a>
<FONT color="green">923</FONT>               * @return null<a name="line.923"></a>
<FONT color="green">924</FONT>               */<a name="line.924"></a>
<FONT color="green">925</FONT>              public Node getPreviousSibling()<a name="line.925"></a>
<FONT color="green">926</FONT>              {<a name="line.926"></a>
<FONT color="green">927</FONT>                      return null;<a name="line.927"></a>
<FONT color="green">928</FONT>              }<a name="line.928"></a>
<FONT color="green">929</FONT>              <a name="line.929"></a>
<FONT color="green">930</FONT>              /**<a name="line.930"></a>
<FONT color="green">931</FONT>               * @see org.w3c.dom.Node<a name="line.931"></a>
<FONT color="green">932</FONT>               *<a name="line.932"></a>
<FONT color="green">933</FONT>               * @return false<a name="line.933"></a>
<FONT color="green">934</FONT>               */<a name="line.934"></a>
<FONT color="green">935</FONT>              public boolean hasAttributes()<a name="line.935"></a>
<FONT color="green">936</FONT>              {<a name="line.936"></a>
<FONT color="green">937</FONT>                      return false;<a name="line.937"></a>
<FONT color="green">938</FONT>              }<a name="line.938"></a>
<FONT color="green">939</FONT>              <a name="line.939"></a>
<FONT color="green">940</FONT>              /**<a name="line.940"></a>
<FONT color="green">941</FONT>               * @see org.w3c.dom.Node<a name="line.941"></a>
<FONT color="green">942</FONT>               *<a name="line.942"></a>
<FONT color="green">943</FONT>               * @return false<a name="line.943"></a>
<FONT color="green">944</FONT>               */<a name="line.944"></a>
<FONT color="green">945</FONT>              public boolean hasChildNodes()<a name="line.945"></a>
<FONT color="green">946</FONT>              {<a name="line.946"></a>
<FONT color="green">947</FONT>                      return false;<a name="line.947"></a>
<FONT color="green">948</FONT>              }                    <a name="line.948"></a>
<FONT color="green">949</FONT>    <a name="line.949"></a>
<FONT color="green">950</FONT>              /**<a name="line.950"></a>
<FONT color="green">951</FONT>               * @see org.w3c.dom.Node<a name="line.951"></a>
<FONT color="green">952</FONT>               *<a name="line.952"></a>
<FONT color="green">953</FONT>               * @param newChild New child node to insert<a name="line.953"></a>
<FONT color="green">954</FONT>               * @param refChild Insert in front of this child<a name="line.954"></a>
<FONT color="green">955</FONT>               *<a name="line.955"></a>
<FONT color="green">956</FONT>               * @return null<a name="line.956"></a>
<FONT color="green">957</FONT>               *<a name="line.957"></a>
<FONT color="green">958</FONT>               * @throws DOMException<a name="line.958"></a>
<FONT color="green">959</FONT>               */<a name="line.959"></a>
<FONT color="green">960</FONT>              public Node insertBefore(Node newChild, Node refChild) <a name="line.960"></a>
<FONT color="green">961</FONT>                    throws DOMException<a name="line.961"></a>
<FONT color="green">962</FONT>              {<a name="line.962"></a>
<FONT color="green">963</FONT>                      throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, <a name="line.963"></a>
<FONT color="green">964</FONT>                          XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR);<a name="line.964"></a>
<FONT color="green">965</FONT>                      return null;<a name="line.965"></a>
<FONT color="green">966</FONT>              }<a name="line.966"></a>
<FONT color="green">967</FONT>    <a name="line.967"></a>
<FONT color="green">968</FONT>              /**<a name="line.968"></a>
<FONT color="green">969</FONT>               * @see org.w3c.dom.Node<a name="line.969"></a>
<FONT color="green">970</FONT>               *<a name="line.970"></a>
<FONT color="green">971</FONT>               * @return Returns &lt;code&gt;false&lt;/code&gt;<a name="line.971"></a>
<FONT color="green">972</FONT>               * @since DOM Level 2<a name="line.972"></a>
<FONT color="green">973</FONT>               */<a name="line.973"></a>
<FONT color="green">974</FONT>              public boolean isSupported(String feature, String version)<a name="line.974"></a>
<FONT color="green">975</FONT>              {<a name="line.975"></a>
<FONT color="green">976</FONT>                return false;<a name="line.976"></a>
<FONT color="green">977</FONT>              }<a name="line.977"></a>
<FONT color="green">978</FONT>    <a name="line.978"></a>
<FONT color="green">979</FONT>              /** @see org.w3c.dom.Node */<a name="line.979"></a>
<FONT color="green">980</FONT>              public void normalize(){}<a name="line.980"></a>
<FONT color="green">981</FONT>              <a name="line.981"></a>
<FONT color="green">982</FONT>              /**<a name="line.982"></a>
<FONT color="green">983</FONT>               * @see org.w3c.dom.Node<a name="line.983"></a>
<FONT color="green">984</FONT>               *<a name="line.984"></a>
<FONT color="green">985</FONT>               * @param oldChild Child to be removed<a name="line.985"></a>
<FONT color="green">986</FONT>               *<a name="line.986"></a>
<FONT color="green">987</FONT>               * @return null<a name="line.987"></a>
<FONT color="green">988</FONT>               *<a name="line.988"></a>
<FONT color="green">989</FONT>               * @throws DOMException<a name="line.989"></a>
<FONT color="green">990</FONT>               */<a name="line.990"></a>
<FONT color="green">991</FONT>              public Node removeChild(Node oldChild) throws DOMException<a name="line.991"></a>
<FONT color="green">992</FONT>              {<a name="line.992"></a>
<FONT color="green">993</FONT>                      throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, <a name="line.993"></a>
<FONT color="green">994</FONT>                          XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR); <a name="line.994"></a>
<FONT color="green">995</FONT>                      return null;<a name="line.995"></a>
<FONT color="green">996</FONT>              }         <a name="line.996"></a>
<FONT color="green">997</FONT>    <a name="line.997"></a>
<FONT color="green">998</FONT>              /**<a name="line.998"></a>
<FONT color="green">999</FONT>               * @see org.w3c.dom.Node<a name="line.999"></a>
<FONT color="green">1000</FONT>               *<a name="line.1000"></a>
<FONT color="green">1001</FONT>               * @param newChild Replace existing child with this one<a name="line.1001"></a>
<FONT color="green">1002</FONT>               * @param oldChild Existing child to be replaced<a name="line.1002"></a>
<FONT color="green">1003</FONT>               *<a name="line.1003"></a>
<FONT color="green">1004</FONT>               * @return null<a name="line.1004"></a>
<FONT color="green">1005</FONT>               *<a name="line.1005"></a>
<FONT color="green">1006</FONT>               * @throws DOMException<a name="line.1006"></a>
<FONT color="green">1007</FONT>               */<a name="line.1007"></a>
<FONT color="green">1008</FONT>              public Node replaceChild(Node newChild, Node oldChild) throws DOMException<a name="line.1008"></a>
<FONT color="green">1009</FONT>              {<a name="line.1009"></a>
<FONT color="green">1010</FONT>                      throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, <a name="line.1010"></a>
<FONT color="green">1011</FONT>                          XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR); <a name="line.1011"></a>
<FONT color="green">1012</FONT>                      return null;<a name="line.1012"></a>
<FONT color="green">1013</FONT>              }<a name="line.1013"></a>
<FONT color="green">1014</FONT>    <a name="line.1014"></a>
<FONT color="green">1015</FONT>              /**<a name="line.1015"></a>
<FONT color="green">1016</FONT>               * @see org.w3c.dom.Node<a name="line.1016"></a>
<FONT color="green">1017</FONT>               *<a name="line.1017"></a>
<FONT color="green">1018</FONT>               * @param nodeValue Value to set this node to<a name="line.1018"></a>
<FONT color="green">1019</FONT>               *<a name="line.1019"></a>
<FONT color="green">1020</FONT>               * @throws DOMException<a name="line.1020"></a>
<FONT color="green">1021</FONT>               */<a name="line.1021"></a>
<FONT color="green">1022</FONT>              public void setNodeValue(String nodeValue) throws DOMException<a name="line.1022"></a>
<FONT color="green">1023</FONT>              {<a name="line.1023"></a>
<FONT color="green">1024</FONT>                      throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, <a name="line.1024"></a>
<FONT color="green">1025</FONT>                          XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR); <a name="line.1025"></a>
<FONT color="green">1026</FONT>              }<a name="line.1026"></a>
<FONT color="green">1027</FONT>    <a name="line.1027"></a>
<FONT color="green">1028</FONT>              /**<a name="line.1028"></a>
<FONT color="green">1029</FONT>               * @see org.w3c.dom.Node<a name="line.1029"></a>
<FONT color="green">1030</FONT>               *<a name="line.1030"></a>
<FONT color="green">1031</FONT>               * @param prefix Prefix to set for this node<a name="line.1031"></a>
<FONT color="green">1032</FONT>               *<a name="line.1032"></a>
<FONT color="green">1033</FONT>               * @throws DOMException<a name="line.1033"></a>
<FONT color="green">1034</FONT>               */<a name="line.1034"></a>
<FONT color="green">1035</FONT>              public void setPrefix(String prefix) throws DOMException<a name="line.1035"></a>
<FONT color="green">1036</FONT>              {<a name="line.1036"></a>
<FONT color="green">1037</FONT>                      throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, <a name="line.1037"></a>
<FONT color="green">1038</FONT>                          XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR);<a name="line.1038"></a>
<FONT color="green">1039</FONT>              }<a name="line.1039"></a>
<FONT color="green">1040</FONT>                                                                          <a name="line.1040"></a>
<FONT color="green">1041</FONT>              /**<a name="line.1041"></a>
<FONT color="green">1042</FONT>               *<a name="line.1042"></a>
<FONT color="green">1043</FONT>               * @return The name of this attribute<a name="line.1043"></a>
<FONT color="green">1044</FONT>               */          <a name="line.1044"></a>
<FONT color="green">1045</FONT>              public String getName(){<a name="line.1045"></a>
<FONT color="green">1046</FONT>                      return m_attribute.getName();                            <a name="line.1046"></a>
<FONT color="green">1047</FONT>              }<a name="line.1047"></a>
<FONT color="green">1048</FONT>    <a name="line.1048"></a>
<FONT color="green">1049</FONT>              /**<a name="line.1049"></a>
<FONT color="green">1050</FONT>               *<a name="line.1050"></a>
<FONT color="green">1051</FONT>               * @return The value of this attribute returned as string<a name="line.1051"></a>
<FONT color="green">1052</FONT>               */          <a name="line.1052"></a>
<FONT color="green">1053</FONT>              public String getValue(){<a name="line.1053"></a>
<FONT color="green">1054</FONT>                      return m_attribute.getSimpleString();                            <a name="line.1054"></a>
<FONT color="green">1055</FONT>              }<a name="line.1055"></a>
<FONT color="green">1056</FONT>              <a name="line.1056"></a>
<FONT color="green">1057</FONT>              /**<a name="line.1057"></a>
<FONT color="green">1058</FONT>               *<a name="line.1058"></a>
<FONT color="green">1059</FONT>               * @return The Element node this attribute is attached to <a name="line.1059"></a>
<FONT color="green">1060</FONT>               * or null if this attribute is not in use<a name="line.1060"></a>
<FONT color="green">1061</FONT>               */                    <a name="line.1061"></a>
<FONT color="green">1062</FONT>              public Element getOwnerElement(){<a name="line.1062"></a>
<FONT color="green">1063</FONT>                      return m_owner;<a name="line.1063"></a>
<FONT color="green">1064</FONT>              }<a name="line.1064"></a>
<FONT color="green">1065</FONT>              <a name="line.1065"></a>
<FONT color="green">1066</FONT>              /**<a name="line.1066"></a>
<FONT color="green">1067</FONT>               *<a name="line.1067"></a>
<FONT color="green">1068</FONT>               * @return true<a name="line.1068"></a>
<FONT color="green">1069</FONT>               */          <a name="line.1069"></a>
<FONT color="green">1070</FONT>              public boolean getSpecified(){<a name="line.1070"></a>
<FONT color="green">1071</FONT>                      return true;<a name="line.1071"></a>
<FONT color="green">1072</FONT>              }<a name="line.1072"></a>
<FONT color="green">1073</FONT>              <a name="line.1073"></a>
<FONT color="green">1074</FONT>              /**<a name="line.1074"></a>
<FONT color="green">1075</FONT>               * @see org.w3c.dom.Attr<a name="line.1075"></a>
<FONT color="green">1076</FONT>               *<a name="line.1076"></a>
<FONT color="green">1077</FONT>               * @param value Value to set this node to<a name="line.1077"></a>
<FONT color="green">1078</FONT>               *<a name="line.1078"></a>
<FONT color="green">1079</FONT>               * @throws DOMException<a name="line.1079"></a>
<FONT color="green">1080</FONT>               */<a name="line.1080"></a>
<FONT color="green">1081</FONT>              public void setValue(String value) throws DOMException<a name="line.1081"></a>
<FONT color="green">1082</FONT>              {<a name="line.1082"></a>
<FONT color="green">1083</FONT>                throwDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, <a name="line.1083"></a>
<FONT color="green">1084</FONT>                    XSLTErrorResources.NO_MODIFICATION_ALLOWED_ERR); <a name="line.1084"></a>
<FONT color="green">1085</FONT>              }<a name="line.1085"></a>
<FONT color="green">1086</FONT>    <a name="line.1086"></a>
<FONT color="green">1087</FONT>              public TypeInfo getSchemaTypeInfo() { return null; }<a name="line.1087"></a>
<FONT color="green">1088</FONT>        <a name="line.1088"></a>
<FONT color="green">1089</FONT>              public boolean isId( ) { return false; }<a name="line.1089"></a>
<FONT color="green">1090</FONT>    <a name="line.1090"></a>
<FONT color="green">1091</FONT>              public Object setUserData(String key,<a name="line.1091"></a>
<FONT color="green">1092</FONT>                                        Object data,<a name="line.1092"></a>
<FONT color="green">1093</FONT>                                        UserDataHandler handler) {<a name="line.1093"></a>
<FONT color="green">1094</FONT>                    return getOwnerDocument().setUserData( key, data, handler);<a name="line.1094"></a>
<FONT color="green">1095</FONT>              }<a name="line.1095"></a>
<FONT color="green">1096</FONT>    <a name="line.1096"></a>
<FONT color="green">1097</FONT>              public Object getUserData(String key) {<a name="line.1097"></a>
<FONT color="green">1098</FONT>                    return getOwnerDocument().getUserData( key);<a name="line.1098"></a>
<FONT color="green">1099</FONT>              } <a name="line.1099"></a>
<FONT color="green">1100</FONT>    <a name="line.1100"></a>
<FONT color="green">1101</FONT>              public Object getFeature(String feature, String version) {<a name="line.1101"></a>
<FONT color="green">1102</FONT>                    return isSupported(feature, version) ? this : null;<a name="line.1102"></a>
<FONT color="green">1103</FONT>              }<a name="line.1103"></a>
<FONT color="green">1104</FONT>              <a name="line.1104"></a>
<FONT color="green">1105</FONT>              public boolean isEqualNode(Node arg) {<a name="line.1105"></a>
<FONT color="green">1106</FONT>                    return arg == this;<a name="line.1106"></a>
<FONT color="green">1107</FONT>              }<a name="line.1107"></a>
<FONT color="green">1108</FONT>              <a name="line.1108"></a>
<FONT color="green">1109</FONT>              public String lookupNamespaceURI(String specifiedPrefix) {<a name="line.1109"></a>
<FONT color="green">1110</FONT>                    return null;<a name="line.1110"></a>
<FONT color="green">1111</FONT>              }<a name="line.1111"></a>
<FONT color="green">1112</FONT>              <a name="line.1112"></a>
<FONT color="green">1113</FONT>              public boolean isDefaultNamespace(String namespaceURI) {<a name="line.1113"></a>
<FONT color="green">1114</FONT>                    return false;<a name="line.1114"></a>
<FONT color="green">1115</FONT>              }<a name="line.1115"></a>
<FONT color="green">1116</FONT>    <a name="line.1116"></a>
<FONT color="green">1117</FONT>              public String lookupPrefix(String namespaceURI) {<a name="line.1117"></a>
<FONT color="green">1118</FONT>                    return null;<a name="line.1118"></a>
<FONT color="green">1119</FONT>              }<a name="line.1119"></a>
<FONT color="green">1120</FONT>              <a name="line.1120"></a>
<FONT color="green">1121</FONT>              public boolean isSameNode(Node other) {<a name="line.1121"></a>
<FONT color="green">1122</FONT>                    // we do not use any wrapper so the answer is obvious<a name="line.1122"></a>
<FONT color="green">1123</FONT>                    return this == other;<a name="line.1123"></a>
<FONT color="green">1124</FONT>              }<a name="line.1124"></a>
<FONT color="green">1125</FONT>              <a name="line.1125"></a>
<FONT color="green">1126</FONT>              public void setTextContent(String textContent)<a name="line.1126"></a>
<FONT color="green">1127</FONT>                    throws DOMException {<a name="line.1127"></a>
<FONT color="green">1128</FONT>                    setNodeValue(textContent);<a name="line.1128"></a>
<FONT color="green">1129</FONT>              }<a name="line.1129"></a>
<FONT color="green">1130</FONT>    <a name="line.1130"></a>
<FONT color="green">1131</FONT>              public String getTextContent() throws DOMException {<a name="line.1131"></a>
<FONT color="green">1132</FONT>                    return getNodeValue();  // overriden in some subclasses<a name="line.1132"></a>
<FONT color="green">1133</FONT>              }<a name="line.1133"></a>
<FONT color="green">1134</FONT>    <a name="line.1134"></a>
<FONT color="green">1135</FONT>              public short compareDocumentPosition(Node other) throws DOMException {<a name="line.1135"></a>
<FONT color="green">1136</FONT>                    return 0;<a name="line.1136"></a>
<FONT color="green">1137</FONT>              }<a name="line.1137"></a>
<FONT color="green">1138</FONT>    <a name="line.1138"></a>
<FONT color="green">1139</FONT>              public String getBaseURI() {<a name="line.1139"></a>
<FONT color="green">1140</FONT>                    return null;<a name="line.1140"></a>
<FONT color="green">1141</FONT>              }<a name="line.1141"></a>
<FONT color="green">1142</FONT>      }        <a name="line.1142"></a>
<FONT color="green">1143</FONT>      <a name="line.1143"></a>
<FONT color="green">1144</FONT>      /**<a name="line.1144"></a>
<FONT color="green">1145</FONT>       * Get an "extension-element-prefix" property.<a name="line.1145"></a>
<FONT color="green">1146</FONT>       * @see &lt;a href="http://www.w3.org/TR/xslt#extension-element"&gt;extension-element in XSLT Specification&lt;/a&gt;<a name="line.1146"></a>
<FONT color="green">1147</FONT>       *<a name="line.1147"></a>
<FONT color="green">1148</FONT>       * @param i Index of URI ("extension-element-prefix" property) to get<a name="line.1148"></a>
<FONT color="green">1149</FONT>       *<a name="line.1149"></a>
<FONT color="green">1150</FONT>       * @return URI at given index ("extension-element-prefix" property)<a name="line.1150"></a>
<FONT color="green">1151</FONT>       *<a name="line.1151"></a>
<FONT color="green">1152</FONT>       * @throws ArrayIndexOutOfBoundsException<a name="line.1152"></a>
<FONT color="green">1153</FONT>       */<a name="line.1153"></a>
<FONT color="green">1154</FONT>      public String getExtensionElementPrefix(int i)<a name="line.1154"></a>
<FONT color="green">1155</FONT>              throws ArrayIndexOutOfBoundsException<a name="line.1155"></a>
<FONT color="green">1156</FONT>      {<a name="line.1156"></a>
<FONT color="green">1157</FONT>    <a name="line.1157"></a>
<FONT color="green">1158</FONT>        if (null == m_ExtensionElementURIs)<a name="line.1158"></a>
<FONT color="green">1159</FONT>          throw new ArrayIndexOutOfBoundsException();<a name="line.1159"></a>
<FONT color="green">1160</FONT>    <a name="line.1160"></a>
<FONT color="green">1161</FONT>        return m_ExtensionElementURIs.elementAt(i);<a name="line.1161"></a>
<FONT color="green">1162</FONT>      }<a name="line.1162"></a>
<FONT color="green">1163</FONT>    <a name="line.1163"></a>
<FONT color="green">1164</FONT>      /**<a name="line.1164"></a>
<FONT color="green">1165</FONT>       * Get the number of "extension-element-prefixes" Strings.<a name="line.1165"></a>
<FONT color="green">1166</FONT>       * @see &lt;a href="http://www.w3.org/TR/xslt#extension-element"&gt;extension-element in XSLT Specification&lt;/a&gt;<a name="line.1166"></a>
<FONT color="green">1167</FONT>       *<a name="line.1167"></a>
<FONT color="green">1168</FONT>       * @return the number of "extension-element-prefixes" Strings<a name="line.1168"></a>
<FONT color="green">1169</FONT>       */<a name="line.1169"></a>
<FONT color="green">1170</FONT>      public int getExtensionElementPrefixCount()<a name="line.1170"></a>
<FONT color="green">1171</FONT>      {<a name="line.1171"></a>
<FONT color="green">1172</FONT>        return (null != m_ExtensionElementURIs)<a name="line.1172"></a>
<FONT color="green">1173</FONT>               ? m_ExtensionElementURIs.size() : 0;<a name="line.1173"></a>
<FONT color="green">1174</FONT>      }<a name="line.1174"></a>
<FONT color="green">1175</FONT>    <a name="line.1175"></a>
<FONT color="green">1176</FONT>      /**<a name="line.1176"></a>
<FONT color="green">1177</FONT>       * Find out if the given "extension-element-prefix" property is defined.<a name="line.1177"></a>
<FONT color="green">1178</FONT>       * @see &lt;a href="http://www.w3.org/TR/xslt#extension-element"&gt;extension-element in XSLT Specification&lt;/a&gt;<a name="line.1178"></a>
<FONT color="green">1179</FONT>       *<a name="line.1179"></a>
<FONT color="green">1180</FONT>       * @param uri The URI to find<a name="line.1180"></a>
<FONT color="green">1181</FONT>       *<a name="line.1181"></a>
<FONT color="green">1182</FONT>       * @return True if the given URI is found<a name="line.1182"></a>
<FONT color="green">1183</FONT>       */<a name="line.1183"></a>
<FONT color="green">1184</FONT>      public boolean containsExtensionElementURI(String uri)<a name="line.1184"></a>
<FONT color="green">1185</FONT>      {<a name="line.1185"></a>
<FONT color="green">1186</FONT>    <a name="line.1186"></a>
<FONT color="green">1187</FONT>        if (null == m_ExtensionElementURIs)<a name="line.1187"></a>
<FONT color="green">1188</FONT>          return false;<a name="line.1188"></a>
<FONT color="green">1189</FONT>    <a name="line.1189"></a>
<FONT color="green">1190</FONT>        return m_ExtensionElementURIs.contains(uri);<a name="line.1190"></a>
<FONT color="green">1191</FONT>      }<a name="line.1191"></a>
<FONT color="green">1192</FONT>    <a name="line.1192"></a>
<FONT color="green">1193</FONT>      /**<a name="line.1193"></a>
<FONT color="green">1194</FONT>       * Get an int constant identifying the type of element.<a name="line.1194"></a>
<FONT color="green">1195</FONT>       * @see org.apache.xalan.templates.Constants<a name="line.1195"></a>
<FONT color="green">1196</FONT>       *<a name="line.1196"></a>
<FONT color="green">1197</FONT>       * @return The token ID for this element<a name="line.1197"></a>
<FONT color="green">1198</FONT>       */<a name="line.1198"></a>
<FONT color="green">1199</FONT>      public int getXSLToken()<a name="line.1199"></a>
<FONT color="green">1200</FONT>      {<a name="line.1200"></a>
<FONT color="green">1201</FONT>        return Constants.ELEMNAME_LITERALRESULT;<a name="line.1201"></a>
<FONT color="green">1202</FONT>      }<a name="line.1202"></a>
<FONT color="green">1203</FONT>    <a name="line.1203"></a>
<FONT color="green">1204</FONT>      /**<a name="line.1204"></a>
<FONT color="green">1205</FONT>       * Return the node name.<a name="line.1205"></a>
<FONT color="green">1206</FONT>       *<a name="line.1206"></a>
<FONT color="green">1207</FONT>       * @return The element's name<a name="line.1207"></a>
<FONT color="green">1208</FONT>       */<a name="line.1208"></a>
<FONT color="green">1209</FONT>      public String getNodeName()<a name="line.1209"></a>
<FONT color="green">1210</FONT>      {<a name="line.1210"></a>
<FONT color="green">1211</FONT>    <a name="line.1211"></a>
<FONT color="green">1212</FONT>        // TODO: Need prefix.<a name="line.1212"></a>
<FONT color="green">1213</FONT>        return m_rawName;<a name="line.1213"></a>
<FONT color="green">1214</FONT>      }<a name="line.1214"></a>
<FONT color="green">1215</FONT>    <a name="line.1215"></a>
<FONT color="green">1216</FONT>      /**<a name="line.1216"></a>
<FONT color="green">1217</FONT>       * The XSLT version as specified by this element.<a name="line.1217"></a>
<FONT color="green">1218</FONT>       * @serial<a name="line.1218"></a>
<FONT color="green">1219</FONT>       */<a name="line.1219"></a>
<FONT color="green">1220</FONT>      private String m_version;<a name="line.1220"></a>
<FONT color="green">1221</FONT>    <a name="line.1221"></a>
<FONT color="green">1222</FONT>      /**<a name="line.1222"></a>
<FONT color="green">1223</FONT>       * Set the "version" property.<a name="line.1223"></a>
<FONT color="green">1224</FONT>       * @see &lt;a href="http://www.w3.org/TR/xslt#forwards"&gt;forwards in XSLT Specification&lt;/a&gt;<a name="line.1224"></a>
<FONT color="green">1225</FONT>       *<a name="line.1225"></a>
<FONT color="green">1226</FONT>       * @param v Version property value to set<a name="line.1226"></a>
<FONT color="green">1227</FONT>       */<a name="line.1227"></a>
<FONT color="green">1228</FONT>      public void setVersion(String v)<a name="line.1228"></a>
<FONT color="green">1229</FONT>      {<a name="line.1229"></a>
<FONT color="green">1230</FONT>        m_version = v;<a name="line.1230"></a>
<FONT color="green">1231</FONT>      }<a name="line.1231"></a>
<FONT color="green">1232</FONT>      <a name="line.1232"></a>
<FONT color="green">1233</FONT>      /**<a name="line.1233"></a>
<FONT color="green">1234</FONT>       * Get the "version" property.<a name="line.1234"></a>
<FONT color="green">1235</FONT>       * @see &lt;a href="http://www.w3.org/TR/xslt#forwards"&gt;forwards in XSLT Specification&lt;/a&gt;<a name="line.1235"></a>
<FONT color="green">1236</FONT>       *<a name="line.1236"></a>
<FONT color="green">1237</FONT>       * @return Version property value<a name="line.1237"></a>
<FONT color="green">1238</FONT>       */<a name="line.1238"></a>
<FONT color="green">1239</FONT>      public String getVersion()<a name="line.1239"></a>
<FONT color="green">1240</FONT>      {<a name="line.1240"></a>
<FONT color="green">1241</FONT>        return m_version;<a name="line.1241"></a>
<FONT color="green">1242</FONT>      }<a name="line.1242"></a>
<FONT color="green">1243</FONT>    <a name="line.1243"></a>
<FONT color="green">1244</FONT>      /**<a name="line.1244"></a>
<FONT color="green">1245</FONT>       * The "exclude-result-prefixes" property.<a name="line.1245"></a>
<FONT color="green">1246</FONT>       * @serial<a name="line.1246"></a>
<FONT color="green">1247</FONT>       */<a name="line.1247"></a>
<FONT color="green">1248</FONT>      private StringVector m_excludeResultPrefixes;<a name="line.1248"></a>
<FONT color="green">1249</FONT>    <a name="line.1249"></a>
<FONT color="green">1250</FONT>      /**<a name="line.1250"></a>
<FONT color="green">1251</FONT>       * Set the "exclude-result-prefixes" property.<a name="line.1251"></a>
<FONT color="green">1252</FONT>       * The designation of a namespace as an excluded namespace is<a name="line.1252"></a>
<FONT color="green">1253</FONT>       * effective within the subtree of the stylesheet rooted at<a name="line.1253"></a>
<FONT color="green">1254</FONT>       * the element bearing the exclude-result-prefixes or<a name="line.1254"></a>
<FONT color="green">1255</FONT>       * xsl:exclude-result-prefixes attribute; a subtree rooted<a name="line.1255"></a>
<FONT color="green">1256</FONT>       * at an xsl:stylesheet element does not include any stylesheets<a name="line.1256"></a>
<FONT color="green">1257</FONT>       * imported or included by children of that xsl:stylesheet element.<a name="line.1257"></a>
<FONT color="green">1258</FONT>       * @see &lt;a href="http://www.w3.org/TR/xslt#literal-result-element"&gt;literal-result-element in XSLT Specification&lt;/a&gt;<a name="line.1258"></a>
<FONT color="green">1259</FONT>       *<a name="line.1259"></a>
<FONT color="green">1260</FONT>       * @param v vector of prefixes that are resolvable to strings.<a name="line.1260"></a>
<FONT color="green">1261</FONT>       */<a name="line.1261"></a>
<FONT color="green">1262</FONT>      public void setExcludeResultPrefixes(StringVector v)<a name="line.1262"></a>
<FONT color="green">1263</FONT>      {<a name="line.1263"></a>
<FONT color="green">1264</FONT>        m_excludeResultPrefixes = v;<a name="line.1264"></a>
<FONT color="green">1265</FONT>      }<a name="line.1265"></a>
<FONT color="green">1266</FONT>    <a name="line.1266"></a>
<FONT color="green">1267</FONT>      /**<a name="line.1267"></a>
<FONT color="green">1268</FONT>       * Tell if the result namespace decl should be excluded.  Should be called before<a name="line.1268"></a>
<FONT color="green">1269</FONT>       * namespace aliasing (I think).<a name="line.1269"></a>
<FONT color="green">1270</FONT>       *<a name="line.1270"></a>
<FONT color="green">1271</FONT>       * @param prefix Prefix of namespace to check<a name="line.1271"></a>
<FONT color="green">1272</FONT>       * @param uri URI of namespace to check<a name="line.1272"></a>
<FONT color="green">1273</FONT>       *<a name="line.1273"></a>
<FONT color="green">1274</FONT>       * @return True if the given namespace should be excluded<a name="line.1274"></a>
<FONT color="green">1275</FONT>       *<a name="line.1275"></a>
<FONT color="green">1276</FONT>       * @throws TransformerException<a name="line.1276"></a>
<FONT color="green">1277</FONT>       */<a name="line.1277"></a>
<FONT color="green">1278</FONT>      private boolean excludeResultNSDecl(String prefix, String uri)<a name="line.1278"></a>
<FONT color="green">1279</FONT>              throws TransformerException<a name="line.1279"></a>
<FONT color="green">1280</FONT>      {<a name="line.1280"></a>
<FONT color="green">1281</FONT>    <a name="line.1281"></a>
<FONT color="green">1282</FONT>        if (null != m_excludeResultPrefixes)<a name="line.1282"></a>
<FONT color="green">1283</FONT>        {<a name="line.1283"></a>
<FONT color="green">1284</FONT>          return containsExcludeResultPrefix(prefix, uri);<a name="line.1284"></a>
<FONT color="green">1285</FONT>        }<a name="line.1285"></a>
<FONT color="green">1286</FONT>    <a name="line.1286"></a>
<FONT color="green">1287</FONT>        return false;<a name="line.1287"></a>
<FONT color="green">1288</FONT>      }<a name="line.1288"></a>
<FONT color="green">1289</FONT>      <a name="line.1289"></a>
<FONT color="green">1290</FONT>      /**<a name="line.1290"></a>
<FONT color="green">1291</FONT>       * Copy a Literal Result Element into the Result tree, copy the<a name="line.1291"></a>
<FONT color="green">1292</FONT>       * non-excluded namespace attributes, copy the attributes not<a name="line.1292"></a>
<FONT color="green">1293</FONT>       * of the XSLT namespace, and execute the children of the LRE.<a name="line.1293"></a>
<FONT color="green">1294</FONT>       * @see &lt;a href="http://www.w3.org/TR/xslt#literal-result-element"&gt;literal-result-element in XSLT Specification&lt;/a&gt;<a name="line.1294"></a>
<FONT color="green">1295</FONT>       *<a name="line.1295"></a>
<FONT color="green">1296</FONT>       * @param transformer non-null reference to the the current transform-time state.<a name="line.1296"></a>
<FONT color="green">1297</FONT>       *<a name="line.1297"></a>
<FONT color="green">1298</FONT>       * @throws TransformerException<a name="line.1298"></a>
<FONT color="green">1299</FONT>       */<a name="line.1299"></a>
<FONT color="green">1300</FONT>        public void execute(TransformerImpl transformer)<a name="line.1300"></a>
<FONT color="green">1301</FONT>            throws TransformerException<a name="line.1301"></a>
<FONT color="green">1302</FONT>        {<a name="line.1302"></a>
<FONT color="green">1303</FONT>            SerializationHandler rhandler = transformer.getSerializationHandler();<a name="line.1303"></a>
<FONT color="green">1304</FONT>    <a name="line.1304"></a>
<FONT color="green">1305</FONT>            try<a name="line.1305"></a>
<FONT color="green">1306</FONT>            {<a name="line.1306"></a>
<FONT color="green">1307</FONT>                if (transformer.getDebug()) {<a name="line.1307"></a>
<FONT color="green">1308</FONT>                    // flush any buffered pending processing before<a name="line.1308"></a>
<FONT color="green">1309</FONT>                    // the trace event.<a name="line.1309"></a>
<FONT color="green">1310</FONT>                    rhandler.flushPending();<a name="line.1310"></a>
<FONT color="green">1311</FONT>                    transformer.getTraceManager().fireTraceEvent(this);<a name="line.1311"></a>
<FONT color="green">1312</FONT>                }<a name="line.1312"></a>
<FONT color="green">1313</FONT>    <a name="line.1313"></a>
<FONT color="green">1314</FONT>                // JJK Bugzilla 3464, test namespace85 -- make sure LRE's<a name="line.1314"></a>
<FONT color="green">1315</FONT>                // namespace is asserted even if default, since xsl:element<a name="line.1315"></a>
<FONT color="green">1316</FONT>                // may have changed the context.<a name="line.1316"></a>
<FONT color="green">1317</FONT>                rhandler.startPrefixMapping(getPrefix(), getNamespace());<a name="line.1317"></a>
<FONT color="green">1318</FONT>    <a name="line.1318"></a>
<FONT color="green">1319</FONT>                // Add namespace declarations.<a name="line.1319"></a>
<FONT color="green">1320</FONT>                executeNSDecls(transformer);<a name="line.1320"></a>
<FONT color="green">1321</FONT>                rhandler.startElement(getNamespace(), getLocalName(), getRawName());<a name="line.1321"></a>
<FONT color="green">1322</FONT>            }<a name="line.1322"></a>
<FONT color="green">1323</FONT>            catch (SAXException se)<a name="line.1323"></a>
<FONT color="green">1324</FONT>            {<a name="line.1324"></a>
<FONT color="green">1325</FONT>                throw new TransformerException(se);<a name="line.1325"></a>
<FONT color="green">1326</FONT>            }<a name="line.1326"></a>
<FONT color="green">1327</FONT>    <a name="line.1327"></a>
<FONT color="green">1328</FONT>            /*<a name="line.1328"></a>
<FONT color="green">1329</FONT>             * If we make it to here we have done a successful startElement()<a name="line.1329"></a>
<FONT color="green">1330</FONT>             * we will do an endElement() call for balance, no matter what happens<a name="line.1330"></a>
<FONT color="green">1331</FONT>             * in the middle.  <a name="line.1331"></a>
<FONT color="green">1332</FONT>             */<a name="line.1332"></a>
<FONT color="green">1333</FONT>    <a name="line.1333"></a>
<FONT color="green">1334</FONT>            // tException remembers if we had an exception "in the middle"<a name="line.1334"></a>
<FONT color="green">1335</FONT>            TransformerException tException = null;<a name="line.1335"></a>
<FONT color="green">1336</FONT>            try<a name="line.1336"></a>
<FONT color="green">1337</FONT>            {<a name="line.1337"></a>
<FONT color="green">1338</FONT>    <a name="line.1338"></a>
<FONT color="green">1339</FONT>                // Process any possible attributes from xsl:use-attribute-sets first<a name="line.1339"></a>
<FONT color="green">1340</FONT>                super.execute(transformer);<a name="line.1340"></a>
<FONT color="green">1341</FONT>    <a name="line.1341"></a>
<FONT color="green">1342</FONT>                //xsl:version, excludeResultPrefixes???<a name="line.1342"></a>
<FONT color="green">1343</FONT>                // Process the list of avts next<a name="line.1343"></a>
<FONT color="green">1344</FONT>                if (null != m_avts)<a name="line.1344"></a>
<FONT color="green">1345</FONT>                {<a name="line.1345"></a>
<FONT color="green">1346</FONT>                    int nAttrs = m_avts.size();<a name="line.1346"></a>
<FONT color="green">1347</FONT>    <a name="line.1347"></a>
<FONT color="green">1348</FONT>                    for (int i = (nAttrs - 1); i &gt;= 0; i--)<a name="line.1348"></a>
<FONT color="green">1349</FONT>                    {<a name="line.1349"></a>
<FONT color="green">1350</FONT>                        AVT avt = (AVT) m_avts.get(i);<a name="line.1350"></a>
<FONT color="green">1351</FONT>                        XPathContext xctxt = transformer.getXPathContext();<a name="line.1351"></a>
<FONT color="green">1352</FONT>                        int sourceNode = xctxt.getCurrentNode();<a name="line.1352"></a>
<FONT color="green">1353</FONT>                        String stringedValue =<a name="line.1353"></a>
<FONT color="green">1354</FONT>                            avt.evaluate(xctxt, sourceNode, this);<a name="line.1354"></a>
<FONT color="green">1355</FONT>    <a name="line.1355"></a>
<FONT color="green">1356</FONT>                        if (null != stringedValue)<a name="line.1356"></a>
<FONT color="green">1357</FONT>                        {<a name="line.1357"></a>
<FONT color="green">1358</FONT>    <a name="line.1358"></a>
<FONT color="green">1359</FONT>                            // Important Note: I'm not going to check for excluded namespace <a name="line.1359"></a>
<FONT color="green">1360</FONT>                            // prefixes here.  It seems like it's too expensive, and I'm not <a name="line.1360"></a>
<FONT color="green">1361</FONT>                            // even sure this is right.  But I could be wrong, so this needs <a name="line.1361"></a>
<FONT color="green">1362</FONT>                            // to be tested against other implementations.<a name="line.1362"></a>
<FONT color="green">1363</FONT>    <a name="line.1363"></a>
<FONT color="green">1364</FONT>                            rhandler.addAttribute(<a name="line.1364"></a>
<FONT color="green">1365</FONT>                                avt.getURI(),<a name="line.1365"></a>
<FONT color="green">1366</FONT>                                avt.getName(),<a name="line.1366"></a>
<FONT color="green">1367</FONT>                                avt.getRawName(),<a name="line.1367"></a>
<FONT color="green">1368</FONT>                                "CDATA",<a name="line.1368"></a>
<FONT color="green">1369</FONT>                                stringedValue, false);<a name="line.1369"></a>
<FONT color="green">1370</FONT>                        }<a name="line.1370"></a>
<FONT color="green">1371</FONT>                    } // end for<a name="line.1371"></a>
<FONT color="green">1372</FONT>                }<a name="line.1372"></a>
<FONT color="green">1373</FONT>    <a name="line.1373"></a>
<FONT color="green">1374</FONT>                // Now process all the elements in this subtree<a name="line.1374"></a>
<FONT color="green">1375</FONT>                // TODO: Process m_extensionElementPrefixes &amp;&amp; m_attributeSetsNames<a name="line.1375"></a>
<FONT color="green">1376</FONT>                transformer.executeChildTemplates(this, true);<a name="line.1376"></a>
<FONT color="green">1377</FONT>            }<a name="line.1377"></a>
<FONT color="green">1378</FONT>            catch (TransformerException te)<a name="line.1378"></a>
<FONT color="green">1379</FONT>            {<a name="line.1379"></a>
<FONT color="green">1380</FONT>                // thrown in finally to prevent original exception consumed by subsequent exceptions<a name="line.1380"></a>
<FONT color="green">1381</FONT>                tException = te;<a name="line.1381"></a>
<FONT color="green">1382</FONT>            }<a name="line.1382"></a>
<FONT color="green">1383</FONT>            catch (SAXException se)<a name="line.1383"></a>
<FONT color="green">1384</FONT>            {<a name="line.1384"></a>
<FONT color="green">1385</FONT>                tException = new TransformerException(se);<a name="line.1385"></a>
<FONT color="green">1386</FONT>            }<a name="line.1386"></a>
<FONT color="green">1387</FONT>    <a name="line.1387"></a>
<FONT color="green">1388</FONT>            try<a name="line.1388"></a>
<FONT color="green">1389</FONT>            {<a name="line.1389"></a>
<FONT color="green">1390</FONT>                /* we need to do this endElement() to balance the<a name="line.1390"></a>
<FONT color="green">1391</FONT>                 * successful startElement() call even if <a name="line.1391"></a>
<FONT color="green">1392</FONT>                 * there was an exception in the middle.<a name="line.1392"></a>
<FONT color="green">1393</FONT>                 * Otherwise an exception in the middle could cause a system to hang.<a name="line.1393"></a>
<FONT color="green">1394</FONT>                 */<a name="line.1394"></a>
<FONT color="green">1395</FONT>                if (transformer.getDebug()) {<a name="line.1395"></a>
<FONT color="green">1396</FONT>                    // flush any buffered pending processing before<a name="line.1396"></a>
<FONT color="green">1397</FONT>                    // the trace event.<a name="line.1397"></a>
<FONT color="green">1398</FONT>                    //rhandler.flushPending();<a name="line.1398"></a>
<FONT color="green">1399</FONT>                    transformer.getTraceManager().fireTraceEndEvent(this);<a name="line.1399"></a>
<FONT color="green">1400</FONT>                }<a name="line.1400"></a>
<FONT color="green">1401</FONT>                rhandler.endElement(getNamespace(), getLocalName(), getRawName());<a name="line.1401"></a>
<FONT color="green">1402</FONT>            }<a name="line.1402"></a>
<FONT color="green">1403</FONT>            catch (SAXException se)<a name="line.1403"></a>
<FONT color="green">1404</FONT>            {<a name="line.1404"></a>
<FONT color="green">1405</FONT>                /* we did call endElement(). If thee was an exception<a name="line.1405"></a>
<FONT color="green">1406</FONT>                 * in the middle throw that one, otherwise if there<a name="line.1406"></a>
<FONT color="green">1407</FONT>                 * was an exception from endElement() throw that one.<a name="line.1407"></a>
<FONT color="green">1408</FONT>                 */<a name="line.1408"></a>
<FONT color="green">1409</FONT>                if (tException != null)<a name="line.1409"></a>
<FONT color="green">1410</FONT>                    throw tException;<a name="line.1410"></a>
<FONT color="green">1411</FONT>                else<a name="line.1411"></a>
<FONT color="green">1412</FONT>                    throw new TransformerException(se);<a name="line.1412"></a>
<FONT color="green">1413</FONT>            }<a name="line.1413"></a>
<FONT color="green">1414</FONT>            <a name="line.1414"></a>
<FONT color="green">1415</FONT>            /* If an exception was thrown in the middle but not with startElement() or<a name="line.1415"></a>
<FONT color="green">1416</FONT>             * or endElement() then its time to let it percolate.<a name="line.1416"></a>
<FONT color="green">1417</FONT>             */ <a name="line.1417"></a>
<FONT color="green">1418</FONT>            if (tException != null)<a name="line.1418"></a>
<FONT color="green">1419</FONT>                throw tException; <a name="line.1419"></a>
<FONT color="green">1420</FONT>            <a name="line.1420"></a>
<FONT color="green">1421</FONT>            unexecuteNSDecls(transformer);<a name="line.1421"></a>
<FONT color="green">1422</FONT>    <a name="line.1422"></a>
<FONT color="green">1423</FONT>            // JJK Bugzilla 3464, test namespace85 -- balance explicit start.<a name="line.1423"></a>
<FONT color="green">1424</FONT>            try<a name="line.1424"></a>
<FONT color="green">1425</FONT>            {<a name="line.1425"></a>
<FONT color="green">1426</FONT>                rhandler.endPrefixMapping(getPrefix());<a name="line.1426"></a>
<FONT color="green">1427</FONT>            }<a name="line.1427"></a>
<FONT color="green">1428</FONT>            catch (SAXException se)<a name="line.1428"></a>
<FONT color="green">1429</FONT>            {<a name="line.1429"></a>
<FONT color="green">1430</FONT>                throw new TransformerException(se);<a name="line.1430"></a>
<FONT color="green">1431</FONT>            }<a name="line.1431"></a>
<FONT color="green">1432</FONT>        }<a name="line.1432"></a>
<FONT color="green">1433</FONT>    <a name="line.1433"></a>
<FONT color="green">1434</FONT>      /**<a name="line.1434"></a>
<FONT color="green">1435</FONT>       * Compiling templates requires that we be able to list the AVTs<a name="line.1435"></a>
<FONT color="green">1436</FONT>       * ADDED 9/5/2000 to support compilation experiment<a name="line.1436"></a>
<FONT color="green">1437</FONT>       *<a name="line.1437"></a>
<FONT color="green">1438</FONT>       * @return an Enumeration of the literal result attributes associated<a name="line.1438"></a>
<FONT color="green">1439</FONT>       * with this element.<a name="line.1439"></a>
<FONT color="green">1440</FONT>       */<a name="line.1440"></a>
<FONT color="green">1441</FONT>      public Iterator enumerateLiteralResultAttributes()<a name="line.1441"></a>
<FONT color="green">1442</FONT>      {<a name="line.1442"></a>
<FONT color="green">1443</FONT>        return (null == m_avts) ? null : m_avts.iterator();<a name="line.1443"></a>
<FONT color="green">1444</FONT>      }<a name="line.1444"></a>
<FONT color="green">1445</FONT>      <a name="line.1445"></a>
<FONT color="green">1446</FONT>        /**<a name="line.1446"></a>
<FONT color="green">1447</FONT>         * Accept a visitor and call the appropriate method <a name="line.1447"></a>
<FONT color="green">1448</FONT>         * for this class.<a name="line.1448"></a>
<FONT color="green">1449</FONT>         * <a name="line.1449"></a>
<FONT color="green">1450</FONT>         * @param visitor The visitor whose appropriate method will be called.<a name="line.1450"></a>
<FONT color="green">1451</FONT>         * @return true if the children of the object should be visited.<a name="line.1451"></a>
<FONT color="green">1452</FONT>         */<a name="line.1452"></a>
<FONT color="green">1453</FONT>        protected boolean accept(XSLTVisitor visitor)<a name="line.1453"></a>
<FONT color="green">1454</FONT>        {<a name="line.1454"></a>
<FONT color="green">1455</FONT>          return visitor.visitLiteralResultElement(this);<a name="line.1455"></a>
<FONT color="green">1456</FONT>        }<a name="line.1456"></a>
<FONT color="green">1457</FONT>    <a name="line.1457"></a>
<FONT color="green">1458</FONT>        /**<a name="line.1458"></a>
<FONT color="green">1459</FONT>         * Call the children visitors.<a name="line.1459"></a>
<FONT color="green">1460</FONT>         * @param visitor The visitor whose appropriate method will be called.<a name="line.1460"></a>
<FONT color="green">1461</FONT>         */<a name="line.1461"></a>
<FONT color="green">1462</FONT>        protected void callChildVisitors(XSLTVisitor visitor, boolean callAttrs)<a name="line.1462"></a>
<FONT color="green">1463</FONT>        {<a name="line.1463"></a>
<FONT color="green">1464</FONT>          if (callAttrs &amp;&amp; null != m_avts)<a name="line.1464"></a>
<FONT color="green">1465</FONT>          {<a name="line.1465"></a>
<FONT color="green">1466</FONT>            int nAttrs = m_avts.size();<a name="line.1466"></a>
<FONT color="green">1467</FONT>    <a name="line.1467"></a>
<FONT color="green">1468</FONT>            for (int i = (nAttrs - 1); i &gt;= 0; i--)<a name="line.1468"></a>
<FONT color="green">1469</FONT>            {<a name="line.1469"></a>
<FONT color="green">1470</FONT>              AVT avt = (AVT) m_avts.get(i);<a name="line.1470"></a>
<FONT color="green">1471</FONT>              avt.callVisitors(visitor);<a name="line.1471"></a>
<FONT color="green">1472</FONT>            }<a name="line.1472"></a>
<FONT color="green">1473</FONT>          }<a name="line.1473"></a>
<FONT color="green">1474</FONT>          super.callChildVisitors(visitor, callAttrs);<a name="line.1474"></a>
<FONT color="green">1475</FONT>        }<a name="line.1475"></a>
<FONT color="green">1476</FONT>    <a name="line.1476"></a>
<FONT color="green">1477</FONT>        /**<a name="line.1477"></a>
<FONT color="green">1478</FONT>         * Throw a DOMException<a name="line.1478"></a>
<FONT color="green">1479</FONT>         *<a name="line.1479"></a>
<FONT color="green">1480</FONT>         * @param msg key of the error that occured.<a name="line.1480"></a>
<FONT color="green">1481</FONT>         */<a name="line.1481"></a>
<FONT color="green">1482</FONT>        public void throwDOMException(short code, String msg)<a name="line.1482"></a>
<FONT color="green">1483</FONT>        {<a name="line.1483"></a>
<FONT color="green">1484</FONT>    <a name="line.1484"></a>
<FONT color="green">1485</FONT>          String themsg = XSLMessages.createMessage(msg, null);<a name="line.1485"></a>
<FONT color="green">1486</FONT>    <a name="line.1486"></a>
<FONT color="green">1487</FONT>          throw new DOMException(code, themsg);<a name="line.1487"></a>
<FONT color="green">1488</FONT>        }<a name="line.1488"></a>
<FONT color="green">1489</FONT>    <a name="line.1489"></a>
<FONT color="green">1490</FONT>    }<a name="line.1490"></a>




























































</PRE>
</BODY>
</HTML>
