From cf8ebfe7726326c1c7744ae1866fb75ff31f9f98 Mon Sep 17 00:00:00 2001 From: PawelSapula Date: Thu, 12 Feb 2026 16:37:48 +0100 Subject: [PATCH] feat: Added Exchange class as backbone of the project. --- .../java/edu/ntnu/idi/idatt/Exchange.java | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 src/main/java/edu/ntnu/idi/idatt/Exchange.java diff --git a/src/main/java/edu/ntnu/idi/idatt/Exchange.java b/src/main/java/edu/ntnu/idi/idatt/Exchange.java new file mode 100644 index 0000000..a159c4a --- /dev/null +++ b/src/main/java/edu/ntnu/idi/idatt/Exchange.java @@ -0,0 +1,81 @@ +package edu.ntnu.idi.idatt; + +import edu.ntnu.idi.idatt.marked.Share; +import edu.ntnu.idi.idatt.marked.Stock; +import edu.ntnu.idi.idatt.transaction.Purchase; +import edu.ntnu.idi.idatt.transaction.Sale; +import edu.ntnu.idi.idatt.transaction.Transaction; + +import java.math.BigDecimal; +import java.util.*; + +public class Exchange { + + //TODO: JavaDocs, Write over functions mby + + private final String name; + private int week; + private HashMap stockMap = new HashMap<>(); + private Random random = new Random(); + + public Exchange(String name, List stocks) { + this.name = name; + this.week = 1; + + for(Stock stock : stocks){ + stockMap.put(stock.getSymbol(), stock); + } + + } + + public String getName() { + return name; + } + + public int getWeek() { + return week; + } + + public boolean hasStock(String symbol) { + return stockMap.containsKey(symbol); + } + + public Stock getStock(String symbol) { + if(this.hasStock(symbol)){ + stockMap.get(symbol); + } + return null; //TODO: Exception + } + + public List findStocks(String searchTerm) { + ArrayList stocksFound = new ArrayList<>(); + + for(Stock stock : stockMap.values()) { + if(stock.getCompany().contains(searchTerm) || stock.getSymbol().contains(searchTerm)){ + stocksFound.add(stock); + } + } + return stocksFound; + } + + public Transaction buy(String symbol, BigDecimal quantity, Player player) { + Share share = new Share(getStock(symbol), quantity, BigDecimal.valueOf(random.nextDouble())); + Purchase purchase = new Purchase(share, this.week); + purchase.commit(player); + return player.getTransactionArchive().getPurchases(this.week).getLast(); + } + + public Transaction sell(Share share, Player player) { + Sale sale = new Sale(share, this.week); + sale.commit(player); + return player.getTransactionArchive().getSales(this.week).getLast(); + } + + public void advance() { + for(Stock stocks : stockMap.values()) { + stocks.addNewSalesPrice(BigDecimal.valueOf(random.nextDouble())); + } + } + + +}