From 8ebbfee164df32771743d4a5efe16f8fe8b2b3de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Einar=20Sk=C3=B8ien?= Date: Fri, 17 Apr 2026 16:33:57 +0200 Subject: [PATCH] implement basic structure of stock app with search functionality --- .../AppController/StockAppController.java | 18 ++++++++++ ...roller.java => DesktopViewController.java} | 4 +-- .../gruppe42/Controller/MarketController.java | 29 ++++++++++++++++ .../gruppe42/Controller/PopupController.java | 3 +- .../gruppe42/Controller/StockController.java | 25 -------------- .../idatt2003/gruppe42/View/DesktopView.java | 7 ++-- .../gruppe42/View/Popups/StockPopup.java | 33 +++++++++++-------- src/main/resources/stocks.csv | 10 +++--- 8 files changed, 79 insertions(+), 50 deletions(-) create mode 100644 src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/AppController/StockAppController.java rename src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/{AppController.java => DesktopViewController.java} (97%) create mode 100644 src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/MarketController.java delete mode 100644 src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/StockController.java diff --git a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/AppController/StockAppController.java b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/AppController/StockAppController.java new file mode 100644 index 0000000..352ef70 --- /dev/null +++ b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/AppController/StockAppController.java @@ -0,0 +1,18 @@ +package edu.ntnu.idi.idatt2003.gruppe42.Controller.AppController; + +import edu.ntnu.idi.idatt2003.gruppe42.Controller.MarketController; +import edu.ntnu.idi.idatt2003.gruppe42.View.Popups.StockPopup; + +public class StockAppController { + private MarketController marketController; + + public StockAppController(StockPopup stockPopup) { + marketController = new MarketController(); + + stockPopup.getStockList().getItems().addAll(marketController.getMarket()); + + stockPopup.getSearchField().textProperty().addListener((obs, old, newValue) -> { + stockPopup.getStockList().getItems().setAll(marketController.getMarket(newValue)); + }); + } +} diff --git a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/AppController.java b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/DesktopViewController.java similarity index 97% rename from src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/AppController.java rename to src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/DesktopViewController.java index fbcc1df..be2833c 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/AppController.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/DesktopViewController.java @@ -21,7 +21,7 @@ * Controller for the app buttons. * Handles app button creation, resizing, click events, and drag-and-drop. */ -public class AppController { +public class DesktopViewController { private final PopupController popupController; private final Pane parent; @@ -31,7 +31,7 @@ public class AppController { * @param popupController the popup controller to manage popups. * @param parent the parent pane to add popups to. */ - public AppController(PopupController popupController, Pane parent) { + public DesktopViewController(PopupController popupController, Pane parent) { this.popupController = popupController; this.parent = parent; } diff --git a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/MarketController.java b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/MarketController.java new file mode 100644 index 0000000..72b7d38 --- /dev/null +++ b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/MarketController.java @@ -0,0 +1,29 @@ +package edu.ntnu.idi.idatt2003.gruppe42.Controller; + +import edu.ntnu.idi.idatt2003.gruppe42.Model.Stock; +import edu.ntnu.idi.idatt2003.gruppe42.Model.StockFileHandler; + +import java.nio.file.Path; +import java.util.List; + +public class MarketController { + + private List market; + + public MarketController() { + try { + Path path = Path.of(getClass().getClassLoader().getResource("stocks.csv").toURI()); + market = StockFileHandler.readFromFile(path); + } catch (Exception e) { + System.out.println("File not found"); + } + } + + public List getMarket() { + return market; + } + + public List getMarket(String searchTerm) { + return market.stream().filter(stock -> stock.getCompany().toLowerCase().contains(searchTerm.toLowerCase())).toList(); + } +} diff --git a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/PopupController.java b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/PopupController.java index ce37d82..5719237 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/PopupController.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/PopupController.java @@ -27,9 +27,10 @@ public PopupController() { * @return true if added, false otherwise */ public boolean add(Popup popup) { + System.out.print(popup.toString()); if (popup == null) { return false; - }else if (popups.stream().anyMatch(oldPopup -> oldPopup.getType().equals(popup.getType()))) { + } else if (popups.stream().anyMatch(oldPopup -> oldPopup.getType().equals(popup.getType()))) { return false; } popup.getCloseButton().setOnAction(event -> remove(popup)); diff --git a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/StockController.java b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/StockController.java deleted file mode 100644 index 980b124..0000000 --- a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/StockController.java +++ /dev/null @@ -1,25 +0,0 @@ -package edu.ntnu.idi.idatt2003.gruppe42.Controller; - -import edu.ntnu.idi.idatt2003.gruppe42.Model.Stock; -import edu.ntnu.idi.idatt2003.gruppe42.Model.StockFileHandler; - -import java.io.IOException; -import java.nio.file.Path; -import java.util.List; - -public class StockController { - - private List market; - - public StockController() { - try { - List market = StockFileHandler.readFromFile(Path.of("stocks.csv")); - } catch (IOException e) { - System.out.println("File not found."); - } - } - - public List getMarket() { - return market; - } -} diff --git a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/View/DesktopView.java b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/View/DesktopView.java index 6d90800..364ad12 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/View/DesktopView.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/View/DesktopView.java @@ -1,10 +1,9 @@ package edu.ntnu.idi.idatt2003.gruppe42.View; -import edu.ntnu.idi.idatt2003.gruppe42.Controller.AppController; +import edu.ntnu.idi.idatt2003.gruppe42.Controller.DesktopViewController; import edu.ntnu.idi.idatt2003.gruppe42.Controller.PopupController; import edu.ntnu.idi.idatt2003.gruppe42.Model.App; import javafx.geometry.Pos; -import javafx.scene.control.Button; import javafx.scene.layout.BorderPane; import javafx.scene.layout.ColumnConstraints; import javafx.scene.layout.GridPane; @@ -19,7 +18,7 @@ public class DesktopView { private final PopupController popupController; - private final AppController appController; + private final DesktopViewController appController; private final BorderPane root; private static final int COLS = 6; private static final int ROWS = 4; @@ -27,7 +26,7 @@ public class DesktopView { public DesktopView() { this.popupController = new PopupController(); this.root = new BorderPane(); - this.appController = new AppController(popupController, root); + this.appController = new DesktopViewController(popupController, root); } /** diff --git a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/View/Popups/StockPopup.java b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/View/Popups/StockPopup.java index 617c935..c1b6ce5 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/View/Popups/StockPopup.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/View/Popups/StockPopup.java @@ -1,6 +1,7 @@ package edu.ntnu.idi.idatt2003.gruppe42.View.Popups; -import edu.ntnu.idi.idatt2003.gruppe42.Controller.StockController; +import edu.ntnu.idi.idatt2003.gruppe42.Controller.AppController.StockAppController; +import edu.ntnu.idi.idatt2003.gruppe42.Controller.MarketController; import edu.ntnu.idi.idatt2003.gruppe42.Model.App; import edu.ntnu.idi.idatt2003.gruppe42.Model.Stock; import javafx.geometry.Pos; @@ -12,7 +13,9 @@ */ public class StockPopup extends Popup { - private StockController stockController; + private StockAppController stockAppController; + private ListView stockList; + private TextField searchField; /** * Constructs a new Stock popup. @@ -24,30 +27,34 @@ public class StockPopup extends Popup { */ public StockPopup(int width, int height, int x, int y) { super(width, height, x, y, App.STOCK); - stockController = new StockController(); - System.out.println("Market size: " + stockController.getMarket().size()); - TextField searchField = new TextField(); + searchField = new TextField(); + stockList = new ListView<>(); - ListView resultList = new ListView<>(); - resultList.getItems().addAll(stockController.getMarket()); - - resultList.setCellFactory(lv -> new ListCell() { + stockList.setCellFactory(lv -> new ListCell() { @Override protected void updateItem(Stock stock, boolean empty) { super.updateItem(stock, empty); if (empty || stock == null) { setGraphic(null); } else { - Label nameLabel = new Label(stock.getCompany()); - - HBox row = new HBox(10, nameLabel); + HBox row = new HBox(10, new Label(stock.getCompany())); row.setAlignment(Pos.CENTER_LEFT); setGraphic(row); } } }); - content.getChildren().addAll(searchField, resultList); + new StockAppController(this); + + content.getChildren().addAll(searchField, stockList); + } + + public TextField getSearchField() { + return searchField; + } + + public ListView getStockList() { + return stockList; } } diff --git a/src/main/resources/stocks.csv b/src/main/resources/stocks.csv index a0948ff..c9d57af 100644 --- a/src/main/resources/stocks.csv +++ b/src/main/resources/stocks.csv @@ -5,15 +5,15 @@ BAN,Banana Inc.,191.27 APL,Apple Inc.,276.43 TIR,Tire Inc.,404.68 OIL,Oil Inc.,204.62 -SPC,Space Inc. (Class A),311.20 -WND,Turbine Inc. (Class C),311.62 +SPC,Space Org.,311.20 +WND,Turbine Inc.,311.62 NUC,Nuclear Inc.,343.35 CAR,Car Inc.,426.52 -HYD,Hydro,501.05 +HYD,Hydro Inc.,501.05 TIP,Q-tip Inc.,128.75 TED,Teddy Bear Inc.,1014.43 -UNI,NTNU,311.14 -COM,Communication Inc.,155.28 +UNI,NTNU Org.,311.14 +COM,Communication Org.,155.28 MON,Monsters Inc.,329.54 AIR,Plane Inc.,240.70 ATB,Bus Inc.,539.52 \ No newline at end of file