Przeglądaj źródła

Remove DB fluff layer

Winston Li 10 lat temu
rodzic
commit
cfc02bbcc8
15 zmienionych plików z 102 dodań i 157 usunięć
  1. 20 0
      services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/db/DBInitException.java
  2. 0 106
      services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/db/SqliteDBStore.java
  3. 1 1
      services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/db/sqlite/SQLQuery.java
  4. 1 1
      services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/db/sqlite/SQLUpdate.java
  5. 70 39
      services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/db/sqlite/SqliteDBStore.java
  6. 1 1
      services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/db/sql/query/GetLatestVersionForProjectSQLQuery.java
  7. 1 1
      services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/db/sql/query/GetPathForURLInProjectSQLQuery.java
  8. 1 1
      services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/db/sql/query/GetProjectNamesSQLQuery.java
  9. 1 1
      services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/db/sql/update/create/CreateIndexURLIndexStore.java
  10. 1 1
      services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/db/sql/update/create/CreateProjectsTableSQLUpdate.java
  11. 1 1
      services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/db/sql/update/create/CreateURLIndexStoreSQLUpdate.java
  12. 1 1
      services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/db/sql/update/delete/DeleteFilesForProjectSQLUpdate.java
  13. 1 1
      services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/db/sql/update/insert/AddURLIndexSQLUpdate.java
  14. 1 1
      services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/db/sql/update/insert/SetProjectSQLUpdate.java
  15. 1 1
      services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/GitBridgeServer.java

+ 20 - 0
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/db/DBInitException.java

@@ -0,0 +1,20 @@
+package uk.ac.ic.wlgitbridge.bridge.db;
+
+/**
+ * Created by winston on 23/08/2016.
+ */
+public class DBInitException extends RuntimeException {
+
+    public DBInitException(String message) {
+        super(message);
+    }
+
+    public DBInitException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public DBInitException(Throwable cause) {
+        super(cause);
+    }
+
+}

+ 0 - 106
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/db/SqliteDBStore.java

@@ -1,106 +0,0 @@
-package uk.ac.ic.wlgitbridge.bridge.db;
-
-import uk.ac.ic.wlgitbridge.data.model.db.sql.SQLiteWLDatabase;
-import uk.ac.ic.wlgitbridge.util.Log;
-
-import java.io.File;
-import java.sql.SQLException;
-import java.sql.Timestamp;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Created by winston on 20/08/2016.
- */
-public class SqliteDBStore implements DBStore {
-
-    private final SQLiteWLDatabase database;
-
-    public SqliteDBStore(File dbFile) {
-        try {
-            database = new SQLiteWLDatabase(dbFile);
-        } catch (SQLException e) {
-            throw new RuntimeException(e);
-        } catch (ClassNotFoundException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Override
-    public List<String> getProjectNames() {
-        try {
-            return database.getProjectNames();
-        } catch (SQLException e) {
-            throw new RuntimeException(e);
-        }
-    }
-    @Override
-    public void setLatestVersionForProject(String project, int versionID) {
-        try {
-            database.setVersionIDForProject(project, versionID);
-            Log.info("[{}] Wrote latest versionId: {}", project, versionID);
-        } catch (SQLException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Override
-    public int getLatestVersionForProject(String project) {
-        try {
-            return database.getVersionIDForProjectName(project);
-        } catch (SQLException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Override
-    public void addURLIndexForProject(String projectName, String url, String path) {
-        try {
-            database.addURLIndex(projectName, url, path);
-            Log.info("[{}] Wrote url index: {} -> {}", projectName, url, path);
-        } catch (SQLException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Override
-    public void deleteFilesForProject(String project, String... files) {
-        try {
-            database.deleteFilesForProject(project, files);
-            Log.info(
-                    "[{}] Deleting from url index: {}",
-                    project,
-                    Arrays.toString(files)
-            );
-        } catch (SQLException e) {
-            throw new RuntimeException(e);
-        }
-    }
-    @Override
-    public String getPathForURLInProject(String projectName, String url) {
-        try {
-            return database.getPathForURLInProject(projectName, url);
-        } catch (SQLException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Override
-    public String getOldestUnswappedProject() {
-        try {
-            return database.getOldestUnswappedProject();
-        } catch (SQLException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Override
-    public void setLastAccessedTime(String projectName, Timestamp time) {
-        try {
-            database.setLastAccessedTime(projectName, time);
-        } catch (SQLException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-}

+ 1 - 1
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/db/sql/SQLQuery.java → services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/db/sqlite/SQLQuery.java

@@ -1,4 +1,4 @@
-package uk.ac.ic.wlgitbridge.data.model.db.sql;
+package uk.ac.ic.wlgitbridge.bridge.db.sqlite;
 
 
 import java.sql.ResultSet;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.SQLException;

+ 1 - 1
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/db/sql/SQLUpdate.java → services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/db/sqlite/SQLUpdate.java

@@ -1,4 +1,4 @@
-package uk.ac.ic.wlgitbridge.data.model.db.sql;
+package uk.ac.ic.wlgitbridge.bridge.db.sqlite;
 
 
 import java.sql.PreparedStatement;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.sql.SQLException;

+ 70 - 39
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/db/sql/SQLiteWLDatabase.java → services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/db/sqlite/SqliteDBStore.java

@@ -1,6 +1,7 @@
-package uk.ac.ic.wlgitbridge.data.model.db.sql;
+package uk.ac.ic.wlgitbridge.bridge.db.sqlite;
 
 
-import com.google.api.client.repackaged.com.google.common.base.Preconditions;
+import uk.ac.ic.wlgitbridge.bridge.db.DBInitException;
+import uk.ac.ic.wlgitbridge.bridge.db.DBStore;
 import uk.ac.ic.wlgitbridge.data.model.db.sql.query.GetLatestVersionForProjectSQLQuery;
 import uk.ac.ic.wlgitbridge.data.model.db.sql.query.GetLatestVersionForProjectSQLQuery;
 import uk.ac.ic.wlgitbridge.data.model.db.sql.query.GetPathForURLInProjectSQLQuery;
 import uk.ac.ic.wlgitbridge.data.model.db.sql.query.GetPathForURLInProjectSQLQuery;
 import uk.ac.ic.wlgitbridge.data.model.db.sql.query.GetProjectNamesSQLQuery;
 import uk.ac.ic.wlgitbridge.data.model.db.sql.query.GetProjectNamesSQLQuery;
@@ -14,93 +15,123 @@ import uk.ac.ic.wlgitbridge.data.model.db.sql.update.insert.SetProjectSQLUpdate;
 import java.io.File;
 import java.io.File;
 import java.sql.*;
 import java.sql.*;
 import java.util.List;
 import java.util.List;
+import java.util.stream.Stream;
 
 
 /**
 /**
  * Created by Winston on 17/11/14.
  * Created by Winston on 17/11/14.
  */
  */
-public class SQLiteWLDatabase {
+public class SqliteDBStore implements DBStore {
 
 
     private final Connection connection;
     private final Connection connection;
 
 
-    public SQLiteWLDatabase(
+    public SqliteDBStore(
             File dbFile
             File dbFile
-    ) throws SQLException, ClassNotFoundException {
+    ) {
         File parentDir = dbFile.getParentFile();
         File parentDir = dbFile.getParentFile();
-        Preconditions.checkState(
-                parentDir.exists() || parentDir.mkdirs(),
-                parentDir.getAbsolutePath() + " directory didn't exist, " +
-                        "and unable to create. Check your permissions."
-        );
-        Class.forName("org.sqlite.JDBC");
-        connection = DriverManager.getConnection(
-                "jdbc:sqlite:" + dbFile.getAbsolutePath()
-        );
+        if (!parentDir.exists() && !parentDir.mkdirs()) {
+            throw new DBInitException(
+                    parentDir.getAbsolutePath() + " directory didn't exist, " +
+                            "and unable to create. Check your permissions."
+            );
+        }
+        try {
+            Class.forName("org.sqlite.JDBC");
+        } catch (ClassNotFoundException e) {
+            throw new DBInitException(e);
+        }
+        try {
+            connection = DriverManager.getConnection(
+                    "jdbc:sqlite:" + dbFile.getAbsolutePath()
+            );
+        } catch (SQLException e) {
+            throw new DBInitException("Unable to connect to DB", e);
+        }
         createTables();
         createTables();
     }
     }
 
 
-    public void setVersionIDForProject(
+    @Override
+    public List<String> getProjectNames() {
+        return query(new GetProjectNamesSQLQuery());
+    }
+
+    @Override
+    public void setLatestVersionForProject(
             String projectName,
             String projectName,
             int versionID
             int versionID
-    ) throws SQLException {
+    ) {
         update(new SetProjectSQLUpdate(projectName, versionID));
         update(new SetProjectSQLUpdate(projectName, versionID));
     }
     }
 
 
-    public void addURLIndex(
+    @Override
+    public int getLatestVersionForProject(
+            String projectName
+    ) {
+        return query(new GetLatestVersionForProjectSQLQuery(projectName));
+    }
+
+    @Override
+    public void addURLIndexForProject(
             String projectName,
             String projectName,
             String url,
             String url,
             String path
             String path
-    ) throws SQLException {
+    ) {
         update(new AddURLIndexSQLUpdate(projectName, url, path));
         update(new AddURLIndexSQLUpdate(projectName, url, path));
     }
     }
 
 
+    @Override
     public void deleteFilesForProject(
     public void deleteFilesForProject(
             String projectName,
             String projectName,
             String... paths
             String... paths
-    ) throws SQLException {
+    ) {
         update(new DeleteFilesForProjectSQLUpdate(projectName, paths));
         update(new DeleteFilesForProjectSQLUpdate(projectName, paths));
     }
     }
 
 
-    public int getVersionIDForProjectName(
-            String projectName
-    ) throws SQLException {
-        return query(new GetLatestVersionForProjectSQLQuery(projectName));
-    }
-
+    @Override
     public String getPathForURLInProject(
     public String getPathForURLInProject(
             String projectName,
             String projectName,
             String url
             String url
-    ) throws SQLException {
+    ) {
         return query(new GetPathForURLInProjectSQLQuery(projectName, url));
         return query(new GetPathForURLInProjectSQLQuery(projectName, url));
     }
     }
 
 
-    public List<String> getProjectNames() throws SQLException {
-        return query(new GetProjectNamesSQLQuery());
-    }
-
-    public String getOldestUnswappedProject() throws SQLException {
+    @Override
+    public String getOldestUnswappedProject() {
         throw new UnsupportedOperationException();
         throw new UnsupportedOperationException();
     }
     }
 
 
+    @Override
     public void setLastAccessedTime(
     public void setLastAccessedTime(
             String projectName,
             String projectName,
             Timestamp time
             Timestamp time
-    ) throws SQLException {
+    ) {
         throw new UnsupportedOperationException();
         throw new UnsupportedOperationException();
     }
     }
 
 
-    private void createTables() throws SQLException {
-        final SQLUpdate[] createTableUpdates = {
+    private void createTables() {
+        Stream.of(
                 new CreateProjectsTableSQLUpdate(),
                 new CreateProjectsTableSQLUpdate(),
                 new CreateURLIndexStoreSQLUpdate(),
                 new CreateURLIndexStoreSQLUpdate(),
                 new CreateIndexURLIndexStore()
                 new CreateIndexURLIndexStore()
-        };
+        ).forEach(this::update);
+    }
 
 
-        for (SQLUpdate update : createTableUpdates) {
-            update(update);
+    private void update(SQLUpdate update) {
+        try {
+            doUpdate(update);
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private <T> T query(SQLQuery<T> query) {
+        try {
+            return doQuery(query);
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
         }
         }
     }
     }
 
 
-    private void update(SQLUpdate update) throws SQLException {
+    private void doUpdate(SQLUpdate update) throws SQLException {
         PreparedStatement statement = null;
         PreparedStatement statement = null;
         try {
         try {
             statement = connection.prepareStatement(update.getSQL());
             statement = connection.prepareStatement(update.getSQL());
@@ -113,7 +144,7 @@ public class SQLiteWLDatabase {
         }
         }
     }
     }
 
 
-    private <T> T query(SQLQuery<T> query) throws SQLException {
+    private <T> T doQuery(SQLQuery<T> query) throws SQLException {
         PreparedStatement statement = null;
         PreparedStatement statement = null;
         ResultSet results = null;
         ResultSet results = null;
         try {
         try {

+ 1 - 1
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/db/sql/query/GetLatestVersionForProjectSQLQuery.java

@@ -1,6 +1,6 @@
 package uk.ac.ic.wlgitbridge.data.model.db.sql.query;
 package uk.ac.ic.wlgitbridge.data.model.db.sql.query;
 
 
-import uk.ac.ic.wlgitbridge.data.model.db.sql.SQLQuery;
+import uk.ac.ic.wlgitbridge.bridge.db.sqlite.SQLQuery;
 
 
 import java.sql.PreparedStatement;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.ResultSet;

+ 1 - 1
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/db/sql/query/GetPathForURLInProjectSQLQuery.java

@@ -1,6 +1,6 @@
 package uk.ac.ic.wlgitbridge.data.model.db.sql.query;
 package uk.ac.ic.wlgitbridge.data.model.db.sql.query;
 
 
-import uk.ac.ic.wlgitbridge.data.model.db.sql.SQLQuery;
+import uk.ac.ic.wlgitbridge.bridge.db.sqlite.SQLQuery;
 
 
 import java.sql.PreparedStatement;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.ResultSet;

+ 1 - 1
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/db/sql/query/GetProjectNamesSQLQuery.java

@@ -1,6 +1,6 @@
 package uk.ac.ic.wlgitbridge.data.model.db.sql.query;
 package uk.ac.ic.wlgitbridge.data.model.db.sql.query;
 
 
-import uk.ac.ic.wlgitbridge.data.model.db.sql.SQLQuery;
+import uk.ac.ic.wlgitbridge.bridge.db.sqlite.SQLQuery;
 
 
 import java.sql.PreparedStatement;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.ResultSet;

+ 1 - 1
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/db/sql/update/create/CreateIndexURLIndexStore.java

@@ -1,6 +1,6 @@
 package uk.ac.ic.wlgitbridge.data.model.db.sql.update.create;
 package uk.ac.ic.wlgitbridge.data.model.db.sql.update.create;
 
 
-import uk.ac.ic.wlgitbridge.data.model.db.sql.SQLUpdate;
+import uk.ac.ic.wlgitbridge.bridge.db.sqlite.SQLUpdate;
 
 
 import java.sql.PreparedStatement;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.sql.SQLException;

+ 1 - 1
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/db/sql/update/create/CreateProjectsTableSQLUpdate.java

@@ -1,6 +1,6 @@
 package uk.ac.ic.wlgitbridge.data.model.db.sql.update.create;
 package uk.ac.ic.wlgitbridge.data.model.db.sql.update.create;
 
 
-import uk.ac.ic.wlgitbridge.data.model.db.sql.SQLUpdate;
+import uk.ac.ic.wlgitbridge.bridge.db.sqlite.SQLUpdate;
 
 
 import java.sql.PreparedStatement;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.sql.SQLException;

+ 1 - 1
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/db/sql/update/create/CreateURLIndexStoreSQLUpdate.java

@@ -1,6 +1,6 @@
 package uk.ac.ic.wlgitbridge.data.model.db.sql.update.create;
 package uk.ac.ic.wlgitbridge.data.model.db.sql.update.create;
 
 
-import uk.ac.ic.wlgitbridge.data.model.db.sql.SQLUpdate;
+import uk.ac.ic.wlgitbridge.bridge.db.sqlite.SQLUpdate;
 
 
 import java.sql.PreparedStatement;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.sql.SQLException;

+ 1 - 1
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/db/sql/update/delete/DeleteFilesForProjectSQLUpdate.java

@@ -1,6 +1,6 @@
 package uk.ac.ic.wlgitbridge.data.model.db.sql.update.delete;
 package uk.ac.ic.wlgitbridge.data.model.db.sql.update.delete;
 
 
-import uk.ac.ic.wlgitbridge.data.model.db.sql.SQLUpdate;
+import uk.ac.ic.wlgitbridge.bridge.db.sqlite.SQLUpdate;
 
 
 import java.sql.PreparedStatement;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.sql.SQLException;

+ 1 - 1
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/db/sql/update/insert/AddURLIndexSQLUpdate.java

@@ -1,6 +1,6 @@
 package uk.ac.ic.wlgitbridge.data.model.db.sql.update.insert;
 package uk.ac.ic.wlgitbridge.data.model.db.sql.update.insert;
 
 
-import uk.ac.ic.wlgitbridge.data.model.db.sql.SQLUpdate;
+import uk.ac.ic.wlgitbridge.bridge.db.sqlite.SQLUpdate;
 
 
 import java.sql.PreparedStatement;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.sql.SQLException;

+ 1 - 1
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/db/sql/update/insert/SetProjectSQLUpdate.java

@@ -1,6 +1,6 @@
 package uk.ac.ic.wlgitbridge.data.model.db.sql.update.insert;
 package uk.ac.ic.wlgitbridge.data.model.db.sql.update.insert;
 
 
-import uk.ac.ic.wlgitbridge.data.model.db.sql.SQLUpdate;
+import uk.ac.ic.wlgitbridge.bridge.db.sqlite.SQLUpdate;
 
 
 import java.sql.PreparedStatement;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.sql.SQLException;

+ 1 - 1
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/GitBridgeServer.java

@@ -10,7 +10,7 @@ import uk.ac.ic.wlgitbridge.application.config.Config;
 import uk.ac.ic.wlgitbridge.application.jetty.NullLogger;
 import uk.ac.ic.wlgitbridge.application.jetty.NullLogger;
 import uk.ac.ic.wlgitbridge.bridge.Bridge;
 import uk.ac.ic.wlgitbridge.bridge.Bridge;
 import uk.ac.ic.wlgitbridge.bridge.db.DBStore;
 import uk.ac.ic.wlgitbridge.bridge.db.DBStore;
-import uk.ac.ic.wlgitbridge.bridge.db.SqliteDBStore;
+import uk.ac.ic.wlgitbridge.bridge.db.sqlite.SqliteDBStore;
 import uk.ac.ic.wlgitbridge.bridge.repo.FSRepoStore;
 import uk.ac.ic.wlgitbridge.bridge.repo.FSRepoStore;
 import uk.ac.ic.wlgitbridge.bridge.repo.RepoStore;
 import uk.ac.ic.wlgitbridge.bridge.repo.RepoStore;
 import uk.ac.ic.wlgitbridge.bridge.swap.SwapStore;
 import uk.ac.ic.wlgitbridge.bridge.swap.SwapStore;