<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: FuncDocument.java 468643 2006-10-28 06:56:03Z minchau $<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.io.IOException;<a name="line.23"></a>
<FONT color="green">024</FONT>    import java.io.PrintWriter;<a name="line.24"></a>
<FONT color="green">025</FONT>    import java.io.StringWriter;<a name="line.25"></a>
<FONT color="green">026</FONT>    <a name="line.26"></a>
<FONT color="green">027</FONT>    import javax.xml.transform.ErrorListener;<a name="line.27"></a>
<FONT color="green">028</FONT>    import javax.xml.transform.Source;<a name="line.28"></a>
<FONT color="green">029</FONT>    import javax.xml.transform.SourceLocator;<a name="line.29"></a>
<FONT color="green">030</FONT>    import javax.xml.transform.TransformerException;<a name="line.30"></a>
<FONT color="green">031</FONT>    <a name="line.31"></a>
<FONT color="green">032</FONT>    import org.apache.xalan.res.XSLMessages;<a name="line.32"></a>
<FONT color="green">033</FONT>    import org.apache.xalan.res.XSLTErrorResources;<a name="line.33"></a>
<FONT color="green">034</FONT>    import org.apache.xml.dtm.DTM;<a name="line.34"></a>
<FONT color="green">035</FONT>    import org.apache.xml.dtm.DTMIterator;<a name="line.35"></a>
<FONT color="green">036</FONT>    import org.apache.xml.utils.XMLString;<a name="line.36"></a>
<FONT color="green">037</FONT>    import org.apache.xpath.Expression;<a name="line.37"></a>
<FONT color="green">038</FONT>    import org.apache.xpath.NodeSetDTM;<a name="line.38"></a>
<FONT color="green">039</FONT>    import org.apache.xpath.SourceTreeManager;<a name="line.39"></a>
<FONT color="green">040</FONT>    import org.apache.xpath.XPathContext;<a name="line.40"></a>
<FONT color="green">041</FONT>    import org.apache.xpath.functions.Function2Args;<a name="line.41"></a>
<FONT color="green">042</FONT>    import org.apache.xpath.functions.WrongNumberArgsException;<a name="line.42"></a>
<FONT color="green">043</FONT>    import org.apache.xpath.objects.XNodeSet;<a name="line.43"></a>
<FONT color="green">044</FONT>    import org.apache.xpath.objects.XObject;<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>     * Execute the Doc() function.<a name="line.47"></a>
<FONT color="green">048</FONT>     *<a name="line.48"></a>
<FONT color="green">049</FONT>     * When the document function has exactly one argument and the argument<a name="line.49"></a>
<FONT color="green">050</FONT>     * is a node-set, then the result is the union, for each node in the<a name="line.50"></a>
<FONT color="green">051</FONT>     * argument node-set, of the result of calling the document function with<a name="line.51"></a>
<FONT color="green">052</FONT>     * the first argument being the string-value of the node, and the second<a name="line.52"></a>
<FONT color="green">053</FONT>     * argument being a node-set with the node as its only member. When the<a name="line.53"></a>
<FONT color="green">054</FONT>     * document function has two arguments and the first argument is a node-set,<a name="line.54"></a>
<FONT color="green">055</FONT>     * then the result is the union, for each node in the argument node-set,<a name="line.55"></a>
<FONT color="green">056</FONT>     * of the result of calling the document function with the first argument<a name="line.56"></a>
<FONT color="green">057</FONT>     * being the string-value of the node, and with the second argument being<a name="line.57"></a>
<FONT color="green">058</FONT>     * the second argument passed to the document function.<a name="line.58"></a>
<FONT color="green">059</FONT>     * @xsl.usage advanced<a name="line.59"></a>
<FONT color="green">060</FONT>     */<a name="line.60"></a>
<FONT color="green">061</FONT>    public class FuncDocument extends Function2Args<a name="line.61"></a>
<FONT color="green">062</FONT>    {<a name="line.62"></a>
<FONT color="green">063</FONT>        static final long serialVersionUID = 2483304325971281424L;<a name="line.63"></a>
<FONT color="green">064</FONT>    <a name="line.64"></a>
<FONT color="green">065</FONT>      /**<a name="line.65"></a>
<FONT color="green">066</FONT>       * Execute the function.  The function must return<a name="line.66"></a>
<FONT color="green">067</FONT>       * a valid object.<a name="line.67"></a>
<FONT color="green">068</FONT>       * @param xctxt The current execution context.<a name="line.68"></a>
<FONT color="green">069</FONT>       * @return A valid XObject.<a name="line.69"></a>
<FONT color="green">070</FONT>       *<a name="line.70"></a>
<FONT color="green">071</FONT>       * @throws javax.xml.transform.TransformerException<a name="line.71"></a>
<FONT color="green">072</FONT>       */<a name="line.72"></a>
<FONT color="green">073</FONT>      public XObject execute(XPathContext xctxt) throws javax.xml.transform.TransformerException<a name="line.73"></a>
<FONT color="green">074</FONT>      {<a name="line.74"></a>
<FONT color="green">075</FONT>        int context = xctxt.getCurrentNode();<a name="line.75"></a>
<FONT color="green">076</FONT>        DTM dtm = xctxt.getDTM(context);<a name="line.76"></a>
<FONT color="green">077</FONT>        <a name="line.77"></a>
<FONT color="green">078</FONT>        int docContext = dtm.getDocumentRoot(context);<a name="line.78"></a>
<FONT color="green">079</FONT>        XObject arg = (XObject) this.getArg0().execute(xctxt);<a name="line.79"></a>
<FONT color="green">080</FONT>    <a name="line.80"></a>
<FONT color="green">081</FONT>        String base = "";<a name="line.81"></a>
<FONT color="green">082</FONT>        Expression arg1Expr = this.getArg1();<a name="line.82"></a>
<FONT color="green">083</FONT>    <a name="line.83"></a>
<FONT color="green">084</FONT>        if (null != arg1Expr)<a name="line.84"></a>
<FONT color="green">085</FONT>        {<a name="line.85"></a>
<FONT color="green">086</FONT>    <a name="line.86"></a>
<FONT color="green">087</FONT>          // The URI reference may be relative. The base URI (see [3.2 Base URI]) <a name="line.87"></a>
<FONT color="green">088</FONT>          // of the node in the second argument node-set that is first in document <a name="line.88"></a>
<FONT color="green">089</FONT>          // order is used as the base URI for resolving the <a name="line.89"></a>
<FONT color="green">090</FONT>          // relative URI into an absolute URI. <a name="line.90"></a>
<FONT color="green">091</FONT>          XObject arg2 = arg1Expr.execute(xctxt);<a name="line.91"></a>
<FONT color="green">092</FONT>    <a name="line.92"></a>
<FONT color="green">093</FONT>          if (XObject.CLASS_NODESET == arg2.getType())<a name="line.93"></a>
<FONT color="green">094</FONT>          {<a name="line.94"></a>
<FONT color="green">095</FONT>            int baseNode = arg2.iter().nextNode();<a name="line.95"></a>
<FONT color="green">096</FONT>    <a name="line.96"></a>
<FONT color="green">097</FONT>            if (baseNode == DTM.NULL)<a name="line.97"></a>
<FONT color="green">098</FONT>            {<a name="line.98"></a>
<FONT color="green">099</FONT>                // See http://www.w3.org/1999/11/REC-xslt-19991116-errata#E14.<a name="line.99"></a>
<FONT color="green">100</FONT>                // If the second argument is an empty nodeset, this is an error.<a name="line.100"></a>
<FONT color="green">101</FONT>                // The processor can recover by returning an empty nodeset.<a name="line.101"></a>
<FONT color="green">102</FONT>                    warn(xctxt, XSLTErrorResources.WG_EMPTY_SECOND_ARG, null);<a name="line.102"></a>
<FONT color="green">103</FONT>                    XNodeSet nodes = new XNodeSet(xctxt.getDTMManager());<a name="line.103"></a>
<FONT color="green">104</FONT>                    return nodes;<a name="line.104"></a>
<FONT color="green">105</FONT>            } else{<a name="line.105"></a>
<FONT color="green">106</FONT>                    DTM baseDTM = xctxt.getDTM(baseNode);<a name="line.106"></a>
<FONT color="green">107</FONT>                base = baseDTM.getDocumentBaseURI();<a name="line.107"></a>
<FONT color="green">108</FONT>            }<a name="line.108"></a>
<FONT color="green">109</FONT>            // %REVIEW% This doesn't seem to be a problem with the conformance<a name="line.109"></a>
<FONT color="green">110</FONT>            // suite, but maybe it's just not doing a good test?<a name="line.110"></a>
<FONT color="green">111</FONT>    //        int baseDoc = baseDTM.getDocument();<a name="line.111"></a>
<FONT color="green">112</FONT>    //<a name="line.112"></a>
<FONT color="green">113</FONT>    //        if (baseDoc == DTM.NULL /* || baseDoc instanceof Stylesheet  --&gt;What to do?? */)<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>    //          // base = ((Stylesheet)baseDoc).getBaseIdentifier();<a name="line.116"></a>
<FONT color="green">117</FONT>    //          base = xctxt.getNamespaceContext().getBaseIdentifier();<a name="line.117"></a>
<FONT color="green">118</FONT>    //        }<a name="line.118"></a>
<FONT color="green">119</FONT>    //        else<a name="line.119"></a>
<FONT color="green">120</FONT>    //          base = xctxt.getSourceTreeManager().findURIFromDoc(baseDoc);<a name="line.120"></a>
<FONT color="green">121</FONT>          }<a name="line.121"></a>
<FONT color="green">122</FONT>          else<a name="line.122"></a>
<FONT color="green">123</FONT>          {<a name="line.123"></a>
<FONT color="green">124</FONT>            //Can not convert other type to a node-set!;<a name="line.124"></a>
<FONT color="green">125</FONT>            arg2.iter();<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>        else<a name="line.128"></a>
<FONT color="green">129</FONT>        {<a name="line.129"></a>
<FONT color="green">130</FONT>    <a name="line.130"></a>
<FONT color="green">131</FONT>          // If the second argument is omitted, then it defaults to <a name="line.131"></a>
<FONT color="green">132</FONT>          // the node in the stylesheet that contains the expression that <a name="line.132"></a>
<FONT color="green">133</FONT>          // includes the call to the document function. Note that a <a name="line.133"></a>
<FONT color="green">134</FONT>          // zero-length URI reference is a reference to the document <a name="line.134"></a>
<FONT color="green">135</FONT>          // relative to which the URI reference is being resolved; thus <a name="line.135"></a>
<FONT color="green">136</FONT>          // document("") refers to the root node of the stylesheet; <a name="line.136"></a>
<FONT color="green">137</FONT>          // the tree representation of the stylesheet is exactly <a name="line.137"></a>
<FONT color="green">138</FONT>          // the same as if the XML document containing the stylesheet <a name="line.138"></a>
<FONT color="green">139</FONT>          // was the initial source document.<a name="line.139"></a>
<FONT color="green">140</FONT>          assertion(null != xctxt.getNamespaceContext(), "Namespace context can not be null!");<a name="line.140"></a>
<FONT color="green">141</FONT>          base = xctxt.getNamespaceContext().getBaseIdentifier();<a name="line.141"></a>
<FONT color="green">142</FONT>        }<a name="line.142"></a>
<FONT color="green">143</FONT>    <a name="line.143"></a>
<FONT color="green">144</FONT>        XNodeSet nodes = new XNodeSet(xctxt.getDTMManager());<a name="line.144"></a>
<FONT color="green">145</FONT>        NodeSetDTM mnl = nodes.mutableNodeset();<a name="line.145"></a>
<FONT color="green">146</FONT>        DTMIterator iterator = (XObject.CLASS_NODESET == arg.getType())<a name="line.146"></a>
<FONT color="green">147</FONT>                                ? arg.iter() : null;<a name="line.147"></a>
<FONT color="green">148</FONT>        int pos = DTM.NULL;<a name="line.148"></a>
<FONT color="green">149</FONT>    <a name="line.149"></a>
<FONT color="green">150</FONT>        while ((null == iterator) || (DTM.NULL != (pos = iterator.nextNode())))<a name="line.150"></a>
<FONT color="green">151</FONT>        {<a name="line.151"></a>
<FONT color="green">152</FONT>          XMLString ref = (null != iterator)<a name="line.152"></a>
<FONT color="green">153</FONT>                       ? xctxt.getDTM(pos).getStringValue(pos) : arg.xstr();<a name="line.153"></a>
<FONT color="green">154</FONT>          <a name="line.154"></a>
<FONT color="green">155</FONT>          // The first and only argument was a nodeset, the base in that<a name="line.155"></a>
<FONT color="green">156</FONT>          // case is the base URI of the node from the first argument nodeset. <a name="line.156"></a>
<FONT color="green">157</FONT>          // Remember, when the document function has exactly one argument and<a name="line.157"></a>
<FONT color="green">158</FONT>          // the argument is a node-set, then the result is the union, for each<a name="line.158"></a>
<FONT color="green">159</FONT>          // node in the argument node-set, of the result of calling the document<a name="line.159"></a>
<FONT color="green">160</FONT>          // function with the first argument being the string-value of the node,<a name="line.160"></a>
<FONT color="green">161</FONT>          // and the second argument being a node-set with the node as its only <a name="line.161"></a>
<FONT color="green">162</FONT>          // member.<a name="line.162"></a>
<FONT color="green">163</FONT>          if (null == arg1Expr &amp;&amp; DTM.NULL != pos)<a name="line.163"></a>
<FONT color="green">164</FONT>          {<a name="line.164"></a>
<FONT color="green">165</FONT>            DTM baseDTM = xctxt.getDTM(pos);<a name="line.165"></a>
<FONT color="green">166</FONT>            base = baseDTM.getDocumentBaseURI();<a name="line.166"></a>
<FONT color="green">167</FONT>          }<a name="line.167"></a>
<FONT color="green">168</FONT>    <a name="line.168"></a>
<FONT color="green">169</FONT>          if (null == ref)<a name="line.169"></a>
<FONT color="green">170</FONT>            continue;<a name="line.170"></a>
<FONT color="green">171</FONT>    <a name="line.171"></a>
<FONT color="green">172</FONT>          if (DTM.NULL == docContext)<a name="line.172"></a>
<FONT color="green">173</FONT>          {<a name="line.173"></a>
<FONT color="green">174</FONT>            error(xctxt, XSLTErrorResources.ER_NO_CONTEXT_OWNERDOC, null);  //"context does not have an owner document!");<a name="line.174"></a>
<FONT color="green">175</FONT>          }<a name="line.175"></a>
<FONT color="green">176</FONT>    <a name="line.176"></a>
<FONT color="green">177</FONT>          // From http://www.ics.uci.edu/pub/ietf/uri/rfc1630.txt<a name="line.177"></a>
<FONT color="green">178</FONT>          // A partial form can be distinguished from an absolute form in that the<a name="line.178"></a>
<FONT color="green">179</FONT>          // latter must have a colon and that colon must occur before any slash<a name="line.179"></a>
<FONT color="green">180</FONT>          // characters. Systems not requiring partial forms should not use any<a name="line.180"></a>
<FONT color="green">181</FONT>          // unencoded slashes in their naming schemes.  If they do, absolute URIs<a name="line.181"></a>
<FONT color="green">182</FONT>          // will still work, but confusion may result.<a name="line.182"></a>
<FONT color="green">183</FONT>          int indexOfColon = ref.indexOf(':');<a name="line.183"></a>
<FONT color="green">184</FONT>          int indexOfSlash = ref.indexOf('/');<a name="line.184"></a>
<FONT color="green">185</FONT>    <a name="line.185"></a>
<FONT color="green">186</FONT>          if ((indexOfColon != -1) &amp;&amp; (indexOfSlash != -1)<a name="line.186"></a>
<FONT color="green">187</FONT>                  &amp;&amp; (indexOfColon &lt; indexOfSlash))<a name="line.187"></a>
<FONT color="green">188</FONT>          {<a name="line.188"></a>
<FONT color="green">189</FONT>    <a name="line.189"></a>
<FONT color="green">190</FONT>            // The url (or filename, for that matter) is absolute.<a name="line.190"></a>
<FONT color="green">191</FONT>            base = null;<a name="line.191"></a>
<FONT color="green">192</FONT>          }<a name="line.192"></a>
<FONT color="green">193</FONT>    <a name="line.193"></a>
<FONT color="green">194</FONT>          int newDoc = getDoc(xctxt, context, ref.toString(), base);<a name="line.194"></a>
<FONT color="green">195</FONT>    <a name="line.195"></a>
<FONT color="green">196</FONT>          // nodes.mutableNodeset().addNode(newDoc);  <a name="line.196"></a>
<FONT color="green">197</FONT>          if (DTM.NULL != newDoc)<a name="line.197"></a>
<FONT color="green">198</FONT>          {<a name="line.198"></a>
<FONT color="green">199</FONT>            // TODO: mnl.addNodeInDocOrder(newDoc, true, xctxt); ??<a name="line.199"></a>
<FONT color="green">200</FONT>            if (!mnl.contains(newDoc))<a name="line.200"></a>
<FONT color="green">201</FONT>            {<a name="line.201"></a>
<FONT color="green">202</FONT>              mnl.addElement(newDoc);<a name="line.202"></a>
<FONT color="green">203</FONT>            }<a name="line.203"></a>
<FONT color="green">204</FONT>          }<a name="line.204"></a>
<FONT color="green">205</FONT>    <a name="line.205"></a>
<FONT color="green">206</FONT>          if (null == iterator || newDoc == DTM.NULL)<a name="line.206"></a>
<FONT color="green">207</FONT>            break;<a name="line.207"></a>
<FONT color="green">208</FONT>        }<a name="line.208"></a>
<FONT color="green">209</FONT>    <a name="line.209"></a>
<FONT color="green">210</FONT>        return nodes;<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>      /**<a name="line.213"></a>
<FONT color="green">214</FONT>       * Get the document from the given URI and base<a name="line.214"></a>
<FONT color="green">215</FONT>       *<a name="line.215"></a>
<FONT color="green">216</FONT>       * @param xctxt The XPath runtime state.<a name="line.216"></a>
<FONT color="green">217</FONT>       * @param context The current context node<a name="line.217"></a>
<FONT color="green">218</FONT>       * @param uri Relative(?) URI of the document<a name="line.218"></a>
<FONT color="green">219</FONT>       * @param base Base to resolve relative URI from.<a name="line.219"></a>
<FONT color="green">220</FONT>       *<a name="line.220"></a>
<FONT color="green">221</FONT>       * @return The document Node pointing to the document at the given URI<a name="line.221"></a>
<FONT color="green">222</FONT>       * or null<a name="line.222"></a>
<FONT color="green">223</FONT>       *<a name="line.223"></a>
<FONT color="green">224</FONT>       * @throws javax.xml.transform.TransformerException<a name="line.224"></a>
<FONT color="green">225</FONT>       */<a name="line.225"></a>
<FONT color="green">226</FONT>      int getDoc(XPathContext xctxt, int context, String uri, String base)<a name="line.226"></a>
<FONT color="green">227</FONT>              throws javax.xml.transform.TransformerException<a name="line.227"></a>
<FONT color="green">228</FONT>      {<a name="line.228"></a>
<FONT color="green">229</FONT>    <a name="line.229"></a>
<FONT color="green">230</FONT>        // System.out.println("base: "+base+", uri: "+uri);<a name="line.230"></a>
<FONT color="green">231</FONT>        SourceTreeManager treeMgr = xctxt.getSourceTreeManager();<a name="line.231"></a>
<FONT color="green">232</FONT>        Source source;<a name="line.232"></a>
<FONT color="green">233</FONT>       <a name="line.233"></a>
<FONT color="green">234</FONT>        int newDoc;<a name="line.234"></a>
<FONT color="green">235</FONT>        try<a name="line.235"></a>
<FONT color="green">236</FONT>        {<a name="line.236"></a>
<FONT color="green">237</FONT>          source = treeMgr.resolveURI(base, uri, xctxt.getSAXLocator());<a name="line.237"></a>
<FONT color="green">238</FONT>          newDoc = treeMgr.getNode(source);<a name="line.238"></a>
<FONT color="green">239</FONT>        }<a name="line.239"></a>
<FONT color="green">240</FONT>        catch (IOException ioe)<a name="line.240"></a>
<FONT color="green">241</FONT>        {<a name="line.241"></a>
<FONT color="green">242</FONT>          throw new TransformerException(ioe.getMessage(), <a name="line.242"></a>
<FONT color="green">243</FONT>            (SourceLocator)xctxt.getSAXLocator(), ioe);<a name="line.243"></a>
<FONT color="green">244</FONT>        }<a name="line.244"></a>
<FONT color="green">245</FONT>        catch(TransformerException te)<a name="line.245"></a>
<FONT color="green">246</FONT>        {<a name="line.246"></a>
<FONT color="green">247</FONT>          throw new TransformerException(te);<a name="line.247"></a>
<FONT color="green">248</FONT>        }<a name="line.248"></a>
<FONT color="green">249</FONT>    <a name="line.249"></a>
<FONT color="green">250</FONT>        if (DTM.NULL != newDoc)<a name="line.250"></a>
<FONT color="green">251</FONT>          return newDoc;<a name="line.251"></a>
<FONT color="green">252</FONT>    <a name="line.252"></a>
<FONT color="green">253</FONT>        // If the uri length is zero, get the uri of the stylesheet.<a name="line.253"></a>
<FONT color="green">254</FONT>        if (uri.length() == 0)<a name="line.254"></a>
<FONT color="green">255</FONT>        {<a name="line.255"></a>
<FONT color="green">256</FONT>          // Hmmm... this seems pretty bogus to me... -sb<a name="line.256"></a>
<FONT color="green">257</FONT>          uri = xctxt.getNamespaceContext().getBaseIdentifier();<a name="line.257"></a>
<FONT color="green">258</FONT>          try<a name="line.258"></a>
<FONT color="green">259</FONT>          {<a name="line.259"></a>
<FONT color="green">260</FONT>            source = treeMgr.resolveURI(base, uri, xctxt.getSAXLocator());<a name="line.260"></a>
<FONT color="green">261</FONT>          }<a name="line.261"></a>
<FONT color="green">262</FONT>          catch (IOException ioe)<a name="line.262"></a>
<FONT color="green">263</FONT>          {<a name="line.263"></a>
<FONT color="green">264</FONT>            throw new TransformerException(ioe.getMessage(), <a name="line.264"></a>
<FONT color="green">265</FONT>              (SourceLocator)xctxt.getSAXLocator(), ioe);<a name="line.265"></a>
<FONT color="green">266</FONT>          }<a name="line.266"></a>
<FONT color="green">267</FONT>        }<a name="line.267"></a>
<FONT color="green">268</FONT>    <a name="line.268"></a>
<FONT color="green">269</FONT>        String diagnosticsString = null;<a name="line.269"></a>
<FONT color="green">270</FONT>    <a name="line.270"></a>
<FONT color="green">271</FONT>        try<a name="line.271"></a>
<FONT color="green">272</FONT>        {<a name="line.272"></a>
<FONT color="green">273</FONT>          if ((null != uri) &amp;&amp; (uri.length() &gt; 0))<a name="line.273"></a>
<FONT color="green">274</FONT>          {<a name="line.274"></a>
<FONT color="green">275</FONT>            newDoc = treeMgr.getSourceTree(source, xctxt.getSAXLocator(), xctxt);<a name="line.275"></a>
<FONT color="green">276</FONT>    <a name="line.276"></a>
<FONT color="green">277</FONT>            // System.out.println("newDoc: "+((Document)newDoc).getDocumentElement().getNodeName());<a name="line.277"></a>
<FONT color="green">278</FONT>          }<a name="line.278"></a>
<FONT color="green">279</FONT>          else<a name="line.279"></a>
<FONT color="green">280</FONT>            warn(xctxt, XSLTErrorResources.WG_CANNOT_MAKE_URL_FROM,<a name="line.280"></a>
<FONT color="green">281</FONT>                 new Object[]{ ((base == null) ? "" : base) + uri });  //"Can not make URL from: "+((base == null) ? "" : base )+uri);<a name="line.281"></a>
<FONT color="green">282</FONT>        }<a name="line.282"></a>
<FONT color="green">283</FONT>        catch (Throwable throwable)<a name="line.283"></a>
<FONT color="green">284</FONT>        {<a name="line.284"></a>
<FONT color="green">285</FONT>    <a name="line.285"></a>
<FONT color="green">286</FONT>          // throwable.printStackTrace();<a name="line.286"></a>
<FONT color="green">287</FONT>          newDoc = DTM.NULL;<a name="line.287"></a>
<FONT color="green">288</FONT>    <a name="line.288"></a>
<FONT color="green">289</FONT>          // path.warn(XSLTErrorResources.WG_ENCODING_NOT_SUPPORTED_USING_JAVA, new Object[]{((base == null) ? "" : base )+uri}); //"Can not load requested doc: "+((base == null) ? "" : base )+uri);<a name="line.289"></a>
<FONT color="green">290</FONT>          while (throwable<a name="line.290"></a>
<FONT color="green">291</FONT>                 instanceof org.apache.xml.utils.WrappedRuntimeException)<a name="line.291"></a>
<FONT color="green">292</FONT>          {<a name="line.292"></a>
<FONT color="green">293</FONT>            throwable =<a name="line.293"></a>
<FONT color="green">294</FONT>              ((org.apache.xml.utils.WrappedRuntimeException) throwable).getException();<a name="line.294"></a>
<FONT color="green">295</FONT>          }<a name="line.295"></a>
<FONT color="green">296</FONT>    <a name="line.296"></a>
<FONT color="green">297</FONT>          if ((throwable instanceof NullPointerException)<a name="line.297"></a>
<FONT color="green">298</FONT>                  || (throwable instanceof ClassCastException))<a name="line.298"></a>
<FONT color="green">299</FONT>          {<a name="line.299"></a>
<FONT color="green">300</FONT>            throw new org.apache.xml.utils.WrappedRuntimeException(<a name="line.300"></a>
<FONT color="green">301</FONT>              (Exception) throwable);<a name="line.301"></a>
<FONT color="green">302</FONT>          }<a name="line.302"></a>
<FONT color="green">303</FONT>    <a name="line.303"></a>
<FONT color="green">304</FONT>          StringWriter sw = new StringWriter();<a name="line.304"></a>
<FONT color="green">305</FONT>          PrintWriter diagnosticsWriter = new PrintWriter(sw);<a name="line.305"></a>
<FONT color="green">306</FONT>    <a name="line.306"></a>
<FONT color="green">307</FONT>          if (throwable instanceof TransformerException)<a name="line.307"></a>
<FONT color="green">308</FONT>          {<a name="line.308"></a>
<FONT color="green">309</FONT>            TransformerException spe = (TransformerException) throwable;<a name="line.309"></a>
<FONT color="green">310</FONT>    <a name="line.310"></a>
<FONT color="green">311</FONT>            {<a name="line.311"></a>
<FONT color="green">312</FONT>              Throwable e = spe;<a name="line.312"></a>
<FONT color="green">313</FONT>    <a name="line.313"></a>
<FONT color="green">314</FONT>              while (null != e)<a name="line.314"></a>
<FONT color="green">315</FONT>              {<a name="line.315"></a>
<FONT color="green">316</FONT>                if (null != e.getMessage())<a name="line.316"></a>
<FONT color="green">317</FONT>                {<a name="line.317"></a>
<FONT color="green">318</FONT>                  diagnosticsWriter.println(" (" + e.getClass().getName() + "): "<a name="line.318"></a>
<FONT color="green">319</FONT>                                            + e.getMessage());<a name="line.319"></a>
<FONT color="green">320</FONT>                }<a name="line.320"></a>
<FONT color="green">321</FONT>    <a name="line.321"></a>
<FONT color="green">322</FONT>                if (e instanceof TransformerException)<a name="line.322"></a>
<FONT color="green">323</FONT>                {<a name="line.323"></a>
<FONT color="green">324</FONT>                  TransformerException spe2 = (TransformerException) e;<a name="line.324"></a>
<FONT color="green">325</FONT>    <a name="line.325"></a>
<FONT color="green">326</FONT>                  SourceLocator locator = spe2.getLocator();<a name="line.326"></a>
<FONT color="green">327</FONT>                  if ((null != locator) &amp;&amp; (null != locator.getSystemId()))<a name="line.327"></a>
<FONT color="green">328</FONT>                    diagnosticsWriter.println("   ID: " + locator.getSystemId()<a name="line.328"></a>
<FONT color="green">329</FONT>                                              + " Line #" + locator.getLineNumber()<a name="line.329"></a>
<FONT color="green">330</FONT>                                              + " Column #"<a name="line.330"></a>
<FONT color="green">331</FONT>                                              + locator.getColumnNumber());<a name="line.331"></a>
<FONT color="green">332</FONT>    <a name="line.332"></a>
<FONT color="green">333</FONT>                  e = spe2.getException();<a name="line.333"></a>
<FONT color="green">334</FONT>    <a name="line.334"></a>
<FONT color="green">335</FONT>                  if (e instanceof org.apache.xml.utils.WrappedRuntimeException)<a name="line.335"></a>
<FONT color="green">336</FONT>                    e = ((org.apache.xml.utils.WrappedRuntimeException) e).getException();<a name="line.336"></a>
<FONT color="green">337</FONT>                }<a name="line.337"></a>
<FONT color="green">338</FONT>                else<a name="line.338"></a>
<FONT color="green">339</FONT>                  e = null;<a name="line.339"></a>
<FONT color="green">340</FONT>              }<a name="line.340"></a>
<FONT color="green">341</FONT>            }<a name="line.341"></a>
<FONT color="green">342</FONT>          }<a name="line.342"></a>
<FONT color="green">343</FONT>          else<a name="line.343"></a>
<FONT color="green">344</FONT>          {<a name="line.344"></a>
<FONT color="green">345</FONT>            diagnosticsWriter.println(" (" + throwable.getClass().getName()<a name="line.345"></a>
<FONT color="green">346</FONT>                                      + "): " + throwable.getMessage());<a name="line.346"></a>
<FONT color="green">347</FONT>          }<a name="line.347"></a>
<FONT color="green">348</FONT>    <a name="line.348"></a>
<FONT color="green">349</FONT>          diagnosticsString = throwable.getMessage(); //sw.toString();<a name="line.349"></a>
<FONT color="green">350</FONT>        }<a name="line.350"></a>
<FONT color="green">351</FONT>    <a name="line.351"></a>
<FONT color="green">352</FONT>        if (DTM.NULL == newDoc)<a name="line.352"></a>
<FONT color="green">353</FONT>        {<a name="line.353"></a>
<FONT color="green">354</FONT>    <a name="line.354"></a>
<FONT color="green">355</FONT>          // System.out.println("what?: "+base+", uri: "+uri);<a name="line.355"></a>
<FONT color="green">356</FONT>          if (null != diagnosticsString)<a name="line.356"></a>
<FONT color="green">357</FONT>          {<a name="line.357"></a>
<FONT color="green">358</FONT>            warn(xctxt, XSLTErrorResources.WG_CANNOT_LOAD_REQUESTED_DOC,<a name="line.358"></a>
<FONT color="green">359</FONT>                 new Object[]{ diagnosticsString });  //"Can not load requested doc: "+((base == null) ? "" : base )+uri);<a name="line.359"></a>
<FONT color="green">360</FONT>          }<a name="line.360"></a>
<FONT color="green">361</FONT>          else<a name="line.361"></a>
<FONT color="green">362</FONT>            warn(xctxt, XSLTErrorResources.WG_CANNOT_LOAD_REQUESTED_DOC,<a name="line.362"></a>
<FONT color="green">363</FONT>                 new Object[]{<a name="line.363"></a>
<FONT color="green">364</FONT>                   uri == null<a name="line.364"></a>
<FONT color="green">365</FONT>                   ? ((base == null) ? "" : base) + uri : uri.toString() });  //"Can not load requested doc: "+((base == null) ? "" : base )+uri);<a name="line.365"></a>
<FONT color="green">366</FONT>        }<a name="line.366"></a>
<FONT color="green">367</FONT>        else<a name="line.367"></a>
<FONT color="green">368</FONT>        {<a name="line.368"></a>
<FONT color="green">369</FONT>          // %REVIEW%<a name="line.369"></a>
<FONT color="green">370</FONT>          // TBD: What to do about XLocator?<a name="line.370"></a>
<FONT color="green">371</FONT>          // xctxt.getSourceTreeManager().associateXLocatorToNode(newDoc, url, null);<a name="line.371"></a>
<FONT color="green">372</FONT>        }<a name="line.372"></a>
<FONT color="green">373</FONT>    <a name="line.373"></a>
<FONT color="green">374</FONT>        return newDoc;<a name="line.374"></a>
<FONT color="green">375</FONT>      }<a name="line.375"></a>
<FONT color="green">376</FONT>    <a name="line.376"></a>
<FONT color="green">377</FONT>      /**<a name="line.377"></a>
<FONT color="green">378</FONT>       * Tell the user of an error, and probably throw an<a name="line.378"></a>
<FONT color="green">379</FONT>       * exception.<a name="line.379"></a>
<FONT color="green">380</FONT>       *<a name="line.380"></a>
<FONT color="green">381</FONT>       * @param xctxt The XPath runtime state.<a name="line.381"></a>
<FONT color="green">382</FONT>       * @param msg The error message key<a name="line.382"></a>
<FONT color="green">383</FONT>       * @param args Arguments to be used in the error message<a name="line.383"></a>
<FONT color="green">384</FONT>       * @throws XSLProcessorException thrown if the active ProblemListener and XPathContext decide<a name="line.384"></a>
<FONT color="green">385</FONT>       * the error condition is severe enough to halt processing.<a name="line.385"></a>
<FONT color="green">386</FONT>       *<a name="line.386"></a>
<FONT color="green">387</FONT>       * @throws javax.xml.transform.TransformerException<a name="line.387"></a>
<FONT color="green">388</FONT>       */<a name="line.388"></a>
<FONT color="green">389</FONT>      public void error(XPathContext xctxt, String msg, Object args[])<a name="line.389"></a>
<FONT color="green">390</FONT>              throws javax.xml.transform.TransformerException<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>        String formattedMsg = XSLMessages.createMessage(msg, args);<a name="line.393"></a>
<FONT color="green">394</FONT>        ErrorListener errHandler = xctxt.getErrorListener();<a name="line.394"></a>
<FONT color="green">395</FONT>        TransformerException spe = new TransformerException(formattedMsg,<a name="line.395"></a>
<FONT color="green">396</FONT>                                  (SourceLocator)xctxt.getSAXLocator());<a name="line.396"></a>
<FONT color="green">397</FONT>    <a name="line.397"></a>
<FONT color="green">398</FONT>        if (null != errHandler)<a name="line.398"></a>
<FONT color="green">399</FONT>          errHandler.error(spe);<a name="line.399"></a>
<FONT color="green">400</FONT>        else<a name="line.400"></a>
<FONT color="green">401</FONT>          System.out.println(formattedMsg);<a name="line.401"></a>
<FONT color="green">402</FONT>      }<a name="line.402"></a>
<FONT color="green">403</FONT>    <a name="line.403"></a>
<FONT color="green">404</FONT>      /**<a name="line.404"></a>
<FONT color="green">405</FONT>       * Warn the user of a problem.<a name="line.405"></a>
<FONT color="green">406</FONT>       *<a name="line.406"></a>
<FONT color="green">407</FONT>       * @param xctxt The XPath runtime state.<a name="line.407"></a>
<FONT color="green">408</FONT>       * @param msg Warning message key<a name="line.408"></a>
<FONT color="green">409</FONT>       * @param args Arguments to be used in the warning message<a name="line.409"></a>
<FONT color="green">410</FONT>       * @throws XSLProcessorException thrown if the active ProblemListener and XPathContext decide<a name="line.410"></a>
<FONT color="green">411</FONT>       * the error condition is severe enough to halt processing.<a name="line.411"></a>
<FONT color="green">412</FONT>       *<a name="line.412"></a>
<FONT color="green">413</FONT>       * @throws javax.xml.transform.TransformerException<a name="line.413"></a>
<FONT color="green">414</FONT>       */<a name="line.414"></a>
<FONT color="green">415</FONT>      public void warn(XPathContext xctxt, String msg, Object args[])<a name="line.415"></a>
<FONT color="green">416</FONT>              throws javax.xml.transform.TransformerException<a name="line.416"></a>
<FONT color="green">417</FONT>      {<a name="line.417"></a>
<FONT color="green">418</FONT>    <a name="line.418"></a>
<FONT color="green">419</FONT>        String formattedMsg = XSLMessages.createWarning(msg, args);<a name="line.419"></a>
<FONT color="green">420</FONT>        ErrorListener errHandler = xctxt.getErrorListener();<a name="line.420"></a>
<FONT color="green">421</FONT>        TransformerException spe = new TransformerException(formattedMsg,<a name="line.421"></a>
<FONT color="green">422</FONT>                                  (SourceLocator)xctxt.getSAXLocator());<a name="line.422"></a>
<FONT color="green">423</FONT>    <a name="line.423"></a>
<FONT color="green">424</FONT>        if (null != errHandler)<a name="line.424"></a>
<FONT color="green">425</FONT>          errHandler.warning(spe);<a name="line.425"></a>
<FONT color="green">426</FONT>        else<a name="line.426"></a>
<FONT color="green">427</FONT>          System.out.println(formattedMsg);<a name="line.427"></a>
<FONT color="green">428</FONT>      }<a name="line.428"></a>
<FONT color="green">429</FONT>    <a name="line.429"></a>
<FONT color="green">430</FONT>     /**<a name="line.430"></a>
<FONT color="green">431</FONT>       * Overide the superclass method to allow one or two arguments.<a name="line.431"></a>
<FONT color="green">432</FONT>       *<a name="line.432"></a>
<FONT color="green">433</FONT>       *<a name="line.433"></a>
<FONT color="green">434</FONT>       * @param argNum Number of arguments passed in to this function<a name="line.434"></a>
<FONT color="green">435</FONT>       *<a name="line.435"></a>
<FONT color="green">436</FONT>       * @throws WrongNumberArgsException<a name="line.436"></a>
<FONT color="green">437</FONT>       */<a name="line.437"></a>
<FONT color="green">438</FONT>      public void checkNumberArgs(int argNum) throws WrongNumberArgsException<a name="line.438"></a>
<FONT color="green">439</FONT>      {<a name="line.439"></a>
<FONT color="green">440</FONT>        if ((argNum &lt; 1) || (argNum &gt; 2))<a name="line.440"></a>
<FONT color="green">441</FONT>          reportWrongNumberArgs();<a name="line.441"></a>
<FONT color="green">442</FONT>      }<a name="line.442"></a>
<FONT color="green">443</FONT>      <a name="line.443"></a>
<FONT color="green">444</FONT>      /**<a name="line.444"></a>
<FONT color="green">445</FONT>       * Constructs and throws a WrongNumberArgException with the appropriate<a name="line.445"></a>
<FONT color="green">446</FONT>       * message for this function object.<a name="line.446"></a>
<FONT color="green">447</FONT>       *<a name="line.447"></a>
<FONT color="green">448</FONT>       * @throws WrongNumberArgsException<a name="line.448"></a>
<FONT color="green">449</FONT>       */<a name="line.449"></a>
<FONT color="green">450</FONT>      protected void reportWrongNumberArgs() throws WrongNumberArgsException {<a name="line.450"></a>
<FONT color="green">451</FONT>          throw new WrongNumberArgsException(XSLMessages.createMessage(XSLTErrorResources.ER_ONE_OR_TWO, null)); //"1 or 2");<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>      /**<a name="line.454"></a>
<FONT color="green">455</FONT>       * Tell if the expression is a nodeset expression.<a name="line.455"></a>
<FONT color="green">456</FONT>       * @return true if the expression can be represented as a nodeset.<a name="line.456"></a>
<FONT color="green">457</FONT>       */<a name="line.457"></a>
<FONT color="green">458</FONT>      public boolean isNodesetExpr()<a name="line.458"></a>
<FONT color="green">459</FONT>      {<a name="line.459"></a>
<FONT color="green">460</FONT>        return true;<a name="line.460"></a>
<FONT color="green">461</FONT>      }<a name="line.461"></a>
<FONT color="green">462</FONT>    <a name="line.462"></a>
<FONT color="green">463</FONT>    }<a name="line.463"></a>




























































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