001: /*
002: * ParserLogException.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.parser;
035:
036: import java.util.ArrayList;
037:
038: /**
039: * A parser log exception. This class contains a list of all the parse
040: * errors encountered while parsing.
041: *
042: * @author Per Cederberg, <per at percederberg dot net>
043: * @version 1.1
044: * @since 1.1
045: */
046: public class ParserLogException extends Exception {
047:
048: /**
049: * The list of errors found.
050: */
051: private ArrayList errors = new ArrayList();
052:
053: /**
054: * Creates a new empty parser log exception.
055: */
056: public ParserLogException() {
057: }
058:
059: /**
060: * Returns the number of errors in this log.
061: *
062: * @return the number of errors in this log
063: */
064: public int getErrorCount() {
065: return errors.size();
066: }
067:
068: /**
069: * Returns a specific error from the log.
070: *
071: * @param index the error index, 0 <= index < count
072: *
073: * @return the parse error requested
074: */
075: public ParseException getError(int index) {
076: return (ParseException) errors.get(index);
077: }
078:
079: /**
080: * Adds a parse error to the log.
081: *
082: * @param e the parse error to add
083: */
084: public void addError(ParseException e) {
085: errors.add(e);
086: }
087:
088: /**
089: * Returns the detailed error message. This message will contain
090: * the error messages from all errors in this log, separated by
091: * a newline.
092: *
093: * @return the detailed error message
094: */
095: public String getMessage() {
096: StringBuffer buffer = new StringBuffer();
097:
098: for (int i = 0; i < getErrorCount(); i++) {
099: if (i > 0) {
100: buffer.append("\n");
101: }
102: buffer.append(getError(i).getMessage());
103: }
104: return buffer.toString();
105: }
106: }
|