jaxp/src/com/sun/org/apache/xml/internal/dtm/Axis.java
changeset 12457 c348e06f0e82
parent 6 7f561c08de6b
equal deleted inserted replaced
12324:1d7e6da6adc8 12457:c348e06f0e82
       
     1 /*
       
     2  * reserved comment block
       
     3  * DO NOT REMOVE OR ALTER!
       
     4  */
       
     5 /*
       
     6  * Copyright 1999-2004 The Apache Software Foundation.
       
     7  *
       
     8  * Licensed under the Apache License, Version 2.0 (the "License");
       
     9  * you may not use this file except in compliance with the License.
       
    10  * You may obtain a copy of the License at
       
    11  *
       
    12  *     http://www.apache.org/licenses/LICENSE-2.0
       
    13  *
       
    14  * Unless required by applicable law or agreed to in writing, software
       
    15  * distributed under the License is distributed on an "AS IS" BASIS,
       
    16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       
    17  * See the License for the specific language governing permissions and
       
    18  * limitations under the License.
       
    19  */
       
    20 /*
       
    21  * $Id: Axis.java,v 1.2.4.1 2005/09/15 08:14:51 suresh_emailid Exp $
       
    22  */
       
    23 package com.sun.org.apache.xml.internal.dtm;
       
    24 
       
    25 /**
       
    26  * Specifies values related to XPath Axes.
       
    27  * <p>The ancestor, descendant, following, preceding and self axes partition a
       
    28  * document (ignoring attribute and namespace nodes): they do not overlap
       
    29  * and together they contain all the nodes in the document.</p>
       
    30  *
       
    31  */
       
    32 public final class Axis
       
    33 {
       
    34 
       
    35   /**
       
    36    * The ancestor axis contains the ancestors of the context node;
       
    37    *  the ancestors of the context node consist of the parent of context
       
    38    *  node and the parent's parent and so on; thus, the ancestor axis will
       
    39    *  always include the root node, unless the context node is the root node.
       
    40    */
       
    41   public static final int ANCESTOR = 0;
       
    42 
       
    43   /**
       
    44    * the ancestor-or-self axis contains the context node and the ancestors of
       
    45    *  the context node; thus, the ancestor axis will always include the
       
    46    *  root node.
       
    47    */
       
    48   public static final int ANCESTORORSELF = 1;
       
    49 
       
    50   /**
       
    51    * the attribute axis contains the attributes of the context node; the axis
       
    52    *  will be empty unless the context node is an element.
       
    53    */
       
    54   public static final int ATTRIBUTE = 2;
       
    55 
       
    56   /** The child axis contains the children of the context node. */
       
    57   public static final int CHILD = 3;
       
    58 
       
    59   /**
       
    60    * The descendant axis contains the descendants of the context node;
       
    61    *  a descendant is a child or a child of a child and so on; thus the
       
    62    *  descendant axis never contains attribute or namespace nodes.
       
    63    */
       
    64   public static final int DESCENDANT = 4;
       
    65 
       
    66   /**
       
    67    * The descendant-or-self axis contains the context node and the
       
    68    *  descendants of the context node.
       
    69    */
       
    70   public static final int DESCENDANTORSELF = 5;
       
    71 
       
    72   /**
       
    73    * the following axis contains all nodes in the same document as the
       
    74    *  context node that are after the context node in document order, excluding
       
    75    *  any descendants and excluding attribute nodes and namespace nodes.
       
    76    */
       
    77   public static final int FOLLOWING = 6;
       
    78 
       
    79   /**
       
    80    * The following-sibling axis contains all the following siblings of the
       
    81    *  context node; if the context node is an attribute node or namespace node,
       
    82    *  the following-sibling axis is empty.
       
    83    */
       
    84   public static final int FOLLOWINGSIBLING = 7;
       
    85 
       
    86   /**
       
    87    * The namespace axis contains the namespace nodes of the context node; the
       
    88    *  axis will be empty unless the context node is an element.
       
    89    */
       
    90   public static final int NAMESPACEDECLS = 8;
       
    91 
       
    92   /**
       
    93    * The namespace axis contains the namespace nodes of the context node; the
       
    94    *  axis will be empty unless the context node is an element.
       
    95    */
       
    96   public static final int NAMESPACE = 9;
       
    97 
       
    98   /**
       
    99    * The parent axis contains the parent of the context node,
       
   100    *  if there is one.
       
   101    */
       
   102   public static final int PARENT = 10;
       
   103 
       
   104   /**
       
   105    * The preceding axis contains all nodes in the same document as the context
       
   106    *  node that are before the context node in document order, excluding any
       
   107    *  ancestors and excluding attribute nodes and namespace nodes
       
   108    */
       
   109   public static final int PRECEDING = 11;
       
   110 
       
   111   /**
       
   112    * The preceding-sibling axis contains all the preceding siblings of the
       
   113    *  context node; if the context node is an attribute node or namespace node,
       
   114    *  the preceding-sibling axis is empty.
       
   115    */
       
   116   public static final int PRECEDINGSIBLING = 12;
       
   117 
       
   118   /** The self axis contains just the context node itself. */
       
   119   public static final int SELF = 13;
       
   120 
       
   121   /**
       
   122    * A non-xpath axis, traversing the subtree including the subtree
       
   123    *  root, descendants, attributes, and namespace node decls.
       
   124    */
       
   125   public static final int ALLFROMNODE = 14;
       
   126 
       
   127   /**
       
   128    * A non-xpath axis, traversing the the preceding and the ancestor nodes,
       
   129    * needed for inverseing select patterns to match patterns.
       
   130    */
       
   131   public static final int PRECEDINGANDANCESTOR = 15;
       
   132 
       
   133   // ===========================================
       
   134   // All axis past this are absolute.
       
   135 
       
   136   /**
       
   137    * A non-xpath axis, returns all nodes in the tree from and including the
       
   138    * root.
       
   139    */
       
   140   public static final int ALL = 16;
       
   141 
       
   142   /**
       
   143    * A non-xpath axis, returns all nodes that aren't namespaces or attributes,
       
   144    * from and including the root.
       
   145    */
       
   146   public static final int DESCENDANTSFROMROOT = 17;
       
   147 
       
   148   /**
       
   149    * A non-xpath axis, returns all nodes that aren't namespaces or attributes,
       
   150    * from and including the root.
       
   151    */
       
   152   public static final int DESCENDANTSORSELFFROMROOT = 18;
       
   153 
       
   154   /**
       
   155    * A non-xpath axis, returns root only.
       
   156    */
       
   157   public static final int ROOT = 19;
       
   158 
       
   159   /**
       
   160    * A non-xpath axis, for functions.
       
   161    */
       
   162   public static final int FILTEREDLIST = 20;
       
   163 
       
   164   /**
       
   165    * A table to identify whether an axis is a reverse axis;
       
   166    */
       
   167   private static final boolean[] isReverse = {
       
   168       true,  // ancestor
       
   169       true,  // ancestor-or-self
       
   170       false, // attribute
       
   171       false, // child
       
   172       false, // descendant
       
   173       false, // descendant-or-self
       
   174       false, // following
       
   175       false, // following-sibling
       
   176       false, // namespace
       
   177       false, // namespace-declarations
       
   178       false, // parent (one node, has no order)
       
   179       true,  // preceding
       
   180       true,  // preceding-sibling
       
   181       false  // self (one node, has no order)
       
   182   };
       
   183 
       
   184     /** The names of the axes for diagnostic purposes. */
       
   185     private static final String[] names =
       
   186     {
       
   187       "ancestor",  // 0
       
   188       "ancestor-or-self",  // 1
       
   189       "attribute",  // 2
       
   190       "child",  // 3
       
   191       "descendant",  // 4
       
   192       "descendant-or-self",  // 5
       
   193       "following",  // 6
       
   194       "following-sibling",  // 7
       
   195       "namespace-decls",  // 8
       
   196       "namespace",  // 9
       
   197       "parent",  // 10
       
   198       "preceding",  // 11
       
   199       "preceding-sibling",  // 12
       
   200       "self",  // 13
       
   201       "all-from-node",  // 14
       
   202       "preceding-and-ancestor",  // 15
       
   203       "all",  // 16
       
   204       "descendants-from-root",  // 17
       
   205       "descendants-or-self-from-root",  // 18
       
   206       "root",  // 19
       
   207       "filtered-list"  // 20
       
   208     };
       
   209 
       
   210   public static boolean isReverse(int axis){
       
   211       return isReverse[axis];
       
   212   }
       
   213 
       
   214     public static String getNames(int index){
       
   215         return names[index];
       
   216     }
       
   217 
       
   218     public static int getNamesLength(){
       
   219         return names.length;
       
   220     }
       
   221 
       
   222 }