aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/at
diff options
context:
space:
mode:
authorDominic Rogetzer <e1627756@student.tuwien.ac.at>2018-05-18 23:58:34 +0200
committerTharre <tharre3@gmail.com>2018-05-22 17:05:32 +0200
commitd8671713dd99f6840663b9ddf95bc29f0aea71eb (patch)
treeb97506536749b2a6c2a175065878d079085d6679 /src/main/java/at
parent5f9d36d27be425c59439fd83f7c1cbea722988b3 (diff)
downloadsepm-groupproject-d8671713dd99f6840663b9ddf95bc29f0aea71eb.tar.gz
sepm-groupproject-d8671713dd99f6840663b9ddf95bc29f0aea71eb.tar.xz
sepm-groupproject-d8671713dd99f6840663b9ddf95bc29f0aea71eb.zip
Implement EmployeeDatabaseDao.update [#25950]
Diffstat (limited to 'src/main/java/at')
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeeDatabaseDao.java61
1 files changed, 58 insertions, 3 deletions
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeeDatabaseDao.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeeDatabaseDao.java
index 8da79e7..53adb45 100644
--- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeeDatabaseDao.java
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeeDatabaseDao.java
@@ -6,9 +6,11 @@ import at.ac.tuwien.sepm.assignment.groupphase.exception.ElementNotFoundExceptio
import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;
import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager;
import java.lang.invoke.MethodHandles;
+import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.sql.Savepoint;
import java.sql.Statement;
import java.sql.Timestamp;
import java.util.HashSet;
@@ -29,15 +31,21 @@ public class EmployeeDatabaseDao implements EmployeeDAO {
"SELECT emp.id, v.name, v.birthday, v.educationLevel, v.isDriver, v.isPilot "
+ "FROM employee emp "
+ "JOIN EmployeeVersion v ON v.id = emp.version";
+ private static final String UPDATE_EMPLOYEE = "UPDATE Employee SET version = ? WHERE id = ?";
- private final PreparedStatement insertEmployeeVersion, insertEmployee, listEmployee;
+ private final PreparedStatement insertEmployeeVersion,
+ insertEmployee,
+ listEmployee,
+ updateEmployee;
+
+ private final Connection connection;
public EmployeeDatabaseDao(JDBCConnectionManager connectionManager)
throws PersistenceException {
try {
- final var connection = connectionManager.getConnection();
+ connection = connectionManager.getConnection();
insertEmployeeVersion =
connection.prepareStatement(
INSERT_EMPLOYEE_VERSION, Statement.RETURN_GENERATED_KEYS);
@@ -46,6 +54,8 @@ public class EmployeeDatabaseDao implements EmployeeDAO {
listEmployee = connection.prepareStatement(LIST_EMPLOYEE);
+ updateEmployee = connection.prepareStatement(UPDATE_EMPLOYEE);
+
} catch (SQLException e) {
throw new PersistenceException(e);
}
@@ -85,7 +95,52 @@ public class EmployeeDatabaseDao implements EmployeeDAO {
@Override
public void update(Employee employee) throws ElementNotFoundException, PersistenceException {
- throw new UnsupportedOperationException();
+
+ Savepoint savepoint = null;
+ try {
+ savepoint = connection.setSavepoint();
+ connection.setAutoCommit(false);
+
+ insertEmployeeVersion.setString(1, employee.name());
+ insertEmployeeVersion.setTimestamp(
+ 2, Timestamp.valueOf(employee.birthday().atStartOfDay()));
+ insertEmployeeVersion.setString(3, employee.educationLevel().toString());
+ insertEmployeeVersion.setBoolean(4, employee.isDriver());
+ insertEmployeeVersion.setBoolean(5, employee.isPilot());
+ insertEmployeeVersion.executeUpdate();
+ ResultSet resultSetEmployeeVersion = insertEmployeeVersion.getGeneratedKeys();
+
+ if (resultSetEmployeeVersion.next()) {
+ long versionId = resultSetEmployeeVersion.getLong(1);
+
+ updateEmployee.setLong(1, versionId);
+ updateEmployee.setLong(2, employee.id());
+ int affectedRows = updateEmployee.executeUpdate();
+
+ if (affectedRows == 1) {
+ connection.commit();
+ } else {
+ throw new ElementNotFoundException(
+ "element not found with id: " + employee.id());
+ }
+ }
+
+ } catch (SQLException e) {
+ try {
+ if (savepoint != null) {
+ connection.rollback(savepoint);
+ }
+ } catch (SQLException e1) {
+ throw new PersistenceException(e);
+ }
+ throw new PersistenceException(e);
+ } finally {
+ try {
+ connection.setAutoCommit(true);
+ } catch (SQLException e) {
+ throw new PersistenceException(e);
+ }
+ }
}
@Override