From 166ff610e62f0671f65a6fd27d4760f0881eb6f4 Mon Sep 17 00:00:00 2001
From: Andreas Weninger <e01526989@student.tuwien.ac.at>
Date: Fri, 11 May 2018 16:17:42 +0200
Subject: UI Changes Main Window

---
 .../einsatzverwaltung/dto/Registration.java        |   7 +
 .../ui/vehiclepane/VehiclePaneController.java      |  23 +++-
 .../userInterface/CreateOperationController.java   | 143 ++++++++++++---------
 3 files changed, 102 insertions(+), 71 deletions(-)

(limited to 'src/main/java/at')

diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dto/Registration.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dto/Registration.java
index 8551266..93530bc 100644
--- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dto/Registration.java
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dto/Registration.java
@@ -2,6 +2,7 @@ package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto;
 
 import com.google.auto.value.AutoValue;
 import java.time.Instant;
+import java.util.Date;
 
 @AutoValue
 public abstract class Registration {
@@ -17,6 +18,12 @@ public abstract class Registration {
         return new AutoValue_Registration.Builder().id(0);
     }
 
+    public boolean isActive() {
+        Instant now = (new Date()).toInstant();
+
+        return start().isBefore(now) && end().isAfter(now);
+    }
+
     @AutoValue.Builder
     public abstract static class Builder {
         public abstract Builder id(long id);
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/ui/vehiclepane/VehiclePaneController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/ui/vehiclepane/VehiclePaneController.java
index 2db6f37..29230f3 100644
--- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/ui/vehiclepane/VehiclePaneController.java
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/ui/vehiclepane/VehiclePaneController.java
@@ -4,8 +4,6 @@ import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee.Ed
 import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Registration;
 import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle;
 import java.io.IOException;
-import java.time.Instant;
-import java.util.Date;
 import java.util.List;
 import java.util.Optional;
 import javafx.fxml.FXML;
@@ -16,6 +14,7 @@ import javafx.scene.image.ImageView;
 import javafx.scene.text.Text;
 
 public class VehiclePaneController {
+
     @FXML private Text txtType;
     @FXML private Text txtNumber;
     @FXML private ImageView ivNEF;
@@ -35,11 +34,16 @@ public class VehiclePaneController {
     }
 
     private Node rootElement;
+    private Vehicle data;
 
     public Node getRootElement() {
         return rootElement;
     }
 
+    public Vehicle getData() {
+        return data;
+    }
+
     /**
      * * Set the displayed data of this VehiclePane.
      *
@@ -52,23 +56,22 @@ public class VehiclePaneController {
         String constrType = vehicle.constructionType().name();
         txtRooftype.setText(
                 constrType.substring(0, 1).toUpperCase() + constrType.substring(1).toLowerCase());
-        txtNumber.setText("" + vehicle.id());
+        txtNumber.setText("-" + vehicle.id());
         if (vehicle.hasNef()) {
-            ivNEF.setImage(new Image("../images/NEF.png"));
+            ivNEF.setImage(new Image("images/NEF.png"));
             txtNEF.setText("hat NEF-Halterung");
         } else {
-            ivNEF.setImage(new Image("../images/NotNEF.png"));
+            ivNEF.setImage(new Image("images/NotNEF.png"));
             txtNEF.setText("keine NEF-Halterung");
         }
         if (showQualification) {
 
-            Instant now = (new Date()).toInstant();
             List<Registration> regs = vehicle.registrations();
 
             assert regs != null;
             Optional<EducationLevel> edu =
                     regs.stream()
-                            .filter(reg -> reg.start().isBefore(now) && reg.end().isAfter(now))
+                            .filter(Registration::isActive)
                             .map(reg -> reg.employee().educationLevel())
                             .max(EducationLevel::compareTo);
 
@@ -80,5 +83,11 @@ public class VehiclePaneController {
             ivQualification.setVisible(false);
             ivQualification.setManaged(false);
         }
+
+        this.data = vehicle;
+    }
+
+    public void setSelected(boolean selected) {
+        // TODO
     }
 }
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/CreateOperationController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/CreateOperationController.java
index 7b04efe..58874da 100644
--- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/CreateOperationController.java
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/CreateOperationController.java
@@ -1,13 +1,19 @@
 package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.userInterface;
 
 import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.DBOperationDAO;
+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.dto.Operation;
 import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Severity;
 import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Status;
+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.ConstructionType;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType;
 import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.OperationService;
 import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.OperationServiceImpl;
 import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleService;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.ui.vehiclepane.VehiclePaneController;
 import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidOperationException;
 import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException;
 import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager;
@@ -15,10 +21,11 @@ import at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader;
 import java.io.IOException;
 import java.lang.invoke.MethodHandles;
 import java.time.Instant;
-import java.util.EnumSet;
+import java.time.LocalDate;
+import java.time.temporal.ChronoUnit;
+import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.Set;
-import javafx.collections.FXCollections;
 import javafx.event.ActionEvent;
 import javafx.fxml.FXML;
 import javafx.scene.Parent;
@@ -27,10 +34,10 @@ import javafx.scene.control.Alert;
 import javafx.scene.control.Alert.AlertType;
 import javafx.scene.control.Button;
 import javafx.scene.control.Label;
-import javafx.scene.control.ListCell;
 import javafx.scene.control.ListView;
 import javafx.scene.control.TextField;
 import javafx.scene.layout.AnchorPane;
+import javafx.scene.layout.FlowPane;
 import javafx.stage.Stage;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -46,13 +53,14 @@ public class CreateOperationController {
     public TextField txtAddress;
     public TextField txtNote;
     public Button btnCreateOperation;
-    public ListView<Vehicle> lvVehicles;
     public ListView lvActiveOperations;
     public Label lblChosenVehicles;
-    public LinkedList<Vehicle> chosenVehicles = new LinkedList<>();
+    public FlowPane fpVehicles;
+
+    private LinkedList<Vehicle> chosenVehicles = new LinkedList<>();
 
     // TODO: Anders?
-    OperationService operationService =
+    private OperationService operationService =
             new OperationServiceImpl(new DBOperationDAO(new JDBCConnectionManager()));
     private final VehicleService vehicleService;
     private final SpringFXMLLoader fxmlLoader;
@@ -65,65 +73,55 @@ public class CreateOperationController {
     @FXML
     public void initialize() {
         lblChosenVehicles.setText("keine ausgewählt");
-        lvVehicles.setCellFactory(
-                param ->
-                        new ListCell<Vehicle>() {
-                            @Override
-                            protected void updateItem(Vehicle item, boolean empty) {
-                                super.updateItem(item, empty);
-
-                                if (empty || item == null || item.name() == null) {
-                                    setText(null);
-                                } else {
-                                    setText(item.name());
-                                }
-                            }
-                        });
-
-        lvVehicles.setOnMouseClicked(
-                event -> {
-                    if (event.getClickCount() == 2) {
-                        boolean remove = false;
-                        if (lvVehicles.getSelectionModel().getSelectedItem() == null) {
-                            return;
-                        }
-                        for (Vehicle vehicle : chosenVehicles) {
-                            if (lvVehicles.getSelectionModel().getSelectedItem().equals(vehicle)) {
-                                remove = true;
-                                break;
-                            }
-                        }
-                        if (!remove) {
-                            chosenVehicles.add(lvVehicles.getSelectionModel().getSelectedItem());
-
-                        } else {
-                            chosenVehicles.remove(lvVehicles.getSelectionModel().getSelectedItem());
-                        }
-                        StringBuilder result = new StringBuilder();
-                        for (int i = 0; i < chosenVehicles.size(); i++) {
-                            if (i == chosenVehicles.size() - 1) {
-                                result.append(chosenVehicles.get(i).name());
-                            } else {
-                                result.append(chosenVehicles.get(i).name()).append(", ");
-                            }
-                        }
-                        if (result.toString().equals("")) {
-                            lblChosenVehicles.setText("keine ausgewählt");
-                        } else {
-                            lblChosenVehicles.setText(result.toString());
-                        }
-                    }
-                });
     }
 
     public void updateList() {
         try {
-            this.lvVehicles.setItems(
-                    FXCollections.observableArrayList(
-                            vehicleService.list(
-                                    EnumSet.of(
-                                            Vehicle.Status.FREI_FUNK, Vehicle.Status.FREI_WACHE))));
-        } catch (ServiceException e) {
+            fpVehicles.getChildren().clear();
+            List<Vehicle> vehicles = vehicleService.list();
+
+            // TODO Remove debug
+            vehicles = testData();
+
+            for (Vehicle vehicle : vehicles) {
+                VehiclePaneController controller = VehiclePaneController.createVehiclePane();
+
+                controller.setData(vehicle, true);
+                controller
+                        .getRootElement()
+                        .setOnMouseClicked(
+                                event -> {
+                                    if (event.getClickCount() == 2) {
+                                        if (chosenVehicles.contains(vehicle)) {
+                                            chosenVehicles.remove(vehicle);
+                                            controller.setSelected(false);
+                                        } else {
+                                            chosenVehicles.add(vehicle);
+                                            controller.setSelected(true);
+                                        }
+
+                                        StringBuilder result = new StringBuilder();
+                                        for (int i = 0; i < chosenVehicles.size(); i++) {
+                                            if (i == chosenVehicles.size() - 1) {
+                                                result.append(chosenVehicles.get(i).name());
+                                            } else {
+                                                result.append(chosenVehicles.get(i).name())
+                                                        .append(", ");
+                                            }
+                                        }
+                                        if (result.toString().equals("")) {
+                                            lblChosenVehicles.setText("keine ausgewählt");
+                                        } else {
+                                            lblChosenVehicles.setText(result.toString());
+                                        }
+                                    }
+                                });
+
+                fpVehicles.getChildren().add(controller.getRootElement());
+            }
+        } catch (ServiceException | IOException e) {
+            LOG.error("Error while updating list.", e);
+
             Alert alert = new Alert(Alert.AlertType.ERROR);
             alert.setTitle("Fehler");
             alert.setHeaderText("Fehler!");
@@ -132,14 +130,30 @@ public class CreateOperationController {
         }
     }
 
-    /*private LinkedList<Vehicle> mylist() {
+    private LinkedList<Vehicle> testData() {
+        Employee empl =
+                Employee.builder()
+                        .birthday(LocalDate.MIN)
+                        .isDriver(true)
+                        .isPilot(true)
+                        .educationLevel(EducationLevel.NKV)
+                        .name("Hans Test")
+                        .build();
+        Registration reg =
+                Registration.builder()
+                        .employee(empl)
+                        .start(Instant.now().minus(1, ChronoUnit.HOURS))
+                        .end(Instant.now().plus(1, ChronoUnit.HOURS))
+                        .build();
+
         Vehicle vehicle =
                 Vehicle.builder()
                         .name("Test-KTW")
                         .constructionType(ConstructionType.HOCHDACH)
                         .type(VehicleType.KTW)
                         .status(Vehicle.Status.FREI_WACHE)
-                        .hasNef(true)
+                        .hasNef(false)
+                        .registrations(Arrays.asList(reg))
                         .build();
 
         Vehicle vehicle1 =
@@ -149,13 +163,14 @@ public class CreateOperationController {
                         .type(VehicleType.NEF)
                         .status(Vehicle.Status.FREI_FUNK)
                         .hasNef(true)
+                        .registrations(Arrays.asList(reg))
                         .build();
         LinkedList<Vehicle> list = new LinkedList<>();
         list.add(vehicle);
         list.add(vehicle1);
         // this.lvVehicles.setItems(FXCollections.observableArrayList(list));
         return list;
-    }*/
+    }
 
     @FXML
     protected void createOperationClicked() {
-- 
cgit v1.2.3-70-g09d2