14c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/* 24c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one 34c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * or more contributor license agreements. See the NOTICE file 44c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * distributed with this work for additional information 54c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * regarding copyright ownership. The ASF licenses this file 64c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * to you under the Apache License, Version 2.0 (the "License"); 74c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * you may not use this file except in compliance with the License. 84c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * You may obtain a copy of the License at 94c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 104c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 114c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 124c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Unless required by applicable law or agreed to in writing, software 134c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 144c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 154c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * See the License for the specific language governing permissions and 164c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * limitations under the License. 174c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 184c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/* 194c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * $Id: XNodeSet.java 469368 2006-10-31 04:41:36Z minchau $ 204c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 214c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonpackage org.apache.xpath.objects; 224c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 234c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonimport org.apache.xml.dtm.DTM; 244c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonimport org.apache.xml.dtm.DTMIterator; 254c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonimport org.apache.xml.dtm.DTMManager; 264c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonimport org.apache.xml.utils.XMLString; 274c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonimport org.apache.xpath.NodeSetDTM; 284c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonimport org.apache.xpath.axes.NodeSequence; 294c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 304c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonimport org.w3c.dom.NodeList; 314c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonimport org.w3c.dom.traversal.NodeIterator; 324c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 334c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/** 344c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * This class represents an XPath nodeset object, and is capable of 354c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * converting the nodeset to other types, such as a string. 364c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @xsl.usage general 374c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 384c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonpublic class XNodeSet extends NodeSequence 394c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson{ 404c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson static final long serialVersionUID = 1916026368035639667L; 414c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 424c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Default constructor for derived objects. 434c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 444c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson protected XNodeSet() 454c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 464c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 474c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 484c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 494c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Construct a XNodeSet object. 504c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 514c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param val Value of the XNodeSet object 524c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 534c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public XNodeSet(DTMIterator val) 544c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 554c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson super(); 564c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson if(val instanceof XNodeSet) 574c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 584c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson final XNodeSet nodeSet = (XNodeSet) val; 594c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson setIter(nodeSet.m_iter); 604c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson m_dtmMgr = nodeSet.m_dtmMgr; 614c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson m_last = nodeSet.m_last; 624c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // First make sure the DTMIterator val has a cache, 634c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // so if it doesn't have one, make one. 644c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson if(!nodeSet.hasCache()) 654c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson nodeSet.setShouldCacheNodes(true); 664c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 674c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // Get the cache from val and use it ourselves (we share it). 684c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson setObject(nodeSet.getIteratorCache()); 694c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 704c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson else 714c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson setIter(val); 724c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 734c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 744c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 754c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Construct a XNodeSet object. 764c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 774c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param val Value of the XNodeSet object 784c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 794c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public XNodeSet(XNodeSet val) 804c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 814c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson super(); 824c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson setIter(val.m_iter); 834c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson m_dtmMgr = val.m_dtmMgr; 844c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson m_last = val.m_last; 854c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson if(!val.hasCache()) 864c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson val.setShouldCacheNodes(true); 874c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson setObject(val.m_obj); 884c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 894c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 904c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 914c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 924c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Construct an empty XNodeSet object. This is used to create a mutable 934c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * nodeset to which random nodes may be added. 944c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 954c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public XNodeSet(DTMManager dtmMgr) 964c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 974c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson this(DTM.NULL,dtmMgr); 984c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 994c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1004c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 1014c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Construct a XNodeSet object for one node. 1024c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 1034c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param n Node to add to the new XNodeSet object 1044c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 1054c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public XNodeSet(int n, DTMManager dtmMgr) 1064c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 1074c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1084c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson super(new NodeSetDTM(dtmMgr)); 1094c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson m_dtmMgr = dtmMgr; 1104c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1114c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson if (DTM.NULL != n) 1124c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 1134c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson ((NodeSetDTM) m_obj).addNode(n); 1144c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson m_last = 1; 1154c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1164c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson else 1174c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson m_last = 0; 1184c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1194c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1204c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 1214c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Tell that this is a CLASS_NODESET. 1224c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 1234c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return type CLASS_NODESET 1244c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 1254c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public int getType() 1264c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 1274c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return CLASS_NODESET; 1284c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1294c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1304c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 1314c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Given a request type, return the equivalent string. 1324c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * For diagnostic purposes. 1334c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 1344c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return type string "#NODESET" 1354c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 1364c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public String getTypeString() 1374c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 1384c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return "#NODESET"; 1394c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1404c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1414c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 1424c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Get numeric value of the string conversion from a single node. 1434c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 1444c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param n Node to convert 1454c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 1464c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return numeric value of the string conversion from a single node. 1474c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 1484c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public double getNumberFromNode(int n) 1494c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 1504c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson XMLString xstr = m_dtmMgr.getDTM(n).getStringValue(n); 1514c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return xstr.toDouble(); 1524c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1534c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1544c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 1554c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Cast result object to a number. 1564c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 1574c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return numeric value of the string conversion from the 1584c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * next node in the NodeSetDTM, or NAN if no node was found 1594c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 1604c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public double num() 1614c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 1624c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1634c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson int node = item(0); 1644c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return (node != DTM.NULL) ? getNumberFromNode(node) : Double.NaN; 1654c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1664c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1674c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 1684c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Cast result object to a number, but allow side effects, such as the 1694c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * incrementing of an iterator. 1704c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 1714c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return numeric value of the string conversion from the 1724c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * next node in the NodeSetDTM, or NAN if no node was found 1734c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 1744c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public double numWithSideEffects() 1754c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 1764c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson int node = nextNode(); 1774c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1784c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return (node != DTM.NULL) ? getNumberFromNode(node) : Double.NaN; 1794c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1804c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1814c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1824c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 1834c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Cast result object to a boolean. 1844c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 1854c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return True if there is a next node in the nodeset 1864c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 1874c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public boolean bool() 1884c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 1894c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return (item(0) != DTM.NULL); 1904c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1914c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1924c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 1934c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Cast result object to a boolean, but allow side effects, such as the 1944c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * incrementing of an iterator. 1954c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 1964c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return True if there is a next node in the nodeset 1974c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 1984c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public boolean boolWithSideEffects() 1994c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 2004c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return (nextNode() != DTM.NULL); 2014c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 2024c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 2034c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 2044c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 2054c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Get the string conversion from a single node. 2064c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 2074c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param n Node to convert 2084c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 2094c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return the string conversion from a single node. 2104c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 2114c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public XMLString getStringFromNode(int n) 2124c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 2134c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // %OPT% 2144c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // I guess we'll have to get a static instance of the DTM manager... 2154c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson if(DTM.NULL != n) 2164c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 2174c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return m_dtmMgr.getDTM(n).getStringValue(n); 2184c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 2194c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson else 2204c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 2214c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return org.apache.xpath.objects.XString.EMPTYSTRING; 2224c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 2234c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 2244c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 2254c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 2264c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Directly call the 2274c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * characters method on the passed ContentHandler for the 2284c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * string-value. Multiple calls to the 2294c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * ContentHandler's characters methods may well occur for a single call to 2304c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * this method. 2314c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 2324c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param ch A non-null reference to a ContentHandler. 2334c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 2344c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @throws org.xml.sax.SAXException 2354c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 2364c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public void dispatchCharactersEvents(org.xml.sax.ContentHandler ch) 2374c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson throws org.xml.sax.SAXException 2384c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 2394c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson int node = item(0); 2404c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 2414c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson if(node != DTM.NULL) 2424c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 2434c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson m_dtmMgr.getDTM(node).dispatchCharactersEvents(node, ch, false); 2444c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 2454c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 2464c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 2474c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 2484c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 2494c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Cast result object to an XMLString. 2504c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 2514c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return The document fragment node data or the empty string. 2524c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 2534c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public XMLString xstr() 2544c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 2554c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson int node = item(0); 2564c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return (node != DTM.NULL) ? getStringFromNode(node) : XString.EMPTYSTRING; 2574c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 2584c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 2594c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 2604c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Cast result object to a string. 2614c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 2624c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return The string this wraps or the empty string if null 2634c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 2644c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public void appendToFsb(org.apache.xml.utils.FastStringBuffer fsb) 2654c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 2664c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson XString xstring = (XString)xstr(); 2674c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson xstring.appendToFsb(fsb); 2684c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 2694c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 2704c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 2714c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 2724c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Cast result object to a string. 2734c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 2744c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return the string conversion from the next node in the nodeset 2754c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * or "" if there is no next node 2764c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 2774c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public String str() 2784c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 2794c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson int node = item(0); 2804c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return (node != DTM.NULL) ? getStringFromNode(node).toString() : ""; 2814c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 2824c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 2834c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 2844c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Return a java object that's closest to the representation 2854c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * that should be handed to an extension. 2864c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 2874c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return The object that this class wraps 2884c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 2894c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public Object object() 2904c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 2914c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson if(null == m_obj) 2924c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return this; 2934c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson else 2944c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return m_obj; 2954c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 2964c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 2974c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // %REVIEW% 2984c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // hmmm... 2994c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// /** 3004c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// * Cast result object to a result tree fragment. 3014c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// * 3024c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// * @param support The XPath context to use for the conversion 3034c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// * 3044c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// * @return the nodeset as a result tree fragment. 3054c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// */ 3064c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// public DocumentFragment rtree(XPathContext support) 3074c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// { 3084c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 3094c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// DocumentBuilder db = dbf.newDocumentBuilder(); 3104c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// Document myDoc = db.newDocument(); 3114c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// 3124c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// DocumentFragment docFrag = myDoc.createDocumentFragment(); 3134c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// 3144c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// DTMIterator nl = iter(); 3154c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// int node; 3164c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// 3174c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// while (DTM.NULL != (node = nl.nextNode())) 3184c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// { 3194c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// frag.appendChild(node, true, true); 3204c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// } 3214c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// 3224c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// return frag.getDocument(); 3234c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// } 3244c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 3254c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 3264c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Cast result object to a nodelist. 3274c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 3284c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return a NodeIterator. 3294c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 3304c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @throws javax.xml.transform.TransformerException 3314c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 3324c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public NodeIterator nodeset() throws javax.xml.transform.TransformerException 3334c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 3344c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return new org.apache.xml.dtm.ref.DTMNodeIterator(iter()); 3354c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 3364c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 3374c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 3384c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Cast result object to a nodelist. 3394c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 3404c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return a NodeList. 3414c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 3424c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @throws javax.xml.transform.TransformerException 3434c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 3444c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public NodeList nodelist() throws javax.xml.transform.TransformerException 3454c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 3464c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson org.apache.xml.dtm.ref.DTMNodeList nodelist = new org.apache.xml.dtm.ref.DTMNodeList(this); 3474c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // Creating a DTMNodeList has the side-effect that it will create a clone 3484c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // XNodeSet with cache and run m_iter to the end. You cannot get any node 3494c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // from m_iter after this call. As a fix, we call SetVector() on the clone's 3504c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // cache. See Bugzilla 14406. 3514c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson XNodeSet clone = (XNodeSet)nodelist.getDTMIterator(); 3524c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson SetVector(clone.getVector()); 3534c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return nodelist; 3544c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 3554c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 3564c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 3574c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// /** 3584c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// * Return a java object that's closest to the representation 3594c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// * that should be handed to an extension. 3604c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// * 3614c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// * @return The object that this class wraps 3624c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// */ 3634c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// public Object object() 3644c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// { 3654c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// return new org.apache.xml.dtm.ref.DTMNodeList(iter()); 3664c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson// } 3674c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 3684c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 3694c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Return the iterator without cloning, etc. 3704c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 3714c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public DTMIterator iterRaw() 3724c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 3734c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return this; 3744c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 3754c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 3764c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public void release(DTMIterator iter) 3774c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 3784c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 3794c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 3804c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 3814c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Cast result object to a nodelist. 3824c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 3834c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return The nodeset as a nodelist 3844c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 3854c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public DTMIterator iter() 3864c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 3874c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson try 3884c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 3894c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson if(hasCache()) 3904c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return cloneWithReset(); 3914c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson else 3924c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return this; // don't bother to clone... won't do any good! 3934c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 3944c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson catch (CloneNotSupportedException cnse) 3954c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 3964c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson throw new RuntimeException(cnse.getMessage()); 3974c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 3984c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 3994c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 4004c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 4014c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Get a fresh copy of the object. For use with variables. 4024c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 4034c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return A fresh nodelist. 4044c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 4054c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public XObject getFresh() 4064c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 4074c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson try 4084c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 4094c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson if(hasCache()) 4104c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return (XObject)cloneWithReset(); 4114c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson else 4124c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return this; // don't bother to clone... won't do any good! 4134c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 4144c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson catch (CloneNotSupportedException cnse) 4154c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 4164c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson throw new RuntimeException(cnse.getMessage()); 4174c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 4184c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 4194c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 4204c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 4214c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Cast result object to a mutableNodeset. 4224c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 4234c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return The nodeset as a mutableNodeset 4244c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 4254c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public NodeSetDTM mutableNodeset() 4264c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 4274c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson NodeSetDTM mnl; 4284c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 4294c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson if(m_obj instanceof NodeSetDTM) 4304c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 4314c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson mnl = (NodeSetDTM) m_obj; 4324c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 4334c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson else 4344c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 4354c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson mnl = new NodeSetDTM(iter()); 4364c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson setObject(mnl); 4374c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson setCurrentPos(0); 4384c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 4394c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 4404c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return mnl; 4414c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 4424c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 4434c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** Less than comparator */ 4444c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson static final LessThanComparator S_LT = new LessThanComparator(); 4454c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 4464c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** Less than or equal comparator */ 4474c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson static final LessThanOrEqualComparator S_LTE = new LessThanOrEqualComparator(); 4484c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 4494c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** Greater than comparator */ 4504c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson static final GreaterThanComparator S_GT = new GreaterThanComparator(); 4514c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 4524c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** Greater than or equal comparator */ 4534c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson static final GreaterThanOrEqualComparator S_GTE = 4544c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson new GreaterThanOrEqualComparator(); 4554c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 4564c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** Equal comparator */ 4574c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson static final EqualComparator S_EQ = new EqualComparator(); 4584c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 4594c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** Not equal comparator */ 4604c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson static final NotEqualComparator S_NEQ = new NotEqualComparator(); 4614c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 4624c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 4634c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Tell if one object is less than the other. 4644c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 4654c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param obj2 Object to compare this nodeset to 4664c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param comparator Comparator to use 4674c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 4684c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return See the comments below for each object type comparison 4694c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 4704c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @throws javax.xml.transform.TransformerException 4714c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 4724c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public boolean compare(XObject obj2, Comparator comparator) 4734c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson throws javax.xml.transform.TransformerException 4744c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 4754c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 4764c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson boolean result = false; 4774c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson int type = obj2.getType(); 4784c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 4794c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson if (XObject.CLASS_NODESET == type) 4804c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 4814c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // %OPT% This should be XMLString based instead of string based... 4824c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 4834c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // From http://www.w3.org/TR/xpath: 4844c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // If both objects to be compared are node-sets, then the comparison 4854c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // will be true if and only if there is a node in the first node-set 4864c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // and a node in the second node-set such that the result of performing 4874c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // the comparison on the string-values of the two nodes is true. 4884c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // Note this little gem from the draft: 4894c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // NOTE: If $x is bound to a node-set, then $x="foo" 4904c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // does not mean the same as not($x!="foo"): the former 4914c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // is true if and only if some node in $x has the string-value 4924c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // foo; the latter is true if and only if all nodes in $x have 4934c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // the string-value foo. 4944c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson DTMIterator list1 = iterRaw(); 4954c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson DTMIterator list2 = ((XNodeSet) obj2).iterRaw(); 4964c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson int node1; 4974c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson java.util.Vector node2Strings = null; 4984c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 4994c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson while (DTM.NULL != (node1 = list1.nextNode())) 5004c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 5014c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson XMLString s1 = getStringFromNode(node1); 5024c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 5034c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson if (null == node2Strings) 5044c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 5054c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson int node2; 5064c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 5074c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson while (DTM.NULL != (node2 = list2.nextNode())) 5084c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 5094c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson XMLString s2 = getStringFromNode(node2); 5104c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 5114c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson if (comparator.compareStrings(s1, s2)) 5124c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 5134c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson result = true; 5144c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 5154c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson break; 5164c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 5174c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 5184c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson if (null == node2Strings) 5194c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson node2Strings = new java.util.Vector(); 5204c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 5214c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson node2Strings.addElement(s2); 5224c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 5234c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 5244c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson else 5254c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 5264c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson int n = node2Strings.size(); 5274c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 5284c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson for (int i = 0; i < n; i++) 5294c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 5304c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson if (comparator.compareStrings(s1, (XMLString)node2Strings.elementAt(i))) 5314c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 5324c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson result = true; 5334c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 5344c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson break; 5354c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 5364c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 5374c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 5384c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 5394c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson list1.reset(); 5404c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson list2.reset(); 5414c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 5424c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson else if (XObject.CLASS_BOOLEAN == type) 5434c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 5444c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 5454c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // From http://www.w3.org/TR/xpath: 5464c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // If one object to be compared is a node-set and the other is a boolean, 5474c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // then the comparison will be true if and only if the result of 5484c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // performing the comparison on the boolean and on the result of 5494c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // converting the node-set to a boolean using the boolean function 5504c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // is true. 5514c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson double num1 = bool() ? 1.0 : 0.0; 5524c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson double num2 = obj2.num(); 5534c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 5544c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson result = comparator.compareNumbers(num1, num2); 5554c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 5564c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson else if (XObject.CLASS_NUMBER == type) 5574c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 5584c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 5594c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // From http://www.w3.org/TR/xpath: 5604c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // If one object to be compared is a node-set and the other is a number, 5614c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // then the comparison will be true if and only if there is a 5624c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // node in the node-set such that the result of performing the 5634c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // comparison on the number to be compared and on the result of 5644c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // converting the string-value of that node to a number using 5654c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // the number function is true. 5664c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson DTMIterator list1 = iterRaw(); 5674c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson double num2 = obj2.num(); 5684c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson int node; 5694c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 5704c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson while (DTM.NULL != (node = list1.nextNode())) 5714c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 5724c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson double num1 = getNumberFromNode(node); 5734c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 5744c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson if (comparator.compareNumbers(num1, num2)) 5754c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 5764c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson result = true; 5774c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 5784c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson break; 5794c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 5804c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 5814c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson list1.reset(); 5824c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 5834c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson else if (XObject.CLASS_RTREEFRAG == type) 5844c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 5854c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson XMLString s2 = obj2.xstr(); 5864c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson DTMIterator list1 = iterRaw(); 5874c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson int node; 5884c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 5894c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson while (DTM.NULL != (node = list1.nextNode())) 5904c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 5914c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson XMLString s1 = getStringFromNode(node); 5924c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 5934c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson if (comparator.compareStrings(s1, s2)) 5944c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 5954c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson result = true; 5964c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 5974c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson break; 5984c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 5994c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 6004c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson list1.reset(); 6014c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 6024c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson else if (XObject.CLASS_STRING == type) 6034c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 6044c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 6054c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // From http://www.w3.org/TR/xpath: 6064c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // If one object to be compared is a node-set and the other is a 6074c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // string, then the comparison will be true if and only if there 6084c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // is a node in the node-set such that the result of performing 6094c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // the comparison on the string-value of the node and the other 6104c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // string is true. 6114c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson XMLString s2 = obj2.xstr(); 6124c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson DTMIterator list1 = iterRaw(); 6134c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson int node; 6144c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 6154c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson while (DTM.NULL != (node = list1.nextNode())) 6164c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 6174c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson XMLString s1 = getStringFromNode(node); 6184c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson if (comparator.compareStrings(s1, s2)) 6194c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 6204c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson result = true; 6214c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 6224c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson break; 6234c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 6244c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 6254c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson list1.reset(); 6264c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 6274c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson else 6284c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 6294c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson result = comparator.compareNumbers(this.num(), obj2.num()); 6304c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 6314c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 6324c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return result; 6334c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 6344c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 6354c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 6364c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Tell if one object is less than the other. 6374c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 6384c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param obj2 object to compare this nodeset to 6394c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 6404c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return see this.compare(...) 6414c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 6424c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @throws javax.xml.transform.TransformerException 6434c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 6444c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public boolean lessThan(XObject obj2) throws javax.xml.transform.TransformerException 6454c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 6464c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return compare(obj2, S_LT); 6474c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 6484c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 6494c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 6504c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Tell if one object is less than or equal to the other. 6514c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 6524c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param obj2 object to compare this nodeset to 6534c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 6544c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return see this.compare(...) 6554c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 6564c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @throws javax.xml.transform.TransformerException 6574c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 6584c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public boolean lessThanOrEqual(XObject obj2) throws javax.xml.transform.TransformerException 6594c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 6604c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return compare(obj2, S_LTE); 6614c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 6624c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 6634c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 6644c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Tell if one object is less than the other. 6654c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 6664c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param obj2 object to compare this nodeset to 6674c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 6684c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return see this.compare(...) 6694c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 6704c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @throws javax.xml.transform.TransformerException 6714c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 6724c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public boolean greaterThan(XObject obj2) throws javax.xml.transform.TransformerException 6734c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 6744c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return compare(obj2, S_GT); 6754c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 6764c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 6774c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 6784c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Tell if one object is less than the other. 6794c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 6804c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param obj2 object to compare this nodeset to 6814c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 6824c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return see this.compare(...) 6834c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 6844c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @throws javax.xml.transform.TransformerException 6854c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 6864c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public boolean greaterThanOrEqual(XObject obj2) 6874c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson throws javax.xml.transform.TransformerException 6884c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 6894c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return compare(obj2, S_GTE); 6904c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 6914c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 6924c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 6934c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Tell if two objects are functionally equal. 6944c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 6954c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param obj2 object to compare this nodeset to 6964c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 6974c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return see this.compare(...) 6984c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 6994c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @throws javax.xml.transform.TransformerException 7004c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 7014c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public boolean equals(XObject obj2) 7024c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 7034c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson try 7044c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 7054c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return compare(obj2, S_EQ); 7064c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 7074c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson catch(javax.xml.transform.TransformerException te) 7084c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 7094c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson throw new org.apache.xml.utils.WrappedRuntimeException(te); 7104c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 7114c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 7124c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 7134c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 7144c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Tell if two objects are functionally not equal. 7154c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 7164c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param obj2 object to compare this nodeset to 7174c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 7184c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return see this.compare(...) 7194c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 7204c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @throws javax.xml.transform.TransformerException 7214c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 7224c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public boolean notEquals(XObject obj2) throws javax.xml.transform.TransformerException 7234c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 7244c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return compare(obj2, S_NEQ); 7254c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 7264c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson} 7274c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 7284c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/** 7294c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * compares nodes for various boolean operations. 7304c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 7314c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonabstract class Comparator 7324c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson{ 7334c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 7344c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 7354c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Compare two strings 7364c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 7374c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 7384c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param s1 First string to compare 7394c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param s2 Second String to compare 7404c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 7414c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return Whether the strings are equal or not 7424c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 7434c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson abstract boolean compareStrings(XMLString s1, XMLString s2); 7444c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 7454c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 7464c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Compare two numbers 7474c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 7484c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 7494c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param n1 First number to compare 7504c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param n2 Second number to compare 7514c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 7524c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return Whether the numbers are equal or not 7534c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 7544c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson abstract boolean compareNumbers(double n1, double n2); 7554c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson} 7564c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 7574c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/** 7584c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Compare strings or numbers for less than. 7594c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 7604c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonclass LessThanComparator extends Comparator 7614c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson{ 7624c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 7634c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 7644c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Compare two strings for less than. 7654c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 7664c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 7674c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param s1 First string to compare 7684c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param s2 Second String to compare 7694c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 7704c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return True if s1 is less than s2 7714c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 7724c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson boolean compareStrings(XMLString s1, XMLString s2) 7734c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 7744c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return (s1.toDouble() < s2.toDouble()); 7754c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // return s1.compareTo(s2) < 0; 7764c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 7774c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 7784c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 7794c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Compare two numbers for less than. 7804c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 7814c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 7824c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param n1 First number to compare 7834c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param n2 Second number to compare 7844c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 7854c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return true if n1 is less than n2 7864c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 7874c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson boolean compareNumbers(double n1, double n2) 7884c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 7894c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return n1 < n2; 7904c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 7914c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson} 7924c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 7934c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/** 7944c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Compare strings or numbers for less than or equal. 7954c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 7964c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonclass LessThanOrEqualComparator extends Comparator 7974c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson{ 7984c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 7994c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 8004c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Compare two strings for less than or equal. 8014c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 8024c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 8034c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param s1 First string to compare 8044c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param s2 Second String to compare 8054c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 8064c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return true if s1 is less than or equal to s2 8074c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 8084c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson boolean compareStrings(XMLString s1, XMLString s2) 8094c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 8104c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return (s1.toDouble() <= s2.toDouble()); 8114c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // return s1.compareTo(s2) <= 0; 8124c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 8134c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 8144c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 8154c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Compare two numbers for less than or equal. 8164c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 8174c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 8184c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param n1 First number to compare 8194c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param n2 Second number to compare 8204c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 8214c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return true if n1 is less than or equal to n2 8224c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 8234c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson boolean compareNumbers(double n1, double n2) 8244c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 8254c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return n1 <= n2; 8264c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 8274c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson} 8284c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 8294c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/** 8304c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Compare strings or numbers for greater than. 8314c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 8324c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonclass GreaterThanComparator extends Comparator 8334c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson{ 8344c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 8354c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 8364c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Compare two strings for greater than. 8374c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 8384c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 8394c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param s1 First string to compare 8404c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param s2 Second String to compare 8414c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 8424c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return true if s1 is greater than s2 8434c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 8444c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson boolean compareStrings(XMLString s1, XMLString s2) 8454c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 8464c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return (s1.toDouble() > s2.toDouble()); 8474c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // return s1.compareTo(s2) > 0; 8484c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 8494c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 8504c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 8514c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Compare two numbers for greater than. 8524c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 8534c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 8544c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param n1 First number to compare 8554c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param n2 Second number to compare 8564c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 8574c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return true if n1 is greater than n2 8584c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 8594c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson boolean compareNumbers(double n1, double n2) 8604c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 8614c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return n1 > n2; 8624c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 8634c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson} 8644c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 8654c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/** 8664c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Compare strings or numbers for greater than or equal. 8674c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 8684c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonclass GreaterThanOrEqualComparator extends Comparator 8694c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson{ 8704c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 8714c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 8724c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Compare two strings for greater than or equal. 8734c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 8744c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 8754c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param s1 First string to compare 8764c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param s2 Second String to compare 8774c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 8784c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return true if s1 is greater than or equal to s2 8794c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 8804c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson boolean compareStrings(XMLString s1, XMLString s2) 8814c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 8824c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return (s1.toDouble() >= s2.toDouble()); 8834c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // return s1.compareTo(s2) >= 0; 8844c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 8854c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 8864c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 8874c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Compare two numbers for greater than or equal. 8884c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 8894c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 8904c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param n1 First number to compare 8914c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param n2 Second number to compare 8924c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 8934c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return true if n1 is greater than or equal to n2 8944c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 8954c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson boolean compareNumbers(double n1, double n2) 8964c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 8974c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return n1 >= n2; 8984c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 8994c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson} 9004c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 9014c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/** 9024c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Compare strings or numbers for equality. 9034c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 9044c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonclass EqualComparator extends Comparator 9054c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson{ 9064c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 9074c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 9084c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Compare two strings for equality. 9094c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 9104c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 9114c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param s1 First string to compare 9124c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param s2 Second String to compare 9134c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 9144c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return true if s1 is equal to s2 9154c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 9164c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson boolean compareStrings(XMLString s1, XMLString s2) 9174c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 9184c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return s1.equals(s2); 9194c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 9204c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 9214c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 9224c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Compare two numbers for equality. 9234c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 9244c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 9254c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param n1 First number to compare 9264c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param n2 Second number to compare 9274c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 9284c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return true if n1 is equal to n2 9294c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 9304c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson boolean compareNumbers(double n1, double n2) 9314c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 9324c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return n1 == n2; 9334c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 9344c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson} 9354c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 9364c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/** 9374c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Compare strings or numbers for non-equality. 9384c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 9394c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonclass NotEqualComparator extends Comparator 9404c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson{ 9414c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 9424c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 9434c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Compare two strings for non-equality. 9444c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 9454c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 9464c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param s1 First string to compare 9474c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param s2 Second String to compare 9484c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 9494c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return true if s1 is not equal to s2 9504c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 9514c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson boolean compareStrings(XMLString s1, XMLString s2) 9524c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 9534c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return !s1.equals(s2); 9544c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 9554c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 9564c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 9574c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Compare two numbers for non-equality. 9584c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 9594c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 9604c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param n1 First number to compare 9614c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param n2 Second number to compare 9624c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 9634c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return true if n1 is not equal to n2 9644c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 9654c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson boolean compareNumbers(double n1, double n2) 9664c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 9674c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return n1 != n2; 9684c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 9694c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson} 970