001: package net.sf.saxon.pattern;
002:
003: import net.sf.saxon.expr.XPathContext;
004: import net.sf.saxon.om.NodeInfo;
005:
006: /**
007: * A NodeTestPattern is a pattern that consists simply of a NodeTest.
008: * @author Michael H. Kay
009: */
010:
011: public class NodeTestPattern extends Pattern {
012:
013: private NodeTest nodeTest;
014:
015: public NodeTestPattern() {
016: }
017:
018: public NodeTestPattern(NodeTest test) {
019: nodeTest = test;
020: }
021:
022: public void setNodeTest(NodeTest test) {
023: nodeTest = test;
024: }
025:
026: /**
027: * Determine whether this Pattern matches the given Node. This is the main external interface
028: * for matching patterns: it sets current() to the node being tested
029: * @param node The NodeInfo representing the Element or other node to be tested against the Pattern
030: * @param context The context in which the match is to take place. Only relevant if the pattern
031: * uses variables, or contains calls on functions such as document() or key(). Not used (and can be
032: * set to null) in the case of patterns that are NodeTests
033: * @return true if the node matches the Pattern, false otherwise
034: */
035:
036: public boolean matches(NodeInfo node, XPathContext context) {
037: return nodeTest.matches(node);
038: }
039:
040: /**
041: * Get a NodeTest that all the nodes matching this pattern must satisfy
042: */
043:
044: public NodeTest getNodeTest() {
045: return nodeTest;
046: }
047:
048: /**
049: * Determine the default priority of this node test when used on its own as a Pattern
050: */
051:
052: public final double getDefaultPriority() {
053: return nodeTest.getDefaultPriority();
054: }
055:
056: /**
057: * Determine the types of nodes to which this pattern applies. Used for optimisation.
058: * For patterns that match nodes of several types, return Type.NODE
059: *
060: * @return the type of node matched by this pattern. e.g. Type.ELEMENT or Type.TEXT
061: */
062:
063: public int getNodeKind() {
064: return nodeTest.getPrimitiveType();
065: }
066:
067: /**
068: * Determine the name fingerprint of nodes to which this pattern applies. Used for
069: * optimisation.
070: *
071: * @return A fingerprint that the nodes must match, or -1 if it can match multiple fingerprints
072: */
073:
074: public int getFingerprint() {
075: return nodeTest.getFingerprint();
076: }
077:
078: /**
079: * Display the pattern for diagnostics
080: */
081:
082: public String toString() {
083: return nodeTest.toString();
084: }
085:
086: }
087:
088: //
089: // The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License");
090: // you may not use this file except in compliance with the License. You may obtain a copy of the
091: // License at http://www.mozilla.org/MPL/
092: //
093: // Software distributed under the License is distributed on an "AS IS" basis,
094: // WITHOUT WARRANTY OF ANY KIND, either express or implied.
095: // See the License for the specific language governing rights and limitations under the License.
096: //
097: // The Original Code is: all this file.
098: //
099: // The Initial Developer of the Original Code is Michael H. Kay.
100: //
101: // Portions created by (your name) are Copyright (C) (your legal entity). All Rights Reserved.
102: //
103: // Contributor(s): none.
104: //
|