Coverage Report - org.jaxen.saxpath.XPathSyntaxException
 
Classes in this File Line Coverage Branch Coverage Complexity
XPathSyntaxException
33%
7/21
0%
0/1
1.167
 
 1  
 /*
 2  
  * $Header: /home/projects/jaxen/scm/jaxen/src/java/main/org/jaxen/saxpath/XPathSyntaxException.java,v 1.10 2006/06/03 20:29:30 elharo Exp $
 3  
  * $Revision: 1.10 $
 4  
  * $Date: 2006/06/03 20:29:30 $
 5  
  *
 6  
  * ====================================================================
 7  
  *
 8  
  * Copyright 2000-2002 bob mcwhirter & James Strachan.
 9  
  * All rights reserved.
 10  
  *
 11  
  *
 12  
  * Redistribution and use in source and binary forms, with or without
 13  
  * modification, are permitted provided that the following conditions are
 14  
  * met:
 15  
  * 
 16  
  *   * Redistributions of source code must retain the above copyright
 17  
  *     notice, this list of conditions and the following disclaimer.
 18  
  * 
 19  
  *   * Redistributions in binary form must reproduce the above copyright
 20  
  *     notice, this list of conditions and the following disclaimer in the
 21  
  *     documentation and/or other materials provided with the distribution.
 22  
  * 
 23  
  *   * Neither the name of the Jaxen Project nor the names of its
 24  
  *     contributors may be used to endorse or promote products derived 
 25  
  *     from this software without specific prior written permission.
 26  
  * 
 27  
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 28  
  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 29  
  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
 30  
  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
 31  
  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 32  
  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 33  
  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 34  
  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 35  
  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 36  
  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 37  
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 38  
  *
 39  
  * ====================================================================
 40  
  * This software consists of voluntary contributions made by many
 41  
  * individuals on behalf of the Jaxen Project and was originally
 42  
  * created by bob mcwhirter <bob@werken.com> and
 43  
  * James Strachan <jstrachan@apache.org>.  For more information on the
 44  
  * Jaxen Project, please see <http://www.jaxen.org/>.
 45  
  *
 46  
  * $Id: XPathSyntaxException.java,v 1.10 2006/06/03 20:29:30 elharo Exp $
 47  
  */
 48  
 
 49  
 package org.jaxen.saxpath;
 50  
 
 51  
 
 52  
 /**
 53  
  * Represents a syntax error in an XPath expression.
 54  
  * This is a compile-time error that is detectable irrespective of 
 55  
  * the context in which the XPath expression is evaluated.
 56  
  */
 57  
 public class XPathSyntaxException extends SAXPathException
 58  
 {
 59  
     /**
 60  
      * 
 61  
      */
 62  
     private static final long serialVersionUID = 3567675610742422397L;
 63  
     private String xpath;
 64  
     private int    position;
 65  16
     private final static String lineSeparator = System.getProperty("line.separator");
 66  
 
 67  
     /**
 68  
      * Creates a new XPathSyntaxException.
 69  
      * 
 70  
      * @param xpath the incorrect XPath expression 
 71  
      * @param position the index of the character at which the syntax error was detected
 72  
      * @param message the detail message
 73  
      */
 74  
     public XPathSyntaxException(String xpath,
 75  
                                 int position,
 76  
                                 String message)
 77  
     {
 78  112
         super( message );
 79  112
         this.position = position;
 80  112
         this.xpath    = xpath;
 81  112
     }
 82  
 
 83  
     /**
 84  
      * <p>
 85  
      * Returns the index of the character at which the syntax error was detected
 86  
      * in the XPath expression.
 87  
      * </p>
 88  
      * 
 89  
      * @return the character index in the XPath expression  
 90  
      *     at which the syntax error was detected
 91  
      */
 92  
     public int getPosition()
 93  
     {
 94  80
         return this.position;
 95  
     }
 96  
 
 97  
     /**
 98  
      * <p>
 99  
      * Returns the syntactically incorrect XPath expression.
 100  
      * </p>
 101  
      * 
 102  
      * @return the syntactically incorrect XPath expression
 103  
      */
 104  
     public String getXPath()
 105  
     {
 106  80
         return this.xpath;
 107  
     }
 108  
 
 109  
     public String toString()
 110  
     {
 111  0
         return getClass() + ": " + getXPath() + ": " + getPosition() + ": " + getMessage();
 112  
     }
 113  
 
 114  
     /**
 115  
      * <p>
 116  
      * Returns a string in the form <code>"   ^"</code> which, when placed on the line
 117  
      * below the XPath expression in a monospaced font, should point to the
 118  
      * location of the error.
 119  
      * </p>
 120  
      * 
 121  
      * @return the position marker 
 122  
      */
 123  
     private String getPositionMarker()
 124  
     {
 125  0
         int pos = getPosition();
 126  0
         StringBuffer buf = new StringBuffer(pos+1);
 127  0
         for ( int i = 0 ; i < pos ; ++i )
 128  
         {
 129  0
             buf.append(" ");
 130  
         }
 131  
 
 132  0
         buf.append("^");
 133  
 
 134  0
         return buf.toString();
 135  
         
 136  
     }
 137  
 
 138  
     /**
 139  
      * <p>
 140  
      * Returns a long formatted description of the error,
 141  
      * including line breaks.
 142  
      * </p>
 143  
      * 
 144  
      * @return a longer description of the error on multiple lines
 145  
      */
 146  
     public String getMultilineMessage()
 147  
     {
 148  0
         StringBuffer buf = new StringBuffer();
 149  
 
 150  0
         buf.append( getMessage() );
 151  0
         buf.append( lineSeparator );
 152  0
         buf.append( getXPath() );
 153  0
         buf.append( lineSeparator );
 154  
 
 155  0
         buf.append( getPositionMarker() );
 156  
 
 157  0
         return buf.toString();
 158  
     }
 159  
 
 160  
 }