import net.jaekl.cfb.analyze.Analysis;
import net.jaekl.cfb.analyze.Analyzer;
import net.jaekl.cfb.analyze.Delta;
+import net.jaekl.cfb.analyze.FBMsgFileNotFoundException;
import net.jaekl.cfb.analyze.HtmlReport;
import net.jaekl.cfb.analyze.MessageMap;
import net.jaekl.cfb.analyze.Notifier;
import net.jaekl.cfb.db.driver.PostgresqlDriver;
import net.jaekl.cfb.store.DbStore;
import net.jaekl.cfb.store.StoreException;
+import net.jaekl.cfb.util.Env;
import net.jaekl.qd.xml.XmlParseException;
import org.apache.commons.cli.CommandLine;
import org.xml.sax.SAXException;
public class CFB {
+ public static final String FINDBUGS_HOME = "FINDBUGS_HOME"; // name of the FINDBUGS_HOME environment variable
+
DbDriver m_driver;
CfbSchema m_schema;
volatile static CfbBundle m_bundle = null;
m_driver = new PostgresqlDriver();
m_schema = new CfbSchema(m_driver);
m_locale = locale;
- m_bundle = null;
m_config = new Config();
m_configFile = new File("config.properties");
m_output = null;
}
- CfbBundle getBundle() {
+ static CfbBundle getBundle(Locale locale) {
CfbBundle bundle = m_bundle;
if (null == bundle) {
synchronized(CFB.class) {
if (null == m_bundle) {
- m_bundle = bundle = CfbBundle.getInst(m_locale);
+ m_bundle = bundle = CfbBundle.getInst(locale);
}
}
}
help.printHelp(pw, 80, getClass().getName(), "", opt, 0, 0, "", true);
}
- String trans(String key) {
- return getBundle().get(key);
+ String trans(String key, Object... params) {
+ return getBundle(m_locale).get(key, params);
}
String getenv(String varName) {
File findBugsDir = getFindBugsDir();
File workDir = new File(".");
MessageMap messageMap = new MessageMap();
- messageMap.load(findBugsDir, Locale.getDefault(Category.DISPLAY));
+ try {
+ messageMap.load(findBugsDir, Locale.getDefault(Category.DISPLAY));
+ }
+ catch (FBMsgFileNotFoundException exc) {
+ reportException(pw, exc);
+ return;
+ }
if (!ensureDbInitialized(pw, messageMap)) {
return;
Analysis prior = store.getPrior(analysis);
Delta delta = new Delta(prior, analysis);
- HtmlReport report = new HtmlReport(getBundle(), messageMap.getColl(), delta);
+ HtmlReport report = new HtmlReport(getBundle(m_locale), messageMap.getColl(), delta);
if (null != m_output) {
report.write(m_output);
}
- Notifier notifier = new Notifier(getBundle(), m_config);
+ Notifier notifier = new Notifier(getBundle(m_locale), m_config);
notifier.sendEmailIfNeeded(pw, report);
}
catch (StoreException exc) {
reportUnableToConnect(pw, exc);
}
}
+
+ void reportException(PrintWriter pw, FBMsgFileNotFoundException exc) {
+ exc.printStackTrace(pw);
+
+ pw.println(trans(CfbBundle.CANNOT_LOAD_FBMSG_FILE, exc.getFilename()));
+
+ String fbHome = Env.get(FINDBUGS_HOME);
+ if (null == fbHome) {
+ pw.println(trans(CfbBundle.FINDBUGS_HOME_IS_NOT_SET, FINDBUGS_HOME));
+ }
+ else {
+ pw.println(trans(CfbBundle.FINDBUGS_HOME_IS_SET_TO, FINDBUGS_HOME, fbHome));
+ }
+
+ }
private void reportUnableToConnect(PrintWriter pw, SQLException exc) {
String cannotConnectFormat = trans(CfbBundle.CANNOT_CONNECT);