diff options
author | Viktoria Pundy <viktoria.pundy@aon.at> | 2018-06-19 15:26:33 +0200 |
---|---|---|
committer | Tharre <tharre3@gmail.com> | 2018-06-19 21:33:08 +0200 |
commit | 7e2671d0d30bf217a40fd76c5676025218091a62 (patch) | |
tree | 990ee6995b5f20cb8ad497683d542feee11a2778 | |
parent | 280196ec77ffb1ff722b947afa6b2e2439a663ec (diff) | |
download | sepm-groupproject-7e2671d0d30bf217a40fd76c5676025218091a62.tar.gz sepm-groupproject-7e2671d0d30bf217a40fd76c5676025218091a62.tar.xz sepm-groupproject-7e2671d0d30bf217a40fd76c5676025218091a62.zip |
Added search to archive window [#25963]
With search, the user can look for a specific archived operation. The search considers operation-code, location, date and name of the cars
-rw-r--r-- | src/main/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/controller/ArchiveOperationController.java | 74 | ||||
-rw-r--r-- | src/main/resources/fxml/ArchiveOperation.fxml | 10 |
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" /> |