001 /* ========================================================================
002 * JCommon : a free general purpose class library for the Java(tm) platform
003 * ========================================================================
004 *
005 * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
006 *
007 * Project Info: http://www.jfree.org/jcommon/index.html
008 *
009 * This library is free software; you can redistribute it and/or modify it
010 * under the terms of the GNU Lesser General Public License as published by
011 * the Free Software Foundation; either version 2.1 of the License, or
012 * (at your option) any later version.
013 *
014 * This library is distributed in the hope that it will be useful, but
015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
017 * License for more details.
018 *
019 * You should have received a copy of the GNU Lesser General Public
020 * License along with this library; if not, write to the Free Software
021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
022 * USA.
023 *
024 * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
025 * in the United States and other countries.]
026 *
027 * -------------------
028 * ParseException.java
029 * -------------------
030 * (C)opyright 2003-2005, by Thomas Morgner and Contributors.
031 *
032 * Original Author: Thomas Morgner;
033 * Contributor(s): David Gilbert (for Object Refinery Limited);
034 *
035 * $Id: ParseException.java,v 1.4 2005/10/18 13:25:44 mungady Exp $
036 *
037 * Changes
038 * -------------------------
039 * 10.06.2003 : Initial version
040 *
041 */
042
043 package org.jfree.xml;
044
045 import java.io.PrintStream;
046 import java.io.PrintWriter;
047
048 import org.xml.sax.Locator;
049 import org.xml.sax.SAXException;
050
051 /**
052 * A parse exception.
053 *
054 * @author Thomas Morgner
055 */
056 public class ParseException extends SAXException {
057
058 /** The line, where the error occured. */
059 private int line;
060
061 /** The column, where the error occured. */
062 private int column;
063
064 /**
065 * Creates a new ParseException with the given message.
066 *
067 * @param message the message
068 */
069 public ParseException(final String message) {
070 super(message);
071 fillLocation(null);
072 }
073
074 /**
075 * Creates a new ParseException with the given root exception.
076 *
077 * @param e the exception
078 */
079 public ParseException(final Exception e) {
080 super(e);
081 fillLocation(null);
082 }
083
084 /**
085 * Creates a new ParseException with the given message and root exception.
086 *
087 * @param s the message
088 * @param e the exception
089 */
090 public ParseException(final String s, final Exception e) {
091 super(s, e);
092 fillLocation(null);
093 }
094
095 /**
096 * Creates a new ParseException with the given message and the locator.
097 *
098 * @param message the message
099 * @param locator the locator of the parser
100 */
101 public ParseException(final String message, final Locator locator) {
102 super(message);
103 fillLocation(locator);
104 }
105
106 /**
107 * Creates a new ParseException with the given root exception
108 * and the locator.
109 *
110 * @param e the exception
111 * @param locator the locator of the parser
112 */
113 public ParseException(final Exception e, final Locator locator) {
114 super(e);
115 fillLocation(locator);
116 }
117
118 /**
119 * Creates a new ParseException with the given message, root exception
120 * and the locator.
121 *
122 * @param s the message
123 * @param e the exception
124 * @param locator the locator of the parser
125 */
126 public ParseException(final String s, final Exception e, final Locator locator) {
127 super(s, e);
128 fillLocation(locator);
129 }
130
131 /**
132 * Modifies the message to give more detailed location information.
133 *
134 * @return the modified exception message.
135 */
136 public String getMessage() {
137 final StringBuffer message = new StringBuffer(String.valueOf(super.getMessage()));
138 message.append(" [Location: Line=");
139 message.append(this.line);
140 message.append(" Column=");
141 message.append(this.column);
142 message.append("] ");
143 return message.toString();
144 }
145
146 /**
147 * Fills the location with the given locator.
148 *
149 * @param locator the locator or null.
150 */
151 protected void fillLocation (final Locator locator) {
152 if (locator == null) {
153 this.line = -1;
154 this.column = -1;
155 }
156 else {
157 this.line = locator.getLineNumber();
158 this.column = locator.getColumnNumber();
159 }
160 }
161
162 /**
163 * Returns the line of the parse position where the error occured.
164 *
165 * @return the line number or -1 if not known.
166 */
167 public int getLine() {
168 return this.line;
169 }
170
171 /**
172 * Returns the column of the parse position where the error occured.
173 *
174 * @return the column number or -1 if not known.
175 */
176 public int getColumn() {
177 return this.column;
178 }
179
180
181 /**
182 * Prints the stack trace to the specified stream.
183 *
184 * @param stream the output stream.
185 */
186 public void printStackTrace(final PrintStream stream) {
187 super.printStackTrace(stream);
188 if (getException() != null) {
189 stream.println("ParentException: ");
190 getException().printStackTrace(stream);
191 }
192 }
193
194 /**
195 * Override toString to pick up any embedded exception.
196 *
197 * @return A string representation of this exception.
198 */
199 public String toString() {
200 return getClass().getName() + ": " + getMessage();
201 }
202
203 /**
204 * Prints the stack trace to the specified writer.
205 *
206 * @param writer the writer.
207 */
208 public void printStackTrace(final PrintWriter writer) {
209 super.printStackTrace(writer);
210 if (getException() != null) {
211 writer.println("ParentException: ");
212 getException().printStackTrace(writer);
213 }
214 }
215
216 }
217