diff options
| author | Felix Kehrer <felix.kehrer@gmail.com> | 2018-05-05 22:17:05 +0200 | 
|---|---|---|
| committer | Felix Kehrer <felix.kehrer@gmail.com> | 2018-05-07 14:42:07 +0200 | 
| commit | e7acdd7afb6612ef35265ba706ae968d326495a7 (patch) | |
| tree | 66784310071974906161c9a46a5763050135b1f0 | |
| parent | 5d8f7e3f27c9ffb1c252a41a339c9d39438b9c45 (diff) | |
| download | sepm-groupproject-e7acdd7afb6612ef35265ba706ae968d326495a7.tar.gz sepm-groupproject-e7acdd7afb6612ef35265ba706ae968d326495a7.tar.xz sepm-groupproject-e7acdd7afb6612ef35265ba706ae968d326495a7.zip  | |
First mockup of RegistrationWindow and its controller
| -rw-r--r-- | src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/RegistrationWindowController.java | 203 | ||||
| -rw-r--r-- | src/main/resources/fxml/RegistrationWindow.fxml | 76 | 
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>  | 
