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: XObject.java 469368 2006-10-31 04:41:36Z minchau $ 209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xpath.objects; 229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.io.Serializable; 249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xalan.res.XSLMessages; 269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.dtm.DTM; 279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.dtm.DTMIterator; 289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.utils.XMLString; 299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.Expression; 309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.ExpressionOwner; 319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.NodeSetDTM; 329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.XPathContext; 339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.XPathException; 349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.XPathVisitor; 359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.res.XPATHErrorResources; 369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.DocumentFragment; 389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.NodeList; 399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.traversal.NodeIterator; 409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This class represents an XPath object, and is capable of 439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * converting the object to various types, such as a string. 449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This class acts as the base class to other XPath type objects, 459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * such as XString, and provides polymorphic casting capabilities. 469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @xsl.usage general 479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic class XObject extends Expression implements Serializable, Cloneable 499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{ 509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static final long serialVersionUID = -821887098985662951L; 519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The java object which this object wraps. 549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @serial 559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected Object m_obj; // This may be NULL!!! 579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Create an XObject. 609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XObject(){} 629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Create an XObject. 659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param obj Can be any object, should be a specific type 679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * for derived classes, or null. 689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XObject(Object obj) 709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setObject(obj); 729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected void setObject(Object obj) { 759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_obj = obj; 769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * For support of literal objects in xpaths. 809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param xctxt The XPath execution context. 829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return This object. 849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XObject execute(XPathContext xctxt) 889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws javax.xml.transform.TransformerException 899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return this; 919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Specify if it's OK for detach to release the iterator for reuse. 959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This function should be called with a value of false for objects that are 969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * stored in variables. 979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Calling this with a value of false on a XNodeSet will cause the nodeset 989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to be cached. 999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param allowRelease true if it is OK for detach to release this iterator 1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * for pooling. 1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void allowDetachToRelease(boolean allowRelease){} 1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Detaches the <code>DTMIterator</code> from the set which it iterated 1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * over, releasing any computational resources and placing the iterator 1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * in the INVALID state. After <code>detach</code> has been invoked, 1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * calls to <code>nextNode</code> or <code>previousNode</code> will 1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * raise a runtime exception. 1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void detach(){} 1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Forces the object to release it's resources. This is more harsh than 1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * detach(). 1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void destruct() 1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null != m_obj) 1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson allowDetachToRelease(true); 1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson detach(); 1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setObject(null); 1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Reset for fresh reuse. 1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void reset() 1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Directly call the 1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * characters method on the passed ContentHandler for the 1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * string-value. Multiple calls to the 1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * ContentHandler's characters methods may well occur for a single call to 1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * this method. 1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param ch A non-null reference to a ContentHandler. 1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws org.xml.sax.SAXException 1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void dispatchCharactersEvents(org.xml.sax.ContentHandler ch) 1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws org.xml.sax.SAXException 1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson xstr().dispatchCharactersEvents(ch); 1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Create the right XObject based on the type of the object passed. This 1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * function can not make an XObject that exposes DOM Nodes, NodeLists, and 1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * NodeIterators to the XSLT stylesheet as node-sets. 1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param val The java object which this object will wrap. 1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the right XObject based on the type of the object passed. 1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static public XObject create(Object val) 1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return XObjectFactory.create(val); 1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Create the right XObject based on the type of the object passed. 1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This function <emph>can</emph> make an XObject that exposes DOM Nodes, NodeLists, and 1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * NodeIterators to the XSLT stylesheet as node-sets. 1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param val The java object which this object will wrap. 1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param xctxt The XPath context. 1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the right XObject based on the type of the object passed. 1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static public XObject create(Object val, XPathContext xctxt) 1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return XObjectFactory.create(val, xctxt); 1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Constant for NULL object type */ 1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final int CLASS_NULL = -1; 1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Constant for UNKNOWN object type */ 1879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final int CLASS_UNKNOWN = 0; 1889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Constant for BOOLEAN object type */ 1909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final int CLASS_BOOLEAN = 1; 1919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Constant for NUMBER object type */ 1939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final int CLASS_NUMBER = 2; 1949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Constant for STRING object type */ 1969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final int CLASS_STRING = 3; 1979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Constant for NODESET object type */ 1999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final int CLASS_NODESET = 4; 2009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Constant for RESULT TREE FRAGMENT object type */ 2029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final int CLASS_RTREEFRAG = 5; 2039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Represents an unresolved variable type as an integer. */ 2059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final int CLASS_UNRESOLVEDVARIABLE = 600; 2069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell what kind of class this is. 2099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return CLASS_UNKNOWN 2119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int getType() 2139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return CLASS_UNKNOWN; 2159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Given a request type, return the equivalent string. 2199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * For diagnostic purposes. 2209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return type string "#UNKNOWN" + object class name 2229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String getTypeString() 2249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return "#UNKNOWN (" + object().getClass().getName() + ")"; 2269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a number. Always issues an error. 2309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return 0.0 2329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 2349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public double num() throws javax.xml.transform.TransformerException 2369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson error(XPATHErrorResources.ER_CANT_CONVERT_TO_NUMBER, 2399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson new Object[]{ getTypeString() }); //"Can not convert "+getTypeString()+" to a number"); 2409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return 0.0; 2429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a number, but allow side effects, such as the 2469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * incrementing of an iterator. 2479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return numeric value of the string conversion from the 2499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * next node in the NodeSetDTM, or NAN if no node was found 2509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public double numWithSideEffects() throws javax.xml.transform.TransformerException 2529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return num(); 2549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a boolean. Always issues an error. 2589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return false 2609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 2629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean bool() throws javax.xml.transform.TransformerException 2649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson error(XPATHErrorResources.ER_CANT_CONVERT_TO_NUMBER, 2679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson new Object[]{ getTypeString() }); //"Can not convert "+getTypeString()+" to a number"); 2689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 2709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a boolean, but allow side effects, such as the 2749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * incrementing of an iterator. 2759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return True if there is a next node in the nodeset 2779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean boolWithSideEffects() throws javax.xml.transform.TransformerException 2799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return bool(); 2819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a string. 2869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The string this wraps or the empty string if null 2889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XMLString xstr() 2909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return XMLStringFactoryImpl.getFactory().newstr(str()); 2929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a string. 2969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The object as a string 2989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String str() 3009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (m_obj != null) ? m_obj.toString() : ""; 3029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Return the string representation of the object 3069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the string representation of the object 3099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String toString() 3119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return str(); 3139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a result tree fragment. 3179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param support XPath context to use for the conversion 3199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the objec as a result tree fragment. 3219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int rtf(XPathContext support) 3239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int result = rtf(); 3269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (DTM.NULL == result) 3289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson DTM frag = support.createDocumentFragment(); 3309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // %OPT% 3329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson frag.appendTextChild(str()); 3339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson result = frag.getDocument(); 3359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return result; 3389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a result tree fragment. 3429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param support XPath context to use for the conversion 3449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the objec as a result tree fragment. 3469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public DocumentFragment rtree(XPathContext support) 3489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson DocumentFragment docFrag = null; 3509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int result = rtf(); 3519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (DTM.NULL == result) 3539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson DTM frag = support.createDocumentFragment(); 3559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // %OPT% 3579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson frag.appendTextChild(str()); 3589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson docFrag = (DocumentFragment)frag.getNode(frag.getDocument()); 3609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 3629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson DTM frag = support.getDTM(result); 3649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson docFrag = (DocumentFragment)frag.getNode(frag.getDocument()); 3659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return docFrag; 3689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * For functions to override. 3739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return null 3759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public DocumentFragment rtree() 3779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return null; 3799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * For functions to override. 3839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return null 3859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int rtf() 3879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return DTM.NULL; 3899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Return a java object that's closest to the representation 3939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * that should be handed to an extension. 3949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The object that this class wraps 3969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object object() 3989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_obj; 4009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a nodelist. Always issues an error. 4049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return null 4069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 4089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public DTMIterator iter() throws javax.xml.transform.TransformerException 4109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson error(XPATHErrorResources.ER_CANT_CONVERT_TO_NODELIST, 4139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson new Object[]{ getTypeString() }); //"Can not convert "+getTypeString()+" to a NodeList!"); 4149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return null; 4169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get a fresh copy of the object. For use with variables. 4209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return This object, unless overridden by subclass. 4229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XObject getFresh() 4249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return this; 4269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a nodelist. Always issues an error. 4319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return null 4339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 4359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public NodeIterator nodeset() throws javax.xml.transform.TransformerException 4379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson error(XPATHErrorResources.ER_CANT_CONVERT_TO_NODELIST, 4409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson new Object[]{ getTypeString() }); //"Can not convert "+getTypeString()+" to a NodeList!"); 4419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return null; 4439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a nodelist. Always issues an error. 4479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return null 4499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 4519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public NodeList nodelist() throws javax.xml.transform.TransformerException 4539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson error(XPATHErrorResources.ER_CANT_CONVERT_TO_NODELIST, 4569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson new Object[]{ getTypeString() }); //"Can not convert "+getTypeString()+" to a NodeList!"); 4579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return null; 4599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a nodelist. Always issues an error. 4649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The object as a NodeSetDTM. 4669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 4689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public NodeSetDTM mutableNodeset() 4709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws javax.xml.transform.TransformerException 4719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson error(XPATHErrorResources.ER_CANT_CONVERT_TO_MUTABLENODELIST, 4749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson new Object[]{ getTypeString() }); //"Can not convert "+getTypeString()+" to a NodeSetDTM!"); 4759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (NodeSetDTM) m_obj; 4779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast object to type t. 4819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param t Type of object to cast this to 4839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param support XPath context to use for the conversion 4849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return This object as the given type t 4869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 4889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object castToType(int t, XPathContext support) 4909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws javax.xml.transform.TransformerException 4919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Object result; 4949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson switch (t) 4969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case CLASS_STRING : 4989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson result = str(); 4999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson break; 5009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case CLASS_NUMBER : 5019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson result = new Double(num()); 5029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson break; 5039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case CLASS_NODESET : 5049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson result = iter(); 5059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson break; 5069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case CLASS_BOOLEAN : 5079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson result = new Boolean(bool()); 5089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson break; 5099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case CLASS_UNKNOWN : 5109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson result = m_obj; 5119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson break; 5129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // %TBD% What to do here? 5149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // case CLASS_RTREEFRAG : 5159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // result = rtree(support); 5169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // break; 5179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson default : 5189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson error(XPATHErrorResources.ER_CANT_CONVERT_TO_TYPE, 5199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson new Object[]{ getTypeString(), 5209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Integer.toString(t) }); //"Can not convert "+getTypeString()+" to a type#"+t); 5219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson result = null; 5239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return result; 5269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell if one object is less than the other. 5309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param obj2 Object to compare this to 5329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return True if this object is less than the given object 5349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 5369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean lessThan(XObject obj2) 5389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws javax.xml.transform.TransformerException 5399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // In order to handle the 'all' semantics of 5429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // nodeset comparisons, we always call the 5439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // nodeset function. Because the arguments 5449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // are backwards, we call the opposite comparison 5459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // function. 5469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (obj2.getType() == XObject.CLASS_NODESET) 5479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return obj2.greaterThan(this); 5489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return this.num() < obj2.num(); 5509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell if one object is less than or equal to the other. 5549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param obj2 Object to compare this to 5569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return True if this object is less than or equal to the given object 5589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 5609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean lessThanOrEqual(XObject obj2) 5629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws javax.xml.transform.TransformerException 5639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // In order to handle the 'all' semantics of 5669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // nodeset comparisons, we always call the 5679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // nodeset function. Because the arguments 5689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // are backwards, we call the opposite comparison 5699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // function. 5709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (obj2.getType() == XObject.CLASS_NODESET) 5719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return obj2.greaterThanOrEqual(this); 5729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return this.num() <= obj2.num(); 5749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell if one object is greater than the other. 5789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param obj2 Object to compare this to 5809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return True if this object is greater than the given object 5829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 5849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean greaterThan(XObject obj2) 5869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws javax.xml.transform.TransformerException 5879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // In order to handle the 'all' semantics of 5909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // nodeset comparisons, we always call the 5919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // nodeset function. Because the arguments 5929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // are backwards, we call the opposite comparison 5939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // function. 5949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (obj2.getType() == XObject.CLASS_NODESET) 5959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return obj2.lessThan(this); 5969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return this.num() > obj2.num(); 5989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell if one object is greater than or equal to the other. 6029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param obj2 Object to compare this to 6049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return True if this object is greater than or equal to the given object 6069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 6089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean greaterThanOrEqual(XObject obj2) 6109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws javax.xml.transform.TransformerException 6119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // In order to handle the 'all' semantics of 6149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // nodeset comparisons, we always call the 6159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // nodeset function. Because the arguments 6169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // are backwards, we call the opposite comparison 6179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // function. 6189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (obj2.getType() == XObject.CLASS_NODESET) 6199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return obj2.lessThanOrEqual(this); 6209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return this.num() >= obj2.num(); 6229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell if two objects are functionally equal. 6269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param obj2 Object to compare this to 6289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return True if this object is equal to the given object 6309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 6329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean equals(XObject obj2) 6349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // In order to handle the 'all' semantics of 6379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // nodeset comparisons, we always call the 6389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // nodeset function. 6399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (obj2.getType() == XObject.CLASS_NODESET) 6409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return obj2.equals(this); 6419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null != m_obj) 6439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_obj.equals(obj2.m_obj); 6459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 6479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return obj2.m_obj == null; 6499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell if two objects are functionally not equal. 6549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param obj2 Object to compare this to 6569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return True if this object is not equal to the given object 6589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 6609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean notEquals(XObject obj2) 6629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws javax.xml.transform.TransformerException 6639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // In order to handle the 'all' semantics of 6669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // nodeset comparisons, we always call the 6679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // nodeset function. 6689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (obj2.getType() == XObject.CLASS_NODESET) 6699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return obj2.notEquals(this); 6709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return !equals(obj2); 6729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell the user of an error, and probably throw an 6769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * exception. 6779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param msg Error message to issue 6799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 6819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected void error(String msg) 6839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws javax.xml.transform.TransformerException 6849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson error(msg, null); 6869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell the user of an error, and probably throw an 6909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * exception. 6919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param msg Error message to issue 6939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param args Arguments to use in the message 6949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 6969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected void error(String msg, Object[] args) 6989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws javax.xml.transform.TransformerException 6999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String fmsg = XSLMessages.createXPATHMessage(msg, args); 7029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // boolean shouldThrow = support.problem(m_support.XPATHPROCESSOR, 7049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // m_support.ERROR, 7059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // null, 7069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // null, fmsg, 0, 0); 7079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // if(shouldThrow) 7089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new XPathException(fmsg, this); 7109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * XObjects should not normally need to fix up variables. 7169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void fixupVariables(java.util.Vector vars, int globalsSize) 7189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // no-op 7209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a string. 7259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * NEEDSDOC @param fsb 7289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The string this wraps or the empty string if null 7299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void appendToFsb(org.apache.xml.utils.FastStringBuffer fsb) 7319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson fsb.append(str()); 7339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see org.apache.xpath.XPathVisitable#callVisitors(ExpressionOwner, XPathVisitor) 7379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void callVisitors(ExpressionOwner owner, XPathVisitor visitor) 7399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson assertion(false, "callVisitors should not be called for this object!!!"); 7419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see Expression#deepEquals(Expression) 7449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean deepEquals(Expression expr) 7469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(!isSameClass(expr)) 7489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 7499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // If equals at the expression level calls deepEquals, I think we're 7519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // still safe from infinite recursion since this object overrides 7529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // equals. I hope. 7539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(!this.equals((XObject)expr)) 7549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 7559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return true; 7579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 760