View Javadoc

1   /*
2    * $Header: /home/projects/jaxen/scm/jaxen/src/java/main/org/jaxen/saxpath/Axis.java,v 1.3 2005/04/09 13:51:32 elharo Exp $
3    * $Revision: 1.3 $
4    * $Date: 2005/04/09 13:51:32 $
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.3 2005/04/09 13:51:32 elharo Exp $
60   */
61  
62  
63  
64  package org.jaxen.saxpath;
65  
66  import org.jaxen.JaxenRuntimeException;
67  
68  
69  
70  public class Axis
71  {
72      
73      // XXX Ultimately these should use the type-safe enum pattern instead
74      /*** Marker for an invalid axis */
75      public final static int INVALID_AXIS       =  0;
76  
77      /*** The <code>child</code> axis */
78      public final static int CHILD              =  1;
79  
80      /*** The <code>descendant</code> axis */
81      public final static int DESCENDANT         =  2;
82  
83      /*** The <code>parent</code> axis */
84      public final static int PARENT             =  3;
85  
86      /*** The <code>ancestor</code> axis */
87      public final static int ANCESTOR           =  4;
88  
89      /*** The <code>following-sibling</code> axis */
90      public final static int FOLLOWING_SIBLING  =  5;
91  
92      /*** The <code>preceding-sibling</code> axis */
93      public final static int PRECEDING_SIBLING  =  6;
94  
95      /*** The <code>following</code> axis */
96      public final static int FOLLOWING          =  7;
97  
98      /*** The <code>preceding</code> axis */
99      public final static int PRECEDING          =  8;
100 
101     /*** The <code>attribute</code> axis */
102     public final static int ATTRIBUTE          =  9;
103 
104     /*** The <code>namespace</code> axis */
105     public final static int NAMESPACE          = 10;
106 
107     /*** The <code>self</code> axis */
108     public final static int SELF               = 11;
109 
110     /*** The <code>descendant-or-self</code> axis */
111     public final static int DESCENDANT_OR_SELF = 12;
112 
113     /*** The <code>ancestor-or-self</code> axis */
114     public final static int ANCESTOR_OR_SELF   = 13;
115 
116     public static String lookup(int axisNum)
117     {
118         switch ( axisNum )
119         {
120             case CHILD:
121                 return "child";
122 
123             case DESCENDANT:
124                 return "descendant";
125 
126             case PARENT:
127                 return "parent";
128 
129             case ANCESTOR:
130                 return "ancestor";
131 
132             case FOLLOWING_SIBLING:
133                 return "following-sibling";
134 
135             case PRECEDING_SIBLING:
136                 return "preceding-sibling";
137 
138             case FOLLOWING:
139                 return "following";
140 
141             case PRECEDING:
142                 return "preceding";
143 
144             case ATTRIBUTE:
145                 return "attribute";
146 
147             case NAMESPACE:
148                 return "namespace";
149 
150             case SELF:
151                 return "self";
152 
153             case DESCENDANT_OR_SELF:
154                 return "descendant-or-self";
155 
156             case ANCESTOR_OR_SELF:
157                 return "ancestor-or-self";
158         }
159 
160         throw new JaxenRuntimeException("Illegal Axis Number");
161     }
162 
163     public static int lookup(String axisName)
164     {
165         if ( "child".equals( axisName ) )
166         {
167             return CHILD;
168         }
169 
170         if ( "descendant".equals( axisName ) )
171         {
172             return DESCENDANT;
173         }
174 
175         if ( "parent".equals( axisName ) )
176         {
177             return PARENT;
178         }
179 
180         if ( "ancestor".equals( axisName ) )
181         {
182             return ANCESTOR;
183         }
184 
185         if ( "following-sibling".equals( axisName ) )
186         {
187             return FOLLOWING_SIBLING;
188         }
189 
190         if ( "preceding-sibling".equals( axisName ) )
191         {
192             return PRECEDING_SIBLING;
193         }
194 
195         if ( "following".equals( axisName ) )
196         {
197             return FOLLOWING;
198         }
199 
200         if ( "preceding".equals( axisName ) )
201         {
202             return PRECEDING;
203         }
204 
205         if ( "attribute".equals( axisName ) )
206         {
207             return ATTRIBUTE;
208         }
209 
210         if ( "namespace".equals( axisName ) )
211         {
212             return NAMESPACE;
213         }
214 
215         if ( "self".equals( axisName ) )
216         {
217             return SELF;
218         }
219 
220         if ( "descendant-or-self".equals( axisName ) )
221         {
222             return DESCENDANT_OR_SELF;
223         }
224 
225         if ( "ancestor-or-self".equals( axisName ) )
226         {
227             return ANCESTOR_OR_SELF;
228         }
229 
230         return INVALID_AXIS;
231     }
232 }