diff options
Diffstat (limited to 'src/main')
| -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" />  | 
