+ m_schema.ensureDbInitialized(con);
+ messageMap.loadIds(con, m_driver);
+ }
+ catch (SQLException exc) {
+ reportUnableToConnect(pw, exc);
+ return;
+ }
+
+ Analyzer analyzer = new Analyzer(messageMap);
+ Analysis analysis = analyzer.analyze(pw, workDir, m_fbp, m_projName, m_buildNum);
+ if (null == analysis) {
+ pw.println(trans(CfbBundle.ANALYSIS_FAILED));
+ return;
+ }
+
+ try (Connection con = m_driver.connect(m_host, m_port, m_dbName, m_user, m_pass)) {
+ DbStore store = new DbStore(con, m_driver, messageMap.getColl());
+
+ store.put(analysis);
+ Analysis prior = store.getPrior(analysis);
+ Delta delta = new Delta(prior, analysis);
+
+ HtmlReport report = new HtmlReport(m_bundle, messageMap.getColl(), delta);
+ if (null != m_output) {
+ report.write(m_output);
+ }
+
+ Notifier notifier = new Notifier(m_bundle, m_config);
+ notifier.sendEmailIfNeeded(pw, report);
+ }
+ catch (SQLException exc) {
+ reportUnableToConnect(pw, exc);
+ return;
+ }
+ }
+
+ private void reportUnableToConnect(PrintWriter pw, SQLException exc) {
+ String cannotConnectFormat = trans(CfbBundle.CANNOT_CONNECT);
+ String cannotConnect = MessageFormat.format(cannotConnectFormat, m_host, ""+m_port, m_dbName, m_user);
+ exc.printStackTrace(pw);
+ SQLException next = exc.getNextException();
+ while (null != next) {
+ next.printStackTrace(pw);
+ next = next.getNextException();