| LucidException.java |
1 /**
2 * Distribution License:
3 * JSword is free software; you can redistribute it and/or modify it under
4 * the terms of the GNU Lesser General Public License, version 2.1 or later
5 * as published by the Free Software Foundation. This program is distributed
6 * in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
7 * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
8 * See the GNU Lesser General Public License for more details.
9 *
10 * The License is available on the internet at:
11 * http://www.gnu.org/copyleft/lgpl.html
12 * or by writing to:
13 * Free Software Foundation, Inc.
14 * 59 Temple Place - Suite 330
15 * Boston, MA 02111-1307, USA
16 *
17 * © CrossWire Bible Society, 2005 - 2016
18 *
19 */
20 package org.crosswire.common.util;
21
22 import org.crosswire.jsword.JSMsg;
23
24
25 /**
26 * A LucidException adds 2 concepts to a base Exception, that of a wrapped
27 * Exception, that of internationalized (i18n) messages.
28 *
29 * <p>
30 * The first addition is the concept of an optional wrapped Exception (actually
31 * a Throwable), which describes what caused this to happen. Any well defined
32 * interface will define the exact exceptions that the methods of that interface
33 * will throw, and not leave it to the ambiguous "throws Exception". However the
34 * interface should have no idea how it will be implemented and so the details
35 * of exactly what broke under the covers gets lost. With LucidException this
36 * detail is kept in the wrapped Exception. This functionality has been added to
37 * the base Exception class in J2SE 1.4
38 * </p>
39 *
40 * <p>
41 * The second addition is the concept of i18n messages. Normal Exceptions are
42 * created with an almost random string in the message field, LucidExceptions
43 * define this string to be a key into a resource bundle, and to help formatting
44 * this string there is an optional Object array of format options. There is a
45 * constructor that allows us to specify no i18n lookup, which is useful if this
46 * lookup may have been done already.
47 * </p>
48 *
49 * @see gnu.lgpl.License The GNU Lesser General Public License for details.
50 * @author Joe Walker
51 * @see LucidRuntimeException
52 */
53 public class LucidException extends Exception {
54 /**
55 * All LucidExceptions are constructed with references to resources in an
56 * i18n properties file.
57 *
58 * @param msg
59 * The resource id to read
60 */
61 public LucidException(String msg) {
62 super(msg);
63 }
64
65 /**
66 * All LucidExceptions are constructed with references to resources in an
67 * i18n properties file.
68 *
69 * @param msg The resource id to read
70 * @param cause The cause of the exception
71 */
72 public LucidException(String msg, Throwable cause) {
73 super(msg, cause);
74 }
75
76 /**
77 * Accessor of the full detailed version of the string
78 *
79 * @return The full unraveled i18n string
80 */
81 public String getDetailedMessage() {
82 Throwable cause = getCause();
83 if (cause == null) {
84 return getMessage();
85 }
86
87 // TRANSLATOR: When an error occurs this label precedes the details of the problem.
88 String reason = JSMsg.gettext("Reason:");
89 if (cause instanceof LucidException) {
90 LucidException lex = (LucidException) cause;
91 return getMessage() + reason + lex.getDetailedMessage();
92 }
93 return getMessage() + reason + cause.getMessage();
94 }
95
96 /**
97 * Serialization ID
98 */
99 private static final long serialVersionUID = 3257846580311963191L;
100 }
101