diff options
Diffstat (limited to 'src/main/java/at/ac/tuwien/sepm')
5 files changed, 199 insertions, 44 deletions
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java index 7036a1b..707d346 100644 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java @@ -5,6 +5,7 @@ import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.S  import at.ac.tuwien.sepm.assignment.groupphase.exception.ElementNotFoundException;  import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;  import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager; +import java.beans.Statement;  import java.sql.PreparedStatement;  import java.sql.ResultSet;  import java.sql.SQLException; @@ -29,7 +30,8 @@ public class DBOperationDAO implements OperationDAO {                              .getConnection()                              .prepareStatement(                                      "INSERT INTO operation(opCode, severity, " -                                            + "created, destination, additionalInfo, status) values (?,?,?,?,?,?)"); +                                            + "created, destination, additionalInfo, status) values (?,?,?,?,?,?)", +                                    java.sql.Statement.RETURN_GENERATED_KEYS);              if (operation.opCode() == null) {                  throw new PersistenceException("Code darf nicht null sein!"); @@ -79,18 +81,19 @@ public class DBOperationDAO implements OperationDAO {                  throw new PersistenceException(                          "Länge der zusätzlichen Information überschreitet erlaubte Länge von 100 Zeichen!");              else pstmt.setString(5, operation.additionalInfo()); -            if (operation.status() != null) { -                pstmt.setString(6, operation.status().toString()); +            if (operation.status() == null) { +                throw new PersistenceException("Status darf nicht null sein!");              } else if (operation.status().toString().length() > 100) {                  throw new PersistenceException(                          "Länge des Status überschreitet erlaubte Länge von 100 Zeichen!");              } else { -                throw new PersistenceException("Status darf nicht null sein!"); +                pstmt.setString(6, operation.status().toString());              } - -            pstmt.executeQuery(); +            pstmt.executeUpdate();              ResultSet rs = pstmt.getGeneratedKeys(); -            if (rs.next()) return rs.getInt(1); +            if (rs.next()) { +                return rs.getInt(1); +            }              else throw new PersistenceException("Einsatz konnte nicht gespeichert werden");          } catch (SQLException e) {              throw new PersistenceException(e); @@ -132,7 +135,7 @@ public class DBOperationDAO implements OperationDAO {                                              + "values (?,?)");              pstmt.setLong(1, vehicleID);              pstmt.setLong(2, operationID); -            pstmt.executeQuery(); +            pstmt.execute();              ResultSet rs = pstmt.getGeneratedKeys();              if (rs.next()) return rs.getInt(1);              else diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBVehicleDAO.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBVehicleDAO.java index 57a94de..e1b8c21 100644 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBVehicleDAO.java +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBVehicleDAO.java @@ -3,6 +3,7 @@ package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao;  import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle;  import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.ConstructionType;  import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.Status; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType;  import at.ac.tuwien.sepm.assignment.groupphase.exception.ElementNotFoundException;  import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;  import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager; @@ -11,7 +12,6 @@ import java.sql.ResultSet;  import java.sql.SQLException;  import java.util.LinkedList;  import java.util.List; -import javax.annotation.Nullable;  public class DBVehicleDAO implements VehicleDAO { @@ -27,36 +27,51 @@ public class DBVehicleDAO implements VehicleDAO {      }      @Override -    public void update(Vehicle vehicle) throws ElementNotFoundException, PersistenceException { - -    } +    public void update(Vehicle vehicle) throws ElementNotFoundException, PersistenceException {}      @Override      public List<Vehicle> list() throws PersistenceException {          PreparedStatement pstmt = null;          List<Vehicle> result = new LinkedList<>();          try { -            pstmt = jdbcConnectionManager.getConnection().prepareStatement("Select * from VehicleVersion, " -                    + "Vehicle where VehicleVersion.id=Vehicle.version"); -            //TODO: CORRECT? +            pstmt = +                    jdbcConnectionManager +                            .getConnection() +                            .prepareStatement( +                                    "Select * from VehicleVersion, " +                                            + "Vehicle where VehicleVersion.id=Vehicle.version"); +            // TODO: CORRECT?              pstmt.executeQuery();              ResultSet rs = pstmt.getResultSet(); -            while (rs.next()){ -                //TODO: HAS NEF?, Registrations -                Vehicle vehicle = Vehicle.builder().name(rs.getString(2)). -                        constructionType(ConstructionType.valueOf(rs.getString(2))). -                        status(Status.valueOf(rs.getString(7))).id(rs.getInt(1)).build(); +            while (rs.next()) { +                // TODO: Registrations +                Vehicle vehicle = +                        Vehicle.builder() +                                .name(rs.getString(2)) +                                .constructionType(ConstructionType.valueOf(rs.getString(3))) +                                .status(Status.valueOf(rs.getString(8))) +                                .id(rs.getInt(6)) +                                .hasNef(rs.getBoolean(5)) +                                .type(VehicleType.valueOf(rs.getString(4))) +                                .build();                  result.add(vehicle);              }          } catch (SQLException e) { -            //TODO +            throw new PersistenceException("Die Werte konnten nicht geladen werden.", e); +        } finally { +            if (pstmt != null) { +                try { +                    pstmt.close(); +                } catch (SQLException e) { +                    throw new PersistenceException( +                            "Verbindung zur Datenbank konnte nicht geschlossen werden!", e); +                } +            }          } -        return null; +        return result;      }      @Override -    public void remove(long id) throws ElementNotFoundException, PersistenceException { - -    } +    public void remove(long id) throws ElementNotFoundException, PersistenceException {}  } diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceImpl.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceImpl.java index eee158b..9ba3a63 100644 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceImpl.java +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceImpl.java @@ -11,6 +11,7 @@ import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidOperationExcepti  import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException;  import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;  import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; +import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager;  import java.util.EnumSet;  import java.util.List;  import javafx.collections.transformation.SortedList; @@ -18,12 +19,22 @@ import javafx.collections.transformation.SortedList;  public class OperationServiceImpl implements OperationService {      // TODO: anders? -    private OperationDAO operationDAO = new DBOperationDAO(); +    private OperationDAO operationDAO = new DBOperationDAO(new JDBCConnectionManager());      @Override      public long add(Operation operation) throws InvalidOperationException, ServiceException {          List<Vehicle> vehicles = operation.vehicles();          boolean rtw = false; +        if (operation.vehicles().size() == 0) { +            throw new InvalidOperationException( +                    "Es muss mindestens ein Fahrzeug ausgewählt werden!"); +        } +        if (faultyInput(operation.destination())){ +            throw new InvalidOperationException("Adresse ist ungültig!"); +        } +        if (faultyInput(operation.opCode())){ +            throw new InvalidOperationException("Code ist ungültig!"); +        }          for (Vehicle vehicle : vehicles) {              if (vehicle.status() == Vehicle.Status.ABGEMELDET)                  throw new InvalidOperationException( @@ -47,7 +58,7 @@ public class OperationServiceImpl implements OperationService {                      }                  }                  if (!rtw) -                    //TODO: NUR WARNUNG AUSGEBEN +                    // TODO: NUR WARNUNG AUSGEBEN                      throw new InvalidOperationException(                              "Zu einem Fahrzeug des Typs NAH muss auch ein Fahrzeug des Typs RTW geschickt werden!");              } @@ -55,7 +66,7 @@ public class OperationServiceImpl implements OperationService {          String[] codeParts = operation.opCode().split("\\-");          String severity = "";          for (int i = 0; i < codeParts[1].length(); i++) { -            if ((int) (codeParts[1].charAt(i)) > 101 && (int) (codeParts[1].charAt(i)) < 117) { +            if (((int) (codeParts[1].charAt(i)) >= 65 && (int) (codeParts[1].charAt(i)) <= 79) || ((int) (codeParts[1].charAt(i)) >= 97 && (int) (codeParts[1].charAt(i))<=111)) {                  severity = "" + codeParts[1].charAt(i);                  break;              } @@ -66,11 +77,28 @@ public class OperationServiceImpl implements OperationService {              throw new InvalidOperationException(                      "Der Schweregrad des Einsatzes konnte nicht ausgelesen werden!");          } +        operation = operation.toBuilder().status(Status.ACTIVE).build();          for (Vehicle vehicle : vehicles) { -            operationDAO.connectVehicleToOperation(vehicle.id(), operation.id()); +            try { +                operationDAO.connectVehicleToOperation(vehicle.id(), operation.id()); +            } catch (PersistenceException e) { +                throw new ServiceException(e); +            } +        } +        try { +            return operationDAO.add(operation); +        } catch (PersistenceException e) { +            throw new ServiceException(e); +        } +    } + +    private boolean faultyInput(String name) { +                    if (name == null) return true; +            else if (name.isEmpty()) return true; +        for (int i = 0; i < name.length(); i++) { +            if (name.charAt(i) != ' ') return false;          } -        return operationDAO.add(operation); -        // TODO: CODE VALIDIEREN? +        return true;      }      @Override diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleServiceImpl.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleServiceImpl.java index 80d7432..f21ae9a 100644 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleServiceImpl.java +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleServiceImpl.java @@ -1,14 +1,21 @@  package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.DBVehicleDAO; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDAO;  import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle;  import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.Status;  import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;  import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; +import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager;  import java.util.EnumSet;  import java.util.List;  public class VehicleServiceImpl implements VehicleService { +    // TODO +    private static VehicleDAO vehicleDAO = new DBVehicleDAO(new JDBCConnectionManager()); +      @Override      public long add(Vehicle vehicle) throws InvalidVehicleException, ServiceException {          return 0; @@ -21,11 +28,14 @@ public class VehicleServiceImpl implements VehicleService {      @Override      public List<Vehicle> list(EnumSet<Status> statuses) throws ServiceException { -        return null; +        // TODO: IMPLEMENT SEARCH WITH STATUS +        try { +            return vehicleDAO.list(); +        } catch (PersistenceException e) { +            throw new ServiceException(e); +        }      }      @Override -    public void remove(long id) throws InvalidVehicleException, ServiceException { - -    } +    public void remove(long id) throws InvalidVehicleException, ServiceException {}  } diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/CreateOperationController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/CreateOperationController.java index 10f9f03..8df8acc 100644 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/CreateOperationController.java +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/CreateOperationController.java @@ -1,19 +1,27 @@  package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.userInterface;  import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Severity;  import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Status;  import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.ConstructionType; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType;  import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.OperationService;  import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.OperationServiceImpl;  import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleService; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleServiceImpl;  import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidOperationException;  import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException;  import java.time.Instant; +import java.util.EnumSet;  import java.util.LinkedList;  import java.util.List; +import javafx.collections.FXCollections;  import javafx.fxml.FXML; +import javafx.scene.control.Alert;  import javafx.scene.control.Button;  import javafx.scene.control.Label; +import javafx.scene.control.ListCell;  import javafx.scene.control.ListView;  import javafx.scene.control.TextField;  import javafx.scene.layout.AnchorPane; @@ -28,8 +36,9 @@ public class CreateOperationController {      public ListView<Vehicle> lvVehicles;      public ListView lvActiveOperations;      public Label lblChosenVehicles; -    public LinkedList<Vehicle> chosenVehicles; +    public LinkedList<Vehicle> chosenVehicles = new LinkedList<>(); +    // TODO: Anders?      OperationService operationService = new OperationServiceImpl();      VehicleService vehicleService = new VehicleServiceImpl(); @@ -37,14 +46,104 @@ public class CreateOperationController {      @FXML      public void initialize() { +        lblChosenVehicles.setText("keine ausgewählt"); +        lvVehicles.setCellFactory( +                param -> +                        new ListCell<Vehicle>() { +                            @Override +                            protected void updateItem(Vehicle item, boolean empty) { +                                super.updateItem(item, empty); + +                                if (empty || item == null || item.name() == null) { +                                    setText(null); +                                } else { +                                    setText(item.name()); +                                } +                            } +                        }); +          lvVehicles.setOnMouseClicked(                  event -> {                      if (event.getClickCount() == 2) { -                        chosenVehicles.add(lvVehicles.getSelectionModel().getSelectedItem()); +                        boolean remove = false; +                        for (int i = 0; i < chosenVehicles.size(); i++) { +                            if (lvVehicles +                                    .getSelectionModel() +                                    .getSelectedItem() +                                    .equals(chosenVehicles.get(i))) { +                                remove = true; +                                break; +                            } +                        } +                        if (!remove) { +                            chosenVehicles.add(lvVehicles.getSelectionModel().getSelectedItem()); + +                        } +                        else { +                            chosenVehicles.remove(lvVehicles.getSelectionModel().getSelectedItem()); + +                        } +                        String result = ""; +                        for (int i = 0; i < chosenVehicles.size(); i++) { +                            if (i == chosenVehicles.size() - 1) { +                                result += chosenVehicles.get(i).name(); +                            } else { +                                result += chosenVehicles.get(i).name() + ", "; +                            } +                        } +                        if (result.equals("")){ +                            lblChosenVehicles.setText("keine ausgewählt"); +                        } +                        else { +                            lblChosenVehicles.setText(result); +                        }                      }                  });      } +    public void fillList() { +        // TODO: Zu anderem Zeitpunkt aktualisieren. +        /*try { +            this.lvVehicles.setItems( +            //TODO: ALLE FREI STATI Frei FUnk Frei Wache +                    FXCollections.observableArrayList( +                            vehicleService.list(EnumSet.of(Vehicle.Status.FREI_FUNK)))); +        } catch (ServiceException e) { +            Alert alert = new Alert(Alert.AlertType.ERROR); +            alert.setTitle("Fehler"); +            alert.setHeaderText("Fehler!"); +            alert.setContentText(e.getMessage()); +            alert.showAndWait(); +        }*/ + +        this.lvVehicles.setItems(FXCollections.observableArrayList(mylist())); +    } + +    private LinkedList<Vehicle> mylist() { +        Vehicle vehicle = +                Vehicle.builder() +                        .name("Test-KTW") +                        .constructionType(ConstructionType.HOCHDACH) +                        .type(VehicleType.KTW) +                        .status(Vehicle.Status.FREI_WACHE) +                        .hasNef(true) +                        .build(); + +        Vehicle vehicle1 = +                Vehicle.builder() +                        .name("Test-NEF") +                        .constructionType(ConstructionType.NORMAL) +                        .type(VehicleType.NEF) +                        .status(Vehicle.Status.FREI_FUNK) +                        .hasNef(true) +                        .build(); +        LinkedList<Vehicle> list = new LinkedList<>(); +        list.add(vehicle); +        list.add(vehicle1); +        // this.lvVehicles.setItems(FXCollections.observableArrayList(list)); +        return list; +    } +      @FXML      protected void createOperationClicked() {          Vehicle[] vehicles = new Vehicle[chosenVehicles.size()]; @@ -59,16 +158,16 @@ public class CreateOperationController {                          .opCode(txtCode.getText())                          .status(Status.ACTIVE)                          .vehicles(List.of(vehicles)) +                        .severity(Severity.A)                          .build(); -          try {              operationService.add(operation); -        } catch (InvalidOperationException e) { -            //TODO -        } catch (ServiceException e) { -            e.printStackTrace(); +        } catch (ServiceException | InvalidOperationException e) { +            Alert alert = new Alert(Alert.AlertType.ERROR); +            alert.setTitle("Fehler"); +            alert.setHeaderText("Fehler!"); +            alert.setContentText(e.getMessage()); +            alert.showAndWait();          }      } - -  }  | 
