summaryrefslogtreecommitdiffstats
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/RegistrationWindowController.java203
-rw-r--r--src/main/resources/fxml/RegistrationWindow.fxml76
2 files changed, 279 insertions, 0 deletions
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/RegistrationWindowController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/RegistrationWindowController.java
new file mode 100644
index 0000000..8fea9dc
--- /dev/null
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/RegistrationWindowController.java
@@ -0,0 +1,203 @@
+package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.controller;
+
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Registration;
+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.einsatzverwaltung.service.EmployeeService;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.RegistrationService;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleService;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidRegistrationException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZoneOffset;
+import java.util.EnumSet;
+import java.util.LinkedList;
+import java.util.List;
+import javafx.beans.property.SimpleStringProperty;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.event.EventHandler;
+import javafx.fxml.FXML;
+import javafx.scene.control.Alert;
+import javafx.scene.control.Alert.AlertType;
+import javafx.scene.control.ChoiceBox;
+import javafx.scene.control.Label;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableView;
+import javafx.scene.control.TextField;
+import javafx.scene.input.MouseEvent;
+import javafx.stage.Stage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+
+@Controller
+public class RegistrationWindowController {
+
+ private static final Logger LOG = LoggerFactory.getLogger(RegistrationWindowController.class);
+
+ private EmployeeService employeeService;
+
+ private VehicleService vehicleService;
+
+ private RegistrationService registrationService;
+
+ @Autowired
+ public void setEmployeeService(EmployeeService employeeService) {
+ this.employeeService = employeeService;
+ }
+
+ @Autowired
+ public void setVehicleService(VehicleService vehicleService) {
+ this.vehicleService = vehicleService;
+ }
+
+ @Autowired
+ public void setRegistrationService(RegistrationService registrationService) {
+ this.registrationService = registrationService;
+ }
+
+ @FXML public ChoiceBox<Integer> cbStart;
+ @FXML public ChoiceBox<Integer> cbEnd;
+ @FXML public Label lVehicles;
+ @FXML public Label lEmployees;
+ @FXML public TextField tfVehicleSearch;
+ @FXML public TextField tfEmployeeSearch;
+ @FXML public TableView<Vehicle> tvVehicles;
+ @FXML public TableView<Employee> tvEmployees;
+ @FXML public TableColumn<Vehicle, String> tcVehicles;
+ @FXML public TableColumn<Employee, String> tcEmployees;
+
+ private Vehicle chosenVehicle;
+ private List<Employee> chosenEmployees = new LinkedList<>();
+
+ @FXML
+ public void initialize() {
+ // will have to be replaced for FlowPane
+ try {
+ List<Vehicle> vehicles = vehicleService.list(EnumSet.of(Status.ABGEMELDET));
+ tcVehicles.setCellValueFactory(x -> new SimpleStringProperty(x.getValue().name()));
+ tvVehicles.setItems(FXCollections.observableArrayList(vehicles));
+ } catch (ServiceException e) {
+ LOG.warn(
+ "Caught ServiceException while getting vehicles. Showing it to user. Error message: {}",
+ e.getMessage());
+ Alert alert = new Alert(AlertType.ERROR);
+ alert.setTitle("Fahrzeuge - Fehler!");
+ alert.setHeaderText("Beim Auflisten der Fahrzeug ist ein Fehler aufgetreten.");
+ alert.setContentText(e.getMessage());
+ alert.show();
+ }
+ try {
+ List<Employee> employees = employeeService.list();
+ tcEmployees.setCellValueFactory(x -> new SimpleStringProperty(x.getValue().name()));
+ tvEmployees.setItems(FXCollections.observableArrayList(employees));
+ } catch (ServiceException e) {
+ LOG.warn(
+ "Caught ServiceException while getting employees. Showing it to user. Error message: {}",
+ e.getMessage());
+ Alert alert = new Alert(AlertType.ERROR);
+ alert.setTitle("Personal - Fehler!");
+ alert.setHeaderText("Beim Auflisten des Personals ist ein Fehler aufgetreten.");
+ alert.setContentText(e.getMessage());
+ alert.show();
+ }
+ tvVehicles.setOnMousePressed(
+ new EventHandler<MouseEvent>() {
+ @Override
+ public void handle(MouseEvent mouseEvent) {
+ if (mouseEvent.isPrimaryButtonDown() && mouseEvent.getClickCount() == 2) {
+ chosenVehicle = tvVehicles.getSelectionModel().getSelectedItem();
+ lVehicles.setText(chosenVehicle.name());
+ }
+ }
+ });
+ tvEmployees.setOnMousePressed(
+ new EventHandler<MouseEvent>() {
+ @Override
+ public void handle(MouseEvent mouseEvent) {
+ if (mouseEvent.isPrimaryButtonDown() && mouseEvent.getClickCount() == 2) {
+ chosenEmployees.add(tvEmployees.getSelectionModel().getSelectedItem());
+ StringBuilder text = new StringBuilder();
+ for (Employee employee : chosenEmployees) {
+ text.append(employee.name()).append("\n");
+ }
+ lEmployees.setText(text.toString());
+ }
+ }
+ });
+ ObservableList<Integer> hours =
+ FXCollections.observableArrayList(
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23);
+ cbStart.setItems(hours);
+ cbEnd.setItems(hours);
+ }
+
+ public void cancel() {
+ LOG.debug("Cancel Button clicked");
+ ((Stage) lVehicles.getScene().getWindow()).close();
+ }
+
+ public void create() {
+ LOG.debug("Create Button clicked");
+
+ List<Registration> registrations = new LinkedList<>();
+
+ for (Employee employee : chosenEmployees) {
+ registrations.add(
+ Registration.builder()
+ .id(chosenVehicle.id())
+ .employee(employee)
+ .start(
+ LocalDateTime.of(
+ LocalDate.now(),
+ LocalTime.of(cbStart.getValue(), 0))
+ .toInstant(ZoneOffset.ofHours(0)))
+ .end(
+ LocalDateTime.of(
+ LocalDate.now(),
+ LocalTime.of(cbEnd.getValue(), 0))
+ .toInstant(ZoneOffset.ofHours(0)))
+ .build());
+ }
+ try {
+ registrationService.add(chosenVehicle, registrations);
+ } catch (InvalidVehicleException e) {
+ // NOT THROWN ANYWHERE RIGHT NOW
+ LOG.info(
+ "Caught InvalidVehicleException. Showing it to user. Error message: {}",
+ e.getClass().toString(),
+ e.getMessage());
+ Alert alert = new Alert(AlertType.WARNING);
+ alert.setTitle("Ungültiges Fahrzeug");
+ alert.setHeaderText("Das spezifizierte Fahrzeug ist nicht gültig.");
+ alert.setContentText(e.getMessage());
+ alert.show();
+ } catch (ServiceException e) {
+ LOG.warn(
+ "Caught ServiceException while getting vehicles. Showing it to user. Error message: {}",
+ e.getMessage());
+ Alert alert = new Alert(AlertType.ERROR);
+ alert.setTitle("Anmeldung - Fehler!");
+ alert.setHeaderText("Beim Erstellen der Anmeldung ist ein Fehler aufgetreten.");
+ alert.setContentText(e.getMessage());
+ alert.show();
+ } catch (InvalidRegistrationException e) {
+ LOG.info(
+ "Caught InvalidRegistrationException. Showing it to user. Error message: {}",
+ e.getMessage());
+ Alert alert = new Alert(AlertType.WARNING);
+ alert.setTitle("Ungültige Eingabe");
+ alert.setHeaderText(
+ "Die gewählte Kombination von Fahrzeug und Personal ist nicht gültig!");
+ alert.setContentText(e.getMessage());
+ alert.show();
+ }
+ }
+}
diff --git a/src/main/resources/fxml/RegistrationWindow.fxml b/src/main/resources/fxml/RegistrationWindow.fxml
new file mode 100644
index 0000000..0394ca7
--- /dev/null
+++ b/src/main/resources/fxml/RegistrationWindow.fxml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.geometry.Insets?>
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.control.ChoiceBox?>
+<?import javafx.scene.control.Label?>
+<?import javafx.scene.control.SplitPane?>
+<?import javafx.scene.control.TableColumn?>
+<?import javafx.scene.control.TableView?>
+<?import javafx.scene.control.TextField?>
+<?import javafx.scene.layout.AnchorPane?>
+<?import javafx.scene.layout.HBox?>
+<?import javafx.scene.layout.VBox?>
+
+<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" 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.controller.RegistrationWindowController">
+ <children>
+ <AnchorPane prefHeight="135.0" prefWidth="600.0">
+ <children>
+ <Label layoutX="14.0" layoutY="14.0" text="Neue Anmeldung" />
+ <Label layoutX="14.0" layoutY="44.0" text="von" />
+ <Label layoutX="133.0" layoutY="44.0" text="bis" />
+ <ChoiceBox fx:id="cbStart" layoutX="42.0" layoutY="40.0" prefWidth="80.0" />
+ <ChoiceBox fx:id="cbEnd" layoutX="159.0" layoutY="40.0" prefWidth="80.0" />
+ <Label layoutX="10.0" layoutY="82.0" text="Fahrzeug" />
+ <Label fx:id="lVehicles" layoutX="10.0" layoutY="108.0" text="Fahrzeugname" />
+ <Label layoutX="216.0" layoutY="82.0" text="Personen" />
+ <Label fx:id="lEmployees" layoutX="216.0" layoutY="108.0" text="Namen" />
+ </children>
+ </AnchorPane>
+ <SplitPane dividerPositions="0.35" prefWidth="200.0">
+ <items>
+ <VBox prefHeight="200.0" prefWidth="100.0">
+ <children>
+ <Label text="Fahrzeugsuche" />
+ <TextField fx:id="tfVehicleSearch" />
+ <TableView fx:id="tvVehicles" prefHeight="200.0" prefWidth="200.0">
+ <columns>
+ <TableColumn fx:id="tcVehicles" prefWidth="75.0" text="Fahrzeuge" />
+ </columns>
+ <columnResizePolicy>
+ <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
+ </columnResizePolicy>
+ </TableView>
+ </children>
+ </VBox>
+ <VBox prefHeight="200.0" prefWidth="100.0">
+ <children>
+ <Label text="Personensuche" />
+ <TextField fx:id="tfEmployeeSearch" />
+ <TableView fx:id="tvEmployees" prefHeight="200.0" prefWidth="200.0">
+ <columns>
+ <TableColumn fx:id="tcEmployees" prefWidth="75.0" text="Personen" />
+ </columns>
+ <columnResizePolicy>
+ <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
+ </columnResizePolicy>
+ </TableView>
+ </children>
+ </VBox>
+ </items>
+ </SplitPane>
+ <HBox alignment="CENTER" prefWidth="200.0">
+ <children>
+ <Button mnemonicParsing="false" onAction="#cancel" text="Abbrechen">
+ <HBox.margin>
+ <Insets bottom="8.0" left="8.0" right="8.0" top="8.0" />
+ </HBox.margin>
+ </Button>
+ <Button mnemonicParsing="false" onAction="#create" text="Erstellen">
+ <HBox.margin>
+ <Insets bottom="8.0" left="8.0" right="8.0" top="8.0" />
+ </HBox.margin>
+ </Button>
+ </children></HBox>
+ </children>
+</VBox>