diff options
| author | Andriy Cherniy <qugalet@m0e.space> | 2024-06-15 10:45:30 +0300 |
|---|---|---|
| committer | Andriy Cherniy <qugalet@m0e.space> | 2024-06-15 10:45:30 +0300 |
| commit | d0f951643060821673e060eea7376000418c457b (patch) | |
| tree | 3392838fb9289638c9cac500a8ff681917f4fc22 | |
| parent | 0a41210ec447cf48bf75082f989165cbf1c78ab8 (diff) | |
| download | oop-kursach-d0f951643060821673e060eea7376000418c457b.tar.gz oop-kursach-d0f951643060821673e060eea7376000418c457b.zip | |
16
8 files changed, 141 insertions, 31 deletions
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/Main.java b/src/main/java/space/m0e/quga/oop/lab56maven/Main.java index 3b0c594..1549ff5 100644 --- a/src/main/java/space/m0e/quga/oop/lab56maven/Main.java +++ b/src/main/java/space/m0e/quga/oop/lab56maven/Main.java @@ -129,12 +129,11 @@ public class Main extends Application { root.setOnMouseClicked(event -> { switch (event.getButton()) { case SECONDARY -> { - String result = Immigrant.findImmigrants(immigrant -> fortresses.stream().noneMatch(fortress1 -> fortress1.getDwarves().contains(immigrant))); - Alert alert = new Alert(Alert.AlertType.INFORMATION); - alert.setTitle("Search result"); - alert.setContentText(result); - alert.setHeaderText("Dwarves outside MacroObjects:"); - alert.showAndWait(); + try { + Utils.findImmigrants("Dwarves outside MacroObjects:", immigrant -> fortresses.stream().noneMatch(fortress1 -> fortress1.getDwarves().contains(immigrant))); + } catch (IOException e) { + e.printStackTrace(); + } } } }); diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/dialogs/InsertDialog.java b/src/main/java/space/m0e/quga/oop/lab56maven/dialogs/InsertDialog.java index c0c72f3..13226c8 100644 --- a/src/main/java/space/m0e/quga/oop/lab56maven/dialogs/InsertDialog.java +++ b/src/main/java/space/m0e/quga/oop/lab56maven/dialogs/InsertDialog.java @@ -25,6 +25,8 @@ import java.util.Arrays; import java.util.Objects; import java.util.ResourceBundle; +import static space.m0e.quga.oop.lab56maven.entities.common.Utils.sendErrorAlert; + public class InsertDialog implements Initializable { public static Stage window = null; public static Scene scene; @@ -63,13 +65,6 @@ public class InsertDialog implements Initializable { classSelection.setValue("Immigrant"); } - public void sendError(String title, String description) { - Alert alert = new Alert(Alert.AlertType.ERROR); - alert.setTitle("Error"); - alert.setHeaderText(title); - alert.setContentText(description); - alert.showAndWait(); - } @FXML public void submitButtonHandler() { @@ -81,7 +76,7 @@ public class InsertDialog implements Initializable { ability.getValue() == null || classSelection.getValue() == null ) { - sendError("You must enter all the fields", null); + sendErrorAlert("You must enter all the fields", null); return; } int inputAge = Integer.parseInt(age.getText()); @@ -89,7 +84,7 @@ public class InsertDialog implements Initializable { double inputY = Double.parseDouble(y.getText()); Ability inputAbility = Ability.valueOf(ability.getValue().toString()); if (inputAge < 0) { - sendError("You must enter a valid age", null); + sendErrorAlert("You must enter a valid age", null); return; } diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/dialogs/SearchDialog.java b/src/main/java/space/m0e/quga/oop/lab56maven/dialogs/SearchDialog.java index 014c7c0..df8ceae 100644 --- a/src/main/java/space/m0e/quga/oop/lab56maven/dialogs/SearchDialog.java +++ b/src/main/java/space/m0e/quga/oop/lab56maven/dialogs/SearchDialog.java @@ -14,6 +14,7 @@ import javafx.stage.Modality; import javafx.stage.Stage; import space.m0e.quga.oop.lab56maven.Main; import space.m0e.quga.oop.lab56maven.entities.common.Ability; +import space.m0e.quga.oop.lab56maven.entities.common.Utils; import space.m0e.quga.oop.lab56maven.entities.micro.Immigrant; import java.io.IOException; @@ -56,8 +57,8 @@ public class SearchDialog implements Initializable { alert.showAndWait(); } - public void submitButtonHandler(MouseEvent mouseEvent) { - String result = Immigrant.findImmigrants(immigrant -> { + public void submitButtonHandler(MouseEvent mouseEvent) throws IOException { + Utils.findImmigrants("Search result", immigrant -> { switch (searchCombo.getValue().toString()) { case "Name" -> { return immigrant.getFullName().contains(searchQuery.getText()); @@ -68,10 +69,6 @@ public class SearchDialog implements Initializable { } return false; }); - Alert alert = new Alert(Alert.AlertType.INFORMATION); - alert.setTitle("Search result"); - alert.setContentText(result); - alert.setHeaderText("Search result"); - alert.showAndWait(); + window.close(); } } diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/dialogs/SortDialog.java b/src/main/java/space/m0e/quga/oop/lab56maven/dialogs/SortDialog.java new file mode 100644 index 0000000..a9d313e --- /dev/null +++ b/src/main/java/space/m0e/quga/oop/lab56maven/dialogs/SortDialog.java @@ -0,0 +1,74 @@ +package space.m0e.quga.oop.lab56maven.dialogs; + +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.control.Alert; +import javafx.scene.control.Button; +import javafx.scene.control.ComboBox; +import javafx.scene.control.TextField; +import javafx.scene.input.MouseEvent; +import javafx.stage.Modality; +import javafx.stage.Stage; +import space.m0e.quga.oop.lab56maven.entities.common.Utils; +import space.m0e.quga.oop.lab56maven.entities.micro.Immigrant; + +import java.io.IOException; +import java.net.URL; +import java.util.*; +import java.util.stream.Collectors; + +public class SortDialog implements Initializable { + public static Stage window = null; + public static Scene scene; + public ComboBox searchCombo; + public Button submitButton; + + private static ArrayList<Immigrant> sortInput = new ArrayList<>(); + private static String name; + + public static void display(ArrayList<Immigrant> sort, String alertName) throws IOException { + Parent root = FXMLLoader.load(Objects.requireNonNull(SortDialog.class.getResource("sort_dialog.fxml"))); + sortInput.addAll(sort); + name = alertName; + + window = new Stage(); + window.initModality(Modality.APPLICATION_MODAL); + window.setTitle("Sort"); + + scene = new Scene(root, 440, 350); + window.setScene(scene); + window.showAndWait(); + } + + @Override + public void initialize(URL location, ResourceBundle resources) { + searchCombo.getItems().addAll("Name", "Age"); + searchCombo.setValue("Name"); + } + + public void submitButtonHandler(MouseEvent mouseEvent) { + sortInput.sort(new Comparator<Immigrant>() { + + @Override + public int compare(Immigrant o1, Immigrant o2) { + switch (searchCombo.getValue().toString()) { + case "Name" -> { + return o1.getFullName().compareTo(o2.getFullName()); + } + case "Age" -> { + return o1.getAge() - o2.getAge(); + } + } + return 0; + } + }); + Alert alert = new Alert(Alert.AlertType.INFORMATION); + alert.setTitle(name); + alert.setContentText(sortInput.stream().map(Immigrant::toString).collect(Collectors.joining("\n\n"))); + alert.setHeaderText(name); + alert.showAndWait(); + window.close(); + } +} diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/entities/common/Utils.java b/src/main/java/space/m0e/quga/oop/lab56maven/entities/common/Utils.java new file mode 100644 index 0000000..98385a1 --- /dev/null +++ b/src/main/java/space/m0e/quga/oop/lab56maven/entities/common/Utils.java @@ -0,0 +1,28 @@ +package space.m0e.quga.oop.lab56maven.entities.common; + +import javafx.scene.control.Alert; +import space.m0e.quga.oop.lab56maven.Main; +import space.m0e.quga.oop.lab56maven.dialogs.SortDialog; +import space.m0e.quga.oop.lab56maven.entities.micro.Immigrant; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +public class Utils { + + public static void sendErrorAlert(String title, String description) { + Alert alert = new Alert(Alert.AlertType.ERROR); + alert.setTitle("Error"); + alert.setHeaderText(title); + alert.setContentText(description); + alert.showAndWait(); + } + + public static void findImmigrants(String name, Predicate<? super Immigrant> filterQuery) throws IOException { + ArrayList<Immigrant> sortInput = Main.immigrants.stream().filter(filterQuery).collect(Collectors.toCollection(ArrayList::new)); + SortDialog.display(sortInput, name); + } + +} diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/entities/macro/Fortress.java b/src/main/java/space/m0e/quga/oop/lab56maven/entities/macro/Fortress.java index 95d36b1..5114992 100644 --- a/src/main/java/space/m0e/quga/oop/lab56maven/entities/macro/Fortress.java +++ b/src/main/java/space/m0e/quga/oop/lab56maven/entities/macro/Fortress.java @@ -7,6 +7,7 @@ import javafx.scene.layout.*; import javafx.scene.paint.Color; import space.m0e.quga.oop.lab56maven.Main; import space.m0e.quga.oop.lab56maven.dialogs.ChangeDialog; +import space.m0e.quga.oop.lab56maven.entities.common.Utils; import space.m0e.quga.oop.lab56maven.entities.micro.Dwarf; import space.m0e.quga.oop.lab56maven.entities.micro.Immigrant; @@ -104,12 +105,11 @@ public class Fortress { this.vBox.setOnMouseClicked(event -> { switch (event.getButton()) { case SECONDARY -> { - String result = Immigrant.findImmigrants(immigrant -> this.dwarves.contains(immigrant)); - Alert alert = new Alert(Alert.AlertType.INFORMATION); - alert.setTitle("Search result"); - alert.setContentText(result); - alert.setHeaderText("Dwarves inside Fortress:"); - alert.showAndWait(); + try { + Utils.findImmigrants("Dwarves inside Fortress:", immigrant -> this.dwarves.contains(immigrant)); + } catch (IOException e) { + e.printStackTrace(); + } } } }); diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Immigrant.java b/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Immigrant.java index 1c86fa7..77a9c63 100644 --- a/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Immigrant.java +++ b/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Immigrant.java @@ -337,7 +337,4 @@ public class Immigrant implements Comparable<Immigrant>, Cloneable { return thread; } - public static String findImmigrants(Predicate<? super Immigrant> filterQuery) { - return Main.immigrants.stream().filter(filterQuery).map(Immigrant::toString).collect(Collectors.joining("\n\n")); - } } diff --git a/src/main/resources/space/m0e/quga/oop/lab56maven/dialogs/sort_dialog.fxml b/src/main/resources/space/m0e/quga/oop/lab56maven/dialogs/sort_dialog.fxml new file mode 100644 index 0000000..b806294 --- /dev/null +++ b/src/main/resources/space/m0e/quga/oop/lab56maven/dialogs/sort_dialog.fxml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import java.lang.*?> +<?import java.util.*?> +<?import javafx.scene.*?> +<?import javafx.scene.control.*?> +<?import javafx.scene.layout.*?> + +<VBox xmlns="http://javafx.com/javafx" + xmlns:fx="http://javafx.com/fxml" + fx:controller="space.m0e.quga.oop.lab56maven.dialogs.SortDialog" + alignment="CENTER" + spacing="10" + prefHeight="400.0" prefWidth="600.0"> + + <Label text="Sort parameter" /> + <ComboBox fx:id="searchCombo" /> + + <Button fx:id="submitButton" onMouseClicked="#submitButtonHandler" text="OK" alignment="BOTTOM_CENTER"/> +</VBox> |
