summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndriy Cherniy <qugalet@m0e.space>2024-06-15 10:45:30 +0300
committerAndriy Cherniy <qugalet@m0e.space>2024-06-15 10:45:30 +0300
commitd0f951643060821673e060eea7376000418c457b (patch)
tree3392838fb9289638c9cac500a8ff681917f4fc22
parent0a41210ec447cf48bf75082f989165cbf1c78ab8 (diff)
downloadoop-kursach-d0f951643060821673e060eea7376000418c457b.tar.gz
oop-kursach-d0f951643060821673e060eea7376000418c457b.zip
16
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/Main.java11
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/dialogs/InsertDialog.java13
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/dialogs/SearchDialog.java11
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/dialogs/SortDialog.java74
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/entities/common/Utils.java28
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/entities/macro/Fortress.java12
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Immigrant.java3
-rw-r--r--src/main/resources/space/m0e/quga/oop/lab56maven/dialogs/sort_dialog.fxml20
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>