diff options
author | Andreas Weninger <e01526989@student.tuwien.ac.at> | 2018-06-11 10:17:52 +0200 |
---|---|---|
committer | Tharre <tharre3@gmail.com> | 2018-06-13 19:22:31 +0200 |
commit | 8735141583894d14e620dae537192d12d06f9ba8 (patch) | |
tree | b926d592e0fea9e52b623e96eb2c93c30ab03278 /src/main/java/at/ac/tuwien/sepm/assignment | |
parent | 191670b9cb882c401357f8d9e358d46ae52560af (diff) | |
download | sepm-groupproject-8735141583894d14e620dae537192d12d06f9ba8.tar.gz sepm-groupproject-8735141583894d14e620dae537192d12d06f9ba8.tar.xz sepm-groupproject-8735141583894d14e620dae537192d12d06f9ba8.zip |
UI Rework
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(); } } |