diff options
| author | Andriy Cherniy <qugalet@m0e.space> | 2024-06-15 03:40:35 +0300 |
|---|---|---|
| committer | Andriy Cherniy <qugalet@m0e.space> | 2024-06-15 03:40:35 +0300 |
| commit | fdd15afe5224ba634ebb17b5cc308624838f1187 (patch) | |
| tree | a2c1f657b51f1f3aaa1569936f4a800044654b50 | |
| parent | 7356425dd4f0b09d984e794598c67cfaad351599 (diff) | |
| download | oop-kursach-fdd15afe5224ba634ebb17b5cc308624838f1187.tar.gz oop-kursach-fdd15afe5224ba634ebb17b5cc308624838f1187.zip | |
13-15
6 files changed, 181 insertions, 3 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 ae203eb..9aa199b 100644 --- a/src/main/java/space/m0e/quga/oop/lab56maven/Main.java +++ b/src/main/java/space/m0e/quga/oop/lab56maven/Main.java @@ -12,6 +12,7 @@ import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; import javafx.stage.Stage; import space.m0e.quga.oop.lab56maven.dialogs.InsertDialog; +import space.m0e.quga.oop.lab56maven.dialogs.SearchDialog; import space.m0e.quga.oop.lab56maven.entities.common.Ability; import space.m0e.quga.oop.lab56maven.entities.macro.Fortress; import space.m0e.quga.oop.lab56maven.entities.macro.ThroneRoom; @@ -99,8 +100,12 @@ public class Main extends Application { }); } - case M -> { - + case F -> { + try { + SearchDialog.display(); + } catch (IOException e) { + e.printStackTrace(); + } } case TAB -> { @@ -112,6 +117,19 @@ 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(); + } + } + }); stage.setTitle("Hello!"); stage.setScene(scene); ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); 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 new file mode 100644 index 0000000..014c7c0 --- /dev/null +++ b/src/main/java/space/m0e/quga/oop/lab56maven/dialogs/SearchDialog.java @@ -0,0 +1,77 @@ +package space.m0e.quga.oop.lab56maven.dialogs; + +import javafx.beans.Observable; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.input.MouseEvent; +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.micro.Immigrant; + +import java.io.IOException; +import java.net.URL; +import java.util.Arrays; +import java.util.Objects; +import java.util.ResourceBundle; +import java.util.stream.Collectors; + +public class SearchDialog implements Initializable { + public static Stage window = null; + public static Scene scene; + public ComboBox searchCombo; + public Button submitButton; + public TextField searchQuery; + + public static void display() throws IOException { + Parent root = FXMLLoader.load(Objects.requireNonNull(SearchDialog.class.getResource("search_dialog.fxml"))); + + window = new Stage(); + window.initModality(Modality.APPLICATION_MODAL); + window.setTitle("Search"); + + 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 sendError(String title, String description) { + Alert alert = new Alert(Alert.AlertType.ERROR); + alert.setTitle("Error"); + alert.setHeaderText(title); + alert.setContentText(description); + alert.showAndWait(); + } + + public void submitButtonHandler(MouseEvent mouseEvent) { + String result = Immigrant.findImmigrants(immigrant -> { + switch (searchCombo.getValue().toString()) { + case "Name" -> { + return immigrant.getFullName().contains(searchQuery.getText()); + } + case "Age" -> { + return immigrant.getAge() == Integer.parseInt(searchQuery.getText()); + } + } + return false; + }); + Alert alert = new Alert(Alert.AlertType.INFORMATION); + alert.setTitle("Search result"); + alert.setContentText(result); + alert.setHeaderText("Search result"); + alert.showAndWait(); + } +} 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 9ab9114..95d36b1 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 @@ -1,13 +1,16 @@ package space.m0e.quga.oop.lab56maven.entities.macro; +import javafx.scene.control.Alert; import javafx.scene.control.Label; import javafx.scene.image.Image; 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.micro.Dwarf; import space.m0e.quga.oop.lab56maven.entities.micro.Immigrant; +import java.io.IOException; import java.util.ArrayList; import java.util.Objects; import java.util.concurrent.atomic.AtomicInteger; @@ -29,11 +32,17 @@ public class Fortress { private double y; private VBox vBox = new VBox(); + @Override + public String toString() { + return String.format("%s{Name=%s, Position=(%f,%f)}", this.getClass().getSimpleName(), this.name, getX(), getY()); + } + private TilePane dwarvesContainer = new TilePane(10, 10); public Fortress(String name, double x, double y, ArrayList<Workstation> workstations, ArrayList<ThroneRoom> throneRooms) { this.x = x; this.y = y; + this.name = name; nameLabel.setText(name); countLabel.setText("0"); @@ -91,7 +100,21 @@ public class Fortress { vBox.getChildren().addAll(nameLabel, insideGroup, countLabel); this.vBox.setBorder(new Border(new BorderStroke(Color.RED, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, new BorderWidths(3)))); + + 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(); + } + } + }); Main.root.getChildren().add(vBox); + }; public void add(Dwarf dwarf) { diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Dwarf.java b/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Dwarf.java index 5fab26b..9c3008e 100644 --- a/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Dwarf.java +++ b/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Dwarf.java @@ -31,6 +31,11 @@ public class Dwarf extends Immigrant { this.workstation = workstation; } + @Override + public String toString() { + return String.format("%s{Name=%s, Age=%d, Ability=%s, HP: %f/%f, Items: [%s], Position=(%f,%f), MacroObject=%s}", this.getClass().getSimpleName(), this.getFullName(), this.getAge(), this.getAbility(), this.getHp(), this.getMaxHp(), String.join(", ", this.getItems()), getX(), getY(), getFortress()); + } + private Fortress fortress = null; private Workstation workstation = null; public Image spriteImage = new Image(Objects.requireNonNull(Immigrant.class.getResourceAsStream("dwarf.png")));; 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 34581f4..1c86fa7 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 @@ -17,6 +17,8 @@ import space.m0e.quga.oop.lab56maven.threads.ImmigrantThread; import java.io.IOException; import java.util.*; import java.util.concurrent.ForkJoinTask; +import java.util.function.Function; +import java.util.function.Predicate; import java.util.stream.Collectors; public class Immigrant implements Comparable<Immigrant>, Cloneable { @@ -205,7 +207,7 @@ public class Immigrant implements Comparable<Immigrant>, Cloneable { @Override public String toString() { - return String.format("%s{Name=%s, Age=%d, Ability=%s, HP: %f/%f, Items: [%s]}", this.getClass().getSimpleName(), this.getFullName(), this.age, this.ability, this.hp, this.maxHp, String.join(", ", this.items)); + return String.format("%s{Name=%s, Age=%d, Ability=%s, HP: %f/%f, Items: [%s], Position=(%f,%f)}", this.getClass().getSimpleName(), this.getFullName(), this.age, this.ability, this.hp, this.maxHp, String.join(", ", this.items), getX(), getY()); } @Override @@ -334,4 +336,8 @@ public class Immigrant implements Comparable<Immigrant>, Cloneable { public Thread getThread() { 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/search_dialog.fxml b/src/main/resources/space/m0e/quga/oop/lab56maven/dialogs/search_dialog.fxml new file mode 100644 index 0000000..7cd4791 --- /dev/null +++ b/src/main/resources/space/m0e/quga/oop/lab56maven/dialogs/search_dialog.fxml @@ -0,0 +1,49 @@ +<?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.SearchDialog" + alignment="CENTER" + spacing="10" + prefHeight="400.0" prefWidth="600.0"> + + <Label text="Search parameter" /> + <ComboBox fx:id="searchCombo" /> + <TextField fx:id="searchQuery" /> + +<!-- <HBox alignment="CENTER">--> +<!-- <Label text="First name: "/>--> +<!-- <TextField fx:id="firstName"/>--> +<!-- </HBox>--> + +<!-- <HBox alignment="CENTER">--> +<!-- <Label text="Last name: "/>--> +<!-- <TextField fx:id="lastName"/>--> +<!-- </HBox>--> + +<!-- <HBox alignment="CENTER">--> +<!-- <Label text="Age: "/>--> +<!-- <TextField fx:id="age"/>--> +<!-- </HBox>--> + +<!-- <HBox alignment="CENTER" spacing="10">--> +<!-- <Label text="x:"/>--> +<!-- <TextField maxWidth="50" fx:id="x"/>--> + +<!-- <Label text="y:"/>--> +<!-- <TextField maxWidth="50" fx:id="y"/>--> +<!-- </HBox>--> + +<!-- <HBox alignment="CENTER">--> +<!-- <Label text="Ability: "/>--> +<!-- <ChoiceBox fx:id="ability"/>--> +<!-- </HBox>--> + + <Button fx:id="submitButton" onMouseClicked="#submitButtonHandler" text="OK" alignment="BOTTOM_CENTER"/> +</VBox> |
