View Javadoc

    1   /*
    2    * $Header: /home/projects/jaxen/scm/jaxen/src/java/main/org/jaxen/XPathSyntaxException.java,v 1.10 2005/09/25 11:41:31 elharo Exp $
    3    * $Revision: 1.10 $
    4    * $Date: 2005/09/25 11:41:31 $
    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.10 2005/09/25 11:41:31 elharo Exp $
    60   */
    61
    62
    63  package org.jaxen;
    64
    65  /*** Indicates an error during parsing of an XPath expression.
    66   *
    67   *  @author <a href="mailto:bob@werken.com">bob mcwhirter</a>
    68   *  @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
    69   */
    70  public class XPathSyntaxException extends JaxenException
    71  {
    72      /*** The textual XPath expression */
    73      private String xpath;
    74
    75      /*** The position of the error */
    76      private int    position;
    77
    78      /***
    79       * Create a new XPathSyntaxException wrapping an existing
    80       * <code>org.jaxen.saxpath.XPathSyntaxException</code>.
    81       *
    82       * @param e the exception that caused this exception
    83       */
    84      public XPathSyntaxException(org.jaxen.saxpath.XPathSyntaxException e)
    85      {
    86          super( e );
    87
    88          this.xpath    = e.getXPath();
    89          this.position = e.getPosition();
    90      }
    91
    92      /*** Constructor
    93       *
    94       *  @param xpath the erroneous XPath expression
    95       *  @param position the position of the error
    96       *  @param message the error message
    97       */
    98      public XPathSyntaxException(String xpath,
    99                                  int position,
    100                                 String message)
    101     {
    102         super( message );
    103
    104         this.xpath    = xpath;
    105         this.position = position;
    106     }
    107
    108     /*** Retrieve the position of the error.
    109      *
    110      *  @return the position of the error
    111      */
    112     public int getPosition()
    113     {
    114         return this.position;
    115     }
    116
    117     /*** Retrieve the expression containing the error.
    118      *
    119      *  @return the erroneous expression
    120      */
    121     public String getXPath()
    122     {
    123         return this.xpath;
    124     }
    125
    126     /*** Retrieve a string useful for denoting where
    127      *  the error occurred.
    128      *
    129      *  <p>
    130      *  This is a string composed of whitespace and
    131      *  a marker at the position (see {@link #getPosition})
    132      *  of the error.  This is useful for creating
    133      *  friendly multi-line error displays.
    134      *  </p>
    135      *
    136      *  @return the error position marker
    137      */
    138     public String getPositionMarker()
    139     {
    140         StringBuffer buf = new StringBuffer();
    141
    142         int pos = getPosition();
    143
    144         for ( int i = 0 ; i < pos ; ++i )
    145         {
    146             buf.append(" ");
    147         }
    148
    149         buf.append("^");
    150
    151         return buf.toString();
    152
    153     }
    154
    155     /*** Retrieve the friendly multi-line error message.
    156      *
    157      *  <p>
    158      *  This returns a multi-line string that contains
    159      *  the original erroneous XPath expression with a
    160      *  marker underneath indicating exactly where the
    161      *  error occurred.
    162      *  </p>
    163      *
    164      *  @return the multi-line error message
    165      */
    166     public String getMultilineMessage()
    167     {
    168         StringBuffer buf = new StringBuffer(getMessage());
    169         buf.append( "\n" );
    170         buf.append( getXPath() );
    171         buf.append( "\n" );
    172
    173         buf.append( getPositionMarker() );
    174
    175         return buf.toString();
    176     }
    177 }