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;
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.CATEGORYID,
+ CfbSchema.CATEGORY };
+ Table[] tables = { CfbSchema.CATEGORIES };
+ Condition[] conditions = { };
+ List<Row> 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.BUGID, CfbSchema.TYPE };
+ Table[] tables = { CfbSchema.BUGS };
+ Condition[] conditions = { };
+ List<Row> 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;
String langName = locale.getLanguage();
- File msgXml = new File(findBugsDir.getAbsolutePath() + File.separator + MESSAGES + "_" + langName + "." + XML);
+ String basePath = findBugsDir.getAbsolutePath() + File.separator + "etc" + File.separator;
+
+ File msgXml = new File(basePath + MESSAGES + "_" + langName + "." + XML);
if (! msgXml.canRead()) {
- msgXml = new File(findBugsDir.getAbsolutePath() + File.separator + MESSAGES + "." + XML);
+ msgXml = new File(basePath + MESSAGES + "." + XML);
}
if (! msgXml.canRead()) {
}
+ // Parse the FindBugs messages.xml file
void parse(InputSource xml) throws FileNotFoundException, IOException, SAXException
{
m_msgColl = new MessageCollection();