aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/controller/ArchiveOperationController.java74
-rw-r--r--src/main/resources/fxml/ArchiveOperation.fxml10
2 files changed, 80 insertions, 4 deletions
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/controller/ArchiveOperationController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/controller/ArchiveOperationController.java
index 3c3a005..212dba6 100644
--- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/controller/ArchiveOperationController.java
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/controller/ArchiveOperationController.java
@@ -9,6 +9,7 @@ import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.dto.Vehicle;
import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.service.OperationService;
import at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader;
import java.io.IOException;
+import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Arrays;
@@ -21,6 +22,7 @@ import java.util.Set;
import java.util.stream.Collectors;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
+import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
@@ -33,6 +35,7 @@ import org.springframework.stereotype.Controller;
public class ArchiveOperationController {
private static final Logger LOG = LoggerFactory.getLogger(ArchiveOperationController.class);
+ @FXML private TextField txtSearch;
@FXML private ImageView imvVehicleDetail;
@FXML private Label lblStatus;
@@ -89,13 +92,26 @@ public class ArchiveOperationController {
showServiceExceptionAlertAndWait("Die Einsätze konnten nicht geladen werden!");
;
}
- setFlowPane();
+ setFlowPane(list);
}
- private void setFlowPane() {
+ public void update(Set<Operation> operations) {
+ long cancelledAmount = 0;
+ long completedAmount = 0;
+ for (Operation operation : operations) {
+ if (operation.status() == Status.CANCELLED) cancelledAmount++;
+ else completedAmount++;
+ }
+ lblCancelled.setText("storniert: " + cancelledAmount);
+ lblCompleted.setText("abgeschlossen: " + completedAmount);
+ lblOperations.setText("Einsätze: " + operations.size());
+ setFlowPane(operations);
+ }
+
+ private void setFlowPane(Set<Operation> operations) {
try {
archiveOperationFlowPane.getChildren().clear();
- for (Operation operation : sortSet(list)) {
+ for (Operation operation : sortSet(operations)) {
OperationInArchiveController opInAController =
OperationInArchiveController.create();
opInAController.set(operation);
@@ -210,4 +226,56 @@ public class ArchiveOperationController {
backApMain.setVisible(b);
apMainDetails.setVisible(b);
}
+
+ @FXML
+ public void searchInput() {
+ LOG.debug("Search for operations in archive detail view started.");
+ String text = txtSearch.getText();
+ Set<Operation> chosenOperations = new HashSet<>();
+ if (emptyText(text)) update();
+ else {
+ for (Operation operation : list) {
+ if (checkEquality(operation, text)) chosenOperations.add(operation);
+ }
+ update(chosenOperations);
+ }
+ }
+
+ private boolean emptyText(String text) {
+ if (text == null) return true;
+ text = text.replaceAll("\\s+", "");
+ return text.isEmpty();
+ }
+
+ private boolean checkEquality(Operation operation, String text) {
+ if (isEqual(text, operation.opCode())
+ || isEqual(text, operation.destination())
+ || isEqual(text, reformDateToString(operation.created()))) return true;
+ for (Vehicle vehicle : operation.vehicles()) {
+ if (isEqual(text, vehicle.name())) return true;
+ }
+ return false;
+ }
+
+ private String reformDateToString(Instant time) {
+ LocalDateTime dateTime =
+ LocalDateTime.ofInstant(Objects.requireNonNull(time), ZoneOffset.UTC);
+ return "am "
+ + dateTime.getDayOfMonth()
+ + "."
+ + dateTime.getMonth().getValue()
+ + "."
+ + dateTime.getYear();
+ }
+
+ private boolean isEqual(String text, String realText) {
+ for (int i = 0; (i + text.length()) < realText.length(); i++) {
+ StringBuilder result = new StringBuilder();
+ for (int j = i; j < i + text.length(); j++) {
+ result.append(realText.charAt(j));
+ }
+ if ((text.toLowerCase()).equals(result.toString().toLowerCase())) return true;
+ }
+ return false;
+ }
}
diff --git a/src/main/resources/fxml/ArchiveOperation.fxml b/src/main/resources/fxml/ArchiveOperation.fxml
index e9549ae..9c22803 100644
--- a/src/main/resources/fxml/ArchiveOperation.fxml
+++ b/src/main/resources/fxml/ArchiveOperation.fxml
@@ -4,6 +4,7 @@
<?import javafx.scene.control.Hyperlink?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ScrollPane?>
+<?import javafx.scene.control.TextField?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
@@ -99,9 +100,10 @@
</AnchorPane>
<AnchorPane fx:id="apMainDetails" layoutX="82.0" layoutY="80.0" prefHeight="138.0" prefWidth="822.0" style="-fx-background-color: white;" styleClass="shadowed">
<children>
- <GridPane layoutY="14.0" prefHeight="113.0" prefWidth="451.0">
+ <GridPane layoutY="14.0" prefHeight="114.0" prefWidth="804.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
+ <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
@@ -124,6 +126,12 @@
<Font size="15.0" />
</font>
</Label>
+ <Label text="Suche:" GridPane.columnIndex="1">
+ <font>
+ <Font name="System Bold" size="20.0" />
+ </font>
+ </Label>
+ <TextField fx:id="txtSearch" onKeyReleased="#searchInput" prefHeight="30.0" prefWidth="355.0" GridPane.columnIndex="1" GridPane.rowIndex="1" />
</children>
<padding>
<Insets left="20.0" />