Address some edge cases related to bootstrapping a fresh system.
[cfb.git] / prod / net / jaekl / cfb / CfbBundle.java
1 package net.jaekl.cfb;
2
3 // Copyright (C) 2015 Christian Jaekl
4
5 import java.text.MessageFormat;
6 import java.util.Locale;
7 import java.util.MissingResourceException;
8 import java.util.ResourceBundle;
9 import java.util.concurrent.ConcurrentHashMap;
10
11 import net.jaekl.qd.QDBundleFactory;
12
13 public class CfbBundle {
14         public static final String ANALYSIS_FAILED = "analysis.failed";
15         public static final String ANALYZED_AT = "analyzed.at";
16         public static final String BUG_CATEGORY_UNKNOWN = "bug.category.unknown";
17         public static final String BUG_TYPE_UNKNOWN = "bug.type.unknown";
18         public static final String CANNOT_CONNECT = "cannot.connect.to.db";
19         public static final String CANNOT_EXEC = "cannot.exec";
20         public static final String CANNOT_LOAD_FBMSG_FILE = "cannot.load.fbmsg.file";
21         public static final String CANNOT_SEND_MAIL = "cannot.send.mail";
22         public static final String CFB = "cfb";
23         public static final String CFB_MAIL_SUBJECT = "cfb.mail.subject";
24         public static final String CFB_REPORT = "cfb.report";
25         public static final String COMPARING_RUNS = "comparing.runs";
26         public static final String COMPARING_VERSIONS = "comparing.versions";
27         public static final String FINDBUGS_HOME_IS_NOT_SET = "findbugs.home.is.not.set";
28         public static final String FINDBUGS_HOME_IS_SET_TO = "findbugs.home.is.set.to";
29         public static final String FIXED_BUGS = "fixed.bugs";
30         public static final String INVOKE_WITH_HELP_FOR_HELP = "invoke.with.help.for.help";
31         public static final String MUST_SPECIFY_FBP_FILE = "must.specify.fbp.file";
32         public static final String NEW_BUGS = "new.bugs";
33         public static final String NEW_VERSION = "new.version";
34         public static final String NO_EARLIER_RUN = "no.earlier.run";
35         public static final String NUM_BUGS = "num.bugs";
36         public static final String NUM_BUGS_OLD = "num.bugs.old";
37         public static final String OLD_BUGS = "old.bugs";
38         public static final String OLD_VERSION = "old.version";
39         public static final String STDERR_WAS = "stderr.was";
40         public static final String STDOUT_WAS = "stdout.was";
41         public static final String VERSION_NUM = "version.num";
42         
43         final static String BUNDLE_NAME = "cfb";
44         
45         static ConcurrentHashMap<Locale, CfbBundle> m_bundleMap = new ConcurrentHashMap<Locale, CfbBundle>();
46         
47         ResourceBundle m_bundle;
48         
49         public static CfbBundle getInst(Locale locale) {
50                 CfbBundle result = m_bundleMap.get(locale);
51                 if (null == result) {
52                         synchronized(CfbBundle.class) {
53                                 result = m_bundleMap.get(locale);
54                                 if (null == result) {
55                                         result = new CfbBundle(locale); 
56                                 }
57                                 m_bundleMap.put(locale, result);
58                         }
59                 }
60                 return result;
61         }
62         
63         private CfbBundle(Locale locale) {
64                 m_bundle = QDBundleFactory.getInst().getBundle(BUNDLE_NAME, locale); 
65         }
66         
67         // This constructor is intended only for use during unit testing.
68         CfbBundle() {
69                 m_bundle = null;
70         }
71         
72         public String get(String key, Object... arguments) {
73                 try {
74                         if (null != m_bundle) {
75                                 String pattern = m_bundle.getString(key);
76                                 return MessageFormat.format(pattern, arguments);
77                         }
78                 }
79                 catch (MissingResourceException exc) {
80                         // Make it clear that something has gone wrong.
81                         exc.printStackTrace();  
82                         // Fall through to the fallback behaviour below
83                 }
84                 
85                 return fallbackGet(key, arguments);
86         }
87         
88         String fallbackGet(String key, Object... arguments) {
89                 StringBuilder sb = new StringBuilder("[" + key + "]");
90                 for (Object obj : arguments) {
91                         sb.append("[" + obj + "]");
92                 }
93                 return sb.toString();
94                 
95         }
96 }