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 
isReverse(int axis)210   public static boolean isReverse(int axis){
211       return isReverse[axis];
212   }
213 
getNames(int index)214     public static String getNames(int index){
215         return names[index];
216     }
217 
getNamesLength()218     public static int getNamesLength(){
219         return names.length;
220     }
221 
222 }
223