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: NodeSetDTM.java 468655 2006-10-28 07:12:06Z minchau $ 209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xpath; 229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xalan.res.XSLMessages; 249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.dtm.DTM; 259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.dtm.DTMFilter; 269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.dtm.DTMIterator; 279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.dtm.DTMManager; 289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.utils.NodeVector; 299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.res.XPATHErrorResources; 309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.Node; 329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.NodeList; 339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.traversal.NodeIterator; 349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p>The NodeSetDTM class can act as either a NodeVector, 389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * NodeList, or NodeIterator. However, in order for it to 399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * act as a NodeVector or NodeList, it's required that 409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * setShouldCacheNodes(true) be called before the first 419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * nextNode() is called, in order that nodes can be added 429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * as they are fetched. Derived classes that implement iterators 439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * must override runTo(int index), in order that they may 449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * run the iteration to the given index. </p> 459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p>Note that we directly implement the DOM's NodeIterator 479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * interface. We do not emulate all the behavior of the 489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * standard NodeIterator. In particular, we do not guarantee 499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to present a "live view" of the document ... but in XSLT, 509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the source document should never be mutated, so this should 519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * never be an issue.</p> 529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p>Thought: Should NodeSetDTM really implement NodeList and NodeIterator, 549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or should there be specific subclasses of it which do so? The 559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * advantage of doing it all here is that all NodeSetDTMs will respond 569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to the same calls; the disadvantage is that some of them may return 579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * less-than-enlightening results when you do so.</p> 589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @xsl.usage advanced 599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic class NodeSetDTM extends NodeVector 619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson implements /* NodeList, NodeIterator, */ DTMIterator, 629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Cloneable 639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{ 649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static final long serialVersionUID = 7686480133331317070L; 659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Create an empty nodelist. 689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public NodeSetDTM(DTMManager dtmManager) 709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super(); 729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_manager = dtmManager; 739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Create an empty, using the given block size. 779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param blocksize Size of blocks to allocate 799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param dummy pass zero for right now... 809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public NodeSetDTM(int blocksize, int dummy, DTMManager dtmManager) 829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super(blocksize); 849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_manager = dtmManager; 859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // %TBD% 889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// /** 899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * Create a NodeSetDTM, and copy the members of the 909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * given nodelist into it. 919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * 929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * @param nodelist List of Nodes to be made members of the new set. 939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// */ 949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// public NodeSetDTM(NodeList nodelist) 959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// { 969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// super(); 989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// addNodes(nodelist); 1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Create a NodeSetDTM, and copy the members of the 1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * given NodeSetDTM into it. 1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param nodelist Set of Nodes to be made members of the new set. 1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public NodeSetDTM(NodeSetDTM nodelist) 1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super(); 1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_manager = nodelist.getDTMManager(); 1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_root = nodelist.getRoot(); 1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson addNodes((DTMIterator) nodelist); 1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Create a NodeSetDTM, and copy the members of the 1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * given DTMIterator into it. 1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param ni Iterator which yields Nodes to be made members of the new set. 1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public NodeSetDTM(DTMIterator ni) 1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super(); 1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_manager = ni.getDTMManager(); 1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_root = ni.getRoot(); 1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson addNodes(ni); 1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Create a NodeSetDTM, and copy the members of the 1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * given DTMIterator into it. 1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param iterator Iterator which yields Nodes to be made members of the new set. 1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public NodeSetDTM(NodeIterator iterator, XPathContext xctxt) 1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super(); 1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Node node; 1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_manager = xctxt.getDTMManager(); 1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson while (null != (node = iterator.nextNode())) 1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int handle = xctxt.getDTMHandleFromNode(node); 1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson addNodeInDocOrder(handle, xctxt); 1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Create a NodeSetDTM, and copy the members of the 1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * given DTMIterator into it. 1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public NodeSetDTM(NodeList nodeList, XPathContext xctxt) 1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super(); 1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_manager = xctxt.getDTMManager(); 1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int n = nodeList.getLength(); 1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson for (int i = 0; i < n; i++) 1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Node node = nodeList.item(i); 1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int handle = xctxt.getDTMHandleFromNode(node); 1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Do not reorder or strip duplicate nodes from the given DOM nodelist 1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson addNode(handle); // addNodeInDocOrder(handle, xctxt); 1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Create a NodeSetDTM which contains the given Node. 1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param node Single node to be added to the new set. 1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public NodeSetDTM(int node, DTMManager dtmManager) 1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super(); 1879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_manager = dtmManager; 1889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson addNode(node); 1909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Set the environment in which this iterator operates, which should provide: 1949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a node (the context node... same value as "root" defined below) 1959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a pair of non-zero positive integers (the context position and the context size) 1969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a set of variable bindings 1979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a function library 1989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the set of namespace declarations in scope for the expression. 1999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p>At this time the exact implementation of this environment is application 2019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * dependent. Probably a proper interface will be created fairly soon.</p> 2029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param environment The environment object. 2049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setEnvironment(Object environment) 2069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // no-op 2089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The root node of the Iterator, as specified when it was created. 2139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * For non-Iterator NodeSetDTMs, this will be null. 2149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int getRoot() 2169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(DTM.NULL == m_root) 2189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(size() > 0) 2209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return item(0); 2219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 2229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return DTM.NULL; 2239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 2259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_root; 2269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Initialize the context values for this expression 2309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * after it is cloned. 2319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param context The XPath runtime context for this 2339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * transformation. 2349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setRoot(int context, Object environment) 2369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // no-op, I guess... (-sb) 2389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Clone this NodeSetDTM. 2429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * At this time, we only expect this to be used with LocPathIterators; 2439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * it may not work with other kinds of NodeSetDTMs. 2449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return a new NodeSetDTM of the same type, having the same state... 2469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * though unless overridden in the subclasses, it may not copy all 2479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the state information. 2489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws CloneNotSupportedException if this subclass of NodeSetDTM 2509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * does not support the clone() operation. 2519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object clone() throws CloneNotSupportedException 2539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson NodeSetDTM clone = (NodeSetDTM) super.clone(); 2569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return clone; 2589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get a cloned Iterator, and reset its state to the beginning of the 2629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * iteration. 2639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return a new NodeSetDTM of the same type, having the same state... 2659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * except that the reset() operation has been called. 2669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws CloneNotSupportedException if this subclass of NodeSetDTM 2689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * does not support the clone() operation. 2699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public DTMIterator cloneWithReset() throws CloneNotSupportedException 2719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson NodeSetDTM clone = (NodeSetDTM) clone(); 2749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson clone.reset(); 2769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return clone; 2789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Reset the iterator. May have no effect on non-iterator Nodesets. 2829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void reset() 2849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_next = 0; 2869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This attribute determines which node types are presented via the 2909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * iterator. The available set of constants is defined in the 2919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <code>DTMFilter</code> interface. For NodeSetDTMs, the mask has been 2929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * hardcoded to show all nodes except EntityReference nodes, which have 2939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * no equivalent in the XPath data model. 2949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return integer used as a bit-array, containing flags defined in 2969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the DOM's DTMFilter class. The value will be 2979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <code>SHOW_ALL & ~SHOW_ENTITY_REFERENCE</code>, meaning that 2989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * only entity references are suppressed. 2999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int getWhatToShow() 3019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return DTMFilter.SHOW_ALL & ~DTMFilter.SHOW_ENTITY_REFERENCE; 3039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The filter object used to screen nodes. Filters are applied to 3079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * further reduce (and restructure) the DTMIterator's view of the 3089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * document. In our case, we will be using hardcoded filters built 3099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * into our iterators... but getFilter() is part of the DOM's 3109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * DTMIterator interface, so we have to support it. 3119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return null, which is slightly misleading. True, there is no 3139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * user-written filter object, but in fact we are doing some very 3149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * sophisticated custom filtering. A DOM purist might suggest 3159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * returning a placeholder object just to indicate that this is 3169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * not going to return all nodes selected by whatToShow. 3179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public DTMFilter getFilter() 3199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return null; 3219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The value of this flag determines whether the children of entity 3259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * reference nodes are visible to the iterator. If false, they will be 3269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * skipped over. 3279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <br> To produce a view of the document that has entity references 3289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * expanded and does not expose the entity reference node itself, use the 3299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * whatToShow flags to hide the entity reference node and set 3309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * expandEntityReferences to true when creating the iterator. To produce 3319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a view of the document that has entity reference nodes but no entity 3329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * expansion, use the whatToShow flags to show the entity reference node 3339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * and set expandEntityReferences to false. 3349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true for all iterators based on NodeSetDTM, meaning that the 3369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * contents of EntityRefrence nodes may be returned (though whatToShow 3379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * says that the EntityReferences themselves are not shown.) 3389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean getExpandEntityReferences() 3409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return true; 3429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get an instance of a DTM that "owns" a node handle. Since a node 3469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * iterator may be passed without a DTMManager, this allows the 3479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * caller to easily get the DTM using just the iterator. 3489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param nodeHandle the nodeHandle. 3509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return a non-null DTM reference. 3529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public DTM getDTM(int nodeHandle) 3549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_manager.getDTM(nodeHandle); 3579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /* An instance of the DTMManager. */ 3609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson DTMManager m_manager; 3619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get an instance of the DTMManager. Since a node 3649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * iterator may be passed without a DTMManager, this allows the 3659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * caller to easily get the DTMManager using just the iterator. 3669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return a non-null DTMManager reference. 3689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public DTMManager getDTMManager() 3709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_manager; 3739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns the next node in the set and advances the position of the 3779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * iterator in the set. After a DTMIterator is created, the first call 3789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to nextNode() returns the first node in the set. 3799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The next <code>Node</code> in the set being iterated over, or 3809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <code>DTM.NULL</code> if there are no more members in that set. 3819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws DOMException 3829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * INVALID_STATE_ERR: Raised if this method is called after the 3839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <code>detach</code> method was invoked. 3849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int nextNode() 3869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ((m_next) < this.size()) 3899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int next = this.elementAt(m_next); 3919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_next++; 3939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return next; 3959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 3979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return DTM.NULL; 3989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns the previous node in the set and moves the position of the 4029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * iterator backwards in the set. 4039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The previous <code>Node</code> in the set being iterated over, 4049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or<code>DTM.NULL</code> if there are no more members in that set. 4059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws DOMException 4069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * INVALID_STATE_ERR: Raised if this method is called after the 4079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <code>detach</code> method was invoked. 4089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws RuntimeException thrown if this NodeSetDTM is not of 4099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a cached type, and hence doesn't know what the previous node was. 4109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int previousNode() 4129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!m_cacheNodes) 4159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException( 4169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLMessages.createXPATHMessage(XPATHErrorResources.ER_NODESETDTM_CANNOT_ITERATE, null)); //"This NodeSetDTM can not iterate to a previous node!"); 4179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ((m_next - 1) > 0) 4199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_next--; 4219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return this.elementAt(m_next); 4239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 4259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return DTM.NULL; 4269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Detaches the iterator from the set which it iterated over, releasing 4309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * any computational resources and placing the iterator in the INVALID 4319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * state. After<code>detach</code> has been invoked, calls to 4329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <code>nextNode</code> or<code>previousNode</code> will raise the 4339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * exception INVALID_STATE_ERR. 4349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p> 4359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This operation is a no-op in NodeSetDTM, and will not cause 4369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * INVALID_STATE_ERR to be raised by later operations. 4379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * </p> 4389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void detach(){} 4409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Specify if it's OK for detach to release the iterator for reuse. 4439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param allowRelease true if it is OK for detach to release this iterator 4459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * for pooling. 4469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void allowDetachToRelease(boolean allowRelease) 4489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // no action for right now. 4509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tells if this NodeSetDTM is "fresh", in other words, if 4559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the first nextNode() that is called will return the 4569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * first node in the set. 4579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if nextNode() would return the first node in the set, 4599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * false if it would return a later one. 4609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean isFresh() 4629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (m_next == 0); 4649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * If an index is requested, NodeSetDTM will call this method 4689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to run the iterator to the index. By default this sets 4699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * m_next to the index. If the index argument is -1, this 4709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * signals that the iterator should be run to the end. 4719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param index Position to advance (or retreat) to, with 4739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 0 requesting the reset ("fresh") position and -1 (or indeed 4749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * any out-of-bounds value) requesting the final position. 4759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws RuntimeException thrown if this NodeSetDTM is not 4769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * one of the types which supports indexing/counting. 4779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void runTo(int index) 4799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!m_cacheNodes) 4829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException( 4839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLMessages.createXPATHMessage(XPATHErrorResources.ER_NODESETDTM_CANNOT_INDEX, null)); //"This NodeSetDTM can not do indexing or counting functions!"); 4849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ((index >= 0) && (m_next < m_firstFree)) 4869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_next = index; 4879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 4889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_next = m_firstFree - 1; 4899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns the <code>index</code>th item in the collection. If 4939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <code>index</code> is greater than or equal to the number of nodes in 4949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the list, this returns <code>null</code>. 4959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * TODO: What happens if index is out of range? 4979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param index Index into the collection. 4999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The node at the <code>index</code>th position in the 5009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <code>NodeList</code>, or <code>null</code> if that is not a valid 5019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * index. 5029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int item(int index) 5049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson runTo(index); 5079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return this.elementAt(index); 5099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The number of nodes in the list. The range of valid child node indices is 5139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 0 to <code>length-1</code> inclusive. Note that this operation requires 5149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * finding all the matching nodes, which may defeat attempts to defer 5159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * that work. 5169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return integer indicating how many nodes are represented by this list. 5189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int getLength() 5209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson runTo(-1); 5239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return this.size(); 5259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Add a node to the NodeSetDTM. Not all types of NodeSetDTMs support this 5299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * operation 5309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param n Node to be added 5329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws RuntimeException thrown if this NodeSetDTM is not of 5339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a mutable type. 5349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void addNode(int n) 5369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!m_mutable) 5399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_NODESETDTM_NOT_MUTABLE, null)); //"This NodeSetDTM is not mutable!"); 5409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.addElement(n); 5429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Insert a node at a given position. 5469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param n Node to be added 5489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param pos Offset at which the node is to be inserted, 5499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * with 0 being the first position. 5509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws RuntimeException thrown if this NodeSetDTM is not of 5519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a mutable type. 5529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void insertNode(int n, int pos) 5549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!m_mutable) 5579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_NODESETDTM_NOT_MUTABLE, null)); //"This NodeSetDTM is not mutable!"); 5589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson insertElementAt(n, pos); 5609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Remove a node. 5649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param n Node to be added 5669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws RuntimeException thrown if this NodeSetDTM is not of 5679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a mutable type. 5689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void removeNode(int n) 5709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!m_mutable) 5739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_NODESETDTM_NOT_MUTABLE, null)); //"This NodeSetDTM is not mutable!"); 5749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.removeElement(n); 5769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // %TBD% 5799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// /** 5809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * Copy NodeList members into this nodelist, adding in 5819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * document order. If a node is null, don't add it. 5829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * 5839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * @param nodelist List of nodes which should now be referenced by 5849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * this NodeSetDTM. 5859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * @throws RuntimeException thrown if this NodeSetDTM is not of 5869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * a mutable type. 5879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// */ 5889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// public void addNodes(NodeList nodelist) 5899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// { 5909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 5919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// if (!m_mutable) 5929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// throw new RuntimeException("This NodeSetDTM is not mutable!"); 5939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 5949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// if (null != nodelist) // defensive to fix a bug that Sanjiva reported. 5959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// { 5969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// int nChildren = nodelist.getLength(); 5979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 5989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// for (int i = 0; i < nChildren; i++) 5999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// { 6009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// int obj = nodelist.item(i); 6019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 6029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// if (null != obj) 6039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// { 6049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// addElement(obj); 6059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 6069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 6079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 6089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 6099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// // checkDups(); 6109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 6119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // %TBD% 6139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// /** 6149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * <p>Copy NodeList members into this nodelist, adding in 6159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * document order. Only genuine node references will be copied; 6169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * nulls appearing in the source NodeSetDTM will 6179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * not be added to this one. </p> 6189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * 6199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * <p> In case you're wondering why this function is needed: NodeSetDTM 6209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * implements both DTMIterator and NodeList. If this method isn't 6219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * provided, Java can't decide which of those to use when addNodes() 6229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * is invoked. Providing the more-explicit match avoids that 6239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * ambiguity.)</p> 6249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * 6259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * @param ns NodeSetDTM whose members should be merged into this NodeSetDTM. 6269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * @throws RuntimeException thrown if this NodeSetDTM is not of 6279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * a mutable type. 6289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// */ 6299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// public void addNodes(NodeSetDTM ns) 6309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// { 6319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 6329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// if (!m_mutable) 6339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// throw new RuntimeException("This NodeSetDTM is not mutable!"); 6349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 6359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// addNodes((DTMIterator) ns); 6369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 6379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Copy NodeList members into this nodelist, adding in 6409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * document order. Null references are not added. 6419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param iterator DTMIterator which yields the nodes to be added. 6439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws RuntimeException thrown if this NodeSetDTM is not of 6449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a mutable type. 6459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void addNodes(DTMIterator iterator) 6479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!m_mutable) 6509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_NODESETDTM_NOT_MUTABLE, null)); //"This NodeSetDTM is not mutable!"); 6519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null != iterator) // defensive to fix a bug that Sanjiva reported. 6539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int obj; 6559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson while (DTM.NULL != (obj = iterator.nextNode())) 6579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson addElement(obj); 6599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // checkDups(); 6639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // %TBD% 6669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// /** 6679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * Copy NodeList members into this nodelist, adding in 6689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * document order. If a node is null, don't add it. 6699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * 6709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * @param nodelist List of nodes to be added 6719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * @param support The XPath runtime context. 6729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * @throws RuntimeException thrown if this NodeSetDTM is not of 6739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * a mutable type. 6749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// */ 6759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// public void addNodesInDocOrder(NodeList nodelist, XPathContext support) 6769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// { 6779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 6789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// if (!m_mutable) 6799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// throw new RuntimeException("This NodeSetDTM is not mutable!"); 6809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 6819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// int nChildren = nodelist.getLength(); 6829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 6839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// for (int i = 0; i < nChildren; i++) 6849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// { 6859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// int node = nodelist.item(i); 6869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 6879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// if (null != node) 6889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// { 6899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// addNodeInDocOrder(node, support); 6909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 6919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 6929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 6939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Copy NodeList members into this nodelist, adding in 6969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * document order. If a node is null, don't add it. 6979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param iterator DTMIterator which yields the nodes to be added. 6999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param support The XPath runtime context. 7009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws RuntimeException thrown if this NodeSetDTM is not of 7019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a mutable type. 7029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void addNodesInDocOrder(DTMIterator iterator, XPathContext support) 7049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!m_mutable) 7079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_NODESETDTM_NOT_MUTABLE, null)); //"This NodeSetDTM is not mutable!"); 7089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int node; 7109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson while (DTM.NULL != (node = iterator.nextNode())) 7129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson addNodeInDocOrder(node, support); 7149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // %TBD% 7189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// /** 7199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * Add the node list to this node set in document order. 7209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * 7219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * @param start index. 7229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * @param end index. 7239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * @param testIndex index. 7249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * @param nodelist The nodelist to add. 7259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * @param support The XPath runtime context. 7269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * 7279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * @return false always. 7289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * @throws RuntimeException thrown if this NodeSetDTM is not of 7299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * a mutable type. 7309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// */ 7319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// private boolean addNodesInDocOrder(int start, int end, int testIndex, 7329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// NodeList nodelist, XPathContext support) 7339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// { 7349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 7359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// if (!m_mutable) 7369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// throw new RuntimeException("This NodeSetDTM is not mutable!"); 7379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 7389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// boolean foundit = false; 7399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// int i; 7409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// int node = nodelist.item(testIndex); 7419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 7429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// for (i = end; i >= start; i--) 7439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// { 7449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// int child = elementAt(i); 7459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 7469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// if (child == node) 7479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// { 7489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// i = -2; // Duplicate, suppress insert 7499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 7509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// break; 7519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 7529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 7539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// if (!support.getDOMHelper().isNodeAfter(node, child)) 7549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// { 7559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// insertElementAt(node, i + 1); 7569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 7579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// testIndex--; 7589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 7599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// if (testIndex > 0) 7609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// { 7619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// boolean foundPrev = addNodesInDocOrder(0, i, testIndex, nodelist, 7629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// support); 7639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 7649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// if (!foundPrev) 7659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// { 7669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// addNodesInDocOrder(i, size() - 1, testIndex, nodelist, support); 7679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 7689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 7699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 7709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// break; 7719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 7729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 7739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 7749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// if (i == -1) 7759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// { 7769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// insertElementAt(node, 0); 7779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 7789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 7799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// return foundit; 7809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// } 7819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Add the node into a vector of nodes where it should occur in 7849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * document order. 7859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param node The node to be added. 7869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param test true if we should test for doc order 7879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param support The XPath runtime context. 7889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return insertIndex. 7899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws RuntimeException thrown if this NodeSetDTM is not of 7909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a mutable type. 7919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int addNodeInDocOrder(int node, boolean test, XPathContext support) 7939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!m_mutable) 7969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_NODESETDTM_NOT_MUTABLE, null)); //"This NodeSetDTM is not mutable!"); 7979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int insertIndex = -1; 7999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (test) 8019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // This needs to do a binary search, but a binary search 8049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // is somewhat tough because the sequence test involves 8059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // two nodes. 8069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int size = size(), i; 8079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson for (i = size - 1; i >= 0; i--) 8099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int child = elementAt(i); 8119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (child == node) 8139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson i = -2; // Duplicate, suppress insert 8159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson break; 8179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson DTM dtm = support.getDTM(node); 8209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!dtm.isNodeAfter(node, child)) 8219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson break; 8239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (i != -2) 8279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson insertIndex = i + 1; 8299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson insertElementAt(node, insertIndex); 8319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 8349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson insertIndex = this.size(); 8369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean foundit = false; 8389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson for (int i = 0; i < insertIndex; i++) 8409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (i == node) 8429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson foundit = true; 8449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson break; 8469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!foundit) 8509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson addElement(node); 8519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // checkDups(); 8549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return insertIndex; 8559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } // end addNodeInDocOrder(Vector v, Object obj) 8569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 8589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Add the node into a vector of nodes where it should occur in 8599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * document order. 8609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param node The node to be added. 8619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param support The XPath runtime context. 8629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The index where it was inserted. 8649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws RuntimeException thrown if this NodeSetDTM is not of 8659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a mutable type. 8669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int addNodeInDocOrder(int node, XPathContext support) 8689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!m_mutable) 8719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_NODESETDTM_NOT_MUTABLE, null)); //"This NodeSetDTM is not mutable!"); 8729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return addNodeInDocOrder(node, true, support); 8749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } // end addNodeInDocOrder(Vector v, Object obj) 8759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 8779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the length of the list. 8789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The size of this node set. 8809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int size() 8829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return super.size(); 8849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 8879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Append a Node onto the vector. 8889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param value The node to be added. 8909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws RuntimeException thrown if this NodeSetDTM is not of 8919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a mutable type. 8929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void addElement(int value) 8949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!m_mutable) 8979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_NODESETDTM_NOT_MUTABLE, null)); //"This NodeSetDTM is not mutable!"); 8989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super.addElement(value); 9009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 9039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Inserts the specified node in this vector at the specified index. 9049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Each component in this vector with an index greater or equal to 9059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the specified index is shifted upward to have an index one greater 9069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * than the value it had previously. 9079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 9089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param value The node to be inserted. 9099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param at The index where the insert should occur. 9109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws RuntimeException thrown if this NodeSetDTM is not of 9119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a mutable type. 9129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void insertElementAt(int value, int at) 9149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!m_mutable) 9179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_NODESETDTM_NOT_MUTABLE, null)); //"This NodeSetDTM is not mutable!"); 9189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super.insertElementAt(value, at); 9209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 9239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Append the nodes to the list. 9249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 9259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param nodes The nodes to be appended to this node set. 9269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws RuntimeException thrown if this NodeSetDTM is not of 9279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a mutable type. 9289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void appendNodes(NodeVector nodes) 9309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!m_mutable) 9339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_NODESETDTM_NOT_MUTABLE, null)); //"This NodeSetDTM is not mutable!"); 9349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super.appendNodes(nodes); 9369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 9399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Inserts the specified node in this vector at the specified index. 9409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Each component in this vector with an index greater or equal to 9419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the specified index is shifted upward to have an index one greater 9429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * than the value it had previously. 9439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws RuntimeException thrown if this NodeSetDTM is not of 9449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a mutable type. 9459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void removeAllElements() 9479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!m_mutable) 9509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_NODESETDTM_NOT_MUTABLE, null)); //"This NodeSetDTM is not mutable!"); 9519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super.removeAllElements(); 9539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 9569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Removes the first occurrence of the argument from this vector. 9579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * If the object is found in this vector, each component in the vector 9589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * with an index greater or equal to the object's index is shifted 9599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * downward to have an index one smaller than the value it had 9609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * previously. 9619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 9629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param s The node to be removed. 9639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 9649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return True if the node was successfully removed 9659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws RuntimeException thrown if this NodeSetDTM is not of 9669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a mutable type. 9679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean removeElement(int s) 9699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!m_mutable) 9729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_NODESETDTM_NOT_MUTABLE, null)); //"This NodeSetDTM is not mutable!"); 9739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return super.removeElement(s); 9759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 9789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Deletes the component at the specified index. Each component in 9799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * this vector with an index greater or equal to the specified 9809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * index is shifted downward to have an index one smaller than 9819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the value it had previously. 9829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 9839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param i The index of the node to be removed. 9849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws RuntimeException thrown if this NodeSetDTM is not of 9859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a mutable type. 9869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void removeElementAt(int i) 9889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!m_mutable) 9919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_NODESETDTM_NOT_MUTABLE, null)); //"This NodeSetDTM is not mutable!"); 9929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super.removeElementAt(i); 9949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 9979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Sets the component at the specified index of this vector to be the 9989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * specified object. The previous component at that position is discarded. 9999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 10009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The index must be a value greater than or equal to 0 and less 10019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * than the current size of the vector. 10029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 10039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param node The node to be set. 10049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param index The index of the node to be replaced. 10059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws RuntimeException thrown if this NodeSetDTM is not of 10069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a mutable type. 10079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 10089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setElementAt(int node, int index) 10099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 10109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!m_mutable) 10129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_NODESETDTM_NOT_MUTABLE, null)); //"This NodeSetDTM is not mutable!"); 10139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super.setElementAt(node, index); 10159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 10189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Same as setElementAt. 10199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 10209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param node The node to be set. 10219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param index The index of the node to be replaced. 10229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws RuntimeException thrown if this NodeSetDTM is not of 10239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a mutable type. 10249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 10259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setItem(int node, int index) 10269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 10279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!m_mutable) 10299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_NODESETDTM_NOT_MUTABLE, null)); //"This NodeSetDTM is not mutable!"); 10309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super.setElementAt(node, index); 10329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 10359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the nth element. 10369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 10379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param i The index of the requested node. 10389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 10399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return Node at specified index. 10409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 10419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int elementAt(int i) 10429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 10439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson runTo(i); 10459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return super.elementAt(i); 10479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 10509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell if the table contains the given node. 10519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 10529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param s Node to look for 10539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 10549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return True if the given node was found. 10559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 10569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean contains(int s) 10579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 10589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson runTo(-1); 10609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return super.contains(s); 10629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 10659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Searches for the first occurence of the given argument, 10669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * beginning the search at index, and testing for equality 10679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * using the equals method. 10689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 10699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param elem Node to look for 10709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param index Index of where to start the search 10719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the index of the first occurrence of the object 10729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * argument in this vector at position index or later in the 10739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * vector; returns -1 if the object is not found. 10749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 10759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int indexOf(int elem, int index) 10769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 10779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson runTo(-1); 10799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return super.indexOf(elem, index); 10819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 10849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Searches for the first occurence of the given argument, 10859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * beginning the search at index, and testing for equality 10869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * using the equals method. 10879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 10889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param elem Node to look for 10899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the index of the first occurrence of the object 10909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * argument in this vector at position index or later in the 10919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * vector; returns -1 if the object is not found. 10929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 10939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int indexOf(int elem) 10949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 10959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson runTo(-1); 10979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return super.indexOf(elem); 10999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 11009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** If this node is being used as an iterator, the next index that nextNode() 11029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * will return. */ 11039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson transient protected int m_next = 0; 11049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 11069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the current position, which is one less than 11079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the next nextNode() call will retrieve. i.e. if 11089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * you call getCurrentPos() and the return is 0, the next 11099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * fetch will take place at index 1. 11109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 11119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The the current position index. 11129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 11139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int getCurrentPos() 11149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 11159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_next; 11169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 11179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 11199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Set the current position in the node set. 11209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param i Must be a valid index. 11219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws RuntimeException thrown if this NodeSetDTM is not of 11229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a cached type, and thus doesn't permit indexed access. 11239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 11249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setCurrentPos(int i) 11259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 11269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!m_cacheNodes) 11289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException( 11299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLMessages.createXPATHMessage(XPATHErrorResources.ER_NODESETDTM_CANNOT_INDEX, null)); //"This NodeSetDTM can not do indexing or counting functions!"); 11309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_next = i; 11329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 11339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 11359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Return the last fetched node. Needed to support the UnionPathIterator. 11369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 11379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the last fetched node. 11389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws RuntimeException thrown if this NodeSetDTM is not of 11399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a cached type, and thus doesn't permit indexed access. 11409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 11419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int getCurrentNode() 11429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 11439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!m_cacheNodes) 11459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException( 11469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson "This NodeSetDTM can not do indexing or counting functions!"); 11479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int saved = m_next; 11499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // because nextNode always increments 11509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // But watch out for copy29, where the root iterator didn't 11519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // have nextNode called on it. 11529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int current = (m_next > 0) ? m_next-1 : m_next; 11539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int n = (current < m_firstFree) ? elementAt(current) : DTM.NULL; 11549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_next = saved; // HACK: I think this is a bit of a hack. -sb 11559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return n; 11569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 11579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** True if this list can be mutated. */ 11599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson transient protected boolean m_mutable = true; 11609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** True if this list is cached. 11629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @serial */ 11639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson transient protected boolean m_cacheNodes = true; 11649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** The root of the iteration, if available. */ 11669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected int m_root = DTM.NULL; 11679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 11699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get whether or not this is a cached node set. 11709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 11719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 11729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return True if this list is cached. 11739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 11749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean getShouldCacheNodes() 11759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 11769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_cacheNodes; 11779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 11789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 11809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * If setShouldCacheNodes(true) is called, then nodes will 11819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * be cached. They are not cached by default. This switch must 11829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * be set before the first call to nextNode is made, to ensure 11839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * that all nodes are cached. 11849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 11859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param b true if this node set should be cached. 11869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws RuntimeException thrown if an attempt is made to 11879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * request caching after we've already begun stepping through the 11889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * nodes in this set. 11899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 11909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setShouldCacheNodes(boolean b) 11919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 11929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!isFresh()) 11949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new RuntimeException( 11959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLMessages.createXPATHMessage(XPATHErrorResources.ER_CANNOT_CALL_SETSHOULDCACHENODE, null)); //"Can not call setShouldCacheNodes after nextNode has been called!"); 11969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 11979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_cacheNodes = b; 11989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_mutable = true; 11999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 12009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 12019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 12029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tells if this iterator can have nodes added to it or set via 12039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the <code>setItem(int node, int index)</code> method. 12049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 12059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return True if the nodelist can be mutated. 12069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 12079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean isMutable() 12089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 12099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_mutable; 12109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 12119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 12129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson transient private int m_last = 0; 12139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 12149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int getLast() 12159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 12169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_last; 12179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 12189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 12199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setLast(int last) 12209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 12219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_last = last; 12229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 12239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 12249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 12259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns true if all the nodes in the iteration well be returned in document 12269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * order. 12279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 12289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true as a default. 12299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 12309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean isDocOrdered() 12319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 12329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return true; 12339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 12349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 12359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 12369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Returns the axis being iterated, if it is known. 12379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 12389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return Axis.CHILD, etc., or -1 if the axis is not known or is of multiple 12399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * types. 12409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 12419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int getAxis() 12429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 12439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return -1; 12449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 12459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 12469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 12479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 1248