19f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/* 29f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one 39f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or more contributor license agreements. See the NOTICE file 49f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed with this work for additional information 59f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * regarding copyright ownership. The ASF licenses this file 69f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to you under the Apache License, Version 2.0 (the "License"); 79f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * you may not use this file except in compliance with the License. 89f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * You may obtain a copy of the License at 99f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Unless required by applicable law or agreed to in writing, software 139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * See the License for the specific language governing permissions and 169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * limitations under the License. 179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/* 199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * $Id: XNodeSet.java 469368 2006-10-31 04:41:36Z minchau $ 209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xpath.objects; 229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.dtm.DTM; 249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.dtm.DTMIterator; 259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.dtm.DTMManager; 269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.utils.XMLString; 279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.NodeSetDTM; 289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.axes.NodeSequence; 299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.NodeList; 319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.traversal.NodeIterator; 329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This class represents an XPath nodeset object, and is capable of 359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * converting the nodeset to other types, such as a string. 369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @xsl.usage general 379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic class XNodeSet extends NodeSequence 399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{ 409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static final long serialVersionUID = 1916026368035639667L; 419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Default constructor for derived objects. 439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected XNodeSet() 459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Construct a XNodeSet object. 509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param val Value of the XNodeSet object 529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XNodeSet(DTMIterator val) 549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super(); 569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(val instanceof XNodeSet) 579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final XNodeSet nodeSet = (XNodeSet) val; 599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setIter(nodeSet.m_iter); 609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_dtmMgr = nodeSet.m_dtmMgr; 619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_last = nodeSet.m_last; 629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // First make sure the DTMIterator val has a cache, 639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // so if it doesn't have one, make one. 649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(!nodeSet.hasCache()) 659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson nodeSet.setShouldCacheNodes(true); 669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Get the cache from val and use it ourselves (we share it). 689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setObject(nodeSet.getIteratorCache()); 699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setIter(val); 729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Construct a XNodeSet object. 769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param val Value of the XNodeSet object 789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XNodeSet(XNodeSet val) 809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super(); 829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setIter(val.m_iter); 839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_dtmMgr = val.m_dtmMgr; 849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_last = val.m_last; 859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(!val.hasCache()) 869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson val.setShouldCacheNodes(true); 879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setObject(val.m_obj); 889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Construct an empty XNodeSet object. This is used to create a mutable 939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * nodeset to which random nodes may be added. 949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XNodeSet(DTMManager dtmMgr) 969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this(DTM.NULL,dtmMgr); 989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Construct a XNodeSet object for one node. 1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param n Node to add to the new XNodeSet object 1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XNodeSet(int n, DTMManager dtmMgr) 1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super(new NodeSetDTM(dtmMgr)); 1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_dtmMgr = dtmMgr; 1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (DTM.NULL != n) 1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ((NodeSetDTM) m_obj).addNode(n); 1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_last = 1; 1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_last = 0; 1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell that this is a CLASS_NODESET. 1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return type CLASS_NODESET 1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int getType() 1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return CLASS_NODESET; 1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Given a request type, return the equivalent string. 1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * For diagnostic purposes. 1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return type string "#NODESET" 1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String getTypeString() 1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return "#NODESET"; 1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get numeric value of the string conversion from a single node. 1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param n Node to convert 1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return numeric value of the string conversion from a single node. 1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public double getNumberFromNode(int n) 1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XMLString xstr = m_dtmMgr.getDTM(n).getStringValue(n); 1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return xstr.toDouble(); 1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a number. 1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return numeric value of the string conversion from the 1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * next node in the NodeSetDTM, or NAN if no node was found 1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public double num() 1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int node = item(0); 1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (node != DTM.NULL) ? getNumberFromNode(node) : Double.NaN; 1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a number, but allow side effects, such as the 1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * incrementing of an iterator. 1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return numeric value of the string conversion from the 1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * next node in the NodeSetDTM, or NAN if no node was found 1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public double numWithSideEffects() 1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int node = nextNode(); 1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (node != DTM.NULL) ? getNumberFromNode(node) : Double.NaN; 1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a boolean. 1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return True if there is a next node in the nodeset 1869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean bool() 1889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (item(0) != DTM.NULL); 1909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a boolean, but allow side effects, such as the 1949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * incrementing of an iterator. 1959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return True if there is a next node in the nodeset 1979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean boolWithSideEffects() 1999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (nextNode() != DTM.NULL); 2019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the string conversion from a single node. 2069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param n Node to convert 2089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the string conversion from a single node. 2109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XMLString getStringFromNode(int n) 2129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // %OPT% 2149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // I guess we'll have to get a static instance of the DTM manager... 2159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(DTM.NULL != n) 2169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_dtmMgr.getDTM(n).getStringValue(n); 2189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 2209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return org.apache.xpath.objects.XString.EMPTYSTRING; 2229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Directly call the 2279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * characters method on the passed ContentHandler for the 2289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * string-value. Multiple calls to the 2299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * ContentHandler's characters methods may well occur for a single call to 2309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * this method. 2319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param ch A non-null reference to a ContentHandler. 2339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws org.xml.sax.SAXException 2359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void dispatchCharactersEvents(org.xml.sax.ContentHandler ch) 2379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws org.xml.sax.SAXException 2389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int node = item(0); 2409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(node != DTM.NULL) 2429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_dtmMgr.getDTM(node).dispatchCharactersEvents(node, ch, false); 2449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to an XMLString. 2509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The document fragment node data or the empty string. 2529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XMLString xstr() 2549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int node = item(0); 2569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (node != DTM.NULL) ? getStringFromNode(node) : XString.EMPTYSTRING; 2579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a string. 2619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The string this wraps or the empty string if null 2639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void appendToFsb(org.apache.xml.utils.FastStringBuffer fsb) 2659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XString xstring = (XString)xstr(); 2679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson xstring.appendToFsb(fsb); 2689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a string. 2739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the string conversion from the next node in the nodeset 2759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or "" if there is no next node 2769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String str() 2789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int node = item(0); 2809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (node != DTM.NULL) ? getStringFromNode(node).toString() : ""; 2819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Return a java object that's closest to the representation 2859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * that should be handed to an extension. 2869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The object that this class wraps 2889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object object() 2909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(null == m_obj) 2929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return this; 2939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 2949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_obj; 2959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // %REVIEW% 2989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // hmmm... 2999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// /** 3009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * Cast result object to a result tree fragment. 3019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * 3029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * @param support The XPath context to use for the conversion 3039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * 3049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * @return the nodeset as a result tree fragment. 3059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// */ 3069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// public DocumentFragment rtree(XPathContext support) 3079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// { 3089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 3099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// DocumentBuilder db = dbf.newDocumentBuilder(); 3109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// Document myDoc = db.newDocument(); 3119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 3129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// DocumentFragment docFrag = myDoc.createDocumentFragment(); 3139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 3149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// DTMIterator nl = iter(); 3159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// int node; 3169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 3179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// while (DTM.NULL != (node = nl.nextNode())) 3189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// { 3199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// frag.appendChild(node, true, true); 3209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 3219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 3229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// return frag.getDocument(); 3239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 3249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a nodelist. 3279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return a NodeIterator. 3299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 3319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public NodeIterator nodeset() throws javax.xml.transform.TransformerException 3339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return new org.apache.xml.dtm.ref.DTMNodeIterator(iter()); 3359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a nodelist. 3399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return a NodeList. 3419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 3439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public NodeList nodelist() throws javax.xml.transform.TransformerException 3459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson org.apache.xml.dtm.ref.DTMNodeList nodelist = new org.apache.xml.dtm.ref.DTMNodeList(this); 3479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Creating a DTMNodeList has the side-effect that it will create a clone 3489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // XNodeSet with cache and run m_iter to the end. You cannot get any node 3499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // from m_iter after this call. As a fix, we call SetVector() on the clone's 3509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // cache. See Bugzilla 14406. 3519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XNodeSet clone = (XNodeSet)nodelist.getDTMIterator(); 3529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson SetVector(clone.getVector()); 3539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return nodelist; 3549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// /** 3589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * Return a java object that's closest to the representation 3599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * that should be handed to an extension. 3609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * 3619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * @return The object that this class wraps 3629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// */ 3639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// public Object object() 3649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// { 3659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// return new org.apache.xml.dtm.ref.DTMNodeList(iter()); 3669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 3679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Return the iterator without cloning, etc. 3709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public DTMIterator iterRaw() 3729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return this; 3749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void release(DTMIterator iter) 3779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a nodelist. 3829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The nodeset as a nodelist 3849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public DTMIterator iter() 3869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 3889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(hasCache()) 3909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return cloneWithReset(); 3919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 3929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return this; // don't bother to clone... won't do any good! 3939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (CloneNotSupportedException cnse) 3959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException(cnse.getMessage()); 3979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get a fresh copy of the object. For use with variables. 4029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return A fresh nodelist. 4049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XObject getFresh() 4069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 4089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(hasCache()) 4109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (XObject)cloneWithReset(); 4119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 4129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return this; // don't bother to clone... won't do any good! 4139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (CloneNotSupportedException cnse) 4159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException(cnse.getMessage()); 4179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a mutableNodeset. 4229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The nodeset as a mutableNodeset 4249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public NodeSetDTM mutableNodeset() 4269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson NodeSetDTM mnl; 4289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(m_obj instanceof NodeSetDTM) 4309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mnl = (NodeSetDTM) m_obj; 4329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 4349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mnl = new NodeSetDTM(iter()); 4369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setObject(mnl); 4379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setCurrentPos(0); 4389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return mnl; 4419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Less than comparator */ 4449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static final LessThanComparator S_LT = new LessThanComparator(); 4459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Less than or equal comparator */ 4479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static final LessThanOrEqualComparator S_LTE = new LessThanOrEqualComparator(); 4489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Greater than comparator */ 4509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static final GreaterThanComparator S_GT = new GreaterThanComparator(); 4519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Greater than or equal comparator */ 4539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static final GreaterThanOrEqualComparator S_GTE = 4549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson new GreaterThanOrEqualComparator(); 4559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Equal comparator */ 4579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static final EqualComparator S_EQ = new EqualComparator(); 4589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Not equal comparator */ 4609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static final NotEqualComparator S_NEQ = new NotEqualComparator(); 4619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell if one object is less than the other. 4649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param obj2 Object to compare this nodeset to 4669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param comparator Comparator to use 4679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return See the comments below for each object type comparison 4699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 4719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean compare(XObject obj2, Comparator comparator) 4739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws javax.xml.transform.TransformerException 4749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean result = false; 4779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int type = obj2.getType(); 4789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (XObject.CLASS_NODESET == type) 4809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // %OPT% This should be XMLString based instead of string based... 4829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // From http://www.w3.org/TR/xpath: 4849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // If both objects to be compared are node-sets, then the comparison 4859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // will be true if and only if there is a node in the first node-set 4869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // and a node in the second node-set such that the result of performing 4879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // the comparison on the string-values of the two nodes is true. 4889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Note this little gem from the draft: 4899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // NOTE: If $x is bound to a node-set, then $x="foo" 4909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // does not mean the same as not($x!="foo"): the former 4919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // is true if and only if some node in $x has the string-value 4929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // foo; the latter is true if and only if all nodes in $x have 4939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // the string-value foo. 4949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson DTMIterator list1 = iterRaw(); 4959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson DTMIterator list2 = ((XNodeSet) obj2).iterRaw(); 4969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int node1; 4979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson java.util.Vector node2Strings = null; 4989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson while (DTM.NULL != (node1 = list1.nextNode())) 5009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XMLString s1 = getStringFromNode(node1); 5029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null == node2Strings) 5049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int node2; 5069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson while (DTM.NULL != (node2 = list2.nextNode())) 5089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XMLString s2 = getStringFromNode(node2); 5109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (comparator.compareStrings(s1, s2)) 5129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson result = true; 5149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson break; 5169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null == node2Strings) 5199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson node2Strings = new java.util.Vector(); 5209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson node2Strings.addElement(s2); 5229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 5259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int n = node2Strings.size(); 5279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson for (int i = 0; i < n; i++) 5299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (comparator.compareStrings(s1, (XMLString)node2Strings.elementAt(i))) 5319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson result = true; 5339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson break; 5359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson list1.reset(); 5409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson list2.reset(); 5419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (XObject.CLASS_BOOLEAN == type) 5439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // From http://www.w3.org/TR/xpath: 5469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // If one object to be compared is a node-set and the other is a boolean, 5479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // then the comparison will be true if and only if the result of 5489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // performing the comparison on the boolean and on the result of 5499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // converting the node-set to a boolean using the boolean function 5509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // is true. 5519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson double num1 = bool() ? 1.0 : 0.0; 5529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson double num2 = obj2.num(); 5539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson result = comparator.compareNumbers(num1, num2); 5559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (XObject.CLASS_NUMBER == type) 5579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // From http://www.w3.org/TR/xpath: 5609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // If one object to be compared is a node-set and the other is a number, 5619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // then the comparison will be true if and only if there is a 5629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // node in the node-set such that the result of performing the 5639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // comparison on the number to be compared and on the result of 5649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // converting the string-value of that node to a number using 5659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // the number function is true. 5669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson DTMIterator list1 = iterRaw(); 5679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson double num2 = obj2.num(); 5689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int node; 5699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson while (DTM.NULL != (node = list1.nextNode())) 5719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson double num1 = getNumberFromNode(node); 5739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (comparator.compareNumbers(num1, num2)) 5759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson result = true; 5779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson break; 5799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson list1.reset(); 5829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (XObject.CLASS_RTREEFRAG == type) 5849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XMLString s2 = obj2.xstr(); 5869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson DTMIterator list1 = iterRaw(); 5879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int node; 5889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson while (DTM.NULL != (node = list1.nextNode())) 5909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XMLString s1 = getStringFromNode(node); 5929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (comparator.compareStrings(s1, s2)) 5949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson result = true; 5969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson break; 5989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson list1.reset(); 6019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (XObject.CLASS_STRING == type) 6039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // From http://www.w3.org/TR/xpath: 6069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // If one object to be compared is a node-set and the other is a 6079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // string, then the comparison will be true if and only if there 6089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // is a node in the node-set such that the result of performing 6099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // the comparison on the string-value of the node and the other 6109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // string is true. 6119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XMLString s2 = obj2.xstr(); 6129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson DTMIterator list1 = iterRaw(); 6139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int node; 6149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson while (DTM.NULL != (node = list1.nextNode())) 6169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XMLString s1 = getStringFromNode(node); 6189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (comparator.compareStrings(s1, s2)) 6199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson result = true; 6219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson break; 6239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson list1.reset(); 6269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 6289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson result = comparator.compareNumbers(this.num(), obj2.num()); 6309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return result; 6339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell if one object is less than the other. 6379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param obj2 object to compare this nodeset to 6399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return see this.compare(...) 6419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 6439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean lessThan(XObject obj2) throws javax.xml.transform.TransformerException 6459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return compare(obj2, S_LT); 6479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell if one object is less than or equal to the other. 6519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param obj2 object to compare this nodeset to 6539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return see this.compare(...) 6559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 6579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean lessThanOrEqual(XObject obj2) throws javax.xml.transform.TransformerException 6599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return compare(obj2, S_LTE); 6619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell if one object is less than the other. 6659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param obj2 object to compare this nodeset to 6679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return see this.compare(...) 6699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 6719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean greaterThan(XObject obj2) throws javax.xml.transform.TransformerException 6739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return compare(obj2, S_GT); 6759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell if one object is less than the other. 6799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param obj2 object to compare this nodeset to 6819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return see this.compare(...) 6839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 6859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean greaterThanOrEqual(XObject obj2) 6879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws javax.xml.transform.TransformerException 6889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return compare(obj2, S_GTE); 6909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell if two objects are functionally equal. 6949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param obj2 object to compare this nodeset to 6969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return see this.compare(...) 6989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 7009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean equals(XObject obj2) 7029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 7049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return compare(obj2, S_EQ); 7069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch(javax.xml.transform.TransformerException te) 7089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new org.apache.xml.utils.WrappedRuntimeException(te); 7109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell if two objects are functionally not equal. 7159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param obj2 object to compare this nodeset to 7179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return see this.compare(...) 7199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 7219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean notEquals(XObject obj2) throws javax.xml.transform.TransformerException 7239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return compare(obj2, S_NEQ); 7259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 7279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 7299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * compares nodes for various boolean operations. 7309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonabstract class Comparator 7329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{ 7339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Compare two strings 7369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param s1 First string to compare 7399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param s2 Second String to compare 7409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return Whether the strings are equal or not 7429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson abstract boolean compareStrings(XMLString s1, XMLString s2); 7449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Compare two numbers 7479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param n1 First number to compare 7509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param n2 Second number to compare 7519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return Whether the numbers are equal or not 7539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson abstract boolean compareNumbers(double n1, double n2); 7559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 7569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 7589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Compare strings or numbers for less than. 7599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonclass LessThanComparator extends Comparator 7619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{ 7629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Compare two strings for less than. 7659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param s1 First string to compare 7689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param s2 Second String to compare 7699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return True if s1 is less than s2 7719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean compareStrings(XMLString s1, XMLString s2) 7739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (s1.toDouble() < s2.toDouble()); 7759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // return s1.compareTo(s2) < 0; 7769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Compare two numbers for less than. 7809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param n1 First number to compare 7839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param n2 Second number to compare 7849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if n1 is less than n2 7869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean compareNumbers(double n1, double n2) 7889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return n1 < n2; 7909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 7929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 7949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Compare strings or numbers for less than or equal. 7959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonclass LessThanOrEqualComparator extends Comparator 7979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{ 7989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 8009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Compare two strings for less than or equal. 8019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param s1 First string to compare 8049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param s2 Second String to compare 8059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if s1 is less than or equal to s2 8079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean compareStrings(XMLString s1, XMLString s2) 8099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (s1.toDouble() <= s2.toDouble()); 8119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // return s1.compareTo(s2) <= 0; 8129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 8159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Compare two numbers for less than or equal. 8169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param n1 First number to compare 8199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param n2 Second number to compare 8209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if n1 is less than or equal to n2 8229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean compareNumbers(double n1, double n2) 8249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return n1 <= n2; 8269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 8289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 8309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Compare strings or numbers for greater than. 8319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonclass GreaterThanComparator extends Comparator 8339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{ 8349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 8369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Compare two strings for greater than. 8379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param s1 First string to compare 8409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param s2 Second String to compare 8419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if s1 is greater than s2 8439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean compareStrings(XMLString s1, XMLString s2) 8459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (s1.toDouble() > s2.toDouble()); 8479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // return s1.compareTo(s2) > 0; 8489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 8519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Compare two numbers for greater than. 8529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param n1 First number to compare 8559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param n2 Second number to compare 8569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if n1 is greater than n2 8589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean compareNumbers(double n1, double n2) 8609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return n1 > n2; 8629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 8649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 8669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Compare strings or numbers for greater than or equal. 8679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonclass GreaterThanOrEqualComparator extends Comparator 8699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{ 8709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 8729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Compare two strings for greater than or equal. 8739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param s1 First string to compare 8769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param s2 Second String to compare 8779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if s1 is greater than or equal to s2 8799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean compareStrings(XMLString s1, XMLString s2) 8819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (s1.toDouble() >= s2.toDouble()); 8839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // return s1.compareTo(s2) >= 0; 8849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 8879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Compare two numbers for greater than or equal. 8889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param n1 First number to compare 8919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param n2 Second number to compare 8929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if n1 is greater than or equal to n2 8949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean compareNumbers(double n1, double n2) 8969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return n1 >= n2; 8989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 9009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 9029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Compare strings or numbers for equality. 9039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonclass EqualComparator extends Comparator 9059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{ 9069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 9089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Compare two strings for equality. 9099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 9109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 9119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param s1 First string to compare 9129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param s2 Second String to compare 9139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 9149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if s1 is equal to s2 9159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean compareStrings(XMLString s1, XMLString s2) 9179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return s1.equals(s2); 9199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 9229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Compare two numbers for equality. 9239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 9249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 9259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param n1 First number to compare 9269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param n2 Second number to compare 9279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 9289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if n1 is equal to n2 9299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean compareNumbers(double n1, double n2) 9319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return n1 == n2; 9339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 9359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 9379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Compare strings or numbers for non-equality. 9389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonclass NotEqualComparator extends Comparator 9409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{ 9419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 9439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Compare two strings for non-equality. 9449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 9459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 9469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param s1 First string to compare 9479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param s2 Second String to compare 9489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 9499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if s1 is not equal to s2 9509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean compareStrings(XMLString s1, XMLString s2) 9529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return !s1.equals(s2); 9549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 9579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Compare two numbers for non-equality. 9589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 9599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 9609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param n1 First number to compare 9619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param n2 Second number to compare 9629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 9639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if n1 is not equal to n2 9649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean compareNumbers(double n1, double n2) 9669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return n1 != n2; 9689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 970