summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndriy Cherniy <qugalet@m0e.space>2024-06-15 03:40:35 +0300
committerAndriy Cherniy <qugalet@m0e.space>2024-06-15 03:40:35 +0300
commitfdd15afe5224ba634ebb17b5cc308624838f1187 (patch)
treea2c1f657b51f1f3aaa1569936f4a800044654b50
parent7356425dd4f0b09d984e794598c67cfaad351599 (diff)
downloadoop-kursach-fdd15afe5224ba634ebb17b5cc308624838f1187.tar.gz
oop-kursach-fdd15afe5224ba634ebb17b5cc308624838f1187.zip
13-15
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/Main.java22
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/dialogs/SearchDialog.java77
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/entities/macro/Fortress.java23
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Dwarf.java5
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Immigrant.java8
-rw-r--r--src/main/resources/space/m0e/quga/oop/lab56maven/dialogs/search_dialog.fxml49
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>