diff options
Diffstat (limited to 'src/main/java/at/ac/tuwien/sepm/assignment')
3 files changed, 164 insertions, 85 deletions
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/EmployeeListController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/EmployeeListController.java index dc808a4..843145c 100644 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/EmployeeListController.java +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/EmployeeListController.java @@ -7,6 +7,7 @@ import java.io.IOException;  import java.lang.invoke.MethodHandles;  import java.util.ArrayList;  import java.util.List; +import java.util.Set;  import java.util.function.Consumer;  import javafx.fxml.FXML;  import javafx.geometry.Insets; @@ -30,22 +31,27 @@ public class EmployeeListController {      private final SpringFXMLLoader fxmlLoader;      private Node rootElement;      private List<EmployeeListItemController> employeeListItemControllers; +    private Insets listItemMargins = new Insets(0, 5, 10, 5);      public EmployeeListController(SpringFXMLLoader fxmlLoader) {          this.fxmlLoader = fxmlLoader;          this.employeeListItemControllers = new ArrayList<>();      } -    public void setData(List<Employee> employeeList) { +    public void setListItemMargins(Insets value) { +        this.listItemMargins = value; +    } + +    public void setData(Set<Employee> employeeList) {          setData(employeeList, null, null);      } -    public void setData(List<Employee> employeeList, Consumer<Employee> onEmployeeClicked) { +    public void setData(Set<Employee> employeeList, Consumer<Employee> onEmployeeClicked) {          setData(employeeList, onEmployeeClicked, null);      }      public void setData( -            List<Employee> employeeList, +            Set<Employee> employeeList,              Consumer<Employee> onEmployeeClicked,              Consumer<EmployeeListItemController> onEmployeeListItemClicked) { @@ -61,7 +67,6 @@ public class EmployeeListController {              Employee employee,              Consumer<Employee> onEmployeeClicked,              Consumer<EmployeeListItemController> onEmployeeListItemClicked) { -        Insets listItemMargins = new Insets(0, 5, 10, 5);          try {              EmployeeListItemController controller = diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/ManageEmployeesController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/ManageEmployeesController.java index ed43c13..67cf7fa 100644 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/ManageEmployeesController.java +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/ManageEmployeesController.java @@ -6,6 +6,7 @@ import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException;  import at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader;  import java.io.IOException;  import java.lang.invoke.MethodHandles; +import java.util.HashSet;  import java.util.stream.Collectors;  import javafx.fxml.FXML;  import javafx.scene.layout.AnchorPane; @@ -100,7 +101,7 @@ public class ManageEmployeesController {                                                      || employee.name()                                                              .toLowerCase()                                                              .contains(searchString.toLowerCase())) -                            .collect(Collectors.toList()), +                            .collect(Collectors.toCollection(HashSet::new)),                      this::openEditEmployee);          } catch (ServiceException e) { 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 index 6768162..b8abf91 100644 --- 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 @@ -10,6 +10,8 @@ import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.Vehicle  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 at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader; +import java.io.IOException;  import java.time.LocalDate;  import java.time.LocalDateTime;  import java.time.LocalTime; @@ -19,17 +21,21 @@ import java.util.HashSet;  import java.util.LinkedList;  import java.util.List;  import java.util.Set; -import javafx.beans.property.SimpleStringProperty; +import java.util.stream.Collectors;  import javafx.collections.FXCollections;  import javafx.collections.ObservableList;  import javafx.fxml.FXML; +import javafx.geometry.Insets; +import javafx.scene.Node;  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.ScrollPane;  import javafx.scene.control.TextField; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseButton; +import javafx.scene.layout.GridPane;  import javafx.scene.layout.VBox;  import org.slf4j.Logger;  import org.slf4j.LoggerFactory; @@ -41,117 +47,179 @@ public class RegistrationWindowController {      private static final Logger LOG = LoggerFactory.getLogger(RegistrationWindowController.class);      private final EmployeeService employeeService; -      private final VehicleService vehicleService; - +    private final RegistrationService registrationService;      private final CreateOperationController createOperationController; +    private final SpringFXMLLoader fxmlLoader; -    private final RegistrationService registrationService; -    @FXML private VBox registrationWindowVB; +    @FXML private GridPane root; +    @FXML private VBox vbVehicles; +    @FXML private ScrollPane listEmployee; +    @FXML private ChoiceBox<Integer> cbStart; +    @FXML private ChoiceBox<Integer> cbEnd; +    @FXML private Label lVehicles; +    @FXML private Label lEmployees; +    @FXML private TextField tfVehicleSearch; +    @FXML private TextField tfEmployeeSearch; +    private EmployeeListController employeeListController; + +    private Vehicle chosenVehicle; +    private List<Employee> chosenEmployees = new LinkedList<>();      public RegistrationWindowController(              EmployeeService employeeService,              VehicleService vehicleService,              CreateOperationController createOperationController, -            RegistrationService registrationService) { +            RegistrationService registrationService, +            SpringFXMLLoader fxmlLoader) {          this.employeeService = employeeService;          this.vehicleService = vehicleService;          this.createOperationController = createOperationController;          this.registrationService = registrationService; +        this.fxmlLoader = fxmlLoader;      } -    @FXML private ChoiceBox<Integer> cbStart; -    @FXML private ChoiceBox<Integer> cbEnd; -    @FXML private Label lVehicles; -    @FXML private Label lEmployees; -    @FXML private TextField tfVehicleSearch; -    @FXML private TextField tfEmployeeSearch; -    @FXML private TableView<Vehicle> tvVehicles; -    @FXML private TableView<Employee> tvEmployees; -    @FXML private TableColumn<Vehicle, String> tcVehicles; -    @FXML private TableColumn<Employee, String> tcEmployees; +    @FXML +    private void initialize() throws IOException { +        employeeListController = EmployeeListController.createEmployeeListController(fxmlLoader); +        employeeListController.setListItemMargins(new Insets(10, 6, 0, 6)); +        //        listEmployee. .getChildren().add(employeeListController.getRootElement()); +        Node emplList = employeeListController.getRootElement(); +        //        emplList.(360); +        listEmployee.setContent(emplList); -    private Vehicle chosenVehicle; -    private List<Employee> chosenEmployees = new LinkedList<>(); +        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); +        cbStart.setValue(0); +        cbEnd.setItems(hours); +        cbEnd.setValue(12); + +        reset(); +    } + +    private void updateEmplList() { +        employeeListController.deselectAllEmployees(); -    @FXML -    private void initialize() { -        // will have to be replaced for FlowPane          try { -            Set<Vehicle> vehicles = vehicleService.list(EnumSet.of(Status.ABGEMELDET)); -            tcVehicles.setCellValueFactory(x -> new SimpleStringProperty(x.getValue().name())); -            tvVehicles.setItems(FXCollections.observableArrayList(vehicles)); +            Set<Employee> employees = +                    employeeService +                            .list() +                            .stream() +                            .filter( +                                    e -> +                                            e.name() +                                                    .toLowerCase() +                                                    .contains( +                                                            tfEmployeeSearch +                                                                    .getText() +                                                                    .toLowerCase())) +                            .collect(Collectors.toCollection(HashSet::new)); +            employeeListController.setData( +                    employees, +                    selection -> { +                        if (selection == null) { +                            return; +                        } else if (chosenEmployees.contains(selection)) { +                            chosenEmployees.remove(selection); +                        } else { +                            chosenEmployees.add(selection); +                        } + +                        StringBuilder text = new StringBuilder(); +                        boolean first = true; +                        for (Employee employee : chosenEmployees) { +                            if (!first) { +                                text.append(", "); +                            } +                            text.append(employee.name()); +                            first = false; +                        } +                        lEmployees.setText(text.toString()); +                    }, +                    contr -> contr.setSelected(chosenEmployees.contains(contr.getEmployee()))); + +            employees.forEach( +                    e -> { +                        if (chosenEmployees.contains(e)) employeeListController.selectEmployee(e); +                    });          } catch (ServiceException e) {              LOG.warn( -                    "Caught ServiceException while getting vehicles. Showing it to user. Error message: {}", +                    "Caught ServiceException while getting employees. 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.setTitle("Personal - Fehler!"); +            alert.setHeaderText("Beim Auflisten des Personals ist ein Fehler aufgetreten.");              alert.setContentText(e.getMessage());              alert.show();          } +    } + +    private void updateVehList() { +        vbVehicles.getChildren().clear(); +          try { -            Set<Employee> employees = employeeService.list(); -            tcEmployees.setCellValueFactory(x -> new SimpleStringProperty(x.getValue().name())); -            tvEmployees.setItems(FXCollections.observableArrayList(employees)); +            Set<Vehicle> vehicles = vehicleService.list(EnumSet.of(Status.ABGEMELDET)); + +            for (Vehicle vehicle : vehicles) { +                if (!vehicle.name().toLowerCase().contains(tfVehicleSearch.getText().toLowerCase())) +                    continue; + +                VehiclePaneController vp = VehiclePaneController.createVehiclePane(); +                vp.setData(vehicle, false); +                vbVehicles.getChildren().add(vp.getRootElement()); + +                vp.getRootElement() +                        .setOnMouseClicked( +                                event -> { +                                    if (event.getButton() == MouseButton.PRIMARY) { +                                        chosenVehicle = vehicle; +                                        lVehicles.setText(chosenVehicle.name()); +                                        updateVehList(); +                                    } +                                }); +                if (chosenVehicle != null && chosenVehicle.id() == vehicle.id()) +                    vp.setSelected(true); +            }          } catch (ServiceException e) {              LOG.warn( -                    "Caught ServiceException while getting employees. Showing it to user. Error message: {}", -                    e.getMessage()); +                    "Caught ServiceException while getting vehicles. Showing it to user. Error message: {}", +                    e);              Alert alert = new Alert(AlertType.ERROR); -            alert.setTitle("Personal - Fehler!"); -            alert.setHeaderText("Beim Auflisten des Personals ist ein Fehler aufgetreten."); +            alert.setTitle("Fahrzeuge - Fehler!"); +            alert.setHeaderText("Beim Auflisten der Fahrzeug ist ein Fehler aufgetreten."); +            alert.setContentText(e.getMessage()); +            alert.show(); +        } catch (IOException e) { +            LOG.error( +                    "Caught IOException while updateVehList. Showing it to user.", e.getMessage()); +            Alert alert = new Alert(AlertType.ERROR); +            alert.setTitle("Fehler");              alert.setContentText(e.getMessage());              alert.show();          } -        tvVehicles.setOnMousePressed( -                mouseEvent -> { -                    if (mouseEvent.isPrimaryButtonDown() && mouseEvent.getClickCount() == 2) { -                        chosenVehicle = tvVehicles.getSelectionModel().getSelectedItem(); -                        if (chosenVehicle == null) { -                            return; -                        } -                        lVehicles.setText(chosenVehicle.name()); -                    } -                }); -        tvEmployees.setOnMousePressed( -                mouseEvent -> { -                    if (mouseEvent.isPrimaryButtonDown() && mouseEvent.getClickCount() == 2) { -                        Employee selection = tvEmployees.getSelectionModel().getSelectedItem(); -                        if (selection == null) { -                            return; -                        } else if (chosenEmployees.contains(selection)) { -                            chosenEmployees.remove(selection); -                        } else { -                            chosenEmployees.add(selection); -                        } - -                        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); -        cbStart.setValue(0); -        cbEnd.setItems(hours); -        cbEnd.setValue(12);      }      public void cancel() {          LOG.debug("Cancel Button clicked"); -        chosenEmployees.clear(); -        // ((Stage) lVehicles.getScene().getWindow()).close(); +        reset();          this.setVisible(false);          createOperationController.setVisible(true);      } +    private void reset() { +        chosenEmployees.clear(); +        chosenVehicle = null; +        tfEmployeeSearch.setText(""); +        tfVehicleSearch.setText(""); +        lEmployees.setText("-"); +        lVehicles.setText("-"); +        updateVehList(); +        updateEmplList(); +    } +      public void create() {          LOG.debug("Create Button clicked"); @@ -183,8 +251,8 @@ public class RegistrationWindowController {              // ((Stage) lVehicles.getScene().getWindow()).close();              this.setVisible(false);              createOperationController.setVisible(true); +            reset();          } catch (InvalidVehicleException e) { -            // NOT THROWN ANYWHERE RIGHT NOW              LOG.info(                      "Caught InvalidVehicleException. Showing it to user. Error message: {}",                      e.getClass().toString(), @@ -194,7 +262,6 @@ public class RegistrationWindowController {              alert.setHeaderText("Das spezifizierte Fahrzeug ist nicht gültig.");              alert.setContentText(e.getMessage());              alert.show(); -            chosenEmployees.clear();          } catch (ServiceException e) {              LOG.warn(                      "Caught ServiceException while getting vehicles. Showing it to user. Error message: {}", @@ -204,7 +271,6 @@ public class RegistrationWindowController {              alert.setHeaderText("Beim Erstellen der Anmeldung ist ein Fehler aufgetreten.");              alert.setContentText(e.getMessage());              alert.show(); -            chosenEmployees.clear();          } catch (InvalidRegistrationException e) {              LOG.info(                      "Caught InvalidRegistrationException. Showing it to user. Error message: {}", @@ -215,11 +281,18 @@ public class RegistrationWindowController {                      "Die gewählte Kombination von Fahrzeug und Personal ist nicht gültig!");              alert.setContentText(e.getMessage());              alert.show(); -            chosenEmployees.clear();          }      }      public void setVisible(boolean b) { -        this.registrationWindowVB.setVisible(b); +        root.setVisible(b); +    } + +    public void tfVehicleSearch_TextChanged(KeyEvent keyEvent) { +        updateVehList(); +    } + +    public void tfEmployeeSearch_TextChanged(KeyEvent keyEvent) { +        updateEmplList();      }  }  | 
