content: /* ========================================================================
   * JCommon : a free general purpose class library for the Java(tm) platform
   * ========================================================================
   *
   * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
   * 
   * Project Info:  http://www.jfree.org/jcommon/index.html
   *
   * This library is free software; you can redistribute it and/or modify it 
   * under the terms of the GNU Lesser General Public License as published by 
   * the Free Software Foundation; either version 2.1 of the License, or 
   * (at your option) any later version.
   *
   * This library is distributed in the hope that it will be useful, but 
   * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
   * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 
   * License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
   * License along with this library; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
   * USA.  
   *
   * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
   * in the United States and other countries.]
   * 
   * -------------------
   * ParseException.java
   * -------------------
   * (C)opyright 2003-2005, by Thomas Morgner and Contributors.
   *
   * Original Author:  Thomas Morgner;
   * Contributor(s):   David Gilbert (for Object Refinery Limited);
   *
   * $Id: ParseException.java,v 1.4 2005/10/18 13:25:44 mungady Exp $
   *
   * Changes
   * -------------------------
   * 10.06.2003 : Initial version
   *
   */
  
  package org.jfree.xml;
  
  import java.io.PrintStream;
  import java.io.PrintWriter;
  
  import org.xml.sax.Locator;
  import org.xml.sax.SAXException;
  
  /**
   * A parse exception.
   *
   * @author Thomas Morgner
   */
  public class ParseException extends SAXException {
  
      /** The line, where the error occured. */
      private int line;
  
      /** The column, where the error occured. */
      private int column;
  
      /**
       * Creates a new ParseException with the given message.
       *
       * @param message the message
       */
      public ParseException(final String message) {
          super(message);
          fillLocation(null);
      }
  
      /**
       * Creates a new ParseException with the given root exception.
       *
       * @param e the exception
       */
      public ParseException(final Exception e) {
          super(e);
          fillLocation(null);
      }
  
      /**
       * Creates a new ParseException with the given message and root exception.
       *
       * @param s the message
       * @param e the exception
       */
      public ParseException(final String s, final Exception e) {
          super(s, e);
          fillLocation(null);
      }
  
      /**
       * Creates a new ParseException with the given message and the locator.
       *
       * @param message the message
       * @param locator the locator of the parser
       */
      public ParseException(final String message, final Locator locator) {
          super(message);
          fillLocation(locator);
      }
  
      /**
       * Creates a new ParseException with the given root exception
       * and the locator.
       *
       * @param e the exception
       * @param locator the locator of the parser
       */
      public ParseException(final Exception e, final Locator locator) {
          super(e);
          fillLocation(locator);
      }
  
      /**
       * Creates a new ParseException with the given message, root exception
       * and the locator.
       *
       * @param s the message
       * @param e the exception
       * @param locator the locator of the parser
       */
      public ParseException(final String s, final Exception e, final Locator locator) {
          super(s, e);
          fillLocation(locator);
      }
  
      /**
       * Modifies the message to give more detailed location information.
       *
       * @return the modified exception message.
       */
      public String getMessage() {
          final StringBuffer message = new StringBuffer(String.valueOf(super.getMessage()));
          message.append(" [Location: Line=");
          message.append(this.line);
          message.append(" Column=");
          message.append(this.column);
          message.append("] ");
          return message.toString();
      }
  
      /**
       * Fills the location with the given locator.
       *
       * @param locator the locator or null.
       */
      protected void fillLocation (final Locator locator) {
          if (locator == null) {
              this.line = -1;
              this.column = -1;
          }
          else {
              this.line = locator.getLineNumber();
              this.column = locator.getColumnNumber();
          }
      }
  
      /**
       * Returns the line of the parse position where the error occured.
       *
       * @return the line number or -1 if not known.
       */
      public int getLine() {
          return this.line;
      }
  
      /**
       * Returns the column of the parse position where the error occured.
       *
       * @return the column number or -1 if not known.
       */
      public int getColumn() {
          return this.column;
      }
  
  
      /**
       * Prints the stack trace to the specified stream.
       *
       * @param stream  the output stream.
       */
      public void printStackTrace(final PrintStream stream) {
          super.printStackTrace(stream);
          if (getException() != null) {
              stream.println("ParentException: ");
              getException().printStackTrace(stream);
          }
      }
  
      /**
       * Override toString to pick up any embedded exception.
       *
       * @return A string representation of this exception.
       */
      public String toString() {
          return getClass().getName() + ": " + getMessage();
      }
  
      /**
       * Prints the stack trace to the specified writer.
       *
       * @param writer  the writer.
       */
      public void printStackTrace(final PrintWriter writer) {
          super.printStackTrace(writer);
          if (getException() != null) {
              writer.println("ParentException: ");
              getException().printStackTrace(writer);
          }
      }
  
  }
  
  