001: /*
002: * GrammarException.java
003: *
004: * This work is free software; you can redistribute it and/or modify
005: * it under the terms of the GNU General Public License as published
006: * by the Free Software Foundation; either version 2 of the License,
007: * or (at your option) any later version.
008: *
009: * This work is distributed in the hope that it will be useful, but
010: * WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: * General Public License for more details.
013: *
014: * You should have received a copy of the GNU General Public License
015: * along with this program; if not, write to the Free Software
016: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
017: * USA
018: *
019: * As a special exception, the copyright holders of this library give
020: * you permission to link this library with independent modules to
021: * produce an executable, regardless of the license terms of these
022: * independent modules, and to copy and distribute the resulting
023: * executable under terms of your choice, provided that you also meet,
024: * for each linked independent module, the terms and conditions of the
025: * license of that module. An independent module is a module which is
026: * not derived from or based on this library. If you modify this
027: * library, you may extend this exception to your version of the
028: * library, but you are not obligated to do so. If you do not wish to
029: * do so, delete this exception statement from your version.
030: *
031: * Copyright (c) 2003 Per Cederberg. All rights reserved.
032: */
033:
034: package net.percederberg.grammatica;
035:
036: /**
037: * A grammar validation exception. This exception is used for
038: * signalling an error in the grammar file.
039: *
040: * @author Per Cederberg, <per at percederberg dot net>
041: * @version 1.0
042: */
043: public class GrammarException extends Exception {
044:
045: /**
046: * The grammar file name.
047: */
048: private String file;
049:
050: /**
051: * The detailed error message.
052: */
053: private String message;
054:
055: /**
056: * The first error line, or -1 for unknown.
057: */
058: private int startLine;
059:
060: /**
061: * The last error line, or -1 for unknown.
062: */
063: private int endLine;
064:
065: /**
066: * Creates a new grammar exception.
067: *
068: * @param file the grammar file name
069: * @param message the detailed error message
070: */
071: public GrammarException(String file, String message) {
072: this (file, message, -1, -1);
073: }
074:
075: /**
076: * Creates a new grammar exception.
077: *
078: * @param file the grammar file name
079: * @param message the detailed error message
080: * @param startLine the starting line number, or -1 for unknown
081: * @param endLine the ending line number, or -1 for unknown
082: */
083: public GrammarException(String file, String message, int startLine,
084: int endLine) {
085:
086: this .file = file;
087: this .message = message;
088: this .startLine = startLine;
089: this .endLine = endLine;
090: }
091:
092: /**
093: * Returns the grammar file name.
094: *
095: * @return the grammar file name
096: */
097: public String getFile() {
098: return file;
099: }
100:
101: /**
102: * Returns the start line number for the error.
103: *
104: * @return the starting line number, or
105: * -1 if unknown
106: */
107: public int getStartLine() {
108: return startLine;
109: }
110:
111: /**
112: * Returns the end line number for the error.
113: *
114: * @return the ending line number, or
115: * -1 if unknown
116: */
117: public int getEndLine() {
118: return endLine;
119: }
120:
121: /**
122: * Returns the detailed error message. This message will contain
123: * the same string as getErrorMessage(), but with line number
124: * information appended.
125: *
126: * @return the detailed error message
127: */
128: public String getMessage() {
129: StringBuffer buffer = new StringBuffer();
130:
131: // Add error description
132: buffer.append(getErrorMessage());
133:
134: // Add line numbers
135: if (startLine > 0 && endLine > 0) {
136: if (startLine == endLine) {
137: buffer.append(", on line ");
138: buffer.append(startLine);
139: } else {
140: buffer.append(", on lines ");
141: buffer.append(startLine);
142: buffer.append("-");
143: buffer.append(endLine);
144: }
145: }
146:
147: return buffer.toString();
148: }
149:
150: /**
151: * Returns the error message.
152: *
153: * @return the error message.
154: */
155: public String getErrorMessage() {
156: return message;
157: }
158: }
|