/* * BioJava development code * * This code may be freely distributed and modified under the * terms of the GNU Lesser General Public Licence. This should * be distributed with the code. If you do not have a copy, * see: * * http://www.gnu.org/copyleft/lesser.html * * Copyright for this code is held jointly by the individual * authors. These should be listed in @author doc comments. * * For more information on the BioJava project and its aims, * or to join the biojava-l mailing list, visit the home page * at: * * http://www.biojava.org/ * */ package org.biojava.utils; /** * Exception thrown when an error occurs in document parsing. * It may optionally include the following fields: * *
* Locator (file name, URL, etc.) * Line number (negative for unknown) * The text of the actual offending line (Null if unknown) * Character offset (negative for unknown) ** @author Matthew Pocock * @author Greg Cox */ public class ParserException extends Exception { private String locator = null; private int lineNumber = -1; private int character = -1; private String line = null; public ParserException(String detail) { super(detail); } public ParserException(String detail, String locator) { super(detail); this.locator = locator; } public ParserException(String detail, String locator, int line) { super(detail); this.locator = locator; this.lineNumber = line; } public ParserException(String detail, String locator, int lineNumber, String line) { super(detail); this.locator = locator; this.lineNumber = lineNumber; this.line = line; } public ParserException(String detail, String locator, int lineNumber, String line, int character) { super(detail); this.locator = locator; this.lineNumber = lineNumber; this.character = character; this.line = line; } public ParserException(Throwable t) { super(t); } /** * @deprecated use new ParserException(detail, t) */ public ParserException(Throwable t, String detail) { this(detail, t); } public ParserException(String message, Throwable cause) { super(message, cause); } public ParserException(Throwable t, String detail, String locator) { super(detail, t); this.locator = locator; } public ParserException(Throwable t, String detail, String locator, int line) { super(detail, t); this.locator = locator; this.lineNumber = line; } public ParserException( Throwable t, String detail, String locator, int lineNumber, String line) { super(detail, t); this.locator = locator; this.lineNumber = lineNumber; this.line = line; } public ParserException( Throwable t, String detail, String locator, int lineNumber, String line, int character) { super(detail, t); this.locator = locator; this.lineNumber = lineNumber; this.character = character; this.line = line; } /** * Get a locator for the stream which caused this exception. * * @return A locator string, or
null
if none is
* known.
*/
public String getLocator() {
return locator;
}
/**
* Get the line number in the stream where this exception occured.
*
* @return A positive integer line number, or -1 if not known.
*/
public int getLineNumber() {
return lineNumber;
}
/**
* Get the character offset in the line where an error was detected.
*
* @return The first character in the line where the parser detected
* an error, or -1 if the exception effects the whole line.
*/
public int getCharacterOffset() {
return character;
}
/**
* Get the text of the line where the exception occured.
*
* @return The text of the line, or null
if not known.
*/
public String getLine() {
return line;
}
/**
* Represent this exception as a string. This includes
* the default exception toString representation, followed
* by details of the location where the error occured, if
* they were supplied when constructing this exception.
*
* @return A string representation of this exception.
*/
public String toString() {
StringBuffer sb = new StringBuffer(super.toString());
if (locator != null) {
sb.append('\n');
sb.append("Parsing location: ");
sb.append(locator);
}
if (lineNumber >= 0) {
sb.append('\n');
sb.append("Parsing line: ");
sb.append(lineNumber);
}
if (line != null) {
sb.append('\n');
sb.append(line);
if (character >= 0) {
sb.append('\n');
for (int i = 0; i < character; ++i)
sb.append(' ');
sb.append('^');
}
}
sb.append('\n');
return sb.substring(0);
}
}