e8a3b1bd24fa30ad0e936675a5008eae92d516ad
[mir.git] / source / mir / misc / ConfigException.java
1 /*
2  * The Apache Software License, Version 1.1
3  *
4  * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
5  * reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  *
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in
16  *    the documentation and/or other materials provided with the
17  *    distribution.
18  *
19  * 3. The end-user documentation included with the redistribution, if
20  *    any, must include the following acknowlegement:
21  *       "This product includes software developed by the
22  *        Apache Software Foundation (http://www.apache.org/)."
23  *    Alternately, this acknowlegement may appear in the software itself,
24  *    if and wherever such third-party acknowlegements normally appear.
25  *
26  * 4. The names "The Jakarta Project", "Ant", and "Apache Software
27  *    Foundation" must not be used to endorse or promote products derived
28  *    from this software without prior written permission. For written
29  *    permission, please contact apache@apache.org.
30  *
31  * 5. Products derived from this software may not be called "Apache"
32  *    nor may "Apache" appear in their names without prior written
33  *    permission of the Apache Group.
34  *
35  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
36  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
39  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
42  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
43  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
46  * SUCH DAMAGE.
47  * ====================================================================
48  *
49  * This software consists of voluntary contributions made by many
50  * individuals on behalf of the Apache Software Foundation.  For more
51  * information on the Apache Software Foundation, please see
52  * <http://www.apache.org/>.
53  */
54 package mir.misc;
55
56
57 import java.io.*;
58
59 /**
60  * Signals an error condition during a build.
61  *
62  * @author James Duncan Davidson
63  */
64 public class ConfigException extends RuntimeException {
65
66     /** Exception that might have caused this one. */
67     private Throwable cause;
68
69     /** Location in the build file where the exception occured */
70     private Location location = Location.UNKNOWN_LOCATION;
71
72     /**
73      * Constructs a build exception with no descriptive information.
74      */
75     public ConfigException() {
76         super();
77     }
78
79     /**
80      * Constructs an exception with the given descriptive message.
81      * @param msg Description of or information about the exception.
82      */
83     public ConfigException(String msg) {
84         super(msg);
85     }
86
87     /**
88      * Constructs an exception with the given message and exception as
89      * a root cause.
90      * @param msg Description of or information about the exception.
91      * @param cause Throwable that might have cause this one.
92      */
93     public ConfigException(String msg, Throwable cause) {
94         super(msg);
95         this.cause = cause;
96     }
97
98     /**
99      * Constructs an exception with the given message and exception as
100      * a root cause and a location in a file.
101      * @param msg Description of or information about the exception.
102      * @param cause Exception that might have cause this one.
103      * @param location Location in the project file where the error occured.
104      */
105     public ConfigException(String msg, Throwable cause, Location location) {
106         this(msg, cause);
107         this.location = location;
108     }
109
110     /**
111      * Constructs an exception with the given exception as a root cause.
112      * @param cause Exception that might have caused this one.
113      */
114     public ConfigException(Throwable cause) {
115         super(cause.toString());
116         this.cause = cause;
117     }
118
119     /**
120      * Constructs an exception with the given descriptive message and a location
121      * in a file.
122      * @param msg Description of or information about the exception.
123      * @param location Location in the project file where the error occured.
124      */
125     public ConfigException(String msg, Location location) {
126         super(msg);
127         this.location = location;
128     }
129
130     /**
131      * Constructs an exception with the given exception as
132      * a root cause and a location in a file.
133      * @param cause Exception that might have cause this one.
134      * @param location Location in the project file where the error occured.
135      */
136     public ConfigException(Throwable cause, Location location) {
137         this(cause);
138         this.location = location;
139     }
140
141     /**
142      * Returns the nested exception.
143      */
144     public Throwable getException() {
145         return cause;
146     }
147
148     /**
149      * Returns the location of the error and the error message.
150      */
151     public String toString() {
152         return location.toString() + getMessage();
153     }
154
155     /**
156      * Sets the file location where the error occured.
157      */
158     public void setLocation(Location location) {
159         this.location = location;
160     }
161
162     /**
163      * Returns the file location where the error occured.
164      */
165     public Location getLocation() {
166         return location;
167     }
168
169     // Override stack trace methods to show original cause:
170     public void printStackTrace() {
171         printStackTrace(System.err);
172     }
173     
174 }