Address some edge cases related to bootstrapping a fresh system.
[cfb.git] / prod / net / jaekl / cfb / store / DbStore.java
index ed22291387c14c8047593d7b1a11932633df6361..bbf2a721340ec3b6792e3d5721009b72fd992671 100644 (file)
@@ -3,9 +3,7 @@ package net.jaekl.cfb.store;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.util.List;
-import java.util.Locale;
 
-import net.jaekl.cfb.CfbBundle;
 import net.jaekl.cfb.analyze.Analysis;
 import net.jaekl.cfb.db.CfbSchema;
 import net.jaekl.cfb.db.Column;
@@ -34,7 +32,7 @@ public class DbStore {
                m_msgColl = msgColl;
        }
 
-       public Analysis getPrior(Analysis analysis) throws SQLException, TypeMismatchException {
+       public Analysis getPrior(Analysis analysis) throws SQLException, TypeMismatchException, StoreException {
                if (null == analysis) {
                        return null;
                }
@@ -47,12 +45,12 @@ public class DbStore {
        }
        
        public boolean put(Analysis analysis) throws SQLException, TypeMismatchException, StoreException {
-               CfbBundle bundle = CfbBundle.getInst(Locale.getDefault());
-               
                if (null == analysis) {
                        return false;
                }
                
+               assert (null != analysis.getProjectName());
+               
                // ----------------------------------
                // Add a run record for this analysis
                
@@ -89,10 +87,10 @@ public class DbStore {
                        Location thirdLoc  = (locs.size() > 2) ? locs.get(2) : null;
                        
                        if (BugPattern.UNKNOWN.getId() == bugId) {
-                               throw new StoreException(bundle.get(CfbBundle.BUG_TYPE_UNKNOWN, ""+bug.getType()));
+                               throw new StoreException(StoreException.Type.UNKNOWN_PATTERN, ""+bug.getType());
                        }
                        if (BugCategory.UNKNOWN.getId() == categoryId) {
-                               throw new StoreException(bundle.get(CfbBundle.BUG_CATEGORY_UNKNOWN, ""+bug.getCategory()));
+                               throw new StoreException(StoreException.Type.UNKNOWN_CATEGORY, ""+bug.getCategory());
                        }
                        
                        values[row][0] = foundId;
@@ -131,7 +129,7 @@ public class DbStore {
        }
        
        
-       Location getLoc(Long locId) throws SQLException, TypeMismatchException
+       Location getLoc(Long locId) throws TypeMismatchException, StoreException
        {
                if (null == locId) {
                        return null;
@@ -141,16 +139,21 @@ public class DbStore {
                Table[] tables = { CfbSchema.LOCATIONS };
                Condition[] conditions = { new Condition(CfbSchema.LOCID, locId, Operation.EQUAL) };
                
-               Row row = m_driver.selectExactlyOne(m_con, columns, tables, conditions);
-               
-               String className = row.getString(0);
-               String methodName = row.getString(1);
-               String methodRole = row.getString(2);
-               Integer startLine = row.getInt(3);
-               Integer endLine = row.getInt(4);
-               
-               Location loc = new Location(locId, className, methodName, methodRole, startLine, endLine);
-               return loc;
+               try {
+                       Row row = m_driver.selectExactlyOne(m_con, columns, tables, conditions);
+
+                       String className = row.getString(0);
+                       String methodName = row.getString(1);
+                       String methodRole = row.getString(2);
+                       Integer startLine = row.getInt(3);
+                       Integer endLine = row.getInt(4);
+                       
+                       Location loc = new Location(locId, className, methodName, methodRole, startLine, endLine);
+                       return loc;
+               }
+               catch (SQLException exc) {
+                       throw new StoreException(exc, StoreException.Type.INVALID_LOC_ID, ""+locId);
+               }
        }
        
        Long getLocId(Location loc) throws SQLException, TypeMismatchException 
@@ -222,7 +225,7 @@ public class DbStore {
                return getVarId(vars.get(0));
        }
        
-       LocalVariable getVar(Long varId) throws SQLException, TypeMismatchException
+       LocalVariable getVar(Long varId) throws SQLException, TypeMismatchException, StoreException
        {
                if (null == varId) {
                        return null;
@@ -234,7 +237,7 @@ public class DbStore {
                
                List<Row> result = m_driver.select(m_con, columns, tables, conditions);
                if (result.size() < 1) {
-                       throw new SQLException("No variable found for ID " + varId);
+                       throw new StoreException(StoreException.Type.INVALID_VAR_ID, ""+varId);
                }
                if (result.size() > 1) {
                        throw new SQLException("Too many matches (" + result.size() + ") found for variable ID " + varId);
@@ -315,7 +318,7 @@ public class DbStore {
                return rows.get(0).getLong(0);
        }
        
-       Analysis getAnalysis(Long analysisId) throws SQLException, TypeMismatchException
+       Analysis getAnalysis(Long analysisId) throws SQLException, TypeMismatchException, StoreException
        {
                Column[] columns = { CfbSchema.PROJNAME, CfbSchema.VERSION, CfbSchema.STARTTIME, CfbSchema.ENDTIME };
                Table[] tables = { CfbSchema.RUNS };
@@ -343,7 +346,7 @@ public class DbStore {
                return prior;
        }
        
-       BugCollection getBugCollection(Long runId) throws SQLException, TypeMismatchException 
+       BugCollection getBugCollection(Long runId) throws SQLException, TypeMismatchException, StoreException 
        {
                Column[] columns = {
                                CfbSchema.FOUNDID,