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;
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;
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
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)
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;
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("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");
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");
}
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 (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(".");
}
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;
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);
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) {