001: /*
002: * IzPack - Copyright 2001-2008 Julien Ponge, All Rights Reserved.
003: *
004: * http://izpack.org/
005: * http://izpack.codehaus.org/
006: *
007: * Copyright 2008 Ari Voutilainen
008: *
009: * Licensed under the Apache License, Version 2.0 (the "License");
010: * you may not use this file except in compliance with the License.
011: * You may obtain a copy of the License at
012: *
013: * http://www.apache.org/licenses/LICENSE-2.0
014: *
015: * Unless required by applicable law or agreed to in writing, software
016: * distributed under the License is distributed on an "AS IS" BASIS,
017: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
018: * See the License for the specific language governing permissions and
019: * limitations under the License.
020: */
021:
022: package IzPack.TestLangPacks;
023:
024: import java.util.ArrayList;
025:
026: import org.xml.sax.ErrorHandler;
027: import org.xml.sax.SAXException;
028: import org.xml.sax.SAXParseException;
029: import org.xml.sax.helpers.DefaultHandler;
030:
031: /**
032: * Implements SAX2 error event handler.
033: *
034: * @author Ari Voutilainen
035: */
036: public class LangPackXmlErrorHandler extends DefaultHandler implements
037: ErrorHandler {
038: /**
039: * Deafult constructor of the class.
040: */
041: public LangPackXmlErrorHandler() {
042: super ();
043: }
044:
045: /**
046: * Receive notification of a recoverable error.
047: *
048: * @param exception
049: *
050: * @throws SAXException
051: */
052: @Override
053: public void error(SAXParseException exception) throws SAXException {
054: throw new SAXException(makeDetailedMessage(
055: LangPackException.Severity.ERROR, exception));
056: }
057:
058: /**
059: * Receive notification of a non-recoverable error.
060: *
061: * @param exception
062: *
063: * @throws SAXException
064: */
065: @Override
066: public void fatalError(SAXParseException exception)
067: throws SAXException {
068: throw new SAXException(makeDetailedMessage(
069: LangPackException.Severity.FATAL, exception));
070: }
071:
072: /**
073: * Receive notification of a warning.
074: *
075: * @param exception
076: *
077: * @throws SAXException
078: */
079: @Override
080: public void warning(SAXParseException exception)
081: throws SAXException {
082: throw new SAXException(makeDetailedMessage(
083: LangPackException.Severity.WARNING, exception));
084: }
085:
086: /**
087: * Makes readable message for printing or saving.
088: *
089: * @param flag The flag which indicates whether the exception is warning,
090: * error or fatal error.
091: * @param exception SAXParseException which contain information about the exception.
092: *
093: * @return Return the message as String.
094: */
095: private String makeDetailedMessage(LangPackException.Severity flag,
096: SAXParseException exception) {
097: String flagStr = "";
098:
099: if (flag == LangPackException.Severity.WARNING) {
100: flagStr = "Warning";
101: }
102: if (flag == LangPackException.Severity.ERROR) {
103: flagStr = "Error";
104: }
105: if (flag == LangPackException.Severity.FATAL) {
106: flagStr = "Fatal error";
107: }
108:
109: int lineNum = exception.getLineNumber(), columnNum = exception
110: .getColumnNumber();
111: String publId = exception.getPublicId();
112: ArrayList<String> aList = new ArrayList<String>();
113:
114: if (lineNum != -1) {
115: aList.add(" line: " + lineNum);
116: }
117: if (columnNum != -1) {
118: aList.add(" column: " + columnNum);
119: }
120: if (publId != null) {
121: aList.add(" id: \"" + publId + "\"");
122: }
123:
124: String msg = "[" + flagStr;
125: int max = aList.size();
126:
127: if (max > 0) {
128: msg = msg + ";";
129:
130: int x = 0;
131: for (x = 0; x < max - 1; x++) {
132: msg = msg + " " + aList.get(x) + ",";
133: }
134: msg = msg + " " + aList.get(x);
135: }
136: msg = msg + "]: " + exception.getMessage();
137: return msg;
138: }
139: }
|