aboutsummaryrefslogtreecommitdiffstats
path: root/src/main
diff options
context:
space:
mode:
authorTharre <tharre3@gmail.com>2018-05-04 15:14:56 +0200
committerTharre <tharre3@gmail.com>2018-05-04 15:14:56 +0200
commit7e113639279dff8d39e45cae44d4c2dcbc7614b6 (patch)
treef5d5c1779e73a577e1dbe30658aec6cf38e1e6b6 /src/main
parent7077b817bff797c769191046f0019508ddb20eba (diff)
parent2a57412e33ecb3d87a0181b0c6b3b57f6ef10c83 (diff)
downloadsepm-groupproject-7e113639279dff8d39e45cae44d4c2dcbc7614b6.tar.gz
sepm-groupproject-7e113639279dff8d39e45cae44d4c2dcbc7614b6.tar.xz
sepm-groupproject-7e113639279dff8d39e45cae44d4c2dcbc7614b6.zip
Merge branch 'review_create_new_employee' into develop
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateNewEmployeeController.java117
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeeDatabaseDao.java84
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dto/EmployeeValidator.java23
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/EmployeeServiceImpl.java44
-rw-r--r--src/main/resources/fxml/createNewEmployee.fxml24
5 files changed, 292 insertions, 0 deletions
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateNewEmployeeController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateNewEmployeeController.java
new file mode 100644
index 0000000..d81f6d7
--- /dev/null
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateNewEmployeeController.java
@@ -0,0 +1,117 @@
+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.Employee.EducationLevel;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.EmployeeService;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidEmployeeException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException;
+import java.lang.invoke.MethodHandles;
+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.control.Alert;
+import javafx.scene.control.Alert.AlertType;
+import javafx.scene.control.Button;
+import javafx.scene.control.ButtonType;
+import javafx.scene.control.CheckBox;
+import javafx.scene.control.ChoiceBox;
+import javafx.scene.control.Hyperlink;
+import javafx.scene.control.TextField;
+import javafx.stage.Stage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Controller;
+
+@Controller
+public class CreateNewEmployeeController {
+
+ private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+ private final EmployeeService employeeService;
+
+ @FXML private CheckBox inputIsDriver;
+ @FXML private CheckBox inputIsPilot;
+ @FXML private Hyperlink btnCancel;
+ @FXML private Button btnCreate;
+ @FXML private TextField inputName;
+ @FXML private ChoiceBox<String> inputQualification;
+
+ public CreateNewEmployeeController(EmployeeService employeeService) {
+ this.employeeService = employeeService;
+ }
+
+ @FXML
+ public 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());
+ }
+
+ @FXML
+ public void onCancelClicked() {
+ ((Stage) inputQualification.getScene().getWindow()).close();
+ }
+
+ @FXML
+ public void onCreateClicked() {
+
+ Employee employee =
+ Employee.builder()
+ .name(inputName.getText())
+ .educationLevel(parseEducationLevel())
+ .birthday(LocalDate.MIN) // TODO: change UI to include birthday field
+ .isDriver(inputIsDriver.isSelected())
+ .isPilot(inputIsPilot.isSelected())
+ .build();
+
+ try {
+ employeeService.add(employee);
+ } catch (InvalidEmployeeException e) {
+ LOG.error("Invalid Employee: {}", e);
+
+ showModalDialogWithOkButton(
+ AlertType.ERROR,
+ "Ungültige Eingabe",
+ "Mindestens eines der Eingabefelder haben einen ungültigen Wert!");
+ return;
+ } catch (ServiceException e) {
+ LOG.error("Employee could not be saved: {}", e);
+
+ showModalDialogWithOkButton(
+ AlertType.ERROR,
+ "Speicherfehler",
+ "Der Eintrag konnte nicht gespeichert werden. Bitte versuchen Sie es erneut.");
+ return;
+ }
+
+ showModalDialogWithOkButton(
+ AlertType.INFORMATION,
+ "Erfolgreich angelegt",
+ "Mitarbeiter wurde erfolgreich angelegt und gespeichert!");
+ }
+
+ private void showModalDialogWithOkButton(
+ AlertType alertType, String headerText, String contentText) {
+ Alert alert = new Alert(alertType, contentText, ButtonType.OK);
+ alert.setHeaderText(headerText);
+ alert.showAndWait();
+ }
+
+ private EducationLevel parseEducationLevel() {
+ if (inputQualification.getSelectionModel().getSelectedItem() == null) {
+ return EducationLevel.RS;
+ }
+ return EducationLevel.valueOf(inputQualification.getSelectionModel().getSelectedItem());
+ }
+}
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeeDatabaseDao.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeeDatabaseDao.java
new file mode 100644
index 0000000..fc9a549
--- /dev/null
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeeDatabaseDao.java
@@ -0,0 +1,84 @@
+package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao;
+
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.ElementNotFoundException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;
+import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager;
+import java.lang.invoke.MethodHandles;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.sql.Timestamp;
+import java.util.List;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class EmployeeDatabaseDao implements EmployeeDAO {
+
+ private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+ private static final String INSERT_EMPLOYEE_VERSION =
+ "INSERT INTO EmployeeVersion(name, birthday, educationLevel, isDriver, isPilot) "
+ + "VALUES(?, ?, ?, ?, ?)";
+ private static final String INSERT_EMPLOYEE = "INSERT INTO Employee(version) VALUES(?)";
+
+ private final PreparedStatement insertEmployeeVersion, insertEmployee;
+
+ public EmployeeDatabaseDao(JDBCConnectionManager connectionManager)
+ throws PersistenceException {
+
+ try {
+
+ final var connection = connectionManager.getConnection();
+ insertEmployeeVersion =
+ connection.prepareStatement(
+ INSERT_EMPLOYEE_VERSION, Statement.RETURN_GENERATED_KEYS);
+ insertEmployee =
+ connection.prepareStatement(INSERT_EMPLOYEE, Statement.RETURN_GENERATED_KEYS);
+
+ } catch (SQLException e) {
+ throw new PersistenceException(e);
+ }
+ }
+
+ @Override
+ public long add(Employee employee) throws PersistenceException {
+
+ // Assumption: the given employee is already validated (from service)
+ try {
+ insertEmployeeVersion.setString(1, employee.name());
+ insertEmployeeVersion.setTimestamp(
+ 2, Timestamp.valueOf(employee.birthday().atStartOfDay()));
+ insertEmployeeVersion.setString(3, employee.educationLevel().toString());
+ insertEmployeeVersion.setBoolean(4, employee.isDriver());
+ insertEmployeeVersion.setBoolean(5, employee.isPilot());
+ insertEmployeeVersion.executeUpdate();
+ ResultSet rs = insertEmployeeVersion.getGeneratedKeys();
+ if (rs.next()) {
+ return rs.getLong(1);
+ }
+
+ throw new PersistenceException("Employee was not created");
+
+ } catch (SQLException e) {
+ throw new PersistenceException(e);
+ }
+ }
+
+ @Override
+ public void update(Employee employee) throws ElementNotFoundException, PersistenceException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public List<Employee> list() throws PersistenceException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void remove(long id) throws ElementNotFoundException, PersistenceException {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dto/EmployeeValidator.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dto/EmployeeValidator.java
new file mode 100644
index 0000000..d7fa9aa
--- /dev/null
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dto/EmployeeValidator.java
@@ -0,0 +1,23 @@
+package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto;
+
+import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidEmployeeException;
+
+public class EmployeeValidator {
+
+ public static boolean validate(Employee employee) throws InvalidEmployeeException {
+
+ if (employee.name() == null || employee.name().trim().length() == 0) {
+ throw new InvalidEmployeeException("name not set");
+ }
+
+ if (employee.birthday() == null) {
+ throw new InvalidEmployeeException("birthday not set");
+ }
+
+ if (employee.educationLevel() == null) {
+ throw new InvalidEmployeeException("educationLevel not set");
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/EmployeeServiceImpl.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/EmployeeServiceImpl.java
new file mode 100644
index 0000000..144ccc6
--- /dev/null
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/EmployeeServiceImpl.java
@@ -0,0 +1,44 @@
+package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service;
+
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.EmployeeDAO;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.EmployeeValidator;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidEmployeeException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException;
+import java.util.List;
+import org.springframework.stereotype.Service;
+
+@Service
+public class EmployeeServiceImpl implements EmployeeService {
+
+ private final EmployeeDAO employeePersistence;
+
+ public EmployeeServiceImpl(EmployeeDAO employeePersistence) {
+ this.employeePersistence = employeePersistence;
+ }
+
+ @Override
+ public long add(Employee employee) throws InvalidEmployeeException, ServiceException {
+
+ EmployeeValidator.validate(employee);
+ try {
+ return employeePersistence.add(employee);
+ } catch (PersistenceException e) {
+ throw new ServiceException(e);
+ }
+ }
+
+ @Override
+ public Employee update(Employee employee) throws InvalidEmployeeException, ServiceException {
+ return null;
+ }
+
+ @Override
+ public List<Employee> list() throws ServiceException {
+ return null;
+ }
+
+ @Override
+ public void remove(long id) throws InvalidEmployeeException, ServiceException {}
+}
diff --git a/src/main/resources/fxml/createNewEmployee.fxml b/src/main/resources/fxml/createNewEmployee.fxml
new file mode 100644
index 0000000..5fa1ca9
--- /dev/null
+++ b/src/main/resources/fxml/createNewEmployee.fxml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.control.CheckBox?>
+<?import javafx.scene.control.ChoiceBox?>
+<?import javafx.scene.control.Hyperlink?>
+<?import javafx.scene.control.Label?>
+<?import javafx.scene.control.TextField?>
+<?import javafx.scene.layout.AnchorPane?>
+
+
+<AnchorPane prefHeight="114.0" 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.CreateNewEmployeeController">
+ <children>
+ <Label layoutX="14.0" layoutY="14.0" text="Neue Person erstellen" />
+ <Label layoutX="14.0" layoutY="38.0" text="Name" />
+ <Label layoutX="206.0" layoutY="38.0" text="Qualifikation" />
+ <CheckBox fx:id="inputIsDriver" layoutX="343.0" layoutY="37.0" mnemonicParsing="false" text="Fahrer" />
+ <CheckBox fx:id="inputIsPilot" layoutX="343.0" layoutY="62.0" mnemonicParsing="false" text="Pilot" />
+ <Hyperlink fx:id="btnCancel" layoutX="441.0" layoutY="31.0" onAction="#onCancelClicked" text="abbrechen" />
+ <Button fx:id="btnCreate" layoutX="441.0" layoutY="55.0" mnemonicParsing="false" onAction="#onCreateClicked" text="Erstellen" />
+ <TextField fx:id="inputName" layoutX="14.0" layoutY="57.0" prefHeight="25.0" prefWidth="179.0" />
+ <ChoiceBox fx:id="inputQualification" layoutX="199.0" layoutY="57.0" prefHeight="25.0" prefWidth="128.0" />
+ </children>
+</AnchorPane>