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/View/DesktopView.java b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/View/DesktopView.java index 5da3b4f..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,6 +1,6 @@ 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; @@ -18,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; @@ -26,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 98fb82b..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,12 +1,22 @@ package edu.ntnu.idi.idatt2003.gruppe42.View.Popups; +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; +import javafx.scene.control.*; +import javafx.scene.layout.HBox; /** * A popup for the Stock app. */ public class StockPopup extends Popup { + private StockAppController stockAppController; + private ListView stockList; + private TextField searchField; + /** * Constructs a new Stock popup. * @@ -17,6 +27,34 @@ public class StockPopup extends Popup { */ public StockPopup(int width, int height, int x, int y) { super(width, height, x, y, App.STOCK); - // Add Stock specific content here + + searchField = new TextField(); + stockList = new ListView<>(); + + stockList.setCellFactory(lv -> new ListCell() { + @Override + protected void updateItem(Stock stock, boolean empty) { + super.updateItem(stock, empty); + if (empty || stock == null) { + setGraphic(null); + } else { + HBox row = new HBox(10, new Label(stock.getCompany())); + row.setAlignment(Pos.CENTER_LEFT); + setGraphic(row); + } + } + }); + + 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 new file mode 100644 index 0000000..c9d57af --- /dev/null +++ b/src/main/resources/stocks.csv @@ -0,0 +1,19 @@ +# Companies by Market Cap +# Ticker,Name,Price + +BAN,Banana Inc.,191.27 +APL,Apple Inc.,276.43 +TIR,Tire Inc.,404.68 +OIL,Oil Inc.,204.62 +SPC,Space Org.,311.20 +WND,Turbine Inc.,311.62 +NUC,Nuclear Inc.,343.35 +CAR,Car Inc.,426.52 +HYD,Hydro Inc.,501.05 +TIP,Q-tip Inc.,128.75 +TED,Teddy Bear Inc.,1014.43 +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