diff options
Diffstat (limited to 'src')
| -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  | 
