001: /*
002: * Copyright 2002,2004 The Apache Software Foundation.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016:
017: package org.apache.commons.jelly;
018:
019: import java.io.PrintStream;
020: import java.io.PrintWriter;
021:
022: /**
023: * <p><code>JellyException</code> is the root of all Jelly exceptions.</p>
024: *
025: * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
026: * @version $Revision: 155420 $
027: */
028:
029: public class JellyException extends Exception implements LocationAware {
030:
031: /** the underlying cause of the exception */
032: private Throwable cause;
033:
034: /** the Jelly file which caused the problem */
035: private String fileName;
036:
037: /** the tag name which caused the problem */
038: private String elementName;
039:
040: /** the line number in the script of the error */
041: private int lineNumber = -1;
042:
043: /** the column number in the script of the error */
044: private int columnNumber = -1;
045:
046: public JellyException() {
047: }
048:
049: public JellyException(String message) {
050: super (message);
051: }
052:
053: public JellyException(String message, Throwable cause) {
054: super (message);
055: this .cause = cause;
056: }
057:
058: public JellyException(Throwable cause) {
059: super (cause.getLocalizedMessage());
060: this .cause = cause;
061: }
062:
063: public JellyException(Throwable cause, String fileName,
064: String elementName, int columnNumber, int lineNumber) {
065: this (cause.getLocalizedMessage(), cause, fileName, elementName,
066: columnNumber, lineNumber);
067: }
068:
069: public JellyException(String reason, Throwable cause,
070: String fileName, String elementName, int columnNumber,
071: int lineNumber) {
072: super ((reason == null ? cause.getClass().getName() : reason));
073: this .cause = cause;
074: this .fileName = fileName;
075: this .elementName = elementName;
076: this .columnNumber = columnNumber;
077: this .lineNumber = lineNumber;
078: }
079:
080: public JellyException(String reason, String fileName,
081: String elementName, int columnNumber, int lineNumber) {
082: super (reason);
083: this .fileName = fileName;
084: this .elementName = elementName;
085: this .columnNumber = columnNumber;
086: this .lineNumber = lineNumber;
087: }
088:
089: public Throwable getCause() {
090: return cause;
091: }
092:
093: /**
094: * @return the line number of the tag
095: */
096: public int getLineNumber() {
097: return lineNumber;
098: }
099:
100: /**
101: * Sets the line number of the tag
102: */
103: public void setLineNumber(int lineNumber) {
104: this .lineNumber = lineNumber;
105: }
106:
107: /**
108: * @return the column number of the tag
109: */
110: public int getColumnNumber() {
111: return columnNumber;
112: }
113:
114: /**
115: * Sets the column number of the tag
116: */
117: public void setColumnNumber(int columnNumber) {
118: this .columnNumber = columnNumber;
119: }
120:
121: /**
122: * @return the Jelly file which caused the problem
123: */
124: public String getFileName() {
125: return fileName;
126: }
127:
128: /**
129: * Sets the Jelly file which caused the problem
130: */
131: public void setFileName(String fileName) {
132: this .fileName = fileName;
133: }
134:
135: /**
136: * @return the element name which caused the problem
137: */
138: public String getElementName() {
139: return elementName;
140: }
141:
142: /**
143: * Sets the element name which caused the problem
144: */
145: public void setElementName(String elementName) {
146: this .elementName = elementName;
147: }
148:
149: public String getMessage() {
150: return fileName + ":" + lineNumber + ":" + columnNumber + ": <"
151: + elementName + "> " + getReason();
152: }
153:
154: public String getReason() {
155: return super .getMessage();
156: }
157:
158: // #### overload the printStackTrace methods...
159: public void printStackTrace(PrintWriter s) {
160: synchronized (s) {
161: super .printStackTrace(s);
162: if (cause != null) {
163: s.println("Root cause");
164: cause.printStackTrace(s);
165: }
166: }
167: }
168:
169: public void printStackTrace(PrintStream s) {
170: synchronized (s) {
171: super .printStackTrace(s);
172: if (cause != null) {
173: s.println("Root cause");
174: cause.printStackTrace(s);
175: }
176: }
177: }
178:
179: public void printStackTrace() {
180: super .printStackTrace();
181: if (cause != null) {
182: System.out.println("Root cause");
183: cause.printStackTrace();
184: }
185: }
186:
187: }
|