Coverage Report - org.jaxen.saxpath.Axis

Classes in this File Line Coverage Branch Coverage Complexity
Axis
72% 
100% 
18.667

 1  
 /*
 2  
  * $Header: /home/projects/jaxen/scm/jaxen/src/java/main/org/jaxen/saxpath/Axis.java,v 1.6 2005/06/28 13:44:46 elharo Exp $
 3  
  * $Revision: 1.6 $
 4  
  * $Date: 2005/06/28 13:44:46 $
 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.6 2005/06/28 13:44:46 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  0
     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 lookup(int axisNum)
 134  
     {
 135  78
         switch ( axisNum )
 136  
         {
 137  
             case CHILD:
 138  36
                 return "child";
 139  
 
 140  
             case DESCENDANT:
 141  0
                 return "descendant";
 142  
 
 143  
             case PARENT:
 144  0
                 return "parent";
 145  
 
 146  
             case ANCESTOR:
 147  0
                 return "ancestor";
 148  
 
 149  
             case FOLLOWING_SIBLING:
 150  0
                 return "following-sibling";
 151  
 
 152  
             case PRECEDING_SIBLING:
 153  0
                 return "preceding-sibling";
 154  
 
 155  
             case FOLLOWING:
 156  0
                 return "following";
 157  
 
 158  
             case PRECEDING:
 159  0
                 return "preceding";
 160  
 
 161  
             case ATTRIBUTE:
 162  0
                 return "attribute";
 163  
 
 164  
             case NAMESPACE:
 165  0
                 return "namespace";
 166  
 
 167  
             case SELF:
 168  0
                 return "self";
 169  
 
 170  
             case DESCENDANT_OR_SELF:
 171  36
                 return "descendant-or-self";
 172  
 
 173  
             case ANCESTOR_OR_SELF:
 174  0
                 return "ancestor-or-self";
 175  
         }
 176  
 
 177  6
         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 axisName)
 189  
     {
 190  2622
         if ( "child".equals( axisName ) )
 191  
         {
 192  336
             return CHILD;
 193  
         }
 194  
 
 195  2286
         if ( "descendant".equals( axisName ) )
 196  
         {
 197  534
             return DESCENDANT;
 198  
         }
 199  
 
 200  1752
         if ( "parent".equals( axisName ) )
 201  
         {
 202  222
             return PARENT;
 203  
         }
 204  
 
 205  1530
         if ( "ancestor".equals( axisName ) )
 206  
         {
 207  108
             return ANCESTOR;
 208  
         }
 209  
 
 210  1422
         if ( "following-sibling".equals( axisName ) )
 211  
         {
 212  54
             return FOLLOWING_SIBLING;
 213  
         }
 214  
 
 215  1368
         if ( "preceding-sibling".equals( axisName ) )
 216  
         {
 217  270
             return PRECEDING_SIBLING;
 218  
         }
 219  
 
 220  1098
         if ( "following".equals( axisName ) )
 221  
         {
 222  96
             return FOLLOWING;
 223  
         }
 224  
 
 225  1002
         if ( "preceding".equals( axisName ) )
 226  
         {
 227  222
             return PRECEDING;
 228  
         }
 229  
 
 230  780
         if ( "attribute".equals( axisName ) )
 231  
         {
 232  48
             return ATTRIBUTE;
 233  
         }
 234  
 
 235  732
         if ( "namespace".equals( axisName ) )
 236  
         {
 237  468
             return NAMESPACE;
 238  
         }
 239  
 
 240  264
         if ( "self".equals( axisName ) )
 241  
         {
 242  42
             return SELF;
 243  
         }
 244  
 
 245  222
         if ( "descendant-or-self".equals( axisName ) )
 246  
         {
 247  156
             return DESCENDANT_OR_SELF;
 248  
         }
 249  
 
 250  66
         if ( "ancestor-or-self".equals( axisName ) )
 251  
         {
 252  54
             return ANCESTOR_OR_SELF;
 253  
         }
 254  
 
 255  12
         return INVALID_AXIS;
 256  
     }
 257  
 }