diff --git a/src/main/java/hhn/temp/project/AssignmentManager.java b/src/main/java/hhn/temp/project/AssignmentManager.java index ec8d4510..756b1eeb 100644 --- a/src/main/java/hhn/temp/project/AssignmentManager.java +++ b/src/main/java/hhn/temp/project/AssignmentManager.java @@ -27,7 +27,7 @@ public class AssignmentManager { if (!workerMap.containsKey(workerId) || name == null || description == null) { throw new IllegalArgumentException("WorkerId must exist and name or description can't be null"); } - Task task = new Task(++taskIdCounter, workerId, name, description, this); + Task task = new Task(++taskIdCounter, workerId, name, description); taskMap.put(taskIdCounter, task); return taskIdCounter; } diff --git a/src/main/java/hhn/temp/project/provider/DatabaseManager.java b/src/main/java/hhn/temp/project/provider/DatabaseManager.java index 21644dcf..e59789c4 100644 --- a/src/main/java/hhn/temp/project/provider/DatabaseManager.java +++ b/src/main/java/hhn/temp/project/provider/DatabaseManager.java @@ -2,11 +2,13 @@ package hhn.temp.project.provider; import jdk.jshell.spi.ExecutionControl; +import java.io.IOException; +import java.sql.SQLException; import java.util.Collection; public interface DatabaseManager extends Database { - public void saveObjects(Collection objects); + public void saveObjects(Collection objects) throws ExecutionControl.NotImplementedException, IOException, SQLException; public Collection getObjects() throws ExecutionControl.NotImplementedException; - public void saveObject(E object) throws ExecutionControl.NotImplementedException; + public void saveObject(E object) throws ExecutionControl.NotImplementedException, IOException, SQLException; public E getObject(int id) throws ExecutionControl.NotImplementedException; } \ No newline at end of file diff --git a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java index c12f9a1b..1542a698 100644 --- a/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java +++ b/src/main/java/hhn/temp/project/provider/SimpleDatabaseManager.java @@ -1,34 +1,75 @@ package hhn.temp.project.provider; +import hhn.temp.project.Task; +import hhn.temp.project.TaskState; import jdk.jshell.spi.ExecutionControl; -import java.io.File; import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; import java.sql.Connection; import java.sql.DriverManager; +import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Collection; -import java.util.List; public class SimpleDatabaseManager implements DatabaseManager { private Connection connection; - @Override - public void saveObjects(Collection objects) { - + private enum QueryMode { + SELECT, INSERT, DELETE, UPDATE } + private int taskStateToInt(TaskState taskState) { + return (taskState == TaskState.FINISHED) ? 1 : 0; + } + + private TaskState intToTaskState(int i) { + if (i < 0 || i > 1) { + throw new IllegalArgumentException("Integer may only bet 0 or 1"); + } + + return (i == 1) ? TaskState.FINISHED : TaskState.IN_PROGRESS; + } + + private String getQuery(QueryMode query) throws IOException { + String queryString = null; + + switch (query) { + case INSERT -> queryString = "INSERT INTO Task (name, description, workerid, taskstate) VALUES (?, ?, ?, ?)"; + case UPDATE -> queryString = "UPDATE Task SET name = ?, description = ?, taskstate = ? WHERE taskid = ?"; + case DELETE -> queryString = "DELETE FROM Task WHERE taskid = ?"; + case SELECT -> queryString = "SELECT * FROM Task WHERE workerid = ?"; + } + + return queryString; + } + + @Override + public void saveObjects(Collection objects) throws IOException, SQLException { + for (E obj : objects) { + saveObject(obj); + } + } + + @Override public Collection getObjects() throws ExecutionControl.NotImplementedException { throw new ExecutionControl.NotImplementedException("Not Implemented!"); } @Override - public void saveObject(E object) throws ExecutionControl.NotImplementedException { - throw new ExecutionControl.NotImplementedException("Not Implemented!"); + public void saveObject(E object) throws IOException, SQLException { + String query = getQuery(QueryMode.INSERT); + + if (object instanceof Task task) { + try (PreparedStatement ps = connection.prepareStatement(query)) { + ps.setInt(1, task.getTaskId()); + ps.setString(2, task.getName()); + ps.setString(3, task.getDescription()); + ps.setInt(4, task.getWorkerId()); + ps.setInt(5, taskStateToInt(task.getTaskState())); + } + } } @Override diff --git a/src/main/java/hhn/temp/project/provider/sql/createTaskTable.sql b/src/main/java/hhn/temp/project/provider/sql/createTaskTable.sql new file mode 100644 index 00000000..6e39b6f4 --- /dev/null +++ b/src/main/java/hhn/temp/project/provider/sql/createTaskTable.sql @@ -0,0 +1,7 @@ +CREATE TABLE Task ( + taskid INT AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(255) NOT NULL, + description TEXT, + workerid INT, + taskstate INT +); \ No newline at end of file diff --git a/src/main/java/hhn/temp/project/provider/sql/deleteTaskTable.sql b/src/main/java/hhn/temp/project/provider/sql/deleteTaskTable.sql new file mode 100644 index 00000000..179a1d92 --- /dev/null +++ b/src/main/java/hhn/temp/project/provider/sql/deleteTaskTable.sql @@ -0,0 +1 @@ +DELETE FROM Task WHERE taskid = ? \ No newline at end of file diff --git a/src/main/java/hhn/temp/project/provider/sql/insertTaskTable.sql b/src/main/java/hhn/temp/project/provider/sql/insertTaskTable.sql new file mode 100644 index 00000000..bc00c911 --- /dev/null +++ b/src/main/java/hhn/temp/project/provider/sql/insertTaskTable.sql @@ -0,0 +1 @@ +INSERT INTO Task (name, description, workerid, taskstate) VALUES (?, ?, ?, ?) \ No newline at end of file diff --git a/src/main/java/hhn/temp/project/provider/sql/selectTaskTable.sql b/src/main/java/hhn/temp/project/provider/sql/selectTaskTable.sql new file mode 100644 index 00000000..34d1e37a --- /dev/null +++ b/src/main/java/hhn/temp/project/provider/sql/selectTaskTable.sql @@ -0,0 +1 @@ +SELECT * FROM Task WHERE workerid = ? \ No newline at end of file diff --git a/src/main/java/hhn/temp/project/provider/sql/updateTaskTable.sql b/src/main/java/hhn/temp/project/provider/sql/updateTaskTable.sql new file mode 100644 index 00000000..e013b304 --- /dev/null +++ b/src/main/java/hhn/temp/project/provider/sql/updateTaskTable.sql @@ -0,0 +1 @@ +UPDATE Task SET name = ?, description = ?, taskstate = ? WHERE taskid = ? \ No newline at end of file diff --git a/test/hhn/temp/project/DatabaseGoodCasesTest.java b/test/hhn/temp/project/DatabaseGoodCasesTest.java index 53b4e250..43768733 100644 --- a/test/hhn/temp/project/DatabaseGoodCasesTest.java +++ b/test/hhn/temp/project/DatabaseGoodCasesTest.java @@ -27,6 +27,7 @@ public class DatabaseGoodCasesTest { databaseManager.connect(); Task task = databaseManager.getObject(1); + databaseManager.close(); } @Test @@ -37,11 +38,13 @@ public class DatabaseGoodCasesTest { databaseManager.connect(); databaseManager.saveObject(testTask); + databaseManager.close(); } @Test @DisplayName("Assert connecting to database") public void assertConnectToDatabase() throws SQLException, IOException { databaseManager.connect(); + databaseManager.close(); } } \ No newline at end of file