From 50d75e2f03462eae6dabbcbabf10ae2198eeed45 Mon Sep 17 00:00:00 2001 From: Jona Walpert Date: Sat, 14 Mar 2026 14:48:37 +0100 Subject: [PATCH 1/3] Style: Checkstyle changes to LobbyUI --- .../dbis/cs108/casono/client/ClientApp.java | 22 +++--- .../dbis/cs108/casono/client/ui/Launcher.java | 14 ++-- .../client/ui/lobbyui/Casinomainui.java | 33 +++++---- .../ui/lobbyui/CasinomainuiController.java | 52 ++++++-------- .../ui/lobbyui/LobbyButtonGridManager.java | 69 +++++++++++-------- .../LobbyButtonTranslationManager.java | 18 +++-- .../lobbyui/LobbyButtonGridManagerTest.java | 4 +- .../LobbyButtonTranslationManagerTest.java | 6 +- 8 files changed, 114 insertions(+), 104 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ClientApp.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ClientApp.java index 76dc06d..a8667fa 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ClientApp.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ClientApp.java @@ -1,26 +1,25 @@ package ch.unibas.dmi.dbis.cs108.casono.client; /** - * Entry point for the Casono client application. - * Handles client startup and connection parameters. + * Entry point for the Casono client application. Handles client startup and connection parameters. */ import ch.unibas.dmi.dbis.cs108.casono.client.ui.Launcher; + /** - * Entry point for the Casono client application. - * Handles client startup and connection parameters. - *

- * Standardkonstruktor für die Anwendung. + * Entry point for the Casono client application. Handles client startup and connection parameters. + * + *

Standardkonstruktor für die Anwendung. */ public class ClientApp { - /** - * Standardkonstruktor. - */ + /** Standardkonstruktor. */ public ClientApp() { // Standardkonstruktor } + /** * Starts the client application with the given address. + * * @param arg Address in the format "ip:port". * @throws IllegalArgumentException if the address format is invalid. */ @@ -32,7 +31,8 @@ public class ClientApp { String host = parts[0]; int port = Integer.parseInt(parts[1]); - System.out.println("You've selected the client. It will connect port " + port + " at host " + host); - Launcher.main(new String[]{}); + System.out.println( + "You've selected the client. It will connect port " + port + " at host " + host); + Launcher.main(new String[] {}); } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/Launcher.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/Launcher.java index c687abf..f4d4069 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/Launcher.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/Launcher.java @@ -1,26 +1,26 @@ package ch.unibas.dmi.dbis.cs108.casono.client.ui; +import ch.unibas.dmi.dbis.cs108.casono.client.ui.lobbyui.Casinomainui; import javafx.application.Application; /** * Launcher for the Casono main UI. - *

- * Standardkonstruktor für die Anwendung. + * + *

Standardkonstruktor für die Anwendung. */ public class Launcher { - /** - * Standardkonstruktor. - */ + /** Standardkonstruktor. */ public Launcher() { // Standardkonstruktor } + /** * Main entry point for launching the UI. + * * @param args Command line arguments */ public static void main(String[] args) { - Application.launch(ch.unibas.dmi.dbis.cs108.casono.client.ui.lobbyui.Casinomainui.class, args); + Application.launch(Casinomainui.class, args); } } - \ No newline at end of file diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/Casinomainui.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/Casinomainui.java index 169da1d..959c8d3 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/Casinomainui.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/Casinomainui.java @@ -1,41 +1,43 @@ package ch.unibas.dmi.dbis.cs108.casono.client.ui.lobbyui; -/** - * Main UI application for Casono. - * Loads the main FXML layout and sets up the stage. - */ +/** Main UI application for Casono. Loads the main FXML layout and sets up the stage. */ +import java.io.IOException; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.stage.Stage; -import java.io.IOException; - /** * JavaFX Application class for the Casono main UI. - *

- * Standardkonstruktor für die Anwendung. + * + *

Standardkonstruktor für die Anwendung. */ public class Casinomainui extends Application { - /** - * Standardkonstruktor. - */ + /** Standardkonstruktor. */ public Casinomainui() { // Standardkonstruktor } + + private static final int SCENE_WIDTH = 1200; + private static final int SCENE_HEIGHT = 800; + @Override /** * Starts the JavaFX application and loads the main UI. + * * @param stage The primary stage for this application. * @throws IOException If loading the FXML fails. */ public void start(Stage stage) throws IOException { - FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/ui-structure/Casinomainui.fxml")); - Scene scene = new Scene(fxmlLoader.load(), 1200, 800); + FXMLLoader fxmlLoader = + new FXMLLoader(getClass().getResource("/ui-structure/Casinomainui.fxml")); + Scene scene = new Scene(fxmlLoader.load(), SCENE_WIDTH, SCENE_HEIGHT); stage.setTitle("Casono"); - - stage.getIcons().add(new javafx.scene.image.Image(getClass().getResource("/images/logoinverted.png").toExternalForm())); + javafx.scene.image.Image icon = + new javafx.scene.image.Image( + getClass().getResource("/images/logoinverted.png").toExternalForm()); + stage.getIcons().add(icon); stage.setScene(scene); stage.setFullScreen(true); stage.show(); @@ -43,6 +45,7 @@ public class Casinomainui extends Application { /** * Main entry point for launching the application. + * * @param args Command line arguments */ public static void main(String[] args) { diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/CasinomainuiController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/CasinomainuiController.java index 5c235cf..56fe07e 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/CasinomainuiController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/CasinomainuiController.java @@ -2,34 +2,27 @@ package ch.unibas.dmi.dbis.cs108.casono.client.ui.lobbyui; import javafx.application.Platform; import javafx.fxml.FXML; -import javafx.scene.control.Label; import javafx.scene.control.Button; +import javafx.scene.control.Label; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.VBox; import javafx.scene.shape.Rectangle; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; -/** - * Controller for the Casono main UI lobby. - * Handles UI initialization and user actions. - */ +/** Controller for the Casono main UI lobby. Handles UI initialization and user actions. */ public class CasinomainuiController { + private static final Logger LOGGER = LogManager.getLogger(CasinomainuiController.class); - @FXML - private AnchorPane rootPane; - @FXML - private Label titleLabel; - @FXML - private Label subtitleLabel; - @FXML - private ImageView logoView; - @FXML - private Rectangle greenBox; - @FXML - private Button exitbutton; - @FXML - private VBox casinoTable; + @FXML private AnchorPane rootPane; + @FXML private Label titleLabel; + @FXML private Label subtitleLabel; + @FXML private ImageView logoView; + @FXML private Rectangle greenBox; + @FXML private Button exitbutton; + @FXML private VBox casinoTable; private LobbyButtonTranslationManager translationManager; private LobbyButtonGridManager gridManager; @@ -39,9 +32,7 @@ public class CasinomainuiController { // Default constructor } - /** - * Initializes the UI components and sets default values. - */ + /** Initializes the UI components and sets default values. */ @FXML public void initialize() { titleLabel.setText("Casono"); @@ -49,37 +40,34 @@ public class CasinomainuiController { logoView.setImage(new Image(getClass().getResource("/images/logo.png").toExternalForm())); translationManager = new LobbyButtonTranslationManager(); - gridManager = new LobbyButtonGridManager(new javafx.scene.layout.GridPane(), translationManager); + gridManager = + new LobbyButtonGridManager(new javafx.scene.layout.GridPane(), translationManager); casinoTable.getChildren().clear(); casinoTable.getChildren().add(gridManager.getGridPane()); gridManager.renderLobbyButtons(); } - /** - * Handles the exit button action to close the application. - */ + /** Handles the exit button action to close the application. */ @FXML public void handleexitbutton() { Platform.exit(); } - /** - * Handles creation of a new lobby button. - */ + /** Handles creation of a new lobby button. */ @FXML public void handleCreateLobbyButton() { if (translationManager.isFull()) { - System.out.println("Grid voll! Keine weiteren Lobbys moeglich."); + LOGGER.warn("Grid voll! Keine weiteren Lobbys moeglich."); return; } int buttonId = nextButtonId++; int lobbyId = gridManager.createLobby(); try { translationManager.addLobbyButton(buttonId, lobbyId); - System.out.println("ButtonID: " + buttonId + ", LobbyID: " + lobbyId); + LOGGER.info("ButtonID: {}, LobbyID: {}", buttonId, lobbyId); gridManager.renderLobbyButtons(); } catch (Exception e) { - System.out.println("Fehler beim Hinzufügen: " + e.getMessage()); + LOGGER.error("Fehler beim Hinzufügen: {}", e.getMessage()); } } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManager.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManager.java index 6add82d..03259a7 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManager.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManager.java @@ -1,47 +1,57 @@ package ch.unibas.dmi.dbis.cs108.casono.client.ui.lobbyui; /** - * Manages the grid for lobby buttons and rendering. - * Uses LobbyButtonTranslationManager for mapping ButtonID to LobbyID. + * Manages the grid for lobby buttons and rendering. Uses LobbyButtonTranslationManager for mapping + * ButtonID to LobbyID. */ - +import java.util.Map; import javafx.scene.control.Button; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.GridPane; -import java.util.Map; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; /** - * Manages the grid for lobby buttons and rendering. - * Uses LobbyButtonTranslationManager for mapping ButtonID to LobbyID. + * Manages the grid for lobby buttons and rendering. Uses LobbyButtonTranslationManager for mapping + * ButtonID to LobbyID. */ public class LobbyButtonGridManager { + private static final Logger LOGGER = LogManager.getLogger(LobbyButtonGridManager.class); /** GridPane for the button grid. */ private final GridPane gridPane; + /** Manager for mapping ButtonID to LobbyID. */ private final LobbyButtonTranslationManager translationManager; + /** Number of rows in the grid. */ - private final int rows = 2; + private static final int ROWS = 2; + /** Number of columns in the grid. */ - private final int cols = 4; + private static final int COLS = 4; + /** Path to the button image. */ - private final String buttonImagePath = "/images/logo.png"; + private static final String BUTTON_IMAGE_PATH = "/images/logo.png"; + + /** Max random lobby id. */ + private static final int MAX_RANDOM_LOBBY_ID = 10000; /** * Constructor for the GridManager. - * - * @param gridPane the GridPane for rendering + * + * @param gridPane the GridPane for rendering * @param translationManager the manager for mapping ButtonID to LobbyID */ - public LobbyButtonGridManager(GridPane gridPane, LobbyButtonTranslationManager translationManager) { + public LobbyButtonGridManager( + GridPane gridPane, LobbyButtonTranslationManager translationManager) { this.gridPane = gridPane; this.translationManager = translationManager; } /** - * Renders all lobby buttons in the grid. - * Creates a button for each mapping with image and event handler. + * Renders all lobby buttons in the grid. Creates a button for each mapping with image and event + * handler. */ public void renderLobbyButtons() { gridPane.getChildren().clear(); @@ -55,14 +65,17 @@ public class LobbyButtonGridManager { int buttonId = entry.getKey(); Button btn = new Button(); btn.setId("lobbyBtn-" + buttonId); - btn.setGraphic(new ImageView(new Image(getClass().getResourceAsStream(buttonImagePath)))); - btn.setOnAction(e -> { - Integer lobbyId = translationManager.getLobbyIdForButton(buttonId); - if (lobbyId != null) - joinLobby(lobbyId); - }); - int row = index / cols; - int col = index % cols; + btn.setGraphic( + new ImageView(new Image(getClass().getResourceAsStream(BUTTON_IMAGE_PATH)))); + btn.setOnAction( + e -> { + Integer lobbyId = translationManager.getLobbyIdForButton(buttonId); + if (lobbyId != null) { + joinLobby(lobbyId); + } + }); + int row = index / COLS; + int col = index % COLS; gridPane.add(btn, col, row); index++; } @@ -70,29 +83,29 @@ public class LobbyButtonGridManager { /** * Placeholder for lobby creation logic. Returns a generated lobbyId. - * + * * @return The generated lobbyId */ public int createLobby() { // TODO: Replace with actual lobby creation logic - int lobbyId = (int) (Math.random() * 10000 + 1); - System.out.println("Lobby created: " + lobbyId); + int lobbyId = (int) (Math.random() * MAX_RANDOM_LOBBY_ID + 1); + LOGGER.info("Lobby created: {}", lobbyId); return lobbyId; } /** * Placeholder for joining a lobby. - * + * * @param lobbyId The lobbyId to join */ public void joinLobby(int lobbyId) { // TODO: Replace with actual join logic - System.out.println("Joining lobby: " + lobbyId); + LOGGER.info("Joining lobby: {}", lobbyId); } /** * Getter for the GridPane. - * + * * @return The GridPane for the button grid */ public javafx.scene.layout.GridPane getGridPane() { diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManager.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManager.java index e3dd72e..19af19e 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManager.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManager.java @@ -4,24 +4,24 @@ import java.util.HashMap; import java.util.Map; /** - * Verwaltet das Mapping zwischen Button-IDs und Lobby-IDs rein im Speicher. - * Keine Dateioperationen, nur Laufzeitdatenstruktur. + * Verwaltet das Mapping zwischen Button-IDs und Lobby-IDs rein im Speicher. Keine Dateioperationen, + * nur Laufzeitdatenstruktur. */ public class LobbyButtonTranslationManager { /** Maximale Anzahl an Buttons/Lobbys */ private static final int MAX_BUTTONS = 8; + /** Zuordnung ButtonID → LobbyID */ private final Map buttonIdToLobbyId = new HashMap<>(); - /** - * Konstruktor: initialisiert die Zuordnung leer. - */ + /** Konstruktor: initialisiert die Zuordnung leer. */ public LobbyButtonTranslationManager() { // Zuordnung bleibt leer beim Start } /** * Prüft, ob das Grid voll ist (MAX_BUTTONS erreicht). + * * @return true, wenn Grid voll; sonst false */ public boolean isFull() { @@ -30,17 +30,21 @@ public class LobbyButtonTranslationManager { /** * Fügt eine Zuordnung ButtonID → LobbyID hinzu. + * * @param buttonId Die ID des Buttons * @param lobbyId Die ID der Lobby * @throws Exception wenn das Grid voll ist */ public void addLobbyButton(int buttonId, int lobbyId) throws Exception { - if (isFull()) throw new Exception("Grid is full!"); + if (isFull()) { + throw new Exception("Grid is full!"); + } buttonIdToLobbyId.put(buttonId, lobbyId); } /** * Entfernt eine Zuordnung für die gegebene ButtonID. + * * @param buttonId Die ID des zu entfernenden Buttons */ public void removeLobbyButton(int buttonId) { @@ -49,6 +53,7 @@ public class LobbyButtonTranslationManager { /** * Gibt die LobbyID für eine gegebene ButtonID zurück. + * * @param buttonId Die ButtonID * @return Die zugehoerige LobbyID oder null, falls nicht vorhanden */ @@ -58,6 +63,7 @@ public class LobbyButtonTranslationManager { /** * Gibt die gesamte Zuordnung ButtonID → LobbyID zurück. + * * @return Map aller Zuordnungen */ public Map getButtonIdToLobbyId() { diff --git a/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManagerTest.java b/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManagerTest.java index 3f4d574..67aaae4 100644 --- a/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManagerTest.java +++ b/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManagerTest.java @@ -1,10 +1,10 @@ package ch.unibas.dmi.dbis.cs108.casono.client.ui.lobbyui; +import static org.junit.jupiter.api.Assertions.*; + import javafx.scene.layout.GridPane; import org.junit.jupiter.api.*; -import static org.junit.jupiter.api.Assertions.*; - class LobbyButtonGridManagerTest { LobbyButtonGridManager gridManager; LobbyButtonTranslationManager translationManager; diff --git a/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManagerTest.java b/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManagerTest.java index 4c1e526..d19532a 100644 --- a/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManagerTest.java +++ b/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManagerTest.java @@ -1,10 +1,10 @@ package ch.unibas.dmi.dbis.cs108.casono.client.ui.lobbyui; -import org.junit.jupiter.api.*; -import java.util.Map; - import static org.junit.jupiter.api.Assertions.*; +import java.util.Map; +import org.junit.jupiter.api.*; + class LobbyButtonTranslationManagerTest { LobbyButtonTranslationManager manager; From d1bf8e4c9a36983ba3ab7f93dd6e77a0cf3c76fc Mon Sep 17 00:00:00 2001 From: Jona Walpert Date: Sat, 14 Mar 2026 17:14:41 +0100 Subject: [PATCH 2/3] Style: Use logger instead of System.out.println --- .../dmi/dbis/cs108/casono/client/ClientApp.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ClientApp.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ClientApp.java index a8667fa..b45aa83 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ClientApp.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ClientApp.java @@ -4,14 +4,20 @@ package ch.unibas.dmi.dbis.cs108.casono.client; * Entry point for the Casono client application. Handles client startup and connection parameters. */ import ch.unibas.dmi.dbis.cs108.casono.client.ui.Launcher; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; /** - * Entry point for the Casono client application. Handles client startup and connection parameters. + * Entry point for the Casono client application. Handles client startup and + * connection parameters. * - *

Standardkonstruktor für die Anwendung. + *

+ * Standardkonstruktor für die Anwendung. */ public class ClientApp { + private static final Logger LOGGER = LogManager.getLogger(ClientApp.class); + /** Standardkonstruktor. */ public ClientApp() { // Standardkonstruktor @@ -31,8 +37,7 @@ public class ClientApp { String host = parts[0]; int port = Integer.parseInt(parts[1]); - System.out.println( - "You've selected the client. It will connect port " + port + " at host " + host); + LOGGER.info("You've selected the client. It will connect port {} at host {}", port, host); Launcher.main(new String[] {}); } } From a15a0a00449387dab418fb5e1feac9233ef0a04d Mon Sep 17 00:00:00 2001 From: Jona Walpert Date: Sat, 14 Mar 2026 17:35:47 +0100 Subject: [PATCH 3/3] Style: apply Checkstyle fixes on client side --- .../ch/unibas/dmi/dbis/cs108/casono/Main.java | 30 +- .../dbis/cs108/casono/client/ClientApp.java | 6 +- .../client/ui/chatui/ChatController.java | 50 ++- .../ui/gameui/CasinoGameController.java | 14 +- .../casono/client/ui/gameui/CasinoGameUI.java | 13 +- .../CasinoBrowserController.java | 310 +++++++++--------- .../gameuicomponents/TaskbarController.java | 43 ++- .../lobbyui/LobbyButtonGridManagerTest.java | 4 +- .../LobbyButtonTranslationManagerTest.java | 4 +- 9 files changed, 224 insertions(+), 250 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/Main.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/Main.java index f7d2273..cbf1cc2 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/Main.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/Main.java @@ -2,24 +2,14 @@ package ch.unibas.dmi.dbis.cs108.casono; import ch.unibas.dmi.dbis.cs108.casono.client.ClientApp; import ch.unibas.dmi.dbis.cs108.casono.server.ServerApp; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; -/** - * Main entry point for Casono application. - * Handles client and server startup. - *

- * Standardkonstruktor für die Anwendung. - */ +/** Main entry point for Casono application. Handles client and server startup. */ public final class Main { - - /** - * Standardkonstruktor. - */ - public Main() { - // Standardkonstruktor - } - /** * Main entry point for Casono. + * * @param args Command line arguments */ public static void main(String[] args) { @@ -50,10 +40,12 @@ public final class Main { } private static void printUsage() { - System.err.println(""" - Usage: - java -jar xyz.jar server - java -jar xyz.jar client : - """); + Logger logger = LogManager.getLogger(Main.class); + logger.fatal( + """ + Usage: + java -jar xyz.jar server + java -jar xyz.jar client : + """); } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ClientApp.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ClientApp.java index b45aa83..7fa4291 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ClientApp.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ClientApp.java @@ -8,11 +8,9 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** - * Entry point for the Casono client application. Handles client startup and - * connection parameters. + * Entry point for the Casono client application. Handles client startup and connection parameters. * - *

- * Standardkonstruktor für die Anwendung. + *

Standardkonstruktor für die Anwendung. */ public class ClientApp { diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/chatui/ChatController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/chatui/ChatController.java index 437c689..b6b273f 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/chatui/ChatController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/chatui/ChatController.java @@ -12,46 +12,38 @@ import javafx.scene.layout.VBox; /** * Controller-Klasse für das Chat-System innerhalb der Spieloberfläche. * - * Verwaltet das Anzeigen von Chatnachrichten, das Eingabefeld für eigene Nachrichten - * sowie den Senden-Button. Unterstützt drei Arten von Nachrichten: - * - Player-to-Player (Privat) - * - Lobby-Chat (Raum) - * - Globaler Chat (Serverweit) + *

Verwaltet das Anzeigen von Chatnachrichten, das Eingabefeld für eigene Nachrichten sowie den + * Senden-Button. Unterstützt drei Arten von Nachrichten: - Player-to-Player (Privat) - Lobby-Chat + * (Raum) - Globaler Chat (Serverweit) * - * Nachrichten werden in einem {@link VBox}-Container als {@link Label} angezeigt. - * Eigene Nachrichten werden über {@link #onSendToNetwork(String)} an das - * Netzwerkprotokoll weitergeleitet, während eingehende Nachrichten über - * {@link #receiveMessage(String, String)} verarbeitet und angezeigt werden. + *

Nachrichten werden in einem {@link VBox}-Container als {@link Label} angezeigt. Eigene + * Nachrichten werden über {@link #onSendToNetwork(String)} an das Netzwerkprotokoll weitergeleitet, + * während eingehende Nachrichten über {@link #receiveMessage(String, String)} verarbeitet und + * angezeigt werden. * - * Hinweis: Einige TODOs stehen in der zugehörigen FXML-Datei + *

Hinweis: Einige TODOs stehen in der zugehörigen FXML-Datei */ public class ChatController { - @FXML - private VBox chatVBox; + @FXML private VBox chatVBox; - @FXML - private TextField inputField; + @FXML private TextField inputField; - @FXML - private Button sendButton; + @FXML private Button sendButton; - @FXML - private ScrollPane chatScrollPane; + @FXML private ScrollPane chatScrollPane; private static final int CHAT_PADDING = 20; - /** - * Initialisiert den ChatController nach dem Laden der FXML. - */ + /** Initialisiert den ChatController nach dem Laden der FXML. */ public void initialize() { inputField.setOnAction(event -> sendMessage()); chatScrollPane.vvalueProperty().bind(chatVBox.heightProperty()); } /** - * Diese Methode wird vom Senden-Button oder Enter ausgelöst. - * Sie gibt die eigene Nachricht an das Netzwerkprotokoll weiter. + * Diese Methode wird vom Senden-Button oder Enter ausgelöst. Sie gibt die eigene Nachricht an + * das Netzwerkprotokoll weiter. */ @FXML private void sendMessage() { @@ -65,8 +57,9 @@ public class ChatController { } /** - * Diese Funktion muss vom Netzwerkprotokoll aufgerufen werden, - * wenn eine neue Nachricht von einem anderen Spieler kommt. + * Diese Funktion muss vom Netzwerkprotokoll aufgerufen werden, wenn eine neue Nachricht von + * einem anderen Spieler kommt. + * * @param player Name des Spielers * @param message Nachricht des Spielers */ @@ -80,12 +73,13 @@ public class ChatController { } /** - * Schnittstelle zum Netzwerkprotokoll. - * Diese Funktion wird automatisch aufgerufen, wenn der Benutzer eine eigene Nachricht sendet. + * Schnittstelle zum Netzwerkprotokoll. Diese Funktion wird automatisch aufgerufen, wenn der + * Benutzer eine eigene Nachricht sendet. + * * @param message Nachricht, die der Benutzer abgeschickt hat */ public void onSendToNetwork(String message) { // TODO: Netzwerkcode einfügen receiveMessage("Du", message); } -} \ No newline at end of file +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameController.java index 91e3075..c96c9bd 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameController.java @@ -7,15 +7,11 @@ import javafx.scene.layout.VBox; /** * Controller für die Casino-Spielfläche. * - * Verantwortlich für: - * - die Darstellung des Pokertisches und der Spieleroberfläche, - * - die Verarbeitung von Benutzereingaben, - * - die Schnittstelle zur GameEngine und zum Netzwerkprotokoll. + *

Verantwortlich für: - die Darstellung des Pokertisches und der Spieleroberfläche, - die + * Verarbeitung von Benutzereingaben, - die Schnittstelle zur GameEngine und zum Netzwerkprotokoll. * - * Hinweise: - * - Die Methode `onTableClick()` dient aktuell nur als Test-Logik. - * Sie ist ggf. nicht mehr funktionsfähig und wird zukünftig - * durch die finale Spielinteraktion ersetzt. + *

Hinweise: - Die Methode `onTableClick()` dient aktuell nur als Test-Logik. Sie ist ggf. nicht + * mehr funktionsfähig und wird zukünftig durch die finale Spielinteraktion ersetzt. */ public class CasinoGameController { @@ -28,4 +24,4 @@ public class CasinoGameController { public void onTableClick() { welcomeText.setText("Einsatz akzeptiert!"); } -} \ No newline at end of file +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameUI.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameUI.java index c280e3f..f9b5419 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameUI.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameUI.java @@ -9,13 +9,11 @@ import javafx.stage.Stage; /** * Hauptklasse für das Casino-Spiel-UI. * - * Startet die JavaFX-Anwendung, lädt die grafische Oberfläche aus der FXML-Datei - * und initialisiert die Haupt-Stage für das Spiel. + *

Startet die JavaFX-Anwendung, lädt die grafische Oberfläche aus der FXML-Datei und + * initialisiert die Haupt-Stage für das Spiel. * - * Aufgaben: - * - Lädt die FXML-Oberfläche "/ui-structure/Casinogameui.fxml". - * - Lädt das Anwendungs-Icon aus "/images/logoinverted.png". - * - Startet die Anwendung im Vollbildmodus. + *

Aufgaben: - Lädt die FXML-Oberfläche "/ui-structure/Casinogameui.fxml". - Lädt das + * Anwendungs-Icon aus "/images/logoinverted.png". - Startet die Anwendung im Vollbildmodus. */ public class CasinoGameUI extends Application { @@ -44,9 +42,10 @@ public class CasinoGameUI extends Application { /** * Startpunkt der Anwendung. + * * @param args Befehlszeilenargumente. */ public static void main(String[] args) { launch(); } -} \ No newline at end of file +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/CasinoBrowserController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/CasinoBrowserController.java index 282582a..e351b7a 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/CasinoBrowserController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/CasinoBrowserController.java @@ -31,32 +31,22 @@ import javafx.stage.Stage; /** * Experimenteller integrierter Browser für Casono. * - * Diese Klasse implementiert einen einfachen eingebetteten Webbrowser - * auf Basis von {@link javafx.scene.web.WebView}. Der Browser dient - * primär als Hilfswerkzeug innerhalb des Spiels, um externe Inhalte - * wie Webseiten oder Videos anzuzeigen. + *

Diese Klasse implementiert einen einfachen eingebetteten Webbrowser auf Basis von {@link + * javafx.scene.web.WebView}. Der Browser dient primär als Hilfswerkzeug innerhalb des Spiels, um + * externe Inhalte wie Webseiten oder Videos anzuzeigen. * - * Status - * Der Browser befindet sich derzeit in einer experimentellen Phase. - * Einige Sicherheitsmechanismen basieren auf experimentellen - * KI-gestützten Empfehlungen und können sich in zukünftigen - * Versionen noch ändern. + *

Status Der Browser befindet sich derzeit in einer experimentellen Phase. Einige + * Sicherheitsmechanismen basieren auf experimentellen KI-gestützten Empfehlungen und können sich in + * zukünftigen Versionen noch ändern. * - * Zweck - * Der Browser wird aktuell experimentell genutzt, um: - * Pokerregeln direkt im Spiel zu erklären - * Hilfeseiten oder Dokumentationen anzuzeigen - * Videos (z.B. Tutorials oder Erklärungen) über Plattformen wie YouTube abzuspielen + *

Zweck Der Browser wird aktuell experimentell genutzt, um: Pokerregeln direkt im Spiel zu + * erklären Hilfeseiten oder Dokumentationen anzuzeigen Videos (z.B. Tutorials oder Erklärungen) + * über Plattformen wie YouTube abzuspielen * - * Sicherheitsmechanismen - * Da externe Webseiten geladen werden können, wurden einige - * grundlegende Schutzmaßnahmen integriert: - * - HTTPS-Zwang für Webseiten - * - Whitelist für bekannte Domains - * - Warnung bei unbekannten Webseiten - * - JavaScript standardmäßig deaktiviert (man kann es jedoch für Google etc. einschalten) - * - Popup-Blocker - * - Automatische Cookie-Löschung beim Schließen + *

Sicherheitsmechanismen Da externe Webseiten geladen werden können, wurden einige grundlegende + * Schutzmaßnahmen integriert: - HTTPS-Zwang für Webseiten - Whitelist für bekannte Domains - + * Warnung bei unbekannten Webseiten - JavaScript standardmäßig deaktiviert (man kann es jedoch für + * Google etc. einschalten) - Popup-Blocker - Automatische Cookie-Löschung beim Schließen */ public class CasinoBrowserController { @@ -105,76 +95,84 @@ public class CasinoBrowserController { private static boolean javascriptEnabled = false; - /** - * Löscht alle gespeicherten Cookies der aktuellen Browser-Sitzung. - */ + /** Löscht alle gespeicherten Cookies der aktuellen Browser-Sitzung. */ private static void clearCookies() { try { COOKIE_MANAGER.getCookieStore().removeAll(); - } catch (Exception ignored) {} + } catch (Exception ignored) { + } } /** * Öffnet ein neues Browserfenster und lädt eine angegebene Webseite. * - * Falls die Webseite nicht zur Liste vertrauenswürdiger Domains gehört, - * wird der Benutzer gefragt, ob die Seite dennoch geladen werden soll. + *

Falls die Webseite nicht zur Liste vertrauenswürdiger Domains gehört, wird der Benutzer + * gefragt, ob die Seite dennoch geladen werden soll. * * @param url die Startadresse der Webseite, die geladen werden soll */ public static void open(String url) { - Platform.runLater(() -> { - Stage stage = new Stage(); + Platform.runLater( + () -> { + Stage stage = new Stage(); - WebView webView = new WebView(); - WebEngine engine = webView.getEngine(); + WebView webView = new WebView(); + WebEngine engine = webView.getEngine(); - engine.setJavaScriptEnabled(false); + engine.setJavaScriptEnabled(false); - configurePopupBlocker(engine); + configurePopupBlocker(engine); - webView.getStyleClass().add("web-view"); + webView.getStyleClass().add("web-view"); - StackPane webContainer = createWebContainer(webView); + StackPane webContainer = createWebContainer(webView); - Rectangle clip = new Rectangle(); - clip.setArcWidth(CORNER_RADIUS); - clip.setArcHeight(CORNER_RADIUS); - webView.setClip(clip); + Rectangle clip = new Rectangle(); + clip.setArcWidth(CORNER_RADIUS); + clip.setArcHeight(CORNER_RADIUS); + webView.setClip(clip); - webView.widthProperty().addListener((o, a, b) -> - clip.setWidth(b.doubleValue())); - webView.heightProperty().addListener((o, a, b) -> - clip.setHeight(b.doubleValue())); + webView.widthProperty() + .addListener((o, a, b) -> clip.setWidth(b.doubleValue())); + webView.heightProperty() + .addListener((o, a, b) -> clip.setHeight(b.doubleValue())); - ImageView browserLogo = loadLogos(stage); + ImageView browserLogo = loadLogos(stage); - TextField urlField = createUrlField(url); - Label securityLabel = createSecurityLabel(); + TextField urlField = createUrlField(url); + Label securityLabel = createSecurityLabel(); - Button jsToggle = createJsToggle(engine); - Button backBtn = createBackButton(engine); - Button fwdBtn = createForwardButton(engine); - Button reloadBtn = createReloadButton(engine); - Button closeBtn = createCloseButton(stage, webView); - configureUrlEvents(engine, urlField, securityLabel); + Button jsToggle = createJsToggle(engine); + Button backBtn = createBackButton(engine); + Button fwdBtn = createForwardButton(engine); + Button reloadBtn = createReloadButton(engine); + Button closeBtn = createCloseButton(stage, webView); + configureUrlEvents(engine, urlField, securityLabel); - HBox taskbar = new HBox(HBOX_SPACIN, browserLogo, backBtn, fwdBtn, - reloadBtn, urlField, jsToggle, securityLabel, closeBtn - ); + HBox taskbar = + new HBox( + HBOX_SPACIN, + browserLogo, + backBtn, + fwdBtn, + reloadBtn, + urlField, + jsToggle, + securityLabel, + closeBtn); - taskbar.getStyleClass().add("taskbar-browser"); - taskbar.setAlignment(Pos.CENTER_LEFT); + taskbar.getStyleClass().add("taskbar-browser"); + taskbar.setAlignment(Pos.CENTER_LEFT); - Scene scene = createScene(taskbar, webContainer); + Scene scene = createScene(taskbar, webContainer); - configureKeyEvents(scene, engine); + configureKeyEvents(scene, engine); - stage.setScene(scene); - stage.setTitle("Casono Browser"); - loadUrlSafely(engine, url, securityLabel); - stage.show(); - }); + stage.setScene(scene); + stage.setTitle("Casono Browser"); + loadUrlSafely(engine, url, securityLabel); + stage.show(); + }); } /** @@ -197,41 +195,43 @@ public class CasinoBrowserController { * @param engine WebEngine nutzen */ public static void configurePopupBlocker(WebEngine engine) { - engine.setCreatePopupHandler(config -> { - Alert alert = new Alert(Alert.AlertType.WARNING); - alert.setTitle("Popup blockiert"); - alert.setHeaderText(null); - alert.setContentText("Popup wurde aus Sicherheitsgründen blockiert."); + engine.setCreatePopupHandler( + config -> { + Alert alert = new Alert(Alert.AlertType.WARNING); + alert.setTitle("Popup blockiert"); + alert.setHeaderText(null); + alert.setContentText("Popup wurde aus Sicherheitsgründen blockiert."); - try { - var stream = CasinoBrowserController.class.getResourceAsStream(LOGO_PATH); - Image logo = new Image(stream); + try { + var stream = CasinoBrowserController.class.getResourceAsStream(LOGO_PATH); + Image logo = new Image(stream); - // Variable 'streamM' abgekürzt, um das 100-Zeichen-Limit (LineLength) - // einzuhalten - var streamM = CasinoBrowserController.class.getResourceAsStream(LOGO_PATH_MAIN); - Image logomain = new Image(streamM); + // Variable 'streamM' abgekürzt, um das 100-Zeichen-Limit (LineLength) + // einzuhalten + var streamM = + CasinoBrowserController.class.getResourceAsStream(LOGO_PATH_MAIN); + Image logomain = new Image(streamM); - if (logo != null) { - Stage alertStage = (Stage) alert.getDialogPane().getScene().getWindow(); - if (alertStage != null) { - alertStage.getIcons().add(logo); + if (logo != null) { + Stage alertStage = (Stage) alert.getDialogPane().getScene().getWindow(); + if (alertStage != null) { + alertStage.getIcons().add(logo); + } + } + + if (logomain != null) { + ImageView logoView = new ImageView(logomain); + logoView.setFitHeight(LOGO_HEIGHT); + logoView.setPreserveRatio(true); + alert.setGraphic(logoView); + } + } catch (Exception e) { + LOGGER.error("Logo konnte nicht geladen werden"); } - } - if (logomain != null) { - ImageView logoView = new ImageView(logomain); - logoView.setFitHeight(LOGO_HEIGHT); - logoView.setPreserveRatio(true); - alert.setGraphic(logoView); - } - } catch (Exception e) { - LOGGER.error("Logo konnte nicht geladen werden"); - } - - alert.showAndWait(); - return null; - }); + alert.showAndWait(); + return null; + }); } /** @@ -300,25 +300,26 @@ public class CasinoBrowserController { * @param engine WebEngine nutzen * @return Button Umschalten */ - public static Button createJsToggle(WebEngine engine){ + public static Button createJsToggle(WebEngine engine) { Button jsToggle = new Button("JS EINSCHALTEN"); jsToggle.getStyleClass().add("red-button"); - jsToggle.setOnAction(e -> { - javascriptEnabled = !javascriptEnabled; - engine.setJavaScriptEnabled(javascriptEnabled); + jsToggle.setOnAction( + e -> { + javascriptEnabled = !javascriptEnabled; + engine.setJavaScriptEnabled(javascriptEnabled); - if (javascriptEnabled) { - jsToggle.setText("JS AUSSCHALTEN"); - jsToggle.getStyleClass().removeAll("red-button"); - jsToggle.getStyleClass().add("yellow-button"); + if (javascriptEnabled) { + jsToggle.setText("JS AUSSCHALTEN"); + jsToggle.getStyleClass().removeAll("red-button"); + jsToggle.getStyleClass().add("yellow-button"); - } else { - jsToggle.setText("JS EINSCHALTEN"); - jsToggle.getStyleClass().removeAll("yellow-button"); - jsToggle.getStyleClass().add("red-button"); - } - }); + } else { + jsToggle.setText("JS EINSCHALTEN"); + jsToggle.getStyleClass().removeAll("yellow-button"); + jsToggle.getStyleClass().add("red-button"); + } + }); return jsToggle; } @@ -332,11 +333,12 @@ public class CasinoBrowserController { public static Button createBackButton(WebEngine engine) { Button backBtn = new Button("<"); backBtn.getStyleClass().add("gray-button"); - backBtn.setOnAction(e -> { - if (engine.getHistory().getCurrentIndex() > 0) { - engine.getHistory().go(-1); - } - }); + backBtn.setOnAction( + e -> { + if (engine.getHistory().getCurrentIndex() > 0) { + engine.getHistory().go(-1); + } + }); return backBtn; } @@ -350,12 +352,13 @@ public class CasinoBrowserController { public static Button createForwardButton(WebEngine engine) { Button fwdBtn = new Button(">"); fwdBtn.getStyleClass().add("gray-button"); - fwdBtn.setOnAction(e -> { - if (engine.getHistory().getCurrentIndex() < - engine.getHistory().getEntries().size() - 1) { - engine.getHistory().go(1); - } - }); + fwdBtn.setOnAction( + e -> { + if (engine.getHistory().getCurrentIndex() + < engine.getHistory().getEntries().size() - 1) { + engine.getHistory().go(1); + } + }); return fwdBtn; } @@ -383,12 +386,12 @@ public class CasinoBrowserController { public static Button createCloseButton(Stage stage, WebView webView) { Button closeBtn = new Button("X"); closeBtn.getStyleClass().add("red-button"); - closeBtn.setOnAction(e -> { - webView.getEngine().load("about:blank"); - clearCookies(); - stage.close(); - - }); + closeBtn.setOnAction( + e -> { + webView.getEngine().load("about:blank"); + clearCookies(); + stage.close(); + }); return closeBtn; } @@ -400,13 +403,10 @@ public class CasinoBrowserController { * @param urlField URL Textfeld * @param securityLabel Sicherheits Label */ - public static void configureUrlEvents(WebEngine engine, - TextField urlField, - Label securityLabel) { - urlField.setOnAction(e -> - loadUrlSafely(engine, urlField.getText(), securityLabel)); - engine.locationProperty().addListener((obs, o, n) -> - urlField.setText(n)); + public static void configureUrlEvents( + WebEngine engine, TextField urlField, Label securityLabel) { + urlField.setOnAction(e -> loadUrlSafely(engine, urlField.getText(), securityLabel)); + engine.locationProperty().addListener((obs, o, n) -> urlField.setText(n)); } /** @@ -423,8 +423,7 @@ public class CasinoBrowserController { Scene scene = new Scene(root, WINDOW_WIDTH, WINDOW_HEIGHT); - var css = CasinoBrowserController.class - .getResource("/ui-structure/casinogameui.css"); + var css = CasinoBrowserController.class.getResource("/ui-structure/casinogameui.css"); if (css != null) { scene.getStylesheets().add(css.toExternalForm()); @@ -440,25 +439,23 @@ public class CasinoBrowserController { * @param engine WebEngine nutzen */ public static void configureKeyEvents(Scene scene, WebEngine engine) { - scene.setOnKeyPressed(event -> { - if (event.getCode() == KeyCode.F5) { - engine.reload(); - } - }); + scene.setOnKeyPressed( + event -> { + if (event.getCode() == KeyCode.F5) { + engine.reload(); + } + }); } /** - * Lädt eine URL in den Browser, nachdem grundlegende Sicherheitsprüfungen - * durchgeführt wurden. + * Lädt eine URL in den Browser, nachdem grundlegende Sicherheitsprüfungen durchgeführt wurden. * - * Vor dem Laden einer Seite werden folgende Prüfungen durchgeführt: - * - Überprüfung des Protokolls (nur HTTPS erlaubt) - * - Überprüfung der Domain gegen eine Whitelist - * - Schutz vor Domain-Spoofing (Domain-Vortäuschung) + *

Vor dem Laden einer Seite werden folgende Prüfungen durchgeführt: - Überprüfung des + * Protokolls (nur HTTPS erlaubt) - Überprüfung der Domain gegen eine Whitelist - Schutz vor + * Domain-Spoofing (Domain-Vortäuschung) * - * Falls eine Domain nicht als vertrauenswürdig eingestuft wird, - * muss der Benutzer bestätigen, dass die Seite dennoch geöffnet - * werden darf. + *

Falls eine Domain nicht als vertrauenswürdig eingestuft wird, muss der Benutzer + * bestätigen, dass die Seite dennoch geöffnet werden darf. * * @param engine der WebEngine-Renderer des Browsers * @param url die zu ladende Webadresse @@ -485,8 +482,9 @@ public class CasinoBrowserController { } // Sicherer Domain Check - boolean trusted = TRUSTED_DOMAINS.stream().anyMatch(domain -> - host.equals(domain) || host.endsWith("." + domain)); + boolean trusted = + TRUSTED_DOMAINS.stream() + .anyMatch(domain -> host.equals(domain) || host.endsWith("." + domain)); if (!trusted) { if (!showUnknownWebsiteAlert(host)) { @@ -515,9 +513,9 @@ public class CasinoBrowserController { alert.setTitle("Unbekannte Website"); alert.setHeaderText("Diese Website ist nicht bekannt"); alert.setContentText( - host + "\n\nDiese Seite ist nicht vom " + - "Casono Browser verifiziert.\nMöchten Sie sie trotzdem öffnen?" - ); + host + + "\n\nDiese Seite ist nicht vom " + + "Casono Browser verifiziert.\nMöchten Sie sie trotzdem öffnen?"); var stream = CasinoBrowserController.class.getResourceAsStream(LOGO_PATH); Image logo = new Image(stream); @@ -541,4 +539,4 @@ public class CasinoBrowserController { return true; } -} \ No newline at end of file +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java index 79f1615..33e1e32 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java @@ -11,10 +11,8 @@ import javafx.scene.layout.HBox; /** * Controller für die interaktive Taskleiste innerhalb der Poker-UI. * - * Verantwortlich für: - * - Drag-and-Drop-Verschieben der Taskleiste, - * - Eingabe und Verwaltung von Spieleinsätzen, - * - Steuerung allgemeiner Menüfunktionen wie Exit. + *

Verantwortlich für: - Drag-and-Drop-Verschieben der Taskleiste, - Eingabe und Verwaltung von + * Spieleinsätzen, - Steuerung allgemeiner Menüfunktionen wie Exit. */ public class TaskbarController { @@ -32,8 +30,8 @@ public class TaskbarController { private static final int CREDIT_STEP = 5; /** - * Wird aufgerufen, wenn die Taskleiste mit der Maus gedrückt wird. - * Speichert die relative Position, um später korrekt zu verschieben. + * Wird aufgerufen, wenn die Taskleiste mit der Maus gedrückt wird. Speichert die relative + * Position, um später korrekt zu verschieben. * * @param event Das Mausereignis */ @@ -44,11 +42,11 @@ public class TaskbarController { } /** - * Wird aufgerufen, während die Taskleiste mit der Maus gezogen wird. - * Aktualisiert die Position und skaliert die Taskleiste leicht zur visuellen Rückmeldung. + * Wird aufgerufen, während die Taskleiste mit der Maus gezogen wird. Aktualisiert die Position + * und skaliert die Taskleiste leicht zur visuellen Rückmeldung. * - * TODO: Es muss noch gefixt werden, dass die Taskleiste nicht aus dem - * Fenster verschwinden kann. + *

TODO: Es muss noch gefixt werden, dass die Taskleiste nicht aus dem Fenster verschwinden + * kann. * * @param event Das Mausereignis */ @@ -62,8 +60,8 @@ public class TaskbarController { } /** - * Wird aufgerufen, wenn die Maus über der Taskleiste losgelassen wird. - * Setzt die Skalierung der Taskleiste wieder auf Normalgröße. + * Wird aufgerufen, wenn die Maus über der Taskleiste losgelassen wird. Setzt die Skalierung der + * Taskleiste wieder auf Normalgröße. * * @param event Das Mausereignis */ @@ -86,8 +84,8 @@ public class TaskbarController { } /** - * Wird aufgerufen, wenn der Submit-Button in der Taskleiste gedrückt wird. - * Löst die Verarbeitung des Einsatzes aus. + * Wird aufgerufen, wenn der Submit-Button in der Taskleiste gedrückt wird. Löst die + * Verarbeitung des Einsatzes aus. */ @FXML private void onInputSubmittedAction() { @@ -97,8 +95,8 @@ public class TaskbarController { /** * Wird aufgerufen, wenn der Exit-Button in der Taskleiste gedrückt wird. * - * TODO: Logik implementieren, um zur Lobby zurückzukehren, - * ohne die gesamte Anwendung zu schließen (kein System.exit/Platform.exit). + *

TODO: Logik implementieren, um zur Lobby zurückzukehren, ohne die gesamte Anwendung zu + * schließen (kein System.exit/Platform.exit). */ @FXML private void onExitButtonClick() { @@ -106,10 +104,9 @@ public class TaskbarController { } /** - * Verarbeitet den im Textfeld eingegebenen Einsatz. - * Es werden ausschließlich ganzzahlige Werte im Bereich von 5 bis 100.000 - * Credits akzeptiert, die einem Vielfachen von 5 entsprechen (5er-Schritte). - * Der Einsatz wird aktuell nur auf der Konsole ausgegeben. + * Verarbeitet den im Textfeld eingegebenen Einsatz. Es werden ausschließlich ganzzahlige Werte + * im Bereich von 5 bis 100.000 Credits akzeptiert, die einem Vielfachen von 5 entsprechen + * (5er-Schritte). Der Einsatz wird aktuell nur auf der Konsole ausgegeben. */ private void processBet() { String input = taskbarInput.getText(); @@ -131,11 +128,11 @@ public class TaskbarController { /** * Öffnet den integrierten Casono Webbrowser. * - * TODO: Ersetze die Start-URL durch die offizielle Projekt-Website (z.B. Tipps & Tricks Seite), - * sobald die Inhalte für Strategien und Support bereitstehen. + *

TODO: Ersetze die Start-URL durch die offizielle Projekt-Website (z.B. Tipps & Tricks + * Seite), sobald die Inhalte für Strategien und Support bereitstehen. */ @FXML private void onBrowserButtonClick() { CasinoBrowserController.open("wikipedia.org"); } -} \ No newline at end of file +} diff --git a/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManagerTest.java b/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManagerTest.java index 67aaae4..da38f8e 100644 --- a/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManagerTest.java +++ b/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManagerTest.java @@ -1,9 +1,9 @@ -package ch.unibas.dmi.dbis.cs108.casono.client.ui.lobbyui; -import static org.junit.jupiter.api.Assertions.*; +package ch.unibas.dmi.dbis.cs108.casono.client.ui.lobbyui; import javafx.scene.layout.GridPane; import org.junit.jupiter.api.*; +import static org.junit.jupiter.api.Assertions.*; class LobbyButtonGridManagerTest { LobbyButtonGridManager gridManager; diff --git a/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManagerTest.java b/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManagerTest.java index d19532a..152eb0c 100644 --- a/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManagerTest.java +++ b/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManagerTest.java @@ -1,9 +1,9 @@ -package ch.unibas.dmi.dbis.cs108.casono.client.ui.lobbyui; -import static org.junit.jupiter.api.Assertions.*; +package ch.unibas.dmi.dbis.cs108.casono.client.ui.lobbyui; import java.util.Map; import org.junit.jupiter.api.*; +import static org.junit.jupiter.api.Assertions.*; class LobbyButtonTranslationManagerTest { LobbyButtonTranslationManager manager;