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: XRTreeFrag.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.utils.XMLString; 269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.Expression; 279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.ExpressionNode; 289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.XPathContext; 299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.axes.RTFIterator; 309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.NodeList; 329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This class represents an XPath result tree fragment object, and is capable of 359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * converting the RTF to other types, such as a string. 369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @xsl.usage general 379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic class XRTreeFrag extends XObject implements Cloneable 399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{ 409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static final long serialVersionUID = -3201553822254911567L; 419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private DTMXRTreeFrag m_DTMXRTreeFrag; 429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private int m_dtmRoot = DTM.NULL; 439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected boolean m_allowRelease = false; 449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Create an XRTreeFrag Object. 489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XRTreeFrag(int root, XPathContext xctxt, ExpressionNode parent) 519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super(null); 539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson exprSetParent(parent); 549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson initDTM(root, xctxt); 559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Create an XRTreeFrag Object. 599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XRTreeFrag(int root, XPathContext xctxt) 629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super(null); 649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson initDTM(root, xctxt); 659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private final void initDTM(int root, XPathContext xctxt){ 689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_dtmRoot = root; 699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final DTM dtm = xctxt.getDTM(root); 709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(dtm != null){ 719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_DTMXRTreeFrag = xctxt.getDTMXRTreeFrag(xctxt.getDTMIdentity(dtm)); 729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Return a java object that's closest to the representation 779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * that should be handed to an extension. 789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The object that this class wraps 809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object object() 829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_DTMXRTreeFrag.getXPathContext() != null) 849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return new org.apache.xml.dtm.ref.DTMNodeIterator((DTMIterator)(new org.apache.xpath.NodeSetDTM(m_dtmRoot, m_DTMXRTreeFrag.getXPathContext().getDTMManager()))); 859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return super.object(); 879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Create an XRTreeFrag Object. 919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XRTreeFrag(Expression expr) 949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super(expr); 969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Specify if it's OK for detach to release the iterator for reuse. 1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param allowRelease true if it is OK for detach to release this iterator 1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * for pooling. 1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void allowDetachToRelease(boolean allowRelease) 1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_allowRelease = allowRelease; 1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Detaches the <code>DTMIterator</code> from the set which it iterated 1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * over, releasing any computational resources and placing the iterator 1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * in the INVALID state. After <code>detach</code> has been invoked, 1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * calls to <code>nextNode</code> or <code>previousNode</code> will 1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * raise a runtime exception. 1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * In general, detach should only be called once on the object. 1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void detach(){ 1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(m_allowRelease){ 1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_DTMXRTreeFrag.destruct(); 1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setObject(null); 1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell what kind of class this is. 1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return type CLASS_RTREEFRAG 1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int getType() 1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return CLASS_RTREEFRAG; 1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Given a request type, return the equivalent string. 1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * For diagnostic purposes. 1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return type string "#RTREEFRAG" 1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String getTypeString() 1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return "#RTREEFRAG"; 1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a number. 1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The result tree fragment as a number or NaN 1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public double num() 1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws javax.xml.transform.TransformerException 1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XMLString s = xstr(); 1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return s.toDouble(); 1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a boolean. This always returns true for a RTreeFrag 1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * because it is treated like a node-set with a single root node. 1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true 1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean bool() 1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return true; 1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private XMLString m_xmlStr = null; 1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to an XMLString. 1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The document fragment node data or the empty string. 1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XMLString xstr() 1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(null == m_xmlStr) 1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_xmlStr = m_DTMXRTreeFrag.getDTM().getStringValue(m_dtmRoot); 1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_xmlStr; 1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a string. 1889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The string this wraps or the empty string if null 1909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void appendToFsb(org.apache.xml.utils.FastStringBuffer fsb) 1929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XString xstring = (XString)xstr(); 1949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson xstring.appendToFsb(fsb); 1959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a string. 2009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The document fragment node data or the empty string. 2029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String str() 2049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String str = m_DTMXRTreeFrag.getDTM().getStringValue(m_dtmRoot).toString(); 2069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (null == str) ? "" : str; 2089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a result tree fragment. 2129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The document fragment this wraps 2149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int rtf() 2169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_dtmRoot; 2189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a DTMIterator. 2229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * dml - modified to return an RTFIterator for 2239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * benefit of EXSLT object-type function in 2249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * {@code org.apache.xalan.lib.ExsltCommon}. 2259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The document fragment as a DTMIterator 2269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public DTMIterator asNodeIterator() 2289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return new RTFIterator(m_dtmRoot, m_DTMXRTreeFrag.getXPathContext().getDTMManager()); 2309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Cast result object to a nodelist. (special function). 2349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The document fragment as a nodelist 2369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public NodeList convertToNodeset() 2389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_obj instanceof NodeList) 2419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (NodeList) m_obj; 2429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 2439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return new org.apache.xml.dtm.ref.DTMNodeList(asNodeIterator()); 2449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell if two objects are functionally equal. 2489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param obj2 Object to compare this to 2509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return True if the two objects are equal 2529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 2549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean equals(XObject obj2) 2569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 2599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (XObject.CLASS_NODESET == obj2.getType()) 2619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // In order to handle the 'all' semantics of 2649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // nodeset comparisons, we always call the 2659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // nodeset function. 2669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return obj2.equals(this); 2679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (XObject.CLASS_BOOLEAN == obj2.getType()) 2699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return bool() == obj2.bool(); 2719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (XObject.CLASS_NUMBER == obj2.getType()) 2739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return num() == obj2.num(); 2759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (XObject.CLASS_NODESET == obj2.getType()) 2779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return xstr().equals(obj2.xstr()); 2799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (XObject.CLASS_STRING == obj2.getType()) 2819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return xstr().equals(obj2.xstr()); 2839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (XObject.CLASS_RTREEFRAG == obj2.getType()) 2859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Probably not so good. Think about this. 2889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return xstr().equals(obj2.xstr()); 2899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 2919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return super.equals(obj2); 2939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch(javax.xml.transform.TransformerException te) 2969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new org.apache.xml.utils.WrappedRuntimeException(te); 2989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 302