KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jaxen > saxpath > Axis


1 /*
2  * $Header: /home/projects/jaxen/scm/jaxen/src/java/main/org/jaxen/saxpath/Axis.java,v 1.5 2005/06/14 14:55:30 elharo Exp $
3  * $Revision: 1.5 $
4  * $Date: 2005/06/14 14:55:30 $
5  *
6  * ====================================================================
7  *
8  * Copyright (C) 2000-2002 bob mcwhirter & James Strachan.
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  *
15  * 1. Redistributions of source code must retain the above copyright
16  * notice, this list of conditions, and the following disclaimer.
17  *
18  * 2. Redistributions in binary form must reproduce the above copyright
19  * notice, this list of conditions, and the disclaimer that follows
20  * these conditions in the documentation and/or other materials
21  * provided with the distribution.
22  *
23  * 3. The name "Jaxen" must not be used to endorse or promote products
24  * derived from this software without prior written permission. For
25  * written permission, please contact license@jaxen.org.
26  *
27  * 4. Products derived from this software may not be called "Jaxen", nor
28  * may "Jaxen" appear in their name, without prior written permission
29  * from the Jaxen Project Management (pm@jaxen.org).
30  *
31  * In addition, we request (but do not require) that you include in the
32  * end-user documentation provided with the redistribution and/or in the
33  * software itself an acknowledgement equivalent to the following:
34  * "This product includes software developed by the
35  * Jaxen Project (http://www.jaxen.org/)."
36  * Alternatively, the acknowledgment may be graphical using the logos
37  * available at http://www.jaxen.org/
38  *
39  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
40  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
41  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
42  * DISCLAIMED. IN NO EVENT SHALL THE Jaxen AUTHORS OR THE PROJECT
43  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
45  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
46  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
47  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
48  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
49  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50  * SUCH DAMAGE.
51  *
52  * ====================================================================
53  * This software consists of voluntary contributions made by many
54  * individuals on behalf of the Jaxen Project and was originally
55  * created by bob mcwhirter <bob@werken.com> and
56  * James Strachan <jstrachan@apache.org>. For more information on the
57  * Jaxen Project, please see <http://www.jaxen.org/>.
58  *
59  * $Id: Axis.java,v 1.5 2005/06/14 14:55:30 elharo Exp $
60  */

61
62
63
64 package org.jaxen.saxpath;
65
66 import org.jaxen.JaxenRuntimeException;
67
68
69
70 /**
71  *
72  * Internal SAXPath class that contains constants representing
73  * XPath operators to avoid a lot of string comparisons.
74  */

75 public class Axis
76 {
77     
78     private Axis() {}
79     
80     // XXX Ultimately these should use the type-safe enum pattern instead
81
/** Marker for an invalid axis */
82     public final static int INVALID_AXIS = 0;
83
84     /** The <code>child</code> axis */
85     public final static int CHILD = 1;
86
87     /** The <code>descendant</code> axis */
88     public final static int DESCENDANT = 2;
89
90     /** The <code>parent</code> axis */
91     public final static int PARENT = 3;
92
93     /** The <code>ancestor</code> axis */
94     public final static int ANCESTOR = 4;
95
96     /** The <code>following-sibling</code> axis */
97     public final static int FOLLOWING_SIBLING = 5;
98
99     /** The <code>preceding-sibling</code> axis */
100     public final static int PRECEDING_SIBLING = 6;
101
102     /** The <code>following</code> axis */
103     public final static int FOLLOWING = 7;
104
105     /** The <code>preceding</code> axis */
106     public final static int PRECEDING = 8;
107
108     /** The <code>attribute</code> axis */
109     public final static int ATTRIBUTE = 9;
110
111     /** The <code>namespace</code> axis */
112     public final static int NAMESPACE = 10;
113
114     /** The <code>self</code> axis */
115     public final static int SELF = 11;
116
117     /** The <code>descendant-or-self</code> axis */
118     public final static int DESCENDANT_OR_SELF = 12;
119
120     /** The <code>ancestor-or-self</code> axis */
121     public final static int ANCESTOR_OR_SELF = 13;
122
123     /**
124      * <p>
125      * Returns the name of the axis.
126      * </p>
127      *
128      * @param axisNum the axis code
129      * @return the name of the axis such as might be used in an XPath expression
130      * @throws JaxenRuntimeException if the number does not represent one of the 13
131      * XPath axes
132      */

133     public static String JavaDoc lookup(int axisNum)
134     {
135         switch ( axisNum )
136         {
137             case CHILD:
138                 return "child";
139
140             case DESCENDANT:
141                 return "descendant";
142
143             case PARENT:
144                 return "parent";
145
146             case ANCESTOR:
147                 return "ancestor";
148
149             case FOLLOWING_SIBLING:
150                 return "following-sibling";
151
152             case PRECEDING_SIBLING:
153                 return "preceding-sibling";
154
155             case FOLLOWING:
156                 return "following";
157
158             case PRECEDING:
159                 return "preceding";
160
161             case ATTRIBUTE:
162                 return "attribute";
163
164             case NAMESPACE:
165                 return "namespace";
166
167             case SELF:
168                 return "self";
169
170             case DESCENDANT_OR_SELF:
171                 return "descendant-or-self";
172
173             case ANCESTOR_OR_SELF:
174                 return "ancestor-or-self";
175         }
176
177         throw new JaxenRuntimeException("Illegal Axis Number");
178     }
179
180     /**
181      * <p>
182      * Returns the code for an axis given its name.
183      * </p>
184      *
185      * @param axisName the name of the axis: child, parent, descendant, descendant-or-self, etc.
186      * @return the axis code
187      */

188     public static int lookup(String JavaDoc axisName)
189     {
190         if ( "child".equals( axisName ) )
191         {
192             return CHILD;
193         }
194
195         if ( "descendant".equals( axisName ) )
196         {
197             return DESCENDANT;
198         }
199
200         if ( "parent".equals( axisName ) )
201         {
202             return PARENT;
203         }
204
205         if ( "ancestor".equals( axisName ) )
206         {
207             return ANCESTOR;
208         }
209
210         if ( "following-sibling".equals( axisName ) )
211         {
212             return FOLLOWING_SIBLING;
213         }
214
215         if ( "preceding-sibling".equals( axisName ) )
216         {
217             return PRECEDING_SIBLING;
218         }
219
220         if ( "following".equals( axisName ) )
221         {
222             return FOLLOWING;
223         }
224
225         if ( "preceding".equals( axisName ) )
226         {
227             return PRECEDING;
228         }
229
230         if ( "attribute".equals( axisName ) )
231         {
232             return ATTRIBUTE;
233         }
234
235         if ( "namespace".equals( axisName ) )
236         {
237             return NAMESPACE;
238         }
239
240         if ( "self".equals( axisName ) )
241         {
242             return SELF;
243         }
244
245         if ( "descendant-or-self".equals( axisName ) )
246         {
247             return DESCENDANT_OR_SELF;
248         }
249
250         if ( "ancestor-or-self".equals( axisName ) )
251         {
252             return ANCESTOR_OR_SELF;
253         }
254
255         return INVALID_AXIS;
256     }
257 }
258
Popular Tags