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: NodeTest.java 468655 2006-10-28 07:12:06Z minchau $ 209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xpath.patterns; 229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.dtm.DTM; 249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.dtm.DTMFilter; 259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.Expression; 269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.ExpressionOwner; 279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.XPath; 289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.XPathContext; 299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.XPathVisitor; 309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.objects.XNumber; 319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.objects.XObject; 329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This is the basic node test class for both match patterns and location path 359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * steps. 369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @xsl.usage advanced 379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic class NodeTest extends Expression 399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{ 409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static final long serialVersionUID = -5736721866747906182L; 419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The namespace or local name for node tests with a wildcard. 449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see <a href="http://www.w3.org/TR/xpath#NT-NameTest">the XPath NameTest production.</a> 459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final String WILD = "*"; 479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The URL to pass to the Node#supports method, to see if the 509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * DOM has already been stripped of whitespace nodes. 519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final String SUPPORTS_PRE_STRIPPING = 539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson "http://xml.apache.org/xpath/features/whitespace-pre-stripping"; 549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This attribute determines which node types are accepted. 579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @serial 589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected int m_whatToShow; 609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Special bitmap for match patterns starting with a function. 639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Make sure this does not conflict with {@link org.w3c.dom.traversal.NodeFilter}. 649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final int SHOW_BYFUNCTION = 0x00010000; 669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This attribute determines which node types are accepted. 699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * These constants are defined in the {@link org.w3c.dom.traversal.NodeFilter} 709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * interface. 719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return bitset mainly defined in {@link org.w3c.dom.traversal.NodeFilter}. 739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public int getWhatToShow() 759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_whatToShow; 779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This attribute determines which node types are accepted. 819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * These constants are defined in the {@link org.w3c.dom.traversal.NodeFilter} 829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * interface. 839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param what bitset mainly defined in {@link org.w3c.dom.traversal.NodeFilter}. 859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setWhatToShow(int what) 879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_whatToShow = what; 899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The namespace to be tested for, which may be null. 939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @serial 949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String m_namespace; 969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Return the namespace to be tested. 999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The namespace to be tested for, or {@link #WILD}, or null. 1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String getNamespace() 1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_namespace; 1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Set the namespace to be tested. 1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param ns The namespace to be tested for, or {@link #WILD}, or null. 1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setNamespace(String ns) 1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_namespace = ns; 1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The local name to be tested for. 1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @serial 1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected String m_name; 1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Return the local name to be tested. 1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the local name to be tested, or {@link #WILD}, or an empty string. 1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public String getLocalName() 1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (null == m_name) ? "" : m_name; 1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Set the local name to be tested. 1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name the local name to be tested, or {@link #WILD}, or an empty string. 1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setLocalName(String name) 1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_name = name; 1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Statically calculated score for this test. One of 1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * {@link #SCORE_NODETEST}, 1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * {@link #SCORE_NONE}, 1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * {@link #SCORE_NSWILD}, 1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * {@link #SCORE_QNAME}, or 1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * {@link #SCORE_OTHER}. 1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @serial 1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XNumber m_score; 1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The match score if the pattern consists of just a NodeTest. 1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see <a href="http://www.w3.org/TR/xslt#conflict">XSLT Specification - 5.5 Conflict Resolution for Template Rules</a> 1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final XNumber SCORE_NODETEST = 1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson new XNumber(XPath.MATCH_SCORE_NODETEST); 1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The match score if the pattern pattern has the form NCName:*. 1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see <a href="http://www.w3.org/TR/xslt#conflict">XSLT Specification - 5.5 Conflict Resolution for Template Rules</a> 1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final XNumber SCORE_NSWILD = 1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson new XNumber(XPath.MATCH_SCORE_NSWILD); 1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The match score if the pattern has the form 1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * of a QName optionally preceded by an @ character. 1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see <a href="http://www.w3.org/TR/xslt#conflict">XSLT Specification - 5.5 Conflict Resolution for Template Rules</a> 1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final XNumber SCORE_QNAME = 1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson new XNumber(XPath.MATCH_SCORE_QNAME); 1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The match score if the pattern consists of something 1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * other than just a NodeTest or just a qname. 1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see <a href="http://www.w3.org/TR/xslt#conflict">XSLT Specification - 5.5 Conflict Resolution for Template Rules</a> 1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final XNumber SCORE_OTHER = 1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson new XNumber(XPath.MATCH_SCORE_OTHER); 1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The match score if no match is made. 1869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see <a href="http://www.w3.org/TR/xslt#conflict">XSLT Specification - 5.5 Conflict Resolution for Template Rules</a> 1879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final XNumber SCORE_NONE = 1899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson new XNumber(XPath.MATCH_SCORE_NONE); 1909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Construct an NodeTest that tests for namespaces and node names. 1939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param whatToShow Bit set defined mainly by {@link org.w3c.dom.traversal.NodeFilter}. 1969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param namespace The namespace to be tested. 1979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name The local name to be tested. 1989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public NodeTest(int whatToShow, String namespace, String name) 2009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson initNodeTest(whatToShow, namespace, name); 2029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Construct an NodeTest that doesn't test for node names. 2069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param whatToShow Bit set defined mainly by {@link org.w3c.dom.traversal.NodeFilter}. 2099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public NodeTest(int whatToShow) 2119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson initNodeTest(whatToShow); 2139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see Expression#deepEquals(Expression) 2179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean deepEquals(Expression expr) 2199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(!isSameClass(expr)) 2219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 2229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson NodeTest nt = (NodeTest)expr; 2249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(null != nt.m_name) 2269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(null == m_name) 2289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 2299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if(!nt.m_name.equals(m_name)) 2309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 2319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if(null != m_name) 2339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 2349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(null != nt.m_namespace) 2369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(null == m_namespace) 2389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 2399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if(!nt.m_namespace.equals(m_namespace)) 2409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 2419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if(null != m_namespace) 2439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 2449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(m_whatToShow != nt.m_whatToShow) 2469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 2479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(m_isTotallyWild != nt.m_isTotallyWild) 2499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 2509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return true; 2529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Null argument constructor. 2569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public NodeTest(){} 2589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Initialize this node test by setting the whatToShow property, and 2619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * calculating the score that this test will return if a test succeeds. 2629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param whatToShow Bit set defined mainly by {@link org.w3c.dom.traversal.NodeFilter}. 2659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void initNodeTest(int whatToShow) 2679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_whatToShow = whatToShow; 2709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson calcScore(); 2729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Initialize this node test by setting the whatToShow property and the 2769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * namespace and local name, and 2779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * calculating the score that this test will return if a test succeeds. 2789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param whatToShow Bit set defined mainly by {@link org.w3c.dom.traversal.NodeFilter}. 2819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param namespace The namespace to be tested. 2829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name The local name to be tested. 2839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void initNodeTest(int whatToShow, String namespace, String name) 2859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_whatToShow = whatToShow; 2889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_namespace = namespace; 2899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_name = name; 2909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson calcScore(); 2929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * True if this test has a null namespace and a local name of {@link #WILD}. 2969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @serial 2979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private boolean m_isTotallyWild; 2999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the static score for this node test. 3029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return Should be one of the SCORE_XXX constants. 3039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XNumber getStaticScore() 3059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_score; 3079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Set the static score for this node test. 3119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param score Should be one of the SCORE_XXX constants. 3129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setStaticScore(XNumber score) 3149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_score = score; 3169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Static calc of match score. 3209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected void calcScore() 3229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ((m_namespace == null) && (m_name == null)) 3259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_score = SCORE_NODETEST; 3269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (((m_namespace == WILD) || (m_namespace == null)) 3279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson && (m_name == WILD)) 3289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_score = SCORE_NODETEST; 3299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if ((m_namespace != WILD) && (m_name == WILD)) 3309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_score = SCORE_NSWILD; 3319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 3329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_score = SCORE_QNAME; 3339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_isTotallyWild = (m_namespace == null && m_name == WILD); 3359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the score that this test will return if a test succeeds. 3399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the score that this test will return if a test succeeds. 3429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public double getDefaultScore() 3449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_score.num(); 3469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell what node type to test, if not DTMFilter.SHOW_ALL. 3509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param whatToShow Bit set defined mainly by 3529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * {@link org.apache.xml.dtm.DTMFilter}. 3539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the node type for the whatToShow. Since whatToShow can specify 3549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * multiple types, it will return the first bit tested that is on, 3559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * so the caller of this function should take care that this is 3569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the function they really want to call. If none of the known bits 3579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * are set, this function will return zero. 3589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static int getNodeTypeTest(int whatToShow) 3609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // %REVIEW% Is there a better way? 3629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_ELEMENT)) 3639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return DTM.ELEMENT_NODE; 3649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_ATTRIBUTE)) 3669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return DTM.ATTRIBUTE_NODE; 3679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_TEXT)) 3699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return DTM.TEXT_NODE; 3709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_DOCUMENT)) 3729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return DTM.DOCUMENT_NODE; 3739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_DOCUMENT_FRAGMENT)) 3759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return DTM.DOCUMENT_FRAGMENT_NODE; 3769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_NAMESPACE)) 3789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return DTM.NAMESPACE_NODE; 3799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_COMMENT)) 3819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return DTM.COMMENT_NODE; 3829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_PROCESSING_INSTRUCTION)) 3849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return DTM.PROCESSING_INSTRUCTION_NODE; 3859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_DOCUMENT_TYPE)) 3879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return DTM.DOCUMENT_TYPE_NODE; 3889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_ENTITY)) 3909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return DTM.ENTITY_NODE; 3919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_ENTITY_REFERENCE)) 3939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return DTM.ENTITY_REFERENCE_NODE; 3949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_NOTATION)) 3969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return DTM.NOTATION_NODE; 3979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_CDATA_SECTION)) 3999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return DTM.CDATA_SECTION_NODE; 4009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return 0; 4039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Do a diagnostics dump of a whatToShow bit set. 4089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param whatToShow Bit set defined mainly by 4119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * {@link org.apache.xml.dtm.DTMFilter}. 4129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static void debugWhatToShow(int whatToShow) 4149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson java.util.Vector v = new java.util.Vector(); 4179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_ATTRIBUTE)) 4199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson v.addElement("SHOW_ATTRIBUTE"); 4209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_NAMESPACE)) 4229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson v.addElement("SHOW_NAMESPACE"); 4239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_CDATA_SECTION)) 4259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson v.addElement("SHOW_CDATA_SECTION"); 4269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_COMMENT)) 4289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson v.addElement("SHOW_COMMENT"); 4299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_DOCUMENT)) 4319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson v.addElement("SHOW_DOCUMENT"); 4329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_DOCUMENT_FRAGMENT)) 4349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson v.addElement("SHOW_DOCUMENT_FRAGMENT"); 4359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_DOCUMENT_TYPE)) 4379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson v.addElement("SHOW_DOCUMENT_TYPE"); 4389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_ELEMENT)) 4409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson v.addElement("SHOW_ELEMENT"); 4419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_ENTITY)) 4439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson v.addElement("SHOW_ENTITY"); 4449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_ENTITY_REFERENCE)) 4469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson v.addElement("SHOW_ENTITY_REFERENCE"); 4479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_NOTATION)) 4499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson v.addElement("SHOW_NOTATION"); 4509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_PROCESSING_INSTRUCTION)) 4529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson v.addElement("SHOW_PROCESSING_INSTRUCTION"); 4539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 != (whatToShow & DTMFilter.SHOW_TEXT)) 4559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson v.addElement("SHOW_TEXT"); 4569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int n = v.size(); 4589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson for (int i = 0; i < n; i++) 4609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (i > 0) 4629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson System.out.print(" | "); 4639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson System.out.print(v.elementAt(i)); 4659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (0 == n) 4689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson System.out.print("empty whatToShow: " + whatToShow); 4699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson System.out.println(); 4719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Two names are equal if they and either both are null or 4759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the name t is wild and the name p is non-null, or the two 4769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * strings are equal. 4779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param p part string from the node. 4799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param t target string, which may be {@link #WILD}. 4809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if the strings match according to the rules of this method. 4829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private static final boolean subPartMatch(String p, String t) 4849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // boolean b = (p == t) || ((null != p) && ((t == WILD) || p.equals(t))); 4879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // System.out.println("subPartMatch - p: "+p+", t: "+t+", result: "+b); 4889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (p == t) || ((null != p) && ((t == WILD) || p.equals(t))); 4899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This is temporary to patch over Xerces issue with representing DOM 4939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * namespaces as "". 4949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param p part string from the node, which may represent the null namespace 4969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * as null or as "". 4979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param t target string, which may be {@link #WILD}. 4989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if the strings match according to the rules of this method. 5009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private static final boolean subPartMatchNS(String p, String t) 5029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (p == t) 5059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || ((null != p) 5069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson && ((p.length() > 0) 5079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ? ((t == WILD) || p.equals(t)) : null == t)); 5089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell what the test score is for the given node. 5129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param xctxt XPath runtime context. 5159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param context The node being tested. 5169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return {@link org.apache.xpath.patterns.NodeTest#SCORE_NODETEST}, 5189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * {@link org.apache.xpath.patterns.NodeTest#SCORE_NONE}, 5199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * {@link org.apache.xpath.patterns.NodeTest#SCORE_NSWILD}, 5209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * {@link org.apache.xpath.patterns.NodeTest#SCORE_QNAME}, or 5219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * {@link org.apache.xpath.patterns.NodeTest#SCORE_OTHER}. 5229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 5249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XObject execute(XPathContext xctxt, int context) 5269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws javax.xml.transform.TransformerException 5279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson DTM dtm = xctxt.getDTM(context); 5309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson short nodeType = dtm.getNodeType(context); 5319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_whatToShow == DTMFilter.SHOW_ALL) 5339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_score; 5349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int nodeBit = (m_whatToShow & (0x00000001 << (nodeType - 1))); 5369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson switch (nodeBit) 5389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case DTMFilter.SHOW_DOCUMENT_FRAGMENT : 5409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case DTMFilter.SHOW_DOCUMENT : 5419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return SCORE_OTHER; 5429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case DTMFilter.SHOW_COMMENT : 5439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_score; 5449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case DTMFilter.SHOW_CDATA_SECTION : 5459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case DTMFilter.SHOW_TEXT : 5469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // was: 5489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // return (!xctxt.getDOMHelper().shouldStripSourceNode(context)) 5499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // ? m_score : SCORE_NONE; 5509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_score; 5519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case DTMFilter.SHOW_PROCESSING_INSTRUCTION : 5529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return subPartMatch(dtm.getNodeName(context), m_name) 5539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ? m_score : SCORE_NONE; 5549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // From the draft: "Two expanded names are equal if they 5569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // have the same local part, and either both have no URI or 5579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // both have the same URI." 5589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // "A node test * is true for any node of the principal node type. 5599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // For example, child::* will select all element children of the 5609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // context node, and attribute::* will select all attributes of 5619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // the context node." 5629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // "A node test can have the form NCName:*. In this case, the prefix 5639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // is expanded in the same way as with a QName using the context 5649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // namespace declarations. The node test will be true for any node 5659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // of the principal type whose expanded name has the URI to which 5669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // the prefix expands, regardless of the local part of the name." 5679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case DTMFilter.SHOW_NAMESPACE : 5689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String ns = dtm.getLocalName(context); 5709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (subPartMatch(ns, m_name)) ? m_score : SCORE_NONE; 5729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case DTMFilter.SHOW_ATTRIBUTE : 5749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case DTMFilter.SHOW_ELEMENT : 5759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (m_isTotallyWild || (subPartMatchNS(dtm.getNamespaceURI(context), m_namespace) && subPartMatch(dtm.getLocalName(context), m_name))) 5779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ? m_score : SCORE_NONE; 5789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson default : 5809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return SCORE_NONE; 5819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } // end switch(testType) 5829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell what the test score is for the given node. 5869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param xctxt XPath runtime context. 5899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param context The node being tested. 5909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return {@link org.apache.xpath.patterns.NodeTest#SCORE_NODETEST}, 5929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * {@link org.apache.xpath.patterns.NodeTest#SCORE_NONE}, 5939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * {@link org.apache.xpath.patterns.NodeTest#SCORE_NSWILD}, 5949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * {@link org.apache.xpath.patterns.NodeTest#SCORE_QNAME}, or 5959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * {@link org.apache.xpath.patterns.NodeTest#SCORE_OTHER}. 5969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 5989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XObject execute(XPathContext xctxt, int context, 6009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson DTM dtm, int expType) 6019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws javax.xml.transform.TransformerException 6029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_whatToShow == DTMFilter.SHOW_ALL) 6059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_score; 6069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int nodeBit = (m_whatToShow & (0x00000001 6089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson << ((dtm.getNodeType(context)) - 1))); 6099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson switch (nodeBit) 6119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case DTMFilter.SHOW_DOCUMENT_FRAGMENT : 6139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case DTMFilter.SHOW_DOCUMENT : 6149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return SCORE_OTHER; 6159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case DTMFilter.SHOW_COMMENT : 6169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_score; 6179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case DTMFilter.SHOW_CDATA_SECTION : 6189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case DTMFilter.SHOW_TEXT : 6199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // was: 6219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // return (!xctxt.getDOMHelper().shouldStripSourceNode(context)) 6229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // ? m_score : SCORE_NONE; 6239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_score; 6249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case DTMFilter.SHOW_PROCESSING_INSTRUCTION : 6259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return subPartMatch(dtm.getNodeName(context), m_name) 6269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ? m_score : SCORE_NONE; 6279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // From the draft: "Two expanded names are equal if they 6299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // have the same local part, and either both have no URI or 6309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // both have the same URI." 6319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // "A node test * is true for any node of the principal node type. 6329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // For example, child::* will select all element children of the 6339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // context node, and attribute::* will select all attributes of 6349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // the context node." 6359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // "A node test can have the form NCName:*. In this case, the prefix 6369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // is expanded in the same way as with a QName using the context 6379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // namespace declarations. The node test will be true for any node 6389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // of the principal type whose expanded name has the URI to which 6399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // the prefix expands, regardless of the local part of the name." 6409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case DTMFilter.SHOW_NAMESPACE : 6419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String ns = dtm.getLocalName(context); 6439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (subPartMatch(ns, m_name)) ? m_score : SCORE_NONE; 6459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case DTMFilter.SHOW_ATTRIBUTE : 6479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case DTMFilter.SHOW_ELEMENT : 6489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (m_isTotallyWild || (subPartMatchNS(dtm.getNamespaceURI(context), m_namespace) && subPartMatch(dtm.getLocalName(context), m_name))) 6509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ? m_score : SCORE_NONE; 6519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson default : 6539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return SCORE_NONE; 6549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } // end switch(testType) 6559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Test the current node to see if it matches the given node test. 6599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param xctxt XPath runtime context. 6619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return {@link org.apache.xpath.patterns.NodeTest#SCORE_NODETEST}, 6639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * {@link org.apache.xpath.patterns.NodeTest#SCORE_NONE}, 6649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * {@link org.apache.xpath.patterns.NodeTest#SCORE_NSWILD}, 6659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * {@link org.apache.xpath.patterns.NodeTest#SCORE_QNAME}, or 6669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * {@link org.apache.xpath.patterns.NodeTest#SCORE_OTHER}. 6679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws javax.xml.transform.TransformerException 6699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XObject execute(XPathContext xctxt) 6719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws javax.xml.transform.TransformerException 6729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return execute(xctxt, xctxt.getCurrentNode()); 6749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Node tests by themselves do not need to fix up variables. 6789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void fixupVariables(java.util.Vector vars, int globalsSize) 6809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // no-op 6829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see org.apache.xpath.XPathVisitable#callVisitors(ExpressionOwner, XPathVisitor) 6869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void callVisitors(ExpressionOwner owner, XPathVisitor visitor) 6889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson assertion(false, "callVisitors should not be called for this object!!!"); 6909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 693