diff --git a/src/main/java/Model/Exchange.java b/src/main/java/Model/Exchange.java index 320fae8..daf57c3 100644 --- a/src/main/java/Model/Exchange.java +++ b/src/main/java/Model/Exchange.java @@ -13,6 +13,9 @@ public class Exchange { private final Map stockMap; private final Random random; + // Registered observers + private final List observers = new ArrayList<>(); + public Exchange(String name, List stocks) { this.name = name; this.week = 1; @@ -22,9 +25,26 @@ public Exchange(String name, List stocks) { for (Stock stock : stocks) { stockMap.put(stock.getSymbol(), stock); } + } + + // ---- Observer ---- + + public void addObserver(ExchangeObserver observer) { + if (observer != null && !observers.contains(observer)) { + observers.add(observer); + } + } + public void removeObserver(ExchangeObserver observer) { + observers.remove(observer); } - + + private void notifyObservers() { + for (ExchangeObserver observer : observers) { + observer.onExchangeUpdated(this); + } + } + public String getName() { return name; } @@ -57,7 +77,7 @@ public List findStocks(String searchTerm) { public Transaction buy(String symbol, BigDecimal quantity, Player player) { Stock stock = getStock(symbol); - + // unngÄ nullpointerexception if (stock == null) { return null; @@ -71,7 +91,9 @@ public Transaction buy(String symbol, BigDecimal quantity, Player player) { // committer til player purchase.commit(player); - + + notifyObservers(); + return purchase; } @@ -86,7 +108,9 @@ public Transaction sell(Share share, Player player) { // commiter til player sale.commit(player); - + + notifyObservers(); + return sale; } @@ -108,6 +132,8 @@ public void advance() { stock.addNewSalesPrice(newPrice); } } + + notifyObservers(); } public List getGainers(int limit) { // viser "vinnerne"