View Javadoc

    1   /*
    2    * $Header: /home/projects/jaxen/scm/jaxen/src/java/main/org/jaxen/saxpath/XPathSyntaxException.java,v 1.8 2005/09/24 19:35:48 elharo Exp $
    3    * $Revision: 1.8 $
    4    * $Date: 2005/09/24 19:35:48 $
    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: XPathSyntaxException.java,v 1.8 2005/09/24 19:35:48 elharo Exp $
    60   */
    61
    62  package org.jaxen.saxpath;
    63
    64
    65  /***
    66   * Represents a syntax error in an XPath expression.
    67   * This is a compile-time error that is detectable irrespective of
    68   * the context in which the XPath expression is evaluated.
    69   */
    70  public class XPathSyntaxException extends SAXPathException
    71  {
    72      private String xpath;
    73      private int    position;
    74      private final static String lineSeparator = System.getProperty("line.separator");
    75
    76      /***
    77       * Creates a new XPathSyntaxException.
    78       *
    79       * @param xpath the incorrect XPath expression
    80       * @param position the index of the character at which the syntax error was detected
    81       * @param message the detail message
    82       */
    83      public XPathSyntaxException(String xpath,
    84                                  int position,
    85                                  String message)
    86      {
    87          super( message );
    88          this.position = position;
    89          this.xpath    = xpath;
    90      }
    91
    92      /***
    93       * <p>
    94       * Returns the index of the character at which the syntax error was detected
    95       * in the XPath expression.
    96       * </p>
    97       *
    98       * @return the character index in the XPath expression
    99       *     at which the syntax error was detected
    100      */
    101     public int getPosition()
    102     {
    103         return this.position;
    104     }
    105
    106     /***
    107      * <p>
    108      * Returns the syntactically incorrect XPath expression.
    109      * </p>
    110      *
    111      * @return the syntactically incorrect XPath expression
    112      */
    113     public String getXPath()
    114     {
    115         return this.xpath;
    116     }
    117
    118     public String toString()
    119     {
    120         return getClass() + ": " + getXPath() + ": " + getPosition() + ": " + getMessage();
    121     }
    122
    123     /***
    124      * <p>
    125      * Returns a string in the form <code>"   ^"</code> which, when placed on the line
    126      * below the XPath expression in a monospaced font, should point to the
    127      * location of the error.
    128      * </p>
    129      *
    130      * @return the position marker
    131      */
    132     private String getPositionMarker()
    133     {
    134         int pos = getPosition();
    135         StringBuffer buf = new StringBuffer(pos+1);
    136         for ( int i = 0 ; i < pos ; ++i )
    137         {
    138             buf.append(" ");
    139         }
    140
    141         buf.append("^");
    142
    143         return buf.toString();
    144
    145     }
    146
    147     /***
    148      * <p>
    149      * Returns a long formatted description of the error,
    150      * including line breaks.
    151      * </p>
    152      *
    153      * @return a longer description of the error on multiple lines
    154      */
    155     public String getMultilineMessage()
    156     {
    157         StringBuffer buf = new StringBuffer();
    158
    159         buf.append( getMessage() );
    160         buf.append( lineSeparator );
    161         buf.append( getXPath() );
    162         buf.append( lineSeparator );
    163
    164         buf.append( getPositionMarker() );
    165
    166         return buf.toString();
    167     }
    168
    169 }