1 package net.sf.layoutParser.exception;
2
3 import java.text.MessageFormat;
4 import java.util.PropertyResourceBundle;
5 import java.util.ResourceBundle;
6
7 import net.sf.layoutParser.context.LayoutCatalog;
8
9 /**
10 * This is the base exception for all concrete exceptions implemented in the framework. <br/>
11 * It provides a mean to throw localized exceptions based on properties files on the system. These files <br/>
12 * should begin with "ExceptionsBundle" name followed by their country code name. i.e.: <br/>
13 * <p>For Deutch the file should be named: ExceptionsBundle_de.properties <br/>
14 * For Portugues the file should be named: ExceptionsBundle_pt.properties <p/>
15 * This is defined by the constant {@link ExceptionKey#BUNDLE_NAME}.
16 *
17 * Each key on the message file should be parameterized in the enumeration {@link ExceptionKey}, <br/>
18 * otherwise it wont throw the message correctly.
19 *
20 * @author Mário Valentim Junior
21 * @since 1.0
22 * @date 12/06/2008
23 */
24 public abstract class BaseLocalizedException extends Exception{
25 private static final long serialVersionUID = -3919243068930356929L;
26
27 private static ResourceBundle bundle = LayoutCatalog.getInstance().getLocale() == null ?
28 PropertyResourceBundle.getBundle(ExceptionKey.BUNDLE_NAME.toString()) :
29 PropertyResourceBundle.getBundle(ExceptionKey.BUNDLE_NAME.toString(), LayoutCatalog.getInstance().getLocale()) ;
30
31 /**
32 * @see Exception#Exception()
33 */
34 public BaseLocalizedException(){
35 super();
36 }
37
38 /**
39 * Create's a new exception with the message that matches the key in the bundle exception file.
40 * This should be thrown when the message doesn't have parameters in it.
41 *
42 * @param key
43 * The key of the message on the properties file
44 * @see Exception#Exception(String)
45 */
46 public BaseLocalizedException(ExceptionKey key) {
47 super(bundle.getString(key.toString()));
48 }
49
50 /**
51 * Create's a new exception with the message that matches the key in the bundle exception file.
52 * This should be thrown when the message have parameters in it.
53 *
54 * @param key
55 * The key of the message on the properties file
56 * @param parameters
57 * The parameters of the message
58 * @see Exception#Exception(String)
59 */
60 public BaseLocalizedException(ExceptionKey key, Object[] parameters) {
61 super(MessageFormat.format(bundle.getString(key.toString()), parameters));
62 }
63
64 /**
65 * Create's a new exception with the message that matches the key in the bundle exception file. <br/>
66 * This should be thrown when the message have parameters in it and there's a root exception that caused this message. <br/>
67 *
68 * @param key
69 * The key of the message on the properties file
70 * @param parameters
71 * The parameters of the message
72 * @param cause
73 * The root cause of the exception
74 * @see Exception#Exception(String, Throwable)
75 */
76 public BaseLocalizedException(ExceptionKey key, Object[] parameters, Throwable cause) {
77 super(MessageFormat.format(bundle.getString(key.toString()), parameters), cause);
78 }
79
80 /**
81 * Create's a new exception with the message that matches the key in the bundle exception file. <br/>
82 * This should be thrown when the message doesn't have parameters in it and there's a root exception that caused this message. <br/>
83 *
84 * @param key
85 * @param cause
86 * @see Exception#Exception(String, Throwable)
87 */
88 public BaseLocalizedException(ExceptionKey key, Throwable cause) {
89 super(bundle.getString(key.toString()), cause);
90 }
91
92 /**
93 * Create a new base exception that encapsulates a root exception.
94 *
95 * @param cause
96 * The root cause of the exception
97 * @see Exception#Exception(Throwable)
98 */
99 public BaseLocalizedException(Throwable cause) {
100 super(cause);
101 }
102
103 }