diff --git a/pom.xml b/pom.xml
index 1527790..581e61e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
- P4
+ P5
de.fh_aachen.oos
4.0.0
1.0-SNAPSHOT
@@ -12,12 +12,6 @@
maven-compiler-plugin
org.apache.maven.plugins
-
-
- --release
- 17
-
-
3.13.0
@@ -25,6 +19,14 @@
org.apache.maven.plugins
3.2.5
+
+ javafx-maven-plugin
+ org.openjfx
+ ${javafx.maven.plugin.version}
+
+ ui.main
+
+
@@ -39,6 +41,16 @@
com.google.code.gson
2.11.0
+
+ javafx-controls
+ org.openjfx
+ ${javafx.version}
+
+
+ javafx-fxml
+ org.openjfx
+ ${javafx.version}
+
@@ -55,6 +67,8 @@
17
+ 22
+ 0.0.8
UTF-8
\ No newline at end of file
diff --git a/src/main/java/ui/AccountviewController.java b/src/main/java/ui/AccountviewController.java
new file mode 100644
index 0000000..098893b
--- /dev/null
+++ b/src/main/java/ui/AccountviewController.java
@@ -0,0 +1,98 @@
+package ui;
+
+import bank.PrivateBank;
+import bank.Transaction;
+import javafx.fxml.FXML;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Parent;
+import javafx.scene.control.*;
+import javafx.stage.Stage;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class AccountviewController {
+
+ @FXML
+ private Label accountNameLabel;
+
+ @FXML
+ private Label balanceLabel;
+
+ @FXML
+ private ListView transactionListView;
+
+ private PrivateBank privateBank;
+ private String currentAccount;
+
+ public void setAccount(String accountName, PrivateBank bank) {
+ this.currentAccount = accountName;
+ this.privateBank = bank;
+ updateAccountInfo();
+ loadTransactions();
+ }
+
+ private void updateAccountInfo() {
+ accountNameLabel.setText("Account: " + currentAccount);
+ double balance = privateBank.getAccountBalance(currentAccount);
+ //balanceLabel.setText("Balance: " + balance);
+ }
+
+ private void loadTransactions() {
+ var transactions = privateBank.getTransactions(currentAccount);
+ showTransactions(transactions);
+ }
+
+ @FXML
+ private void onBackButtonClicked() {
+ try {
+ FXMLLoader loader = new FXMLLoader(getClass().getResource("/main.fxml"));
+ Parent root = loader.load();
+
+ Stage stage = (Stage) transactionListView.getScene().getWindow();
+ stage.getScene().setRoot(root);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @FXML
+ private void onSortAscending() {
+ var sortedTransactions = privateBank.getTransactionsSorted(currentAccount, true);
+ showTransactions(sortedTransactions);
+ }
+
+ @FXML
+ private void onSortDescending() {
+ var sortedTransactions = privateBank.getTransactionsSorted(currentAccount, false);
+ showTransactions(sortedTransactions);
+ }
+
+ @FXML
+ private void onShowPositive() {
+ var positive = privateBank.getTransactionsByType(currentAccount, true);
+ showTransactions(positive);
+ }
+
+ @FXML
+ private void onShowNegative() {
+ var negative = privateBank.getTransactionsByType(currentAccount, false);
+ showTransactions(negative);
+ }
+
+ @FXML
+ private void onShowAll() {
+ var all = privateBank.getTransactions(currentAccount);
+ showTransactions(all);
+ }
+
+ private void showTransactions(List transactions) {
+ List displayList = new ArrayList<>();
+ for (var t : transactions) {
+ displayList.add(t.toString());
+ }
+ // transactionListView.getItems().setAll(displayList);
+ updateAccountInfo(); // Balance neu anzeigen, falls sich was geändert hat
+ }
+}
diff --git a/src/main/java/ui/MainviewController.java b/src/main/java/ui/MainviewController.java
new file mode 100644
index 0000000..5e32a88
--- /dev/null
+++ b/src/main/java/ui/MainviewController.java
@@ -0,0 +1,129 @@
+package ui;
+
+import bank.PrivateBank;
+
+import javafx.fxml.*;
+import javafx.scene.Parent;
+import javafx.scene.control.*;
+import javafx.scene.input.MouseButton;
+import javafx.stage.Stage;
+
+import java.util.List;
+import java.util.Optional;
+
+
+public class MainviewController {
+
+ @FXML
+ private ListView accountListView;
+
+ private PrivateBank privateBank; // Referenz auf Ihr Bankobjekt
+
+ public void initialize() {
+ // Bank initialisieren oder übergeben lassen
+ this.privateBank = new PrivateBank(
+ "Bank1",
+ 0,
+ 0,
+ "accountdata"
+ );
+
+ List accounts = List.of(
+ "Konto1", "Konto2", "Konto3"
+ );
+
+ for (String account : accounts) {
+ try {
+ privateBank.createAccount(account);
+ privateBank.writeAccount(account);
+ } catch (Exception e) {
+ }
+ }
+
+ accountListView.getItems().addAll(privateBank.getAllAccounts());
+
+ // Kontextmenü definieren
+ ContextMenu contextMenu = new ContextMenu();
+ MenuItem selectItem = new MenuItem("Auswählen");
+ MenuItem deleteItem = new MenuItem("Löschen");
+
+ // Aktionen definieren
+ selectItem.setOnAction(event -> {
+ String selectedAccount = accountListView.getSelectionModel().getSelectedItem();
+ if (selectedAccount != null) {
+ switchToAccountView(selectedAccount);
+ }
+ });
+
+ deleteItem.setOnAction(
+ event -> {
+ String selectedAccount = accountListView.getSelectionModel().getSelectedItem();
+ if (selectedAccount != null) {
+ boolean confirmed = showDeleteConfirmation(selectedAccount);
+ if (confirmed) {
+ // Account aus der Bank entfernen
+ try {
+ privateBank.deleteAccount(selectedAccount);
+ // ListView aktualisieren
+ accountListView.getItems().remove(selectedAccount);
+ } catch (Exception e) {
+ e.printStackTrace();
+ // Fehlerbehandlung falls nötig
+ }
+ }
+ }
+ });
+
+ contextMenu.getItems().addAll(selectItem, deleteItem);
+
+ // Kontextmenü an die ListView binden
+ accountListView.setContextMenu(contextMenu);
+
+ // Optional: Double-Click zum Auswählen ohne Kontextmenü
+ accountListView.setOnMouseClicked(
+ event -> {
+ if (event.getButton() == MouseButton.PRIMARY && event.getClickCount() == 2) {
+ String selectedAccount = accountListView.getSelectionModel().getSelectedItem();
+ if (selectedAccount != null) {
+ switchToAccountView(selectedAccount);
+ }
+ }
+ }
+ );
+ }
+
+ private void switchToAccountView(String accountName) {
+ try {
+ // Laden der zweiten FXML
+ FXMLLoader loader = new FXMLLoader(getClass().getResource("Accountview.fxml"));
+ Parent root = loader.load();
+
+ // Zugriff auf Controller und Datenübergabe
+ AccountviewController accountController = loader.getController();
+ accountController.setAccount(accountName, privateBank);
+
+ // Scene in der selben Stage wechseln
+ Stage stage = (Stage) accountListView.getScene().getWindow();
+ stage.getScene().setRoot(root);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ private boolean showDeleteConfirmation(String accountName) {
+ Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
+ alert.setTitle("Account löschen");
+ alert.setHeaderText("Soll der Account '" + accountName + "' wirklich gelöscht werden?");
+ alert.setContentText("Diese Aktion kann nicht rückgängig gemacht werden.");
+
+ ButtonType yesButton = new ButtonType("Ja", ButtonBar.ButtonData.YES);
+ ButtonType noButton = new ButtonType("Nein", ButtonBar.ButtonData.NO);
+
+ alert.getButtonTypes().setAll(yesButton, noButton);
+
+ Optional result = alert.showAndWait();
+
+ return result.isPresent() && result.get() == yesButton;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/ui/main.java b/src/main/java/ui/main.java
new file mode 100644
index 0000000..766848f
--- /dev/null
+++ b/src/main/java/ui/main.java
@@ -0,0 +1,20 @@
+package ui;
+
+import javafx.application.Application;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Scene;
+import javafx.stage.Stage;
+
+public class main extends Application {
+ @Override
+ public void start(Stage primaryStage) throws Exception {
+ FXMLLoader loader = new FXMLLoader(getClass().getResource("/Mainview.fxml"));
+ Scene scene = new Scene(loader.load());
+ primaryStage.setScene(scene);
+ primaryStage.show();
+ }
+
+ public static void main(String[] args) {
+ launch(args);
+ }
+}
diff --git a/src/main/resources/Accountview.fxml b/src/main/resources/Accountview.fxml
new file mode 100644
index 0000000..f4bac5e
--- /dev/null
+++ b/src/main/resources/Accountview.fxml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/Mainview.fxml b/src/main/resources/Mainview.fxml
new file mode 100644
index 0000000..227c51b
--- /dev/null
+++ b/src/main/resources/Mainview.fxml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/test/java/PrivateBankTest.java b/src/test/java/PrivateBankTest.java
index 4bc1e8d..600ff7f 100644
--- a/src/test/java/PrivateBankTest.java
+++ b/src/test/java/PrivateBankTest.java
@@ -492,4 +492,16 @@ public class PrivateBankTest {
);
}
+ @DisplayName("Get all accounts")
+ @Order(22)
+ @Test
+ public void testGetAllAccounts() {
+ List expectedAccounts = List.of(
+ "Konto_1", "Konto_3", "Konto_2", "Konto_5", "Konto_4", "Konto_7", "Konto_6", "Konto_8"
+ );
+ assertEquals(
+ expectedAccounts,
+ privateBank.getAllAccounts()
+ );
+ }
}