blob: 5efd4b8edf74c4dd802f28deafa11f6e3f271677 [file] [log] [blame]
/*
* The Apache Software License, Version 1.1
*
*
* Copyright (c) 1999 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Xalan" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation and was
* originally based on software copyright (c) 1999, Lotus
* Development Corporation., http://www.lotus.com. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.xml.dtm;
/**
* Simple filter for doing node tests. Note the semantics of this are
* somewhat different that the DOM's NodeFilter.
*/
public interface DTMFilter
{
// Constants for whatToShow. These are used to set the node type that will
// be traversed. These values may be ORed together before being passed to
// the DTMIterator.
/**
* Show all <code>Nodes</code>.
*/
public static final int SHOW_ALL = 0xFFFFFFFF;
/**
* Show <code>Element</code> nodes.
*/
public static final int SHOW_ELEMENT = 0x00000001;
/**
* Show <code>Attr</code> nodes. This is meaningful only when creating an
* iterator or tree-walker with an attribute node as its
* <code>root</code>; in this case, it means that the attribute node
* will appear in the first position of the iteration or traversal.
* Since attributes are never children of other nodes, they do not
* appear when traversing over the main document tree.
*/
public static final int SHOW_ATTRIBUTE = 0x00000002;
/**
* Show <code>Text</code> nodes.
*/
public static final int SHOW_TEXT = 0x00000004;
/**
* Show <code>CDATASection</code> nodes.
*/
public static final int SHOW_CDATA_SECTION = 0x00000008;
/**
* Show <code>EntityReference</code> nodes. Note that if Entity References
* have been fully expanded while the tree was being constructed, these
* nodes will not appear and this mask has no effect.
*/
public static final int SHOW_ENTITY_REFERENCE = 0x00000010;
/**
* Show <code>Entity</code> nodes. This is meaningful only when creating
* an iterator or tree-walker with an<code> Entity</code> node as its
* <code>root</code>; in this case, it means that the <code>Entity</code>
* node will appear in the first position of the traversal. Since
* entities are not part of the document tree, they do not appear when
* traversing over the main document tree.
*/
public static final int SHOW_ENTITY = 0x00000020;
/**
* Show <code>ProcessingInstruction</code> nodes.
*/
public static final int SHOW_PROCESSING_INSTRUCTION = 0x00000040;
/**
* Show <code>Comment</code> nodes.
*/
public static final int SHOW_COMMENT = 0x00000080;
/**
* Show <code>Document</code> nodes. (Of course, as with Attributes
* and such, this is meaningful only when the iteration root is the
* Document itself, since Document has no parent.)
*/
public static final int SHOW_DOCUMENT = 0x00000100;
/**
* Show <code>DocumentType</code> nodes.
*/
public static final int SHOW_DOCUMENT_TYPE = 0x00000200;
/**
* Show <code>DocumentFragment</code> nodes. (Of course, as with
* Attributes and such, this is meaningful only when the iteration
* root is the Document itself, since DocumentFragment has no parent.)
*/
public static final int SHOW_DOCUMENT_FRAGMENT = 0x00000400;
/**
* Show <code>Notation</code> nodes. This is meaningful only when creating
* an iterator or tree-walker with a <code>Notation</code> node as its
* <code>root</code>; in this case, it means that the
* <code>Notation</code> node will appear in the first position of the
* traversal. Since notations are not part of the document tree, they do
* not appear when traversing over the main document tree.
*/
public static final int SHOW_NOTATION = 0x00000800;
/**
* This bit instructs the iterator to show namespace nodes, which
* are modeled by DTM but not by the DOM. Make sure this does not
* conflict with {@link org.w3c.dom.traversal.NodeFilter}.
* <p>
* %REVIEW% Might be safer to start from higher bits and work down,
* to leave room for the DOM to expand its set of constants... Or,
* possibly, to create a DTM-specific field for these additional bits.
*/
public static final int SHOW_NAMESPACE = 0x00001000;
/**
* Special bit for filters implementing match patterns starting with
* a function. Make sure this does not conflict with
* {@link org.w3c.dom.traversal.NodeFilter}.
* <p>
* %REVIEW% Might be safer to start from higher bits and work down,
* to leave room for the DOM to expand its set of constants... Or,
* possibly, to create a DTM-specific field for these additional bits.
*/
public static final int SHOW_BYFUNCTION = 0x00010000;
/**
* Test whether a specified node is visible in the logical view of a
* <code>DTMIterator</code>. Normally, this function
* will be called by the implementation of <code>DTMIterator</code>;
* it is not normally called directly from
* user code.
*
* @param nodeHandle int Handle of the node.
* @param whatToShow one of SHOW_XXX values.
* @return one of FILTER_ACCEPT, FILTER_REJECT, or FILTER_SKIP.
*/
public short acceptNode(int nodeHandle, int whatToShow);
/**
* Test whether a specified node is visible in the logical view of a
* <code>DTMIterator</code>. Normally, this function
* will be called by the implementation of <code>DTMIterator</code>;
* it is not normally called directly from
* user code.
* <p>
* TODO: Should this be setNameMatch(expandedName) followed by accept()?
* Or will we really be testing a different name at every invocation?
*
* <p>%REVIEW% Under what circumstances will this be used? The cases
* I've considered are just as easy and just about as efficient if
* the name test is performed in the DTMIterator... -- Joe</p>
*
* <p>%REVIEW% Should that 0xFFFF have a mnemonic assigned to it?
* Also: This representation is assuming the expanded name is indeed
* split into high/low 16-bit halfwords. If we ever change the
* balance between namespace and localname bits (eg because we
* decide there are many more localnames than namespaces, which is
* fairly likely), this is going to break. It might be safer to
* encapsulate the details with a makeExpandedName method and make
* that responsible for setting up the wildcard version as well.</p>
*
* @param nodeHandle int Handle of the node.
* @param whatToShow one of SHOW_XXX values.
* @param expandedName a value defining the exanded name as defined in
* the DTM interface. Wild cards will be defined
* by 0xFFFF in the namespace and/or localname
* portion of the expandedName.
* @return one of FILTER_ACCEPT, FILTER_REJECT, or FILTER_SKIP. */
public short acceptNode(int nodeHandle, int whatToShow, int expandedName);
}