diff options
author | Dominic Rogetzer <e1627756@student.tuwien.ac.at> | 2018-05-18 23:58:34 +0200 |
---|---|---|
committer | Tharre <tharre3@gmail.com> | 2018-05-22 17:05:32 +0200 |
commit | d8671713dd99f6840663b9ddf95bc29f0aea71eb (patch) | |
tree | b97506536749b2a6c2a175065878d079085d6679 /src/main/java/at/ac/tuwien/sepm | |
parent | 5f9d36d27be425c59439fd83f7c1cbea722988b3 (diff) | |
download | sepm-groupproject-d8671713dd99f6840663b9ddf95bc29f0aea71eb.tar.gz sepm-groupproject-d8671713dd99f6840663b9ddf95bc29f0aea71eb.tar.xz sepm-groupproject-d8671713dd99f6840663b9ddf95bc29f0aea71eb.zip |
Implement EmployeeDatabaseDao.update [#25950]
Diffstat (limited to 'src/main/java/at/ac/tuwien/sepm')
-rw-r--r-- | src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeeDatabaseDao.java | 61 |
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 |