aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/VehicleDBDAO.java102
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleAdd.java49
-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.fxml2
-rw-r--r--src/main/test/java/at/ac/tuwien/sepm/assignment/groupphase/AddCarTest.java43
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();
+ }
+ }
+
+}