X-Git-Url: http://jaekl.net/gitweb/?a=blobdiff_plain;f=prod%2Fnet%2Fjaekl%2Fcfb%2Fanalyze%2FMessageMap.java;h=0db78babfdaa2974a0c4d366841ed10c5a71f33f;hb=598968590bf67cf87d3243878f7ebb2ff8015065;hp=97180030af8a9b80e109278532fe81f4afc29436;hpb=58107a0cbb49652e7772ce80fb73d2c027590eb1;p=cfb.git diff --git a/prod/net/jaekl/cfb/analyze/MessageMap.java b/prod/net/jaekl/cfb/analyze/MessageMap.java index 9718003..0db78ba 100644 --- a/prod/net/jaekl/cfb/analyze/MessageMap.java +++ b/prod/net/jaekl/cfb/analyze/MessageMap.java @@ -4,8 +4,20 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; import java.util.Locale; +import net.jaekl.cfb.db.CfbSchema; +import net.jaekl.cfb.db.Column; +import net.jaekl.cfb.db.Condition; +import net.jaekl.cfb.db.Row; +import net.jaekl.cfb.db.Table; +import net.jaekl.cfb.db.TypeMismatchException; +import net.jaekl.cfb.db.driver.DbDriver; +import net.jaekl.cfb.xml.messages.BugCategory; +import net.jaekl.cfb.xml.messages.BugPattern; import net.jaekl.cfb.xml.messages.MessageCollection; import net.jaekl.qd.xml.ParseErrorHandler; import net.jaekl.qd.xml.ParseHandler; @@ -30,6 +42,59 @@ public class MessageMap { public MessageCollection getColl() { return m_msgColl; } public File getFindBugsDir() { return m_findBugsDir; } + // Load the list of primary keys (sequence numbers) from the database + public void loadIds(Connection con, DbDriver driver) throws SQLException, TypeMismatchException + { + loadCategoryIds(con, driver); + loadBugPatternIds(con, driver); + + } + + void loadCategoryIds(Connection con, DbDriver driver) throws SQLException, TypeMismatchException + { + Column[] columns = { CfbSchema.CATEGORIES.getColumn(CfbSchema.CATEGORYID), + CfbSchema.CATEGORIES.getColumn(CfbSchema.CATEGORY) }; + Table[] tables = { CfbSchema.CATEGORIES }; + Condition[] conditions = { }; + List rows = driver.select(con, columns, tables, conditions); + + for (Row row : rows) { + long catId = row.getLong(0); + String catName = row.getString(1); + + BugCategory cat = getColl().getCategory(catName); + if (null == cat) { + throw new SQLException("Database result (" + catId + ", \"" + catName + "\") not found in messages.xml. " + + "Perhaps your database and findbugs versions are out of sync?"); + } + + cat.setId(catId); + } + } + + void loadBugPatternIds(Connection con, DbDriver driver) throws SQLException, TypeMismatchException + { + Column[] columns = { CfbSchema.BUGS.getColumn(CfbSchema.BUGID), + CfbSchema.BUGS.getColumn(CfbSchema.TYPE) }; + Table[] tables = { CfbSchema.BUGS }; + Condition[] conditions = { }; + List rows = driver.select(con, columns, tables, conditions); + + for (Row row: rows) { + long bugId = row.getLong(0); + String type = row.getString(1); + + BugPattern bug = getColl().getPattern(type); + if (null == bug) { + throw new SQLException("Database result (" + bugId + ", \"" + type + "\") not found in messages.xml. " + + "Perhaps your database and findbugs versions are out of sync?"); + } + + bug.setId(bugId); + } + } + + // Load the list of bug patterns and categories from the FindBugs messages.xml file. public void load(File findBugsDir, Locale locale) throws FileNotFoundException, IOException, SAXException { m_findBugsDir = findBugsDir; @@ -51,6 +116,7 @@ public class MessageMap { } + // Parse the FindBugs messages.xml file void parse(InputSource xml) throws FileNotFoundException, IOException, SAXException { m_msgColl = new MessageCollection();