X-Git-Url: http://jaekl.net/gitweb/?p=cfb.git;a=blobdiff_plain;f=prod%2Fnet%2Fjaekl%2Fcfb%2FCFB.java;h=c02aa546aa0f7efe1bd29b36f81703127e3e6497;hp=d202d6fcb518b1ee54697588fc6c0204fd92e4b7;hb=2769cf82ccae57ee3716aecc9bd694be1f115d92;hpb=769f0f2e9b90516e68246b551a4c68f953018c72 diff --git a/prod/net/jaekl/cfb/CFB.java b/prod/net/jaekl/cfb/CFB.java index d202d6f..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; @@ -19,7 +21,9 @@ import java.util.Locale.Category; import net.jaekl.cfb.analyze.Analysis; 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; @@ -40,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 @@ -48,15 +55,19 @@ 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) CFB(Locale locale) { m_driver = new PostgresqlDriver(); 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; @@ -64,21 +75,26 @@ public class CFB { m_port = 5432; m_pass = ""; m_user = "user"; + m_projName = null; m_buildNum = null; m_removeSchema = false; + m_output = null; } Options createOptions() { Options opt = new Options(); - opt.addOption("d", "dbname", true, "DB name"); - opt.addOption("f", "fbp", true, "FindBugsProject file"); - opt.addOption("h", "host", true, "DB hostname"); - opt.addOption("n", "number", true, "Build number (version)"); - opt.addOption("p", "pass", true, "DB password"); - opt.addOption("r", "remove", false, "Remove database schema (drop all data)"); - opt.addOption("t", "port", true, "DB port"); - opt.addOption("u", "user", true, "DB username"); + 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"); + opt.addOption("t", "port", true, "DB port"); + opt.addOption("u", "user", true, "DB username"); return opt; } @@ -88,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"); } @@ -97,13 +116,19 @@ 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"); } + if (line.hasOption("o")) { + m_output = new File(line.getOptionValue("o")); + } if (line.hasOption("p")) { m_pass = line.getOptionValue("p"); } - m_removeSchema = line.hasOption("r"); + m_removeSchema = line.hasOption("drop-tables"); if (line.hasOption("t")) { m_port = Integer.parseInt(line.getOptionValue("t")); } @@ -151,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("."); @@ -180,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; @@ -192,7 +224,14 @@ public class CFB { store.put(analysis); Analysis prior = store.getPrior(analysis); Delta delta = new Delta(prior, analysis); - delta.dump(pw); + + 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); @@ -215,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) {