X-Git-Url: http://jaekl.net/gitweb/?p=cfb.git;a=blobdiff_plain;f=prod%2Fnet%2Fjaekl%2Fcfb%2FCFB.java;h=c02aa546aa0f7efe1bd29b36f81703127e3e6497;hp=94ef08f8a996cecf7ce681574b95bc3fd1ad62f9;hb=2769cf82ccae57ee3716aecc9bd694be1f115d92;hpb=1b35159cf2ff8d86b037f7d442f7b1f4c8e3b2f3 diff --git a/prod/net/jaekl/cfb/CFB.java b/prod/net/jaekl/cfb/CFB.java index 94ef08f..c02aa54 100644 --- a/prod/net/jaekl/cfb/CFB.java +++ b/prod/net/jaekl/cfb/CFB.java @@ -9,7 +9,9 @@ package net.jaekl.cfb; import java.io.File; import java.io.IOException; +import java.io.OutputStreamWriter; import java.io.PrintWriter; +import java.nio.charset.Charset; import java.sql.Connection; import java.sql.SQLException; import java.text.MessageFormat; @@ -21,6 +23,7 @@ import net.jaekl.cfb.analyze.Analyzer; import net.jaekl.cfb.analyze.Delta; import net.jaekl.cfb.analyze.HtmlReport; import net.jaekl.cfb.analyze.MessageMap; +import net.jaekl.cfb.analyze.Notifier; import net.jaekl.cfb.db.CfbSchema; import net.jaekl.cfb.db.TypeMismatchException; import net.jaekl.cfb.db.driver.DbDriver; @@ -41,7 +44,10 @@ public class CFB { CfbBundle m_bundle; Locale m_locale; + Config m_config; + // Command-line parameters + File m_configFile; String m_dbName; // db name File m_fbp; // FindBugsProject file File m_fbDir; // Directory where FindBugs is installed @@ -49,6 +55,7 @@ public class CFB { int m_port; // db port String m_user; // db user String m_pass; // db password + String m_projName; // project (module) name String m_buildNum; // build number (version) boolean m_removeSchema; // purge DB schema File m_output; // File to which we should write our output (report) @@ -58,7 +65,9 @@ public class CFB { m_schema = new CfbSchema(m_driver); m_locale = locale; m_bundle = CfbBundle.getInst(m_locale); + m_config = new Config(); + m_configFile = new File("config.properties"); m_dbName = "CFB"; m_fbp = null; m_fbDir = null; @@ -66,6 +75,7 @@ public class CFB { m_port = 5432; m_pass = ""; m_user = "user"; + m_projName = null; m_buildNum = null; m_removeSchema = false; m_output = null; @@ -74,10 +84,12 @@ public class CFB { Options createOptions() { Options opt = new Options(); + opt.addOption("c", "config", true, "Properties configuration file"); opt.addOption("d", "dbname", true, "DB name"); opt.addOption(null, "drop-tables", false, "Remove database schema (drop all data)"); opt.addOption("f", "fbp", true, "FindBugsProject file"); opt.addOption("h", "host", true, "DB hostname"); + opt.addOption("j", "project", true, "proJect name"); opt.addOption("n", "number", true, "Build number (version)"); opt.addOption("o", "outfile", true, "Output report filename"); opt.addOption("p", "pass", true, "DB password"); @@ -92,6 +104,9 @@ public class CFB { try { CommandLine line = new GnuParser().parse(opt, args); + if (line.hasOption("c")) { + m_configFile = new File(line.getOptionValue("c")); + } if (line.hasOption("d")) { m_dbName = line.getOptionValue("d"); } @@ -101,6 +116,9 @@ public class CFB { if (line.hasOption("h")) { m_host = line.getOptionValue("h"); } + if (line.hasOption("j")) { + m_projName = line.getOptionValue("j"); + } if (line.hasOption("n")) { m_buildNum = line.getOptionValue("n"); } @@ -158,13 +176,20 @@ public class CFB { if (null != findBugsDir) { m_fbDir = new File(findBugsDir); } - } + } + + void readConfig() throws IOException { + if (null != m_configFile) { + m_config.readFile(m_configFile); + } + } void doMain(PrintWriter pw, String[] args) throws SQLException, IOException, XmlParseException, SAXException, TypeMismatchException { initArgs(); // read environment and system properties if ( ! parseArgs(pw, args) ) { return; } + readConfig(); File findBugsDir = getFindBugsDir(); File workDir = new File("."); @@ -187,7 +212,7 @@ public class CFB { } Analyzer analyzer = new Analyzer(messageMap); - Analysis analysis = analyzer.analyze(pw, workDir, m_fbp, m_buildNum); + Analysis analysis = analyzer.analyze(pw, workDir, m_fbp, m_projName, m_buildNum); if (null == analysis) { pw.println(trans(CfbBundle.ANALYSIS_FAILED)); return; @@ -200,8 +225,13 @@ public class CFB { Analysis prior = store.getPrior(analysis); Delta delta = new Delta(prior, analysis); - HtmlReport report = new HtmlReport(m_bundle, messageMap.getColl()); - report.write(m_output, delta); + 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); @@ -224,7 +254,7 @@ public class CFB { public static void main(String[] args) { CFB cfb = new CFB(Locale.getDefault()); - try (PrintWriter pw = new PrintWriter(System.out)){ + try (PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out, Charset.defaultCharset()))) { cfb.doMain(pw, args); pw.flush(); } catch (SQLException | IOException | XmlParseException | SAXException | TypeMismatchException exc) {