aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/controller/CreateNewEmployeeController.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/controller/CreateNewEmployeeController.java')
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/controller/CreateNewEmployeeController.java174
1 files changed, 174 insertions, 0 deletions
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/controller/CreateNewEmployeeController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/controller/CreateNewEmployeeController.java
new file mode 100644
index 0000000..3e0240c
--- /dev/null
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/controller/CreateNewEmployeeController.java
@@ -0,0 +1,174 @@
+package at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.controller;
+
+import static at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.controller.Helper.showServiceExceptionAlertAndWait;
+import static at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.controller.Helper.showSuccessAlertAndWait;
+import static at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.controller.Helper.showValidationErrorAlertAndWait;
+
+import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidEmployeeException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException;
+import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.dto.Employee;
+import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.dto.Employee.EducationLevel;
+import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.service.EmployeeService;
+import at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader;
+import at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader.FXMLWrapper;
+import java.io.IOException;
+import java.time.LocalDate;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import javafx.collections.FXCollections;
+import javafx.fxml.FXML;
+import javafx.scene.Node;
+import javafx.scene.control.Button;
+import javafx.scene.control.CheckBox;
+import javafx.scene.control.ChoiceBox;
+import javafx.scene.control.Label;
+import javafx.scene.control.TextField;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Controller;
+
+@Controller
+@Scope("prototype")
+public class CreateNewEmployeeController {
+
+ private static final Logger LOG = LoggerFactory.getLogger(CreateNewEmployeeController.class);
+ private final EmployeeService employeeService;
+
+ @FXML private Label lblHeader;
+ @FXML private CheckBox inputIsDriver;
+ @FXML private CheckBox inputIsPilot;
+ @FXML private TextField inputName;
+ @FXML private ChoiceBox<String> inputQualification;
+ @FXML private Button btnCreate;
+
+ private Node rootElement;
+ private Employee employee;
+ private boolean isEdit;
+
+ private Runnable consumerCancelClicked;
+ private Runnable consumerCreateClicked;
+
+ public CreateNewEmployeeController(EmployeeService employeeService) {
+ this.employeeService = employeeService;
+ }
+
+ @FXML
+ private void initialize() {
+ inputQualification.setItems(
+ FXCollections.observableArrayList(
+ Stream.of(
+ EducationLevel.RS,
+ EducationLevel.NFS,
+ EducationLevel.NKV,
+ EducationLevel.NKA,
+ EducationLevel.NKI,
+ EducationLevel.NA)
+ .map(Enum::toString)
+ .collect(Collectors.toList())));
+
+ inputQualification.setValue(EducationLevel.RS.toString());
+ employee =
+ Employee.builder()
+ .name("")
+ .educationLevel(EducationLevel.RS)
+ .isDriver(false)
+ .isPilot(false)
+ .birthday(LocalDate.MIN)
+ .build();
+ }
+
+ @FXML
+ private void onCancelClicked() {
+ LOG.debug("Hyperlink \"abbrechen\" clicked.");
+ if (consumerCancelClicked != null) {
+ consumerCancelClicked.run();
+ }
+ }
+
+ @FXML
+ private void onCreateClicked() {
+ LOG.debug("Button {} clicked.", btnCreate.getText());
+
+ employee =
+ employee.toBuilder()
+ .name(inputName.getText())
+ .educationLevel(parseEducationLevel())
+ .birthday(LocalDate.MIN) // TODO: change UI to include birthday field
+ .isDriver(inputIsDriver.isSelected())
+ .isPilot(inputIsPilot.isSelected())
+ .build();
+
+ try {
+ if (isEdit) {
+ employeeService.update(employee);
+ } else {
+ employeeService.add(employee);
+ }
+ } catch (InvalidEmployeeException e) {
+ LOG.debug("Validation for Employee failed");
+ showValidationErrorAlertAndWait(e.getMessage());
+ return;
+ } catch (ServiceException e) {
+ LOG.error("ServiceException in onCreateClicked(). ", e);
+ showServiceExceptionAlertAndWait(
+ "Der Eintrag konnte nicht gespeichert werden. Bitte versuchen Sie es erneut.");
+ return;
+ }
+
+ showSuccessAlertAndWait(
+ "Der/die MitarbeiterIn wurde erfolgreich angelegt und gespeichert!");
+
+ if (consumerCreateClicked != null) {
+ consumerCreateClicked.run();
+ }
+ }
+
+ private EducationLevel parseEducationLevel() {
+ if (inputQualification.getSelectionModel().getSelectedItem() == null) {
+ return EducationLevel.RS;
+ }
+ return EducationLevel.valueOf(inputQualification.getSelectionModel().getSelectedItem());
+ }
+
+ private void setData(Employee employee) {
+ isEdit = true;
+ this.employee = employee;
+ inputName.setText(employee.name());
+ inputQualification.setValue(employee.educationLevel().name());
+ inputIsDriver.setSelected(employee.isDriver());
+ inputIsPilot.setSelected(employee.isPilot());
+ lblHeader.setText("Person bearbeiten");
+ btnCreate.setText("Speichern");
+ }
+
+ public static CreateNewEmployeeController createCreateNewEmployeeController(
+ SpringFXMLLoader fxmlLoader, Employee employee) throws IOException {
+ CreateNewEmployeeController controller = createCreateNewEmployeeController(fxmlLoader);
+ controller.setData(employee);
+ return controller;
+ }
+
+ public static CreateNewEmployeeController createCreateNewEmployeeController(
+ SpringFXMLLoader fxmlLoader) throws IOException {
+ FXMLWrapper<Object, CreateNewEmployeeController> wrapper =
+ fxmlLoader.loadAndWrap(
+ "/fxml/createNewEmployee.fxml", CreateNewEmployeeController.class);
+ Node root = (Node) wrapper.getLoadedObject();
+ CreateNewEmployeeController controller = wrapper.getController();
+ controller.rootElement = root;
+ return controller;
+ }
+
+ public Node getRootElement() {
+ return rootElement;
+ }
+
+ public void setConsumerCancelClicked(Runnable consumerCancelClicked) {
+ this.consumerCancelClicked = consumerCancelClicked;
+ }
+
+ public void setConsumerCreateClicked(Runnable consumerCreateClicked) {
+ this.consumerCreateClicked = consumerCreateClicked;
+ }
+}