From 0c8e84cf27f3477b1287295f8dec2e0d1e4039d0 Mon Sep 17 00:00:00 2001 From: Martin Weick Date: Fri, 4 May 2018 11:06:42 +0200 Subject: Implement vehicleAdd, start creating tests --- .../einsatzverwaltung/dao/VehicleDBDAO.java | 102 +++++++++++++++++++ .../einsatzverwaltung/service/VehicleAdd.java | 49 +++++---- .../uiController/CreateCarController.java | 108 -------------------- .../uicontroller/CreateCarController.java | 113 +++++++++++++++++++++ 4 files changed, 246 insertions(+), 126 deletions(-) create mode 100644 src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/VehicleDBDAO.java delete mode 100644 src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/uiController/CreateCarController.java create mode 100644 src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/uicontroller/CreateCarController.java (limited to 'src/main/java/at/ac') diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/VehicleDBDAO.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/VehicleDBDAO.java new file mode 100644 index 0000000..66045a5 --- /dev/null +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/VehicleDBDAO.java @@ -0,0 +1,102 @@ +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.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; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; +import org.springframework.stereotype.Repository; + +@Repository +public class VehicleDBDAO implements VehicleDAO { + + private final JDBCConnectionManager jdbcConnectionManager; + + public VehicleDBDAO(JDBCConnectionManager jdbcConnectionManager) { + this.jdbcConnectionManager = jdbcConnectionManager; + } + + public long add(Vehicle vehicle) throws PersistenceException { + String query1 = "INSERT INTO VehicleVersion (name,constructionType,type) VALUES (?,?,?)"; + String query2 = "INSERT INTO Vehicle (version,status) VALUES (?,?)"; + PreparedStatement p1 = null; + PreparedStatement p2 = null; + PreparedStatement p3 = null; + String status = "abgemeldet"; + String name = ""; + int id = -1; + try { + p1 = jdbcConnectionManager.getConnection().prepareStatement(query1); + p1.setString(1, name); + p1.setString(2, vehicle.constructionType().name()); + if (vehicle.type() == VehicleType.KTW_B) { + p1.setString(3, "KTW-B"); + } else { + p1.setString(3, vehicle.type().name()); + } + p1.executeUpdate(); + query1 = "UPDATE VehicleVersion SET name=? WHERE id=?"; + try (ResultSet keyResultSet = p1.getGeneratedKeys()) { + if (keyResultSet.next()) { + id = keyResultSet.getInt(1); + } + } + name = vehicle.type().name() + "-" + id; + + } catch (SQLException e) { + throw new PersistenceException("SQL Excpetion : " + e.toString()); + } finally { + try { + p1.close(); + + } catch (SQLException e) { + throw new PersistenceException("SQL Excpetion : " + e.toString()); + } + } + try { + p3 = jdbcConnectionManager.getConnection().prepareStatement(query1); + p3.setString(1, name); + p3.setInt(2, id); + p3.executeUpdate(); + } catch (SQLException e) { + throw new PersistenceException("SQL Excpetion : " + e.toString()); + } finally { + try { + p3.close(); + } catch (SQLException e) { + throw new PersistenceException("SQL Excpetion : " + e.toString()); + } + } + try { + p2 = jdbcConnectionManager.getConnection().prepareStatement(query2); + p2.setInt(1, id); + p2.setString(2, status); + p2.executeUpdate(); + } catch (SQLException e) { + throw new PersistenceException("SQL Excpetion : " + e.toString()); + } finally { + try { + p2.close(); + } catch (SQLException e) { + throw new PersistenceException("SQL Excpetion : " + e.toString()); + } + } + return id; + } + + public void update(Vehicle vehicle) throws ElementNotFoundException, PersistenceException { + throw new UnsupportedOperationException(); + } + + public List list() throws PersistenceException { + throw new UnsupportedOperationException(); + } + + public void remove(long id) throws ElementNotFoundException, PersistenceException { + throw new UnsupportedOperationException(); + } +} diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleAdd.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleAdd.java index a0fadd5..be52fb6 100644 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleAdd.java +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleAdd.java @@ -1,52 +1,65 @@ package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service; +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.ConstructionType; 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 java.util.EnumSet; import java.util.List; +import org.springframework.stereotype.Service; +@Service public class VehicleAdd implements VehicleService { + private VehicleDAO vehicleDAO; + + public VehicleAdd(VehicleDAO vehicleDAO) { + this.vehicleDAO = vehicleDAO; + } public long add(Vehicle vehicle) throws InvalidVehicleException, ServiceException { - final String normal="Normal"; - final String mhd="Mittelhochdach"; - switch (vehicle.type().toString()){ - case "RTW": - if(vehicle.constructionType().name().contains(normal)){ + switch (vehicle.type()) { + case RTW: + if (vehicle.constructionType() == ConstructionType.NORMAL) { throw new InvalidVehicleException("RTW darf kein Normales Dach haben"); - }else if(vehicle.constructionType().name().contains(mhd)){ + } else if (vehicle.constructionType() == ConstructionType.MITTELHOCHDACH) { throw new InvalidVehicleException("RTW darf kein Mittelhochdach haben"); } break; - case "KTW": - if(vehicle.constructionType().name().contains(normal)){ + case KTW: + if (vehicle.constructionType() == ConstructionType.NORMAL) { throw new InvalidVehicleException("KTW darf kein Normales Dach haben"); } break; - case "KTW_B": - if(vehicle.constructionType().name().contains(normal)){ + case KTW_B: + if (vehicle.constructionType() == ConstructionType.NORMAL) { throw new InvalidVehicleException("KTW-B darf kein Normales Dach haben"); } break; - case "NEF": - if(vehicle.constructionType().name().contains(mhd)){ + case NEF: + if (vehicle.constructionType() == ConstructionType.MITTELHOCHDACH) { throw new InvalidVehicleException("NEF darf kein Mittelhochdach haben"); - }else if(vehicle.constructionType().name().contains("Hochdach")){ + } else if (vehicle.constructionType().name().contains("Hochdach")) { throw new InvalidVehicleException("NEF darf kein Hochdach haben"); } break; - case "NAH": - if(vehicle.constructionType().name().contains(mhd)){ + case NAH: + if (vehicle.constructionType() == ConstructionType.MITTELHOCHDACH) { throw new InvalidVehicleException("NEF darf kein Mittelhochdach haben"); - }else if(vehicle.constructionType().name().contains("Hochdach")){ + } else if (vehicle.constructionType().name().contains("Hochdach")) { throw new InvalidVehicleException("NEF darf kein Hochdach haben"); } break; - default: - throw new ServiceException("not a Valid type"); + default: + throw new ServiceException("not a Valid type"); + } + try { + vehicleDAO.add(vehicle); + } catch (PersistenceException e) { + throw new ServiceException(e); } return 0; } diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/uiController/CreateCarController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/uiController/CreateCarController.java deleted file mode 100644 index dcf6ff7..0000000 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/uiController/CreateCarController.java +++ /dev/null @@ -1,108 +0,0 @@ -package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.uiController; - - -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.VehicleService; -import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException; -import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; -import java.lang.invoke.MethodHandles; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import javafx.collections.FXCollections; -import javafx.event.ActionEvent; -import javafx.fxml.FXML; -import javafx.scene.control.Alert; -import javafx.scene.control.Alert.AlertType; -import javafx.scene.control.Button; -import javafx.scene.control.ButtonType; -import javafx.scene.control.CheckBox; -import javafx.scene.control.ChoiceBox; -import javafx.stage.Stage; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Controller; - -@Controller -public class CreateCarController { - - @FXML private ChoiceBox cmb_Ctyp; - @FXML private ChoiceBox cmb_typ; - @FXML private Button btn_cancel; - @FXML private CheckBox cbx_NEF; - - private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - private final VehicleService vehicleService; - - public CreateCarController(VehicleService vehicleService) { - this.vehicleService = vehicleService; - } - @FXML - public void initialize() { - cmb_Ctyp.setItems( - FXCollections.observableArrayList( - Stream.of( - ConstructionType.NORMAL, - ConstructionType.MITTELHOCHDACH, - ConstructionType.HOCHDACH) - .map(Enum::toString) - .collect(Collectors.toList()))); - cmb_Ctyp.setValue(ConstructionType.NORMAL.toString()); - cmb_typ.setItems( - FXCollections.observableArrayList( - Stream.of( - VehicleType.BKTW, - VehicleType.KTW_B, - VehicleType.KTW, - VehicleType.RTW, - VehicleType.NEF, - VehicleType.NAH) - .map(Enum::toString) - .collect(Collectors.toList()))); - cmb_typ.setValue(VehicleType.BKTW.toString()); - } - - @FXML - public void onCancelClicked() { - ((Stage) btn_cancel.getScene().getWindow()).close(); - } - @FXML - public void createCar(ActionEvent actionEvent) { - Vehicle vehicle = - Vehicle.builder() - .constructionType(parseConstructionType()) - .type(parseType()) - .hasNef(cbx_NEF.isSelected()) - .build(); - try { - vehicleService.add(vehicle); - } catch (InvalidVehicleException e) { - LOG.error("Invalid Vehicle: {}", e); - createComplete(AlertType.ERROR,"Ungültige Eingabe",e.getMessage()); - return; - } catch (ServiceException e) { - LOG.error("Exception: {}", e); - createComplete(AlertType.ERROR,"Ungültige Eingabe",e.getMessage()); - return; - } - createComplete(AlertType.CONFIRMATION,"Speichern Erfolgreich","Auto wurde erfolgreich angelegt"); - } - private ConstructionType parseConstructionType(){ - if(cmb_Ctyp.getSelectionModel().getSelectedItem()==null){ - return ConstructionType.NORMAL; - } - return ConstructionType.valueOf(cmb_Ctyp.getSelectionModel().getSelectedItem().toString()); - } - private VehicleType parseType(){ - if(cmb_typ.getSelectionModel().getSelectedItem()==null){ - return VehicleType.BKTW; - } - return VehicleType.valueOf(cmb_typ.getSelectionModel().getSelectedItem().toString()); - } - private void createComplete(AlertType alertType, String headerText, String contentText) { - Alert alert = new Alert(alertType, contentText, ButtonType.OK); - alert.setHeaderText(headerText); - alert.showAndWait(); - } -} diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/uicontroller/CreateCarController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/uicontroller/CreateCarController.java new file mode 100644 index 0000000..721cf6d --- /dev/null +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/uicontroller/CreateCarController.java @@ -0,0 +1,113 @@ +package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.uicontroller; + +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.VehicleService; +import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; +import java.lang.invoke.MethodHandles; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import javafx.collections.FXCollections; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.scene.control.Alert; +import javafx.scene.control.Alert.AlertType; +import javafx.scene.control.Button; +import javafx.scene.control.ButtonType; +import javafx.scene.control.CheckBox; +import javafx.scene.control.ChoiceBox; +import javafx.stage.Stage; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Controller; + +@Controller +public class CreateCarController { + + @FXML private ChoiceBox cmb_Ctyp; + @FXML private ChoiceBox cmb_typ; + @FXML private Button btn_cancel; + @FXML private CheckBox cbx_NEF; + + private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + private final VehicleService vehicleService; + + public CreateCarController(VehicleService vehicleService) { + this.vehicleService = vehicleService; + } + + @FXML + public void initialize() { + cmb_Ctyp.setItems( + FXCollections.observableArrayList( + Stream.of( + ConstructionType.NORMAL, + ConstructionType.MITTELHOCHDACH, + ConstructionType.HOCHDACH) + .map(Enum::toString) + .collect(Collectors.toList()))); + cmb_Ctyp.setValue(ConstructionType.NORMAL.toString()); + cmb_typ.setItems( + FXCollections.observableArrayList( + Stream.of( + VehicleType.BKTW, + VehicleType.KTW_B, + VehicleType.KTW, + VehicleType.RTW, + VehicleType.NEF, + VehicleType.NAH) + .map(Enum::toString) + .collect(Collectors.toList()))); + cmb_typ.setValue(VehicleType.BKTW.toString()); + } + + @FXML + public void onCancelClicked() { + ((Stage) btn_cancel.getScene().getWindow()).close(); + } + + @FXML + public void createCar(ActionEvent actionEvent) { + Vehicle vehicle = + Vehicle.builder() + .constructionType(parseConstructionType()) + .type(parseType()) + .hasNef(cbx_NEF.isSelected()) + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException e) { + LOG.error("Invalid Vehicle: {}", e); + createComplete(AlertType.ERROR, "Ungültige Eingabe", e.getMessage()); + return; + } catch (ServiceException e) { + LOG.error("Exception: {}", e); + createComplete(AlertType.ERROR, "Ungültige Eingabe", e.getMessage()); + return; + } + createComplete( + AlertType.CONFIRMATION, "Speichern Erfolgreich", "Auto wurde erfolgreich angelegt"); + } + + private ConstructionType parseConstructionType() { + if (cmb_Ctyp.getSelectionModel().getSelectedItem() == null) { + return ConstructionType.NORMAL; + } + return ConstructionType.valueOf(cmb_Ctyp.getSelectionModel().getSelectedItem().toString()); + } + + private VehicleType parseType() { + if (cmb_typ.getSelectionModel().getSelectedItem() == null) { + return VehicleType.BKTW; + } + return VehicleType.valueOf(cmb_typ.getSelectionModel().getSelectedItem().toString()); + } + + private void createComplete(AlertType alertType, String headerText, String contentText) { + Alert alert = new Alert(alertType, contentText, ButtonType.OK); + alert.setHeaderText(headerText); + alert.showAndWait(); + } +} -- cgit v1.2.3-70-g09d2