<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: XNodeSet.java 469368 2006-10-31 04:41:36Z minchau $<a name="line.19"></a>
<FONT color="green">020</FONT>     */<a name="line.20"></a>
<FONT color="green">021</FONT>    package org.apache.xpath.objects;<a name="line.21"></a>
<FONT color="green">022</FONT>    <a name="line.22"></a>
<FONT color="green">023</FONT>    import org.apache.xml.dtm.DTM;<a name="line.23"></a>
<FONT color="green">024</FONT>    import org.apache.xml.dtm.DTMIterator;<a name="line.24"></a>
<FONT color="green">025</FONT>    import org.apache.xml.dtm.DTMManager;<a name="line.25"></a>
<FONT color="green">026</FONT>    import org.apache.xml.utils.XMLString;<a name="line.26"></a>
<FONT color="green">027</FONT>    import org.apache.xpath.NodeSetDTM;<a name="line.27"></a>
<FONT color="green">028</FONT>    import org.apache.xpath.axes.NodeSequence;<a name="line.28"></a>
<FONT color="green">029</FONT>    <a name="line.29"></a>
<FONT color="green">030</FONT>    import org.w3c.dom.NodeList;<a name="line.30"></a>
<FONT color="green">031</FONT>    import org.w3c.dom.traversal.NodeIterator;<a name="line.31"></a>
<FONT color="green">032</FONT>    <a name="line.32"></a>
<FONT color="green">033</FONT>    /**<a name="line.33"></a>
<FONT color="green">034</FONT>     * This class represents an XPath nodeset object, and is capable of<a name="line.34"></a>
<FONT color="green">035</FONT>     * converting the nodeset to other types, such as a string.<a name="line.35"></a>
<FONT color="green">036</FONT>     * @xsl.usage general<a name="line.36"></a>
<FONT color="green">037</FONT>     */<a name="line.37"></a>
<FONT color="green">038</FONT>    public class XNodeSet extends NodeSequence<a name="line.38"></a>
<FONT color="green">039</FONT>    {  <a name="line.39"></a>
<FONT color="green">040</FONT>        static final long serialVersionUID = 1916026368035639667L;<a name="line.40"></a>
<FONT color="green">041</FONT>      /**<a name="line.41"></a>
<FONT color="green">042</FONT>       * Default constructor for derived objects.<a name="line.42"></a>
<FONT color="green">043</FONT>       */<a name="line.43"></a>
<FONT color="green">044</FONT>      protected XNodeSet()<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>    <a name="line.47"></a>
<FONT color="green">048</FONT>      /**<a name="line.48"></a>
<FONT color="green">049</FONT>       * Construct a XNodeSet object.<a name="line.49"></a>
<FONT color="green">050</FONT>       *<a name="line.50"></a>
<FONT color="green">051</FONT>       * @param val Value of the XNodeSet object<a name="line.51"></a>
<FONT color="green">052</FONT>       */<a name="line.52"></a>
<FONT color="green">053</FONT>      public XNodeSet(DTMIterator val)<a name="line.53"></a>
<FONT color="green">054</FONT>      {<a name="line.54"></a>
<FONT color="green">055</FONT>            super();<a name="line.55"></a>
<FONT color="green">056</FONT>            if(val instanceof XNodeSet)<a name="line.56"></a>
<FONT color="green">057</FONT>            {<a name="line.57"></a>
<FONT color="green">058</FONT>            final XNodeSet nodeSet = (XNodeSet) val;<a name="line.58"></a>
<FONT color="green">059</FONT>                setIter(nodeSet.m_iter);<a name="line.59"></a>
<FONT color="green">060</FONT>                m_dtmMgr = nodeSet.m_dtmMgr;<a name="line.60"></a>
<FONT color="green">061</FONT>                m_last = nodeSet.m_last;<a name="line.61"></a>
<FONT color="green">062</FONT>            // First make sure the DTMIterator val has a cache,<a name="line.62"></a>
<FONT color="green">063</FONT>            // so if it doesn't have one, make one.<a name="line.63"></a>
<FONT color="green">064</FONT>                if(!nodeSet.hasCache())<a name="line.64"></a>
<FONT color="green">065</FONT>                    nodeSet.setShouldCacheNodes(true);<a name="line.65"></a>
<FONT color="green">066</FONT>            <a name="line.66"></a>
<FONT color="green">067</FONT>            // Get the cache from val and use it ourselves (we share it).<a name="line.67"></a>
<FONT color="green">068</FONT>                setObject(nodeSet.getIteratorCache());<a name="line.68"></a>
<FONT color="green">069</FONT>            }<a name="line.69"></a>
<FONT color="green">070</FONT>            else<a name="line.70"></a>
<FONT color="green">071</FONT>            setIter(val);<a name="line.71"></a>
<FONT color="green">072</FONT>      }<a name="line.72"></a>
<FONT color="green">073</FONT>      <a name="line.73"></a>
<FONT color="green">074</FONT>      /**<a name="line.74"></a>
<FONT color="green">075</FONT>       * Construct a XNodeSet object.<a name="line.75"></a>
<FONT color="green">076</FONT>       *<a name="line.76"></a>
<FONT color="green">077</FONT>       * @param val Value of the XNodeSet object<a name="line.77"></a>
<FONT color="green">078</FONT>       */<a name="line.78"></a>
<FONT color="green">079</FONT>      public XNodeSet(XNodeSet val)<a name="line.79"></a>
<FONT color="green">080</FONT>      {<a name="line.80"></a>
<FONT color="green">081</FONT>            super();<a name="line.81"></a>
<FONT color="green">082</FONT>        setIter(val.m_iter);<a name="line.82"></a>
<FONT color="green">083</FONT>        m_dtmMgr = val.m_dtmMgr;<a name="line.83"></a>
<FONT color="green">084</FONT>        m_last = val.m_last;<a name="line.84"></a>
<FONT color="green">085</FONT>        if(!val.hasCache())<a name="line.85"></a>
<FONT color="green">086</FONT>            val.setShouldCacheNodes(true);<a name="line.86"></a>
<FONT color="green">087</FONT>        setObject(val.m_obj);<a name="line.87"></a>
<FONT color="green">088</FONT>      }<a name="line.88"></a>
<FONT color="green">089</FONT>    <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>       * Construct an empty XNodeSet object.  This is used to create a mutable <a name="line.92"></a>
<FONT color="green">093</FONT>       * nodeset to which random nodes may be added.<a name="line.93"></a>
<FONT color="green">094</FONT>       */<a name="line.94"></a>
<FONT color="green">095</FONT>      public XNodeSet(DTMManager dtmMgr) <a name="line.95"></a>
<FONT color="green">096</FONT>      {<a name="line.96"></a>
<FONT color="green">097</FONT>         this(DTM.NULL,dtmMgr);<a name="line.97"></a>
<FONT color="green">098</FONT>      }<a name="line.98"></a>
<FONT color="green">099</FONT>    <a name="line.99"></a>
<FONT color="green">100</FONT>      /**<a name="line.100"></a>
<FONT color="green">101</FONT>       * Construct a XNodeSet object for one node.<a name="line.101"></a>
<FONT color="green">102</FONT>       *<a name="line.102"></a>
<FONT color="green">103</FONT>       * @param n Node to add to the new XNodeSet object<a name="line.103"></a>
<FONT color="green">104</FONT>       */<a name="line.104"></a>
<FONT color="green">105</FONT>      public XNodeSet(int n, DTMManager dtmMgr)<a name="line.105"></a>
<FONT color="green">106</FONT>      {<a name="line.106"></a>
<FONT color="green">107</FONT>    <a name="line.107"></a>
<FONT color="green">108</FONT>        super(new NodeSetDTM(dtmMgr));<a name="line.108"></a>
<FONT color="green">109</FONT>        m_dtmMgr = dtmMgr;<a name="line.109"></a>
<FONT color="green">110</FONT>    <a name="line.110"></a>
<FONT color="green">111</FONT>        if (DTM.NULL != n)<a name="line.111"></a>
<FONT color="green">112</FONT>        {<a name="line.112"></a>
<FONT color="green">113</FONT>          ((NodeSetDTM) m_obj).addNode(n);<a name="line.113"></a>
<FONT color="green">114</FONT>          m_last = 1;<a name="line.114"></a>
<FONT color="green">115</FONT>        }<a name="line.115"></a>
<FONT color="green">116</FONT>        else<a name="line.116"></a>
<FONT color="green">117</FONT>            m_last = 0;<a name="line.117"></a>
<FONT color="green">118</FONT>      }<a name="line.118"></a>
<FONT color="green">119</FONT>    <a name="line.119"></a>
<FONT color="green">120</FONT>      /**<a name="line.120"></a>
<FONT color="green">121</FONT>       * Tell that this is a CLASS_NODESET.<a name="line.121"></a>
<FONT color="green">122</FONT>       *<a name="line.122"></a>
<FONT color="green">123</FONT>       * @return type CLASS_NODESET<a name="line.123"></a>
<FONT color="green">124</FONT>       */<a name="line.124"></a>
<FONT color="green">125</FONT>      public int getType()<a name="line.125"></a>
<FONT color="green">126</FONT>      {<a name="line.126"></a>
<FONT color="green">127</FONT>        return CLASS_NODESET;<a name="line.127"></a>
<FONT color="green">128</FONT>      }<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>       * Given a request type, return the equivalent string.<a name="line.131"></a>
<FONT color="green">132</FONT>       * For diagnostic purposes.<a name="line.132"></a>
<FONT color="green">133</FONT>       *<a name="line.133"></a>
<FONT color="green">134</FONT>       * @return type string "#NODESET"<a name="line.134"></a>
<FONT color="green">135</FONT>       */<a name="line.135"></a>
<FONT color="green">136</FONT>      public String getTypeString()<a name="line.136"></a>
<FONT color="green">137</FONT>      {<a name="line.137"></a>
<FONT color="green">138</FONT>        return "#NODESET";<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>       * Get numeric value of the string conversion from a single node.<a name="line.142"></a>
<FONT color="green">143</FONT>       *<a name="line.143"></a>
<FONT color="green">144</FONT>       * @param n Node to convert<a name="line.144"></a>
<FONT color="green">145</FONT>       *<a name="line.145"></a>
<FONT color="green">146</FONT>       * @return numeric value of the string conversion from a single node.<a name="line.146"></a>
<FONT color="green">147</FONT>       */<a name="line.147"></a>
<FONT color="green">148</FONT>      public double getNumberFromNode(int n)<a name="line.148"></a>
<FONT color="green">149</FONT>      {<a name="line.149"></a>
<FONT color="green">150</FONT>        XMLString xstr = m_dtmMgr.getDTM(n).getStringValue(n);<a name="line.150"></a>
<FONT color="green">151</FONT>        return xstr.toDouble();<a name="line.151"></a>
<FONT color="green">152</FONT>      }<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>       * Cast result object to a number.<a name="line.155"></a>
<FONT color="green">156</FONT>       *<a name="line.156"></a>
<FONT color="green">157</FONT>       * @return numeric value of the string conversion from the <a name="line.157"></a>
<FONT color="green">158</FONT>       * next node in the NodeSetDTM, or NAN if no node was found<a name="line.158"></a>
<FONT color="green">159</FONT>       */<a name="line.159"></a>
<FONT color="green">160</FONT>      public double num()<a name="line.160"></a>
<FONT color="green">161</FONT>      {<a name="line.161"></a>
<FONT color="green">162</FONT>    <a name="line.162"></a>
<FONT color="green">163</FONT>        int node = item(0);<a name="line.163"></a>
<FONT color="green">164</FONT>        return (node != DTM.NULL) ? getNumberFromNode(node) : Double.NaN;<a name="line.164"></a>
<FONT color="green">165</FONT>      }<a name="line.165"></a>
<FONT color="green">166</FONT>      <a name="line.166"></a>
<FONT color="green">167</FONT>      /**<a name="line.167"></a>
<FONT color="green">168</FONT>       * Cast result object to a number, but allow side effects, such as the <a name="line.168"></a>
<FONT color="green">169</FONT>       * incrementing of an iterator.<a name="line.169"></a>
<FONT color="green">170</FONT>       *<a name="line.170"></a>
<FONT color="green">171</FONT>       * @return numeric value of the string conversion from the <a name="line.171"></a>
<FONT color="green">172</FONT>       * next node in the NodeSetDTM, or NAN if no node was found<a name="line.172"></a>
<FONT color="green">173</FONT>       */<a name="line.173"></a>
<FONT color="green">174</FONT>      public double numWithSideEffects()<a name="line.174"></a>
<FONT color="green">175</FONT>      {<a name="line.175"></a>
<FONT color="green">176</FONT>        int node = nextNode();<a name="line.176"></a>
<FONT color="green">177</FONT>    <a name="line.177"></a>
<FONT color="green">178</FONT>        return (node != DTM.NULL) ? getNumberFromNode(node) : Double.NaN;<a name="line.178"></a>
<FONT color="green">179</FONT>      }<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>       * Cast result object to a boolean.<a name="line.183"></a>
<FONT color="green">184</FONT>       *<a name="line.184"></a>
<FONT color="green">185</FONT>       * @return True if there is a next node in the nodeset<a name="line.185"></a>
<FONT color="green">186</FONT>       */<a name="line.186"></a>
<FONT color="green">187</FONT>      public boolean bool()<a name="line.187"></a>
<FONT color="green">188</FONT>      {<a name="line.188"></a>
<FONT color="green">189</FONT>        return (item(0) != DTM.NULL);<a name="line.189"></a>
<FONT color="green">190</FONT>      }<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>       * Cast result object to a boolean, but allow side effects, such as the <a name="line.193"></a>
<FONT color="green">194</FONT>       * incrementing of an iterator.<a name="line.194"></a>
<FONT color="green">195</FONT>       *<a name="line.195"></a>
<FONT color="green">196</FONT>       * @return True if there is a next node in the nodeset<a name="line.196"></a>
<FONT color="green">197</FONT>       */<a name="line.197"></a>
<FONT color="green">198</FONT>      public boolean boolWithSideEffects()<a name="line.198"></a>
<FONT color="green">199</FONT>      {<a name="line.199"></a>
<FONT color="green">200</FONT>        return (nextNode() != DTM.NULL);<a name="line.200"></a>
<FONT color="green">201</FONT>      }<a name="line.201"></a>
<FONT color="green">202</FONT>    <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>       * Get the string conversion from a single node.<a name="line.205"></a>
<FONT color="green">206</FONT>       *<a name="line.206"></a>
<FONT color="green">207</FONT>       * @param n Node to convert<a name="line.207"></a>
<FONT color="green">208</FONT>       *<a name="line.208"></a>
<FONT color="green">209</FONT>       * @return the string conversion from a single node.<a name="line.209"></a>
<FONT color="green">210</FONT>       */<a name="line.210"></a>
<FONT color="green">211</FONT>      public XMLString getStringFromNode(int n)<a name="line.211"></a>
<FONT color="green">212</FONT>      {<a name="line.212"></a>
<FONT color="green">213</FONT>        // %OPT%<a name="line.213"></a>
<FONT color="green">214</FONT>        // I guess we'll have to get a static instance of the DTM manager...<a name="line.214"></a>
<FONT color="green">215</FONT>        if(DTM.NULL != n)<a name="line.215"></a>
<FONT color="green">216</FONT>        {<a name="line.216"></a>
<FONT color="green">217</FONT>          return m_dtmMgr.getDTM(n).getStringValue(n);<a name="line.217"></a>
<FONT color="green">218</FONT>        }<a name="line.218"></a>
<FONT color="green">219</FONT>        else<a name="line.219"></a>
<FONT color="green">220</FONT>        {<a name="line.220"></a>
<FONT color="green">221</FONT>          return org.apache.xpath.objects.XString.EMPTYSTRING;<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>      <a name="line.224"></a>
<FONT color="green">225</FONT>      /**<a name="line.225"></a>
<FONT color="green">226</FONT>       * Directly call the<a name="line.226"></a>
<FONT color="green">227</FONT>       * characters method on the passed ContentHandler for the<a name="line.227"></a>
<FONT color="green">228</FONT>       * string-value. Multiple calls to the<a name="line.228"></a>
<FONT color="green">229</FONT>       * ContentHandler's characters methods may well occur for a single call to<a name="line.229"></a>
<FONT color="green">230</FONT>       * this method.<a name="line.230"></a>
<FONT color="green">231</FONT>       *<a name="line.231"></a>
<FONT color="green">232</FONT>       * @param ch A non-null reference to a ContentHandler.<a name="line.232"></a>
<FONT color="green">233</FONT>       *<a name="line.233"></a>
<FONT color="green">234</FONT>       * @throws org.xml.sax.SAXException<a name="line.234"></a>
<FONT color="green">235</FONT>       */<a name="line.235"></a>
<FONT color="green">236</FONT>      public void dispatchCharactersEvents(org.xml.sax.ContentHandler ch)<a name="line.236"></a>
<FONT color="green">237</FONT>              throws org.xml.sax.SAXException<a name="line.237"></a>
<FONT color="green">238</FONT>      {<a name="line.238"></a>
<FONT color="green">239</FONT>        int node = item(0);<a name="line.239"></a>
<FONT color="green">240</FONT>            <a name="line.240"></a>
<FONT color="green">241</FONT>        if(node != DTM.NULL)<a name="line.241"></a>
<FONT color="green">242</FONT>        {<a name="line.242"></a>
<FONT color="green">243</FONT>          m_dtmMgr.getDTM(node).dispatchCharactersEvents(node, ch, false);<a name="line.243"></a>
<FONT color="green">244</FONT>        }<a name="line.244"></a>
<FONT color="green">245</FONT>        <a name="line.245"></a>
<FONT color="green">246</FONT>      }<a name="line.246"></a>
<FONT color="green">247</FONT>      <a name="line.247"></a>
<FONT color="green">248</FONT>      /**<a name="line.248"></a>
<FONT color="green">249</FONT>       * Cast result object to an XMLString.<a name="line.249"></a>
<FONT color="green">250</FONT>       *<a name="line.250"></a>
<FONT color="green">251</FONT>       * @return The document fragment node data or the empty string. <a name="line.251"></a>
<FONT color="green">252</FONT>       */<a name="line.252"></a>
<FONT color="green">253</FONT>      public XMLString xstr()<a name="line.253"></a>
<FONT color="green">254</FONT>      {<a name="line.254"></a>
<FONT color="green">255</FONT>        int node = item(0);<a name="line.255"></a>
<FONT color="green">256</FONT>        return (node != DTM.NULL) ? getStringFromNode(node) : XString.EMPTYSTRING;<a name="line.256"></a>
<FONT color="green">257</FONT>      }<a name="line.257"></a>
<FONT color="green">258</FONT>      <a name="line.258"></a>
<FONT color="green">259</FONT>      /**<a name="line.259"></a>
<FONT color="green">260</FONT>       * Cast result object to a string.<a name="line.260"></a>
<FONT color="green">261</FONT>       *<a name="line.261"></a>
<FONT color="green">262</FONT>       * @return The string this wraps or the empty string if null<a name="line.262"></a>
<FONT color="green">263</FONT>       */<a name="line.263"></a>
<FONT color="green">264</FONT>      public void appendToFsb(org.apache.xml.utils.FastStringBuffer fsb)<a name="line.264"></a>
<FONT color="green">265</FONT>      {<a name="line.265"></a>
<FONT color="green">266</FONT>        XString xstring = (XString)xstr();<a name="line.266"></a>
<FONT color="green">267</FONT>        xstring.appendToFsb(fsb);<a name="line.267"></a>
<FONT color="green">268</FONT>      }<a name="line.268"></a>
<FONT color="green">269</FONT>      <a name="line.269"></a>
<FONT color="green">270</FONT>    <a name="line.270"></a>
<FONT color="green">271</FONT>      /**<a name="line.271"></a>
<FONT color="green">272</FONT>       * Cast result object to a string.<a name="line.272"></a>
<FONT color="green">273</FONT>       *<a name="line.273"></a>
<FONT color="green">274</FONT>       * @return the string conversion from the next node in the nodeset<a name="line.274"></a>
<FONT color="green">275</FONT>       * or "" if there is no next node<a name="line.275"></a>
<FONT color="green">276</FONT>       */<a name="line.276"></a>
<FONT color="green">277</FONT>      public String str()<a name="line.277"></a>
<FONT color="green">278</FONT>      {<a name="line.278"></a>
<FONT color="green">279</FONT>        int node = item(0);<a name="line.279"></a>
<FONT color="green">280</FONT>        return (node != DTM.NULL) ? getStringFromNode(node).toString() : "";   <a name="line.280"></a>
<FONT color="green">281</FONT>      }<a name="line.281"></a>
<FONT color="green">282</FONT>      <a name="line.282"></a>
<FONT color="green">283</FONT>      /**<a name="line.283"></a>
<FONT color="green">284</FONT>       * Return a java object that's closest to the representation<a name="line.284"></a>
<FONT color="green">285</FONT>       * that should be handed to an extension.<a name="line.285"></a>
<FONT color="green">286</FONT>       *<a name="line.286"></a>
<FONT color="green">287</FONT>       * @return The object that this class wraps<a name="line.287"></a>
<FONT color="green">288</FONT>       */<a name="line.288"></a>
<FONT color="green">289</FONT>      public Object object()<a name="line.289"></a>
<FONT color="green">290</FONT>      {<a name="line.290"></a>
<FONT color="green">291</FONT>        if(null == m_obj)<a name="line.291"></a>
<FONT color="green">292</FONT>            return this;<a name="line.292"></a>
<FONT color="green">293</FONT>        else<a name="line.293"></a>
<FONT color="green">294</FONT>            return m_obj;<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>      // %REVIEW%<a name="line.297"></a>
<FONT color="green">298</FONT>      // hmmm...<a name="line.298"></a>
<FONT color="green">299</FONT>    //  /**<a name="line.299"></a>
<FONT color="green">300</FONT>    //   * Cast result object to a result tree fragment.<a name="line.300"></a>
<FONT color="green">301</FONT>    //   *<a name="line.301"></a>
<FONT color="green">302</FONT>    //   * @param support The XPath context to use for the conversion <a name="line.302"></a>
<FONT color="green">303</FONT>    //   *<a name="line.303"></a>
<FONT color="green">304</FONT>    //   * @return the nodeset as a result tree fragment.<a name="line.304"></a>
<FONT color="green">305</FONT>    //   */<a name="line.305"></a>
<FONT color="green">306</FONT>    //  public DocumentFragment rtree(XPathContext support)<a name="line.306"></a>
<FONT color="green">307</FONT>    //  {<a name="line.307"></a>
<FONT color="green">308</FONT>    //    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();<a name="line.308"></a>
<FONT color="green">309</FONT>    //    DocumentBuilder db = dbf.newDocumentBuilder();<a name="line.309"></a>
<FONT color="green">310</FONT>    //    Document myDoc = db.newDocument();<a name="line.310"></a>
<FONT color="green">311</FONT>    //    <a name="line.311"></a>
<FONT color="green">312</FONT>    //    DocumentFragment docFrag = myDoc.createDocumentFragment();<a name="line.312"></a>
<FONT color="green">313</FONT>    //<a name="line.313"></a>
<FONT color="green">314</FONT>    //    DTMIterator nl = iter();<a name="line.314"></a>
<FONT color="green">315</FONT>    //    int node;<a name="line.315"></a>
<FONT color="green">316</FONT>    //<a name="line.316"></a>
<FONT color="green">317</FONT>    //    while (DTM.NULL != (node = nl.nextNode()))<a name="line.317"></a>
<FONT color="green">318</FONT>    //    {<a name="line.318"></a>
<FONT color="green">319</FONT>    //      frag.appendChild(node, true, true);<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>    //    return frag.getDocument();<a name="line.322"></a>
<FONT color="green">323</FONT>    //  }<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>       * Cast result object to a nodelist.<a name="line.326"></a>
<FONT color="green">327</FONT>       *<a name="line.327"></a>
<FONT color="green">328</FONT>       * @return a NodeIterator.<a name="line.328"></a>
<FONT color="green">329</FONT>       *<a name="line.329"></a>
<FONT color="green">330</FONT>       * @throws javax.xml.transform.TransformerException<a name="line.330"></a>
<FONT color="green">331</FONT>       */<a name="line.331"></a>
<FONT color="green">332</FONT>      public NodeIterator nodeset() throws javax.xml.transform.TransformerException<a name="line.332"></a>
<FONT color="green">333</FONT>      {<a name="line.333"></a>
<FONT color="green">334</FONT>        return new org.apache.xml.dtm.ref.DTMNodeIterator(iter());<a name="line.334"></a>
<FONT color="green">335</FONT>      }<a name="line.335"></a>
<FONT color="green">336</FONT>      <a name="line.336"></a>
<FONT color="green">337</FONT>      /**<a name="line.337"></a>
<FONT color="green">338</FONT>       * Cast result object to a nodelist.<a name="line.338"></a>
<FONT color="green">339</FONT>       *<a name="line.339"></a>
<FONT color="green">340</FONT>       * @return a NodeList.<a name="line.340"></a>
<FONT color="green">341</FONT>       *<a name="line.341"></a>
<FONT color="green">342</FONT>       * @throws javax.xml.transform.TransformerException<a name="line.342"></a>
<FONT color="green">343</FONT>       */<a name="line.343"></a>
<FONT color="green">344</FONT>      public NodeList nodelist() throws javax.xml.transform.TransformerException<a name="line.344"></a>
<FONT color="green">345</FONT>      {<a name="line.345"></a>
<FONT color="green">346</FONT>        org.apache.xml.dtm.ref.DTMNodeList nodelist = new org.apache.xml.dtm.ref.DTMNodeList(this);<a name="line.346"></a>
<FONT color="green">347</FONT>        // Creating a DTMNodeList has the side-effect that it will create a clone<a name="line.347"></a>
<FONT color="green">348</FONT>        // XNodeSet with cache and run m_iter to the end. You cannot get any node<a name="line.348"></a>
<FONT color="green">349</FONT>        // from m_iter after this call. As a fix, we call SetVector() on the clone's <a name="line.349"></a>
<FONT color="green">350</FONT>        // cache. See Bugzilla 14406.<a name="line.350"></a>
<FONT color="green">351</FONT>        XNodeSet clone = (XNodeSet)nodelist.getDTMIterator();<a name="line.351"></a>
<FONT color="green">352</FONT>        SetVector(clone.getVector());<a name="line.352"></a>
<FONT color="green">353</FONT>        return nodelist;<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>    //  /**<a name="line.357"></a>
<FONT color="green">358</FONT>    //   * Return a java object that's closest to the representation<a name="line.358"></a>
<FONT color="green">359</FONT>    //   * that should be handed to an extension.<a name="line.359"></a>
<FONT color="green">360</FONT>    //   *<a name="line.360"></a>
<FONT color="green">361</FONT>    //   * @return The object that this class wraps<a name="line.361"></a>
<FONT color="green">362</FONT>    //   */<a name="line.362"></a>
<FONT color="green">363</FONT>    //  public Object object()<a name="line.363"></a>
<FONT color="green">364</FONT>    //  {<a name="line.364"></a>
<FONT color="green">365</FONT>    //    return new org.apache.xml.dtm.ref.DTMNodeList(iter());<a name="line.365"></a>
<FONT color="green">366</FONT>    //  }<a name="line.366"></a>
<FONT color="green">367</FONT>    <a name="line.367"></a>
<FONT color="green">368</FONT>      /**<a name="line.368"></a>
<FONT color="green">369</FONT>       * Return the iterator without cloning, etc.<a name="line.369"></a>
<FONT color="green">370</FONT>       */<a name="line.370"></a>
<FONT color="green">371</FONT>      public DTMIterator iterRaw()<a name="line.371"></a>
<FONT color="green">372</FONT>      {<a name="line.372"></a>
<FONT color="green">373</FONT>        return this;<a name="line.373"></a>
<FONT color="green">374</FONT>      }<a name="line.374"></a>
<FONT color="green">375</FONT>      <a name="line.375"></a>
<FONT color="green">376</FONT>      public void release(DTMIterator iter)<a name="line.376"></a>
<FONT color="green">377</FONT>      {<a name="line.377"></a>
<FONT color="green">378</FONT>      }<a name="line.378"></a>
<FONT color="green">379</FONT>      <a name="line.379"></a>
<FONT color="green">380</FONT>      /**<a name="line.380"></a>
<FONT color="green">381</FONT>       * Cast result object to a nodelist.<a name="line.381"></a>
<FONT color="green">382</FONT>       *<a name="line.382"></a>
<FONT color="green">383</FONT>       * @return The nodeset as a nodelist<a name="line.383"></a>
<FONT color="green">384</FONT>       */<a name="line.384"></a>
<FONT color="green">385</FONT>      public DTMIterator iter()<a name="line.385"></a>
<FONT color="green">386</FONT>      {<a name="line.386"></a>
<FONT color="green">387</FONT>        try<a name="line.387"></a>
<FONT color="green">388</FONT>        {<a name="line.388"></a>
<FONT color="green">389</FONT>            if(hasCache())<a name="line.389"></a>
<FONT color="green">390</FONT>                    return cloneWithReset();<a name="line.390"></a>
<FONT color="green">391</FONT>            else<a name="line.391"></a>
<FONT color="green">392</FONT>                    return this; // don't bother to clone... won't do any good!<a name="line.392"></a>
<FONT color="green">393</FONT>        }<a name="line.393"></a>
<FONT color="green">394</FONT>        catch (CloneNotSupportedException cnse)<a name="line.394"></a>
<FONT color="green">395</FONT>        {<a name="line.395"></a>
<FONT color="green">396</FONT>          throw new RuntimeException(cnse.getMessage());<a name="line.396"></a>
<FONT color="green">397</FONT>        }<a name="line.397"></a>
<FONT color="green">398</FONT>      }<a name="line.398"></a>
<FONT color="green">399</FONT>      <a name="line.399"></a>
<FONT color="green">400</FONT>      /**<a name="line.400"></a>
<FONT color="green">401</FONT>       * Get a fresh copy of the object.  For use with variables.<a name="line.401"></a>
<FONT color="green">402</FONT>       *<a name="line.402"></a>
<FONT color="green">403</FONT>       * @return A fresh nodelist.<a name="line.403"></a>
<FONT color="green">404</FONT>       */<a name="line.404"></a>
<FONT color="green">405</FONT>      public XObject getFresh()<a name="line.405"></a>
<FONT color="green">406</FONT>      {<a name="line.406"></a>
<FONT color="green">407</FONT>        try<a name="line.407"></a>
<FONT color="green">408</FONT>        {<a name="line.408"></a>
<FONT color="green">409</FONT>            if(hasCache())<a name="line.409"></a>
<FONT color="green">410</FONT>                    return (XObject)cloneWithReset();<a name="line.410"></a>
<FONT color="green">411</FONT>            else<a name="line.411"></a>
<FONT color="green">412</FONT>                    return this; // don't bother to clone... won't do any good!<a name="line.412"></a>
<FONT color="green">413</FONT>        }<a name="line.413"></a>
<FONT color="green">414</FONT>        catch (CloneNotSupportedException cnse)<a name="line.414"></a>
<FONT color="green">415</FONT>        {<a name="line.415"></a>
<FONT color="green">416</FONT>          throw new RuntimeException(cnse.getMessage());<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>    <a name="line.419"></a>
<FONT color="green">420</FONT>      /**<a name="line.420"></a>
<FONT color="green">421</FONT>       * Cast result object to a mutableNodeset.<a name="line.421"></a>
<FONT color="green">422</FONT>       *<a name="line.422"></a>
<FONT color="green">423</FONT>       * @return The nodeset as a mutableNodeset<a name="line.423"></a>
<FONT color="green">424</FONT>       */<a name="line.424"></a>
<FONT color="green">425</FONT>      public NodeSetDTM mutableNodeset()<a name="line.425"></a>
<FONT color="green">426</FONT>      {<a name="line.426"></a>
<FONT color="green">427</FONT>        NodeSetDTM mnl;<a name="line.427"></a>
<FONT color="green">428</FONT>    <a name="line.428"></a>
<FONT color="green">429</FONT>        if(m_obj instanceof NodeSetDTM)<a name="line.429"></a>
<FONT color="green">430</FONT>        {<a name="line.430"></a>
<FONT color="green">431</FONT>          mnl = (NodeSetDTM) m_obj;<a name="line.431"></a>
<FONT color="green">432</FONT>        }<a name="line.432"></a>
<FONT color="green">433</FONT>        else<a name="line.433"></a>
<FONT color="green">434</FONT>        {<a name="line.434"></a>
<FONT color="green">435</FONT>          mnl = new NodeSetDTM(iter());<a name="line.435"></a>
<FONT color="green">436</FONT>          setObject(mnl);<a name="line.436"></a>
<FONT color="green">437</FONT>          setCurrentPos(0);<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>        return mnl;<a name="line.440"></a>
<FONT color="green">441</FONT>      }<a name="line.441"></a>
<FONT color="green">442</FONT>    <a name="line.442"></a>
<FONT color="green">443</FONT>      /** Less than comparator         */<a name="line.443"></a>
<FONT color="green">444</FONT>      static final LessThanComparator S_LT = new LessThanComparator();<a name="line.444"></a>
<FONT color="green">445</FONT>    <a name="line.445"></a>
<FONT color="green">446</FONT>      /** Less than or equal comparator          */<a name="line.446"></a>
<FONT color="green">447</FONT>      static final LessThanOrEqualComparator S_LTE = new LessThanOrEqualComparator();<a name="line.447"></a>
<FONT color="green">448</FONT>    <a name="line.448"></a>
<FONT color="green">449</FONT>      /** Greater than comparator         */<a name="line.449"></a>
<FONT color="green">450</FONT>      static final GreaterThanComparator S_GT = new GreaterThanComparator();<a name="line.450"></a>
<FONT color="green">451</FONT>    <a name="line.451"></a>
<FONT color="green">452</FONT>      /** Greater than or equal comparator          */<a name="line.452"></a>
<FONT color="green">453</FONT>      static final GreaterThanOrEqualComparator S_GTE =<a name="line.453"></a>
<FONT color="green">454</FONT>        new GreaterThanOrEqualComparator();<a name="line.454"></a>
<FONT color="green">455</FONT>    <a name="line.455"></a>
<FONT color="green">456</FONT>      /** Equal comparator         */<a name="line.456"></a>
<FONT color="green">457</FONT>      static final EqualComparator S_EQ = new EqualComparator();<a name="line.457"></a>
<FONT color="green">458</FONT>    <a name="line.458"></a>
<FONT color="green">459</FONT>      /** Not equal comparator         */<a name="line.459"></a>
<FONT color="green">460</FONT>      static final NotEqualComparator S_NEQ = new NotEqualComparator();<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>       * Tell if one object is less than the other.<a name="line.463"></a>
<FONT color="green">464</FONT>       *<a name="line.464"></a>
<FONT color="green">465</FONT>       * @param obj2 Object to compare this nodeset to<a name="line.465"></a>
<FONT color="green">466</FONT>       * @param comparator Comparator to use<a name="line.466"></a>
<FONT color="green">467</FONT>       *<a name="line.467"></a>
<FONT color="green">468</FONT>       * @return See the comments below for each object type comparison <a name="line.468"></a>
<FONT color="green">469</FONT>       *<a name="line.469"></a>
<FONT color="green">470</FONT>       * @throws javax.xml.transform.TransformerException<a name="line.470"></a>
<FONT color="green">471</FONT>       */<a name="line.471"></a>
<FONT color="green">472</FONT>      public boolean compare(XObject obj2, Comparator comparator)<a name="line.472"></a>
<FONT color="green">473</FONT>              throws javax.xml.transform.TransformerException<a name="line.473"></a>
<FONT color="green">474</FONT>      {<a name="line.474"></a>
<FONT color="green">475</FONT>    <a name="line.475"></a>
<FONT color="green">476</FONT>        boolean result = false;<a name="line.476"></a>
<FONT color="green">477</FONT>        int type = obj2.getType();<a name="line.477"></a>
<FONT color="green">478</FONT>    <a name="line.478"></a>
<FONT color="green">479</FONT>        if (XObject.CLASS_NODESET == type)<a name="line.479"></a>
<FONT color="green">480</FONT>        {<a name="line.480"></a>
<FONT color="green">481</FONT>          // %OPT% This should be XMLString based instead of string based...<a name="line.481"></a>
<FONT color="green">482</FONT>    <a name="line.482"></a>
<FONT color="green">483</FONT>          // From http://www.w3.org/TR/xpath: <a name="line.483"></a>
<FONT color="green">484</FONT>          // If both objects to be compared are node-sets, then the comparison <a name="line.484"></a>
<FONT color="green">485</FONT>          // will be true if and only if there is a node in the first node-set <a name="line.485"></a>
<FONT color="green">486</FONT>          // and a node in the second node-set such that the result of performing <a name="line.486"></a>
<FONT color="green">487</FONT>          // the comparison on the string-values of the two nodes is true.<a name="line.487"></a>
<FONT color="green">488</FONT>          // Note this little gem from the draft:<a name="line.488"></a>
<FONT color="green">489</FONT>          // NOTE: If $x is bound to a node-set, then $x="foo" <a name="line.489"></a>
<FONT color="green">490</FONT>          // does not mean the same as not($x!="foo"): the former <a name="line.490"></a>
<FONT color="green">491</FONT>          // is true if and only if some node in $x has the string-value <a name="line.491"></a>
<FONT color="green">492</FONT>          // foo; the latter is true if and only if all nodes in $x have <a name="line.492"></a>
<FONT color="green">493</FONT>          // the string-value foo.<a name="line.493"></a>
<FONT color="green">494</FONT>          DTMIterator list1 = iterRaw();<a name="line.494"></a>
<FONT color="green">495</FONT>          DTMIterator list2 = ((XNodeSet) obj2).iterRaw();<a name="line.495"></a>
<FONT color="green">496</FONT>          int node1;<a name="line.496"></a>
<FONT color="green">497</FONT>          java.util.Vector node2Strings = null;<a name="line.497"></a>
<FONT color="green">498</FONT>    <a name="line.498"></a>
<FONT color="green">499</FONT>          while (DTM.NULL != (node1 = list1.nextNode()))<a name="line.499"></a>
<FONT color="green">500</FONT>          {<a name="line.500"></a>
<FONT color="green">501</FONT>            XMLString s1 = getStringFromNode(node1);<a name="line.501"></a>
<FONT color="green">502</FONT>    <a name="line.502"></a>
<FONT color="green">503</FONT>            if (null == node2Strings)<a name="line.503"></a>
<FONT color="green">504</FONT>            {<a name="line.504"></a>
<FONT color="green">505</FONT>              int node2;<a name="line.505"></a>
<FONT color="green">506</FONT>    <a name="line.506"></a>
<FONT color="green">507</FONT>              while (DTM.NULL != (node2 = list2.nextNode()))<a name="line.507"></a>
<FONT color="green">508</FONT>              {<a name="line.508"></a>
<FONT color="green">509</FONT>                XMLString s2 = getStringFromNode(node2);<a name="line.509"></a>
<FONT color="green">510</FONT>    <a name="line.510"></a>
<FONT color="green">511</FONT>                if (comparator.compareStrings(s1, s2))<a name="line.511"></a>
<FONT color="green">512</FONT>                {<a name="line.512"></a>
<FONT color="green">513</FONT>                  result = true;<a name="line.513"></a>
<FONT color="green">514</FONT>    <a name="line.514"></a>
<FONT color="green">515</FONT>                  break;<a name="line.515"></a>
<FONT color="green">516</FONT>                }<a name="line.516"></a>
<FONT color="green">517</FONT>    <a name="line.517"></a>
<FONT color="green">518</FONT>                if (null == node2Strings)<a name="line.518"></a>
<FONT color="green">519</FONT>                  node2Strings = new java.util.Vector();<a name="line.519"></a>
<FONT color="green">520</FONT>    <a name="line.520"></a>
<FONT color="green">521</FONT>                node2Strings.addElement(s2);<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>            else<a name="line.524"></a>
<FONT color="green">525</FONT>            {<a name="line.525"></a>
<FONT color="green">526</FONT>              int n = node2Strings.size();<a name="line.526"></a>
<FONT color="green">527</FONT>    <a name="line.527"></a>
<FONT color="green">528</FONT>              for (int i = 0; i &lt; n; i++)<a name="line.528"></a>
<FONT color="green">529</FONT>              {<a name="line.529"></a>
<FONT color="green">530</FONT>                if (comparator.compareStrings(s1, (XMLString)node2Strings.elementAt(i)))<a name="line.530"></a>
<FONT color="green">531</FONT>                {<a name="line.531"></a>
<FONT color="green">532</FONT>                  result = true;<a name="line.532"></a>
<FONT color="green">533</FONT>    <a name="line.533"></a>
<FONT color="green">534</FONT>                  break;<a name="line.534"></a>
<FONT color="green">535</FONT>                }<a name="line.535"></a>
<FONT color="green">536</FONT>              }<a name="line.536"></a>
<FONT color="green">537</FONT>            }<a name="line.537"></a>
<FONT color="green">538</FONT>          }<a name="line.538"></a>
<FONT color="green">539</FONT>          list1.reset();<a name="line.539"></a>
<FONT color="green">540</FONT>          list2.reset();<a name="line.540"></a>
<FONT color="green">541</FONT>        }<a name="line.541"></a>
<FONT color="green">542</FONT>        else if (XObject.CLASS_BOOLEAN == type)<a name="line.542"></a>
<FONT color="green">543</FONT>        {<a name="line.543"></a>
<FONT color="green">544</FONT>    <a name="line.544"></a>
<FONT color="green">545</FONT>          // From http://www.w3.org/TR/xpath: <a name="line.545"></a>
<FONT color="green">546</FONT>          // If one object to be compared is a node-set and the other is a boolean, <a name="line.546"></a>
<FONT color="green">547</FONT>          // then the comparison will be true if and only if the result of <a name="line.547"></a>
<FONT color="green">548</FONT>          // performing the comparison on the boolean and on the result of <a name="line.548"></a>
<FONT color="green">549</FONT>          // converting the node-set to a boolean using the boolean function <a name="line.549"></a>
<FONT color="green">550</FONT>          // is true.<a name="line.550"></a>
<FONT color="green">551</FONT>          double num1 = bool() ? 1.0 : 0.0;<a name="line.551"></a>
<FONT color="green">552</FONT>          double num2 = obj2.num();<a name="line.552"></a>
<FONT color="green">553</FONT>    <a name="line.553"></a>
<FONT color="green">554</FONT>          result = comparator.compareNumbers(num1, num2);<a name="line.554"></a>
<FONT color="green">555</FONT>        }<a name="line.555"></a>
<FONT color="green">556</FONT>        else if (XObject.CLASS_NUMBER == type)<a name="line.556"></a>
<FONT color="green">557</FONT>        {<a name="line.557"></a>
<FONT color="green">558</FONT>    <a name="line.558"></a>
<FONT color="green">559</FONT>          // From http://www.w3.org/TR/xpath: <a name="line.559"></a>
<FONT color="green">560</FONT>          // If one object to be compared is a node-set and the other is a number, <a name="line.560"></a>
<FONT color="green">561</FONT>          // then the comparison will be true if and only if there is a <a name="line.561"></a>
<FONT color="green">562</FONT>          // node in the node-set such that the result of performing the <a name="line.562"></a>
<FONT color="green">563</FONT>          // comparison on the number to be compared and on the result of <a name="line.563"></a>
<FONT color="green">564</FONT>          // converting the string-value of that node to a number using <a name="line.564"></a>
<FONT color="green">565</FONT>          // the number function is true. <a name="line.565"></a>
<FONT color="green">566</FONT>          DTMIterator list1 = iterRaw();<a name="line.566"></a>
<FONT color="green">567</FONT>          double num2 = obj2.num();<a name="line.567"></a>
<FONT color="green">568</FONT>          int node;<a name="line.568"></a>
<FONT color="green">569</FONT>    <a name="line.569"></a>
<FONT color="green">570</FONT>          while (DTM.NULL != (node = list1.nextNode()))<a name="line.570"></a>
<FONT color="green">571</FONT>          {<a name="line.571"></a>
<FONT color="green">572</FONT>            double num1 = getNumberFromNode(node);<a name="line.572"></a>
<FONT color="green">573</FONT>    <a name="line.573"></a>
<FONT color="green">574</FONT>            if (comparator.compareNumbers(num1, num2))<a name="line.574"></a>
<FONT color="green">575</FONT>            {<a name="line.575"></a>
<FONT color="green">576</FONT>              result = true;<a name="line.576"></a>
<FONT color="green">577</FONT>    <a name="line.577"></a>
<FONT color="green">578</FONT>              break;<a name="line.578"></a>
<FONT color="green">579</FONT>            }<a name="line.579"></a>
<FONT color="green">580</FONT>          }<a name="line.580"></a>
<FONT color="green">581</FONT>          list1.reset();<a name="line.581"></a>
<FONT color="green">582</FONT>        }<a name="line.582"></a>
<FONT color="green">583</FONT>        else if (XObject.CLASS_RTREEFRAG == type)<a name="line.583"></a>
<FONT color="green">584</FONT>        {<a name="line.584"></a>
<FONT color="green">585</FONT>          XMLString s2 = obj2.xstr();<a name="line.585"></a>
<FONT color="green">586</FONT>          DTMIterator list1 = iterRaw();<a name="line.586"></a>
<FONT color="green">587</FONT>          int node;<a name="line.587"></a>
<FONT color="green">588</FONT>    <a name="line.588"></a>
<FONT color="green">589</FONT>          while (DTM.NULL != (node = list1.nextNode()))<a name="line.589"></a>
<FONT color="green">590</FONT>          {<a name="line.590"></a>
<FONT color="green">591</FONT>            XMLString s1 = getStringFromNode(node);<a name="line.591"></a>
<FONT color="green">592</FONT>    <a name="line.592"></a>
<FONT color="green">593</FONT>            if (comparator.compareStrings(s1, s2))<a name="line.593"></a>
<FONT color="green">594</FONT>            {<a name="line.594"></a>
<FONT color="green">595</FONT>              result = true;<a name="line.595"></a>
<FONT color="green">596</FONT>    <a name="line.596"></a>
<FONT color="green">597</FONT>              break;<a name="line.597"></a>
<FONT color="green">598</FONT>            }<a name="line.598"></a>
<FONT color="green">599</FONT>          }<a name="line.599"></a>
<FONT color="green">600</FONT>          list1.reset();<a name="line.600"></a>
<FONT color="green">601</FONT>        }<a name="line.601"></a>
<FONT color="green">602</FONT>        else if (XObject.CLASS_STRING == type)<a name="line.602"></a>
<FONT color="green">603</FONT>        {<a name="line.603"></a>
<FONT color="green">604</FONT>    <a name="line.604"></a>
<FONT color="green">605</FONT>          // From http://www.w3.org/TR/xpath: <a name="line.605"></a>
<FONT color="green">606</FONT>          // If one object to be compared is a node-set and the other is a <a name="line.606"></a>
<FONT color="green">607</FONT>          // string, then the comparison will be true if and only if there <a name="line.607"></a>
<FONT color="green">608</FONT>          // is a node in the node-set such that the result of performing <a name="line.608"></a>
<FONT color="green">609</FONT>          // the comparison on the string-value of the node and the other <a name="line.609"></a>
<FONT color="green">610</FONT>          // string is true. <a name="line.610"></a>
<FONT color="green">611</FONT>          XMLString s2 = obj2.xstr();<a name="line.611"></a>
<FONT color="green">612</FONT>          DTMIterator list1 = iterRaw();<a name="line.612"></a>
<FONT color="green">613</FONT>          int node;<a name="line.613"></a>
<FONT color="green">614</FONT>    <a name="line.614"></a>
<FONT color="green">615</FONT>          while (DTM.NULL != (node = list1.nextNode()))<a name="line.615"></a>
<FONT color="green">616</FONT>          {<a name="line.616"></a>
<FONT color="green">617</FONT>            XMLString s1 = getStringFromNode(node);<a name="line.617"></a>
<FONT color="green">618</FONT>            if (comparator.compareStrings(s1, s2))<a name="line.618"></a>
<FONT color="green">619</FONT>            {<a name="line.619"></a>
<FONT color="green">620</FONT>              result = true;<a name="line.620"></a>
<FONT color="green">621</FONT>    <a name="line.621"></a>
<FONT color="green">622</FONT>              break;<a name="line.622"></a>
<FONT color="green">623</FONT>            }<a name="line.623"></a>
<FONT color="green">624</FONT>          }<a name="line.624"></a>
<FONT color="green">625</FONT>          list1.reset();<a name="line.625"></a>
<FONT color="green">626</FONT>        }<a name="line.626"></a>
<FONT color="green">627</FONT>        else<a name="line.627"></a>
<FONT color="green">628</FONT>        {<a name="line.628"></a>
<FONT color="green">629</FONT>          result = comparator.compareNumbers(this.num(), obj2.num());<a name="line.629"></a>
<FONT color="green">630</FONT>        }<a name="line.630"></a>
<FONT color="green">631</FONT>    <a name="line.631"></a>
<FONT color="green">632</FONT>        return result;<a name="line.632"></a>
<FONT color="green">633</FONT>      }<a name="line.633"></a>
<FONT color="green">634</FONT>    <a name="line.634"></a>
<FONT color="green">635</FONT>      /**<a name="line.635"></a>
<FONT color="green">636</FONT>       * Tell if one object is less than the other.<a name="line.636"></a>
<FONT color="green">637</FONT>       *<a name="line.637"></a>
<FONT color="green">638</FONT>       * @param obj2 object to compare this nodeset to<a name="line.638"></a>
<FONT color="green">639</FONT>       *<a name="line.639"></a>
<FONT color="green">640</FONT>       * @return see this.compare(...) <a name="line.640"></a>
<FONT color="green">641</FONT>       *<a name="line.641"></a>
<FONT color="green">642</FONT>       * @throws javax.xml.transform.TransformerException<a name="line.642"></a>
<FONT color="green">643</FONT>       */<a name="line.643"></a>
<FONT color="green">644</FONT>      public boolean lessThan(XObject obj2) throws javax.xml.transform.TransformerException<a name="line.644"></a>
<FONT color="green">645</FONT>      {<a name="line.645"></a>
<FONT color="green">646</FONT>        return compare(obj2, S_LT);<a name="line.646"></a>
<FONT color="green">647</FONT>      }<a name="line.647"></a>
<FONT color="green">648</FONT>    <a name="line.648"></a>
<FONT color="green">649</FONT>      /**<a name="line.649"></a>
<FONT color="green">650</FONT>       * Tell if one object is less than or equal to the other.<a name="line.650"></a>
<FONT color="green">651</FONT>       *<a name="line.651"></a>
<FONT color="green">652</FONT>       * @param obj2 object to compare this nodeset to<a name="line.652"></a>
<FONT color="green">653</FONT>       *<a name="line.653"></a>
<FONT color="green">654</FONT>       * @return see this.compare(...) <a name="line.654"></a>
<FONT color="green">655</FONT>       *<a name="line.655"></a>
<FONT color="green">656</FONT>       * @throws javax.xml.transform.TransformerException<a name="line.656"></a>
<FONT color="green">657</FONT>       */<a name="line.657"></a>
<FONT color="green">658</FONT>      public boolean lessThanOrEqual(XObject obj2) throws javax.xml.transform.TransformerException<a name="line.658"></a>
<FONT color="green">659</FONT>      {<a name="line.659"></a>
<FONT color="green">660</FONT>        return compare(obj2, S_LTE);<a name="line.660"></a>
<FONT color="green">661</FONT>      }<a name="line.661"></a>
<FONT color="green">662</FONT>    <a name="line.662"></a>
<FONT color="green">663</FONT>      /**<a name="line.663"></a>
<FONT color="green">664</FONT>       * Tell if one object is less than the other.<a name="line.664"></a>
<FONT color="green">665</FONT>       *<a name="line.665"></a>
<FONT color="green">666</FONT>       * @param obj2 object to compare this nodeset to<a name="line.666"></a>
<FONT color="green">667</FONT>       *<a name="line.667"></a>
<FONT color="green">668</FONT>       * @return see this.compare(...) <a name="line.668"></a>
<FONT color="green">669</FONT>       *<a name="line.669"></a>
<FONT color="green">670</FONT>       * @throws javax.xml.transform.TransformerException<a name="line.670"></a>
<FONT color="green">671</FONT>       */<a name="line.671"></a>
<FONT color="green">672</FONT>      public boolean greaterThan(XObject obj2) throws javax.xml.transform.TransformerException<a name="line.672"></a>
<FONT color="green">673</FONT>      {<a name="line.673"></a>
<FONT color="green">674</FONT>        return compare(obj2, S_GT);<a name="line.674"></a>
<FONT color="green">675</FONT>      }<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>       * Tell if one object is less than the other.<a name="line.678"></a>
<FONT color="green">679</FONT>       *<a name="line.679"></a>
<FONT color="green">680</FONT>       * @param obj2 object to compare this nodeset to<a name="line.680"></a>
<FONT color="green">681</FONT>       *<a name="line.681"></a>
<FONT color="green">682</FONT>       * @return see this.compare(...) <a name="line.682"></a>
<FONT color="green">683</FONT>       *<a name="line.683"></a>
<FONT color="green">684</FONT>       * @throws javax.xml.transform.TransformerException<a name="line.684"></a>
<FONT color="green">685</FONT>       */<a name="line.685"></a>
<FONT color="green">686</FONT>      public boolean greaterThanOrEqual(XObject obj2)<a name="line.686"></a>
<FONT color="green">687</FONT>              throws javax.xml.transform.TransformerException<a name="line.687"></a>
<FONT color="green">688</FONT>      {<a name="line.688"></a>
<FONT color="green">689</FONT>        return compare(obj2, S_GTE);<a name="line.689"></a>
<FONT color="green">690</FONT>      }<a name="line.690"></a>
<FONT color="green">691</FONT>    <a name="line.691"></a>
<FONT color="green">692</FONT>      /**<a name="line.692"></a>
<FONT color="green">693</FONT>       * Tell if two objects are functionally equal.<a name="line.693"></a>
<FONT color="green">694</FONT>       *<a name="line.694"></a>
<FONT color="green">695</FONT>       * @param obj2 object to compare this nodeset to<a name="line.695"></a>
<FONT color="green">696</FONT>       *<a name="line.696"></a>
<FONT color="green">697</FONT>       * @return see this.compare(...) <a name="line.697"></a>
<FONT color="green">698</FONT>       *<a name="line.698"></a>
<FONT color="green">699</FONT>       * @throws javax.xml.transform.TransformerException<a name="line.699"></a>
<FONT color="green">700</FONT>       */<a name="line.700"></a>
<FONT color="green">701</FONT>      public boolean equals(XObject obj2)<a name="line.701"></a>
<FONT color="green">702</FONT>      {<a name="line.702"></a>
<FONT color="green">703</FONT>        try<a name="line.703"></a>
<FONT color="green">704</FONT>        {<a name="line.704"></a>
<FONT color="green">705</FONT>          return compare(obj2, S_EQ);<a name="line.705"></a>
<FONT color="green">706</FONT>        }<a name="line.706"></a>
<FONT color="green">707</FONT>        catch(javax.xml.transform.TransformerException te)<a name="line.707"></a>
<FONT color="green">708</FONT>        {<a name="line.708"></a>
<FONT color="green">709</FONT>          throw new org.apache.xml.utils.WrappedRuntimeException(te);<a name="line.709"></a>
<FONT color="green">710</FONT>        }<a name="line.710"></a>
<FONT color="green">711</FONT>      }<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>       * Tell if two objects are functionally not equal.<a name="line.714"></a>
<FONT color="green">715</FONT>       *<a name="line.715"></a>
<FONT color="green">716</FONT>       * @param obj2 object to compare this nodeset to<a name="line.716"></a>
<FONT color="green">717</FONT>       *<a name="line.717"></a>
<FONT color="green">718</FONT>       * @return see this.compare(...) <a name="line.718"></a>
<FONT color="green">719</FONT>       *<a name="line.719"></a>
<FONT color="green">720</FONT>       * @throws javax.xml.transform.TransformerException<a name="line.720"></a>
<FONT color="green">721</FONT>       */<a name="line.721"></a>
<FONT color="green">722</FONT>      public boolean notEquals(XObject obj2) throws javax.xml.transform.TransformerException<a name="line.722"></a>
<FONT color="green">723</FONT>      {<a name="line.723"></a>
<FONT color="green">724</FONT>        return compare(obj2, S_NEQ);<a name="line.724"></a>
<FONT color="green">725</FONT>      }<a name="line.725"></a>
<FONT color="green">726</FONT>    }<a name="line.726"></a>
<FONT color="green">727</FONT>    <a name="line.727"></a>
<FONT color="green">728</FONT>    /**<a name="line.728"></a>
<FONT color="green">729</FONT>     * compares nodes for various boolean operations.<a name="line.729"></a>
<FONT color="green">730</FONT>     */<a name="line.730"></a>
<FONT color="green">731</FONT>    abstract class Comparator<a name="line.731"></a>
<FONT color="green">732</FONT>    {<a name="line.732"></a>
<FONT color="green">733</FONT>    <a name="line.733"></a>
<FONT color="green">734</FONT>      /**<a name="line.734"></a>
<FONT color="green">735</FONT>       * Compare two strings<a name="line.735"></a>
<FONT color="green">736</FONT>       *<a name="line.736"></a>
<FONT color="green">737</FONT>       *<a name="line.737"></a>
<FONT color="green">738</FONT>       * @param s1 First string to compare<a name="line.738"></a>
<FONT color="green">739</FONT>       * @param s2 Second String to compare <a name="line.739"></a>
<FONT color="green">740</FONT>       *<a name="line.740"></a>
<FONT color="green">741</FONT>       * @return Whether the strings are equal or not<a name="line.741"></a>
<FONT color="green">742</FONT>       */<a name="line.742"></a>
<FONT color="green">743</FONT>      abstract boolean compareStrings(XMLString s1, XMLString s2);<a name="line.743"></a>
<FONT color="green">744</FONT>    <a name="line.744"></a>
<FONT color="green">745</FONT>      /**<a name="line.745"></a>
<FONT color="green">746</FONT>       * Compare two numbers<a name="line.746"></a>
<FONT color="green">747</FONT>       *<a name="line.747"></a>
<FONT color="green">748</FONT>       *<a name="line.748"></a>
<FONT color="green">749</FONT>       * @param n1 First number to compare<a name="line.749"></a>
<FONT color="green">750</FONT>       * @param n2 Second number to compare<a name="line.750"></a>
<FONT color="green">751</FONT>       *<a name="line.751"></a>
<FONT color="green">752</FONT>       * @return Whether the numbers are equal or not<a name="line.752"></a>
<FONT color="green">753</FONT>       */<a name="line.753"></a>
<FONT color="green">754</FONT>      abstract boolean compareNumbers(double n1, double n2);<a name="line.754"></a>
<FONT color="green">755</FONT>    }<a name="line.755"></a>
<FONT color="green">756</FONT>    <a name="line.756"></a>
<FONT color="green">757</FONT>    /**<a name="line.757"></a>
<FONT color="green">758</FONT>     * Compare strings or numbers for less than.<a name="line.758"></a>
<FONT color="green">759</FONT>     */<a name="line.759"></a>
<FONT color="green">760</FONT>    class LessThanComparator extends Comparator<a name="line.760"></a>
<FONT color="green">761</FONT>    {<a name="line.761"></a>
<FONT color="green">762</FONT>    <a name="line.762"></a>
<FONT color="green">763</FONT>      /**<a name="line.763"></a>
<FONT color="green">764</FONT>       * Compare two strings for less than.<a name="line.764"></a>
<FONT color="green">765</FONT>       *<a name="line.765"></a>
<FONT color="green">766</FONT>       *<a name="line.766"></a>
<FONT color="green">767</FONT>       * @param s1 First string to compare<a name="line.767"></a>
<FONT color="green">768</FONT>       * @param s2 Second String to compare <a name="line.768"></a>
<FONT color="green">769</FONT>       *<a name="line.769"></a>
<FONT color="green">770</FONT>       * @return True if s1 is less than s2<a name="line.770"></a>
<FONT color="green">771</FONT>       */<a name="line.771"></a>
<FONT color="green">772</FONT>      boolean compareStrings(XMLString s1, XMLString s2)<a name="line.772"></a>
<FONT color="green">773</FONT>      {<a name="line.773"></a>
<FONT color="green">774</FONT>        return (s1.toDouble() &lt; s2.toDouble());<a name="line.774"></a>
<FONT color="green">775</FONT>        // return s1.compareTo(s2) &lt; 0;<a name="line.775"></a>
<FONT color="green">776</FONT>      }<a name="line.776"></a>
<FONT color="green">777</FONT>    <a name="line.777"></a>
<FONT color="green">778</FONT>      /**<a name="line.778"></a>
<FONT color="green">779</FONT>       * Compare two numbers for less than.<a name="line.779"></a>
<FONT color="green">780</FONT>       *<a name="line.780"></a>
<FONT color="green">781</FONT>       *<a name="line.781"></a>
<FONT color="green">782</FONT>       * @param n1 First number to compare<a name="line.782"></a>
<FONT color="green">783</FONT>       * @param n2 Second number to compare<a name="line.783"></a>
<FONT color="green">784</FONT>       *<a name="line.784"></a>
<FONT color="green">785</FONT>       * @return true if n1 is less than n2<a name="line.785"></a>
<FONT color="green">786</FONT>       */<a name="line.786"></a>
<FONT color="green">787</FONT>      boolean compareNumbers(double n1, double n2)<a name="line.787"></a>
<FONT color="green">788</FONT>      {<a name="line.788"></a>
<FONT color="green">789</FONT>        return n1 &lt; n2;<a name="line.789"></a>
<FONT color="green">790</FONT>      }<a name="line.790"></a>
<FONT color="green">791</FONT>    }<a name="line.791"></a>
<FONT color="green">792</FONT>    <a name="line.792"></a>
<FONT color="green">793</FONT>    /**<a name="line.793"></a>
<FONT color="green">794</FONT>     * Compare strings or numbers for less than or equal.<a name="line.794"></a>
<FONT color="green">795</FONT>     */<a name="line.795"></a>
<FONT color="green">796</FONT>    class LessThanOrEqualComparator extends Comparator<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>       * Compare two strings for less than or equal.<a name="line.800"></a>
<FONT color="green">801</FONT>       *<a name="line.801"></a>
<FONT color="green">802</FONT>       *<a name="line.802"></a>
<FONT color="green">803</FONT>       * @param s1 First string to compare<a name="line.803"></a>
<FONT color="green">804</FONT>       * @param s2 Second String to compare<a name="line.804"></a>
<FONT color="green">805</FONT>       *<a name="line.805"></a>
<FONT color="green">806</FONT>       * @return true if s1 is less than or equal to s2<a name="line.806"></a>
<FONT color="green">807</FONT>       */<a name="line.807"></a>
<FONT color="green">808</FONT>      boolean compareStrings(XMLString s1, XMLString s2)<a name="line.808"></a>
<FONT color="green">809</FONT>      {<a name="line.809"></a>
<FONT color="green">810</FONT>        return (s1.toDouble() &lt;= s2.toDouble());<a name="line.810"></a>
<FONT color="green">811</FONT>        // return s1.compareTo(s2) &lt;= 0;<a name="line.811"></a>
<FONT color="green">812</FONT>      }<a name="line.812"></a>
<FONT color="green">813</FONT>    <a name="line.813"></a>
<FONT color="green">814</FONT>      /**<a name="line.814"></a>
<FONT color="green">815</FONT>       * Compare two numbers for less than or equal.<a name="line.815"></a>
<FONT color="green">816</FONT>       *<a name="line.816"></a>
<FONT color="green">817</FONT>       *<a name="line.817"></a>
<FONT color="green">818</FONT>       * @param n1 First number to compare<a name="line.818"></a>
<FONT color="green">819</FONT>       * @param n2 Second number to compare<a name="line.819"></a>
<FONT color="green">820</FONT>       *<a name="line.820"></a>
<FONT color="green">821</FONT>       * @return true if n1 is less than or equal to n2<a name="line.821"></a>
<FONT color="green">822</FONT>       */<a name="line.822"></a>
<FONT color="green">823</FONT>      boolean compareNumbers(double n1, double n2)<a name="line.823"></a>
<FONT color="green">824</FONT>      {<a name="line.824"></a>
<FONT color="green">825</FONT>        return n1 &lt;= n2;<a name="line.825"></a>
<FONT color="green">826</FONT>      }<a name="line.826"></a>
<FONT color="green">827</FONT>    }<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>     * Compare strings or numbers for greater than.<a name="line.830"></a>
<FONT color="green">831</FONT>     */<a name="line.831"></a>
<FONT color="green">832</FONT>    class GreaterThanComparator extends Comparator<a name="line.832"></a>
<FONT color="green">833</FONT>    {<a name="line.833"></a>
<FONT color="green">834</FONT>    <a name="line.834"></a>
<FONT color="green">835</FONT>      /**<a name="line.835"></a>
<FONT color="green">836</FONT>       * Compare two strings for greater than.<a name="line.836"></a>
<FONT color="green">837</FONT>       *<a name="line.837"></a>
<FONT color="green">838</FONT>       *<a name="line.838"></a>
<FONT color="green">839</FONT>       * @param s1 First string to compare<a name="line.839"></a>
<FONT color="green">840</FONT>       * @param s2 Second String to compare<a name="line.840"></a>
<FONT color="green">841</FONT>       *<a name="line.841"></a>
<FONT color="green">842</FONT>       * @return true if s1 is greater than s2<a name="line.842"></a>
<FONT color="green">843</FONT>       */<a name="line.843"></a>
<FONT color="green">844</FONT>      boolean compareStrings(XMLString s1, XMLString s2)<a name="line.844"></a>
<FONT color="green">845</FONT>      {<a name="line.845"></a>
<FONT color="green">846</FONT>        return (s1.toDouble() &gt; s2.toDouble());<a name="line.846"></a>
<FONT color="green">847</FONT>        // return s1.compareTo(s2) &gt; 0;<a name="line.847"></a>
<FONT color="green">848</FONT>      }<a name="line.848"></a>
<FONT color="green">849</FONT>    <a name="line.849"></a>
<FONT color="green">850</FONT>      /**<a name="line.850"></a>
<FONT color="green">851</FONT>       * Compare two numbers for greater than.<a name="line.851"></a>
<FONT color="green">852</FONT>       *<a name="line.852"></a>
<FONT color="green">853</FONT>       *<a name="line.853"></a>
<FONT color="green">854</FONT>       * @param n1 First number to compare<a name="line.854"></a>
<FONT color="green">855</FONT>       * @param n2 Second number to compare<a name="line.855"></a>
<FONT color="green">856</FONT>       *<a name="line.856"></a>
<FONT color="green">857</FONT>       * @return true if n1 is greater than n2<a name="line.857"></a>
<FONT color="green">858</FONT>       */<a name="line.858"></a>
<FONT color="green">859</FONT>      boolean compareNumbers(double n1, double n2)<a name="line.859"></a>
<FONT color="green">860</FONT>      {<a name="line.860"></a>
<FONT color="green">861</FONT>        return n1 &gt; n2;<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>    /**<a name="line.865"></a>
<FONT color="green">866</FONT>     * Compare strings or numbers for greater than or equal.<a name="line.866"></a>
<FONT color="green">867</FONT>     */<a name="line.867"></a>
<FONT color="green">868</FONT>    class GreaterThanOrEqualComparator extends Comparator<a name="line.868"></a>
<FONT color="green">869</FONT>    {<a name="line.869"></a>
<FONT color="green">870</FONT>    <a name="line.870"></a>
<FONT color="green">871</FONT>      /**<a name="line.871"></a>
<FONT color="green">872</FONT>       * Compare two strings for greater than or equal.<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>       * @param s1 First string to compare<a name="line.875"></a>
<FONT color="green">876</FONT>       * @param s2 Second String to compare<a name="line.876"></a>
<FONT color="green">877</FONT>       *<a name="line.877"></a>
<FONT color="green">878</FONT>       * @return true if s1 is greater than or equal to s2<a name="line.878"></a>
<FONT color="green">879</FONT>       */<a name="line.879"></a>
<FONT color="green">880</FONT>      boolean compareStrings(XMLString s1, XMLString s2)<a name="line.880"></a>
<FONT color="green">881</FONT>      {<a name="line.881"></a>
<FONT color="green">882</FONT>        return (s1.toDouble() &gt;= s2.toDouble());<a name="line.882"></a>
<FONT color="green">883</FONT>        // return s1.compareTo(s2) &gt;= 0;<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>       * Compare two numbers for greater than or equal.<a name="line.887"></a>
<FONT color="green">888</FONT>       *<a name="line.888"></a>
<FONT color="green">889</FONT>       *<a name="line.889"></a>
<FONT color="green">890</FONT>       * @param n1 First number to compare<a name="line.890"></a>
<FONT color="green">891</FONT>       * @param n2 Second number to compare<a name="line.891"></a>
<FONT color="green">892</FONT>       *<a name="line.892"></a>
<FONT color="green">893</FONT>       * @return true if n1 is greater than or equal to n2<a name="line.893"></a>
<FONT color="green">894</FONT>       */<a name="line.894"></a>
<FONT color="green">895</FONT>      boolean compareNumbers(double n1, double n2)<a name="line.895"></a>
<FONT color="green">896</FONT>      {<a name="line.896"></a>
<FONT color="green">897</FONT>        return n1 &gt;= n2;<a name="line.897"></a>
<FONT color="green">898</FONT>      }<a name="line.898"></a>
<FONT color="green">899</FONT>    }<a name="line.899"></a>
<FONT color="green">900</FONT>    <a name="line.900"></a>
<FONT color="green">901</FONT>    /**<a name="line.901"></a>
<FONT color="green">902</FONT>     * Compare strings or numbers for equality.<a name="line.902"></a>
<FONT color="green">903</FONT>     */<a name="line.903"></a>
<FONT color="green">904</FONT>    class EqualComparator extends Comparator<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>      /**<a name="line.907"></a>
<FONT color="green">908</FONT>       * Compare two strings for equality.<a name="line.908"></a>
<FONT color="green">909</FONT>       *<a name="line.909"></a>
<FONT color="green">910</FONT>       *<a name="line.910"></a>
<FONT color="green">911</FONT>       * @param s1 First string to compare<a name="line.911"></a>
<FONT color="green">912</FONT>       * @param s2 Second String to compare<a name="line.912"></a>
<FONT color="green">913</FONT>       *<a name="line.913"></a>
<FONT color="green">914</FONT>       * @return true if s1 is equal to s2<a name="line.914"></a>
<FONT color="green">915</FONT>       */<a name="line.915"></a>
<FONT color="green">916</FONT>      boolean compareStrings(XMLString s1, XMLString s2)<a name="line.916"></a>
<FONT color="green">917</FONT>      {<a name="line.917"></a>
<FONT color="green">918</FONT>        return s1.equals(s2);<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>      /**<a name="line.921"></a>
<FONT color="green">922</FONT>       * Compare two numbers for equality.<a name="line.922"></a>
<FONT color="green">923</FONT>       *<a name="line.923"></a>
<FONT color="green">924</FONT>       *<a name="line.924"></a>
<FONT color="green">925</FONT>       * @param n1 First number to compare<a name="line.925"></a>
<FONT color="green">926</FONT>       * @param n2 Second number to compare<a name="line.926"></a>
<FONT color="green">927</FONT>       *<a name="line.927"></a>
<FONT color="green">928</FONT>       * @return true if n1 is equal to n2<a name="line.928"></a>
<FONT color="green">929</FONT>       */<a name="line.929"></a>
<FONT color="green">930</FONT>      boolean compareNumbers(double n1, double n2)<a name="line.930"></a>
<FONT color="green">931</FONT>      {<a name="line.931"></a>
<FONT color="green">932</FONT>        return n1 == n2;<a name="line.932"></a>
<FONT color="green">933</FONT>      }<a name="line.933"></a>
<FONT color="green">934</FONT>    }<a name="line.934"></a>
<FONT color="green">935</FONT>    <a name="line.935"></a>
<FONT color="green">936</FONT>    /**<a name="line.936"></a>
<FONT color="green">937</FONT>     * Compare strings or numbers for non-equality.<a name="line.937"></a>
<FONT color="green">938</FONT>     */<a name="line.938"></a>
<FONT color="green">939</FONT>    class NotEqualComparator extends Comparator<a name="line.939"></a>
<FONT color="green">940</FONT>    {<a name="line.940"></a>
<FONT color="green">941</FONT>    <a name="line.941"></a>
<FONT color="green">942</FONT>      /**<a name="line.942"></a>
<FONT color="green">943</FONT>       * Compare two strings for non-equality.<a name="line.943"></a>
<FONT color="green">944</FONT>       *<a name="line.944"></a>
<FONT color="green">945</FONT>       *<a name="line.945"></a>
<FONT color="green">946</FONT>       * @param s1 First string to compare<a name="line.946"></a>
<FONT color="green">947</FONT>       * @param s2 Second String to compare<a name="line.947"></a>
<FONT color="green">948</FONT>       *<a name="line.948"></a>
<FONT color="green">949</FONT>       * @return true if s1 is not equal to s2<a name="line.949"></a>
<FONT color="green">950</FONT>       */<a name="line.950"></a>
<FONT color="green">951</FONT>      boolean compareStrings(XMLString s1, XMLString s2)<a name="line.951"></a>
<FONT color="green">952</FONT>      {<a name="line.952"></a>
<FONT color="green">953</FONT>        return !s1.equals(s2);<a name="line.953"></a>
<FONT color="green">954</FONT>      }<a name="line.954"></a>
<FONT color="green">955</FONT>    <a name="line.955"></a>
<FONT color="green">956</FONT>      /**<a name="line.956"></a>
<FONT color="green">957</FONT>       * Compare two numbers for non-equality.<a name="line.957"></a>
<FONT color="green">958</FONT>       *<a name="line.958"></a>
<FONT color="green">959</FONT>       *<a name="line.959"></a>
<FONT color="green">960</FONT>       * @param n1 First number to compare<a name="line.960"></a>
<FONT color="green">961</FONT>       * @param n2 Second number to compare<a name="line.961"></a>
<FONT color="green">962</FONT>       *<a name="line.962"></a>
<FONT color="green">963</FONT>       * @return true if n1 is not equal to n2<a name="line.963"></a>
<FONT color="green">964</FONT>       */<a name="line.964"></a>
<FONT color="green">965</FONT>      boolean compareNumbers(double n1, double n2)<a name="line.965"></a>
<FONT color="green">966</FONT>      {<a name="line.966"></a>
<FONT color="green">967</FONT>        return n1 != n2;<a name="line.967"></a>
<FONT color="green">968</FONT>      }<a name="line.968"></a>
<FONT color="green">969</FONT>    }<a name="line.969"></a>




























































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