001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.io;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import org.xml.sax.Locator;
007import org.xml.sax.SAXException;
008
009public class OsmDataParsingException extends SAXException {
010    private int columnNumber;
011    private int lineNumber;
012
013    public OsmDataParsingException() {
014        super();
015    }
016
017    public OsmDataParsingException(Exception e) {
018        super(e);
019    }
020
021    public OsmDataParsingException(String message, Exception e) {
022        super(message, e);
023    }
024
025    public OsmDataParsingException(String message) {
026        super(message);
027    }
028
029    public OsmDataParsingException rememberLocation(Locator locator) {
030        if (locator == null) return this;
031        this.columnNumber = locator.getColumnNumber();
032        this.lineNumber = locator.getLineNumber();
033        return this;
034    }
035
036    @Override
037    public String getMessage() {
038        String msg = super.getMessage();
039        if (lineNumber == 0 && columnNumber == 0)
040            return msg;
041        if (msg == null) {
042            msg = getClass().getName();
043        }
044        msg = msg + " " + tr("(at line {0}, column {1})", lineNumber, columnNumber);
045        return msg;
046    }
047
048    public int getColumnNumber() {
049        return columnNumber;
050    }
051
052    public int getLineNumber() {
053        return lineNumber;
054    }
055}