Add ability to output HTML report of differences found between two versions.
[cfb.git] / prod / net / jaekl / cfb / CFB.java
index d202d6fcb518b1ee54697588fc6c0204fd92e4b7..94ef08f8a996cecf7ce681574b95bc3fd1ad62f9 100644 (file)
@@ -19,6 +19,7 @@ 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.db.CfbSchema;
 import net.jaekl.cfb.db.TypeMismatchException;
@@ -50,6 +51,7 @@ public class CFB {
        String m_pass;  // db password
        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();
@@ -66,19 +68,21 @@ public class CFB {
                m_user = "user";
                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("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("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;
        }
@@ -100,10 +104,13 @@ public class CFB {
                        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"));
                        }
@@ -192,7 +199,9 @@ 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());
+                       report.write(m_output, delta);
                }
                catch (SQLException exc) {
                        reportUnableToConnect(pw, exc);