diff options
author | Martin Weick <e1627760@student.tuwien.ac.at> | 2018-05-04 11:06:42 +0200 |
---|---|---|
committer | Tharre <tharre3@gmail.com> | 2018-05-04 20:37:04 +0200 |
commit | 0c8e84cf27f3477b1287295f8dec2e0d1e4039d0 (patch) | |
tree | 97e45d9a1184611ae19ade49e9e94421b1d9c706 | |
parent | 97257c52df0e9ff5d3965d317c2c912f274bf539 (diff) | |
download | sepm-groupproject-0c8e84cf27f3477b1287295f8dec2e0d1e4039d0.tar.gz sepm-groupproject-0c8e84cf27f3477b1287295f8dec2e0d1e4039d0.tar.xz sepm-groupproject-0c8e84cf27f3477b1287295f8dec2e0d1e4039d0.zip |
Implement vehicleAdd, start creating tests
-rw-r--r-- | src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/VehicleDBDAO.java | 102 | ||||
-rw-r--r-- | src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleAdd.java | 49 | ||||
-rw-r--r-- | src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/uicontroller/CreateCarController.java (renamed from src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/uiController/CreateCarController.java) | 55 | ||||
-rw-r--r-- | src/main/resources/controller/CreateCar.fxml | 2 | ||||
-rw-r--r-- | src/main/test/java/at/ac/tuwien/sepm/assignment/groupphase/AddCarTest.java | 43 |
5 files changed, 207 insertions, 44 deletions
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<Vehicle> 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 index dcf6ff7..721cf6d 100644 --- 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 @@ -1,5 +1,4 @@ -package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.uiController; - +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; @@ -27,8 +26,8 @@ import org.springframework.stereotype.Controller; @Controller public class CreateCarController { - @FXML private ChoiceBox cmb_Ctyp; - @FXML private ChoiceBox cmb_typ; + @FXML private ChoiceBox<String> cmb_Ctyp; + @FXML private ChoiceBox<String> cmb_typ; @FXML private Button btn_cancel; @FXML private CheckBox cbx_NEF; @@ -38,28 +37,29 @@ public class CreateCarController { public CreateCarController(VehicleService vehicleService) { this.vehicleService = vehicleService; } + @FXML public void initialize() { cmb_Ctyp.setItems( FXCollections.observableArrayList( Stream.of( - ConstructionType.NORMAL, - ConstructionType.MITTELHOCHDACH, - ConstructionType.HOCHDACH) + 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) + VehicleType.BKTW, + VehicleType.KTW_B, + VehicleType.KTW, + VehicleType.RTW, + VehicleType.NEF, + VehicleType.NAH) .map(Enum::toString) - .collect(Collectors.toList()))); + .collect(Collectors.toList()))); cmb_typ.setValue(VehicleType.BKTW.toString()); } @@ -67,39 +67,44 @@ public class CreateCarController { 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(); + .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()); + createComplete(AlertType.ERROR, "Ungültige Eingabe", e.getMessage()); return; } catch (ServiceException e) { LOG.error("Exception: {}", e); - createComplete(AlertType.ERROR,"Ungültige Eingabe",e.getMessage()); + createComplete(AlertType.ERROR, "Ungültige Eingabe", e.getMessage()); return; } - createComplete(AlertType.CONFIRMATION,"Speichern Erfolgreich","Auto wurde erfolgreich angelegt"); + createComplete( + AlertType.CONFIRMATION, "Speichern Erfolgreich", "Auto wurde erfolgreich angelegt"); } - private ConstructionType parseConstructionType(){ - if(cmb_Ctyp.getSelectionModel().getSelectedItem()==null){ + + 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){ + + 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); diff --git a/src/main/resources/controller/CreateCar.fxml b/src/main/resources/controller/CreateCar.fxml index 600d7fb..2daac67 100644 --- a/src/main/resources/controller/CreateCar.fxml +++ b/src/main/resources/controller/CreateCar.fxml @@ -6,7 +6,7 @@ <?import javafx.scene.layout.AnchorPane?> -<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.uiController.CreateCarController"> +<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.uicontroller.CreateCarController"> <children> <ChoiceBox fx:id="cmb_Ctyp" layoutX="14.0" layoutY="14.0" prefWidth="150.0" /> <ChoiceBox fx:id="cmb_typ" layoutX="191.0" layoutY="14.0" prefWidth="150.0" /> diff --git a/src/main/test/java/at/ac/tuwien/sepm/assignment/groupphase/AddCarTest.java b/src/main/test/java/at/ac/tuwien/sepm/assignment/groupphase/AddCarTest.java new file mode 100644 index 0000000..e7c4543 --- /dev/null +++ b/src/main/test/java/at/ac/tuwien/sepm/assignment/groupphase/AddCarTest.java @@ -0,0 +1,43 @@ +package at.ac.tuwien.sepm.assignment.groupphase; + +import static junit.framework.TestCase.fail; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDAO; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDBDAO; +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.VehicleAdd; +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.PersistenceException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; +import org.junit.Test; + +public class AddCarTest { + private final VehicleDAO vehicleP = mock(VehicleDBDAO.class); + private final VehicleService vehicleService = new VehicleAdd(vehicleP); + + public AddCarTest() throws PersistenceException { + when(vehicleP.add(any())).thenReturn(1L); + } + + @Test + public void add() { + Vehicle vehicle = + Vehicle.builder() + .constructionType(ConstructionType.HOCHDACH) + .type(VehicleType.RTW) + .hasNef(true) + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException | ServiceException e) { + fail(); + } + } + +} |