From b8bdeadb28804c271c9f3c97192d1b4b9eca991e Mon Sep 17 00:00:00 2001
From: PawelSapula
Date: Thu, 12 Feb 2026 14:31:50 +0100
Subject: [PATCH 01/17] feat: Add Stock class. Simple constructor with
getters/setters. Basic JavaDoc.
---
.../java/edu/ntnu/idi/idatt/marked/Stock.java | 68 +++++++++++++++++++
1 file changed, 68 insertions(+)
create mode 100644 src/main/java/edu/ntnu/idi/idatt/marked/Stock.java
diff --git a/src/main/java/edu/ntnu/idi/idatt/marked/Stock.java b/src/main/java/edu/ntnu/idi/idatt/marked/Stock.java
new file mode 100644
index 0000000..11ca9f8
--- /dev/null
+++ b/src/main/java/edu/ntnu/idi/idatt/marked/Stock.java
@@ -0,0 +1,68 @@
+package edu.ntnu.idi.idatt.marked;
+
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * Stock class
+ *
+ * Class that describes an object of a unique stock.
+ *
+ */
+public class Stock {
+
+ private final String symbol;
+ private final String company;
+ private final List prices;
+
+ /**
+ * Constructor for a Stock.
+ *
+ * @param symbol - String that indicates the symbol of a stock, ex. "APPL" as a short form of company.
+ * @param company - String, company name, ex. "Apple Inc."
+ * @param prices - An array of BigInteger that indicates the price corresponding with time.
+ */
+ public Stock(String symbol, String company, List prices) {
+ this.symbol = symbol;
+ this.company = company;
+ this.prices = prices;
+ }
+
+ /**
+ * Getters
+ *
+ * @return - Their corresponding variables.
+ */
+
+ public String getSymbol() {
+ return symbol;
+ }
+
+ public String getCompany() {
+ return company;
+ }
+
+ public List getPrices() {
+ return prices;
+ }
+
+ /**
+ * Getter for sale price
+ *
+ * @return - BigDecimal with current (newest in array) stock price.
+ */
+ public BigDecimal getSalesPrice() {
+ return prices.getLast();
+ }
+
+ /**
+ * Method that adds new price to the price array.
+ *
+ * @param price - BigDecimal, new price.
+ */
+ public void addNewSalesPrice(BigDecimal price) {
+ prices.add(price);
+ }
+
+}
From 21d7a837c9bfba8b17853b3970c2392708bbe2fd Mon Sep 17 00:00:00 2001
From: PawelSapula
Date: Thu, 12 Feb 2026 14:31:58 +0100
Subject: [PATCH 02/17] feat: Add Share class. Simple constructor with
getters/setters. Basic JavaDoc.
---
.../java/edu/ntnu/idi/idatt/marked/Share.java | 49 +++++++++++++++++++
1 file changed, 49 insertions(+)
create mode 100644 src/main/java/edu/ntnu/idi/idatt/marked/Share.java
diff --git a/src/main/java/edu/ntnu/idi/idatt/marked/Share.java b/src/main/java/edu/ntnu/idi/idatt/marked/Share.java
new file mode 100644
index 0000000..bea434d
--- /dev/null
+++ b/src/main/java/edu/ntnu/idi/idatt/marked/Share.java
@@ -0,0 +1,49 @@
+package edu.ntnu.idi.idatt.marked;
+
+import java.math.BigDecimal;
+
+/**
+ * Share class
+ *
+ * Class that describes the ownership of a specific stock.
+ *
+ */
+public class Share {
+
+ private final Stock stock;
+ private BigDecimal quantity;
+ private BigDecimal purchasePrice;
+
+ /**
+ * Constructor for a Share.
+ *
+ * @param stock - The stock this share corresponds to.
+ * @see Stock
+ * @param quantity - The total number of shares of a stock. Measaured in percentage (Shares/Volume)
+ * @param purchasePrice - The current price when the stock was bought.
+ */
+ public Share(Stock stock, BigDecimal quantity, BigDecimal purchasePrice) {
+ this.stock = stock;
+ this.quantity = quantity;
+ this.purchasePrice = purchasePrice;
+ }
+
+ /**
+ * Getters
+ *
+ * @return - Their corresponding variables.
+ */
+
+ public Stock getStock() {
+ return stock;
+ }
+
+ public BigDecimal getQuantity() {
+ return quantity;
+ }
+
+ public BigDecimal getPurchasePrice() {
+ return purchasePrice;
+ }
+
+}
From f8cbbd6c97840abcf75f4f6edf8058c2ef52e2f5 Mon Sep 17 00:00:00 2001
From: PawelSapula
Date: Thu, 12 Feb 2026 14:45:33 +0100
Subject: [PATCH 03/17] feat: Add Portfolio class. Implemented simple methods
for share management.
---
.../edu/ntnu/idi/idatt/marked/Portfolio.java | 65 +++++++++++++++++++
1 file changed, 65 insertions(+)
create mode 100644 src/main/java/edu/ntnu/idi/idatt/marked/Portfolio.java
diff --git a/src/main/java/edu/ntnu/idi/idatt/marked/Portfolio.java b/src/main/java/edu/ntnu/idi/idatt/marked/Portfolio.java
new file mode 100644
index 0000000..535259b
--- /dev/null
+++ b/src/main/java/edu/ntnu/idi/idatt/marked/Portfolio.java
@@ -0,0 +1,65 @@
+package edu.ntnu.idi.idatt.marked;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Portfolio class
+ *
+ * Class that functions as a wallet for a player
+ * storing all results of transactions made.
+ *
+ */
+public class Portfolio {
+
+ private ArrayList shares;
+
+ /**
+ * Setter for ArrayList shares.
+ *
+ * @param share - The bought share
+ * @return - was the list modified?
+ */
+ public boolean addShare(Share share){
+ return shares.add(share);
+ }
+
+ /**
+ * Setter for ArrayList shares.
+ *
+ * @param share - The sold share
+ * @return - was the list modified?
+ */
+ public boolean removeShare(Share share){
+ return shares.add(share);
+ }
+
+ /**
+ * Getter for ArrayList shares.
+ *
+ * @return - List of all shares owned.
+ */
+ public List getShares() {
+ return shares;
+ }
+
+ /**
+ * Getter for ArrayList shares.
+ *
+ * @param symbol - The symbol of the stock corresponding to the share.
+ * @return - List of shares owned that corresponds with a company symbol.
+ */
+ public List getShares(String symbol) {
+ return shares.stream().filter(s -> s.getStock().getSymbol().equals(symbol)).toList();
+ }
+
+ /**
+ * Method for checking if the portfolio contains a specific share
+ *
+ * @return - If the share was found.
+ */
+ public boolean contains(Share share) {
+ return shares.contains(share);
+ }
+
+}
From dbd2425ca660bbcc9afe5303057a297642798f06 Mon Sep 17 00:00:00 2001
From: PawelSapula
Date: Thu, 12 Feb 2026 14:55:28 +0100
Subject: [PATCH 04/17] chore(Share.class): Modify JavaDoc description mistake.
---
src/main/java/edu/ntnu/idi/idatt/marked/Share.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/java/edu/ntnu/idi/idatt/marked/Share.java b/src/main/java/edu/ntnu/idi/idatt/marked/Share.java
index bea434d..1f9c14b 100644
--- a/src/main/java/edu/ntnu/idi/idatt/marked/Share.java
+++ b/src/main/java/edu/ntnu/idi/idatt/marked/Share.java
@@ -19,7 +19,7 @@ public class Share {
*
* @param stock - The stock this share corresponds to.
* @see Stock
- * @param quantity - The total number of shares of a stock. Measaured in percentage (Shares/Volume)
+ * @param quantity - The total of bought shares of the stock.
* @param purchasePrice - The current price when the stock was bought.
*/
public Share(Stock stock, BigDecimal quantity, BigDecimal purchasePrice) {
From 5f9a3e8cb53fb7896dfdee4bc3fb25a538e137bc Mon Sep 17 00:00:00 2001
From: PawelSapula
Date: Thu, 12 Feb 2026 15:07:34 +0100
Subject: [PATCH 05/17] feat: Create TransactionCalculator interface
---
.../transaction/TransactionCalculator.java | 21 +++++++++++++++++++
1 file changed, 21 insertions(+)
create mode 100644 src/main/java/edu/ntnu/idi/idatt/transaction/TransactionCalculator.java
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/TransactionCalculator.java b/src/main/java/edu/ntnu/idi/idatt/transaction/TransactionCalculator.java
new file mode 100644
index 0000000..1818aa8
--- /dev/null
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/TransactionCalculator.java
@@ -0,0 +1,21 @@
+package edu.ntnu.idi.idatt.transaction;
+
+import java.math.BigDecimal;
+
+/**
+ * TransactionCalculator interface
+ *
+ * Contains methods that are used upon doing a transaction
+ * corresponding to a share and a week.
+ * @see PurchaseCalculator
+ * @see SaleCalculator
+ *
+ */
+public interface TransactionCalculator {
+
+ BigDecimal calculateGross(); // Gross - Norsk: verdi før avgifter
+ BigDecimal calculateCommision(); // Commision - Norsk: (Kurtasje) En avgift som betales til megleren.
+ BigDecimal calculateTax(); // Tax - Norsk: Skatt, en avgift som betales til staten.
+ BigDecimal calculateTotal(); // Totalverdi etter avgifter
+
+}
From b0621ae8f8b5f584a37480fdba287e9dd26d58f5 Mon Sep 17 00:00:00 2001
From: PawelSapula
Date: Thu, 12 Feb 2026 15:18:56 +0100
Subject: [PATCH 06/17] feat: Implemented PurchaseCalculator and SaleCalculator
with project requirements.
---
.../idatt/transaction/PurchaseCalculator.java | 70 +++++++++++++++++
.../idi/idatt/transaction/SaleCalculator.java | 76 +++++++++++++++++++
2 files changed, 146 insertions(+)
create mode 100644 src/main/java/edu/ntnu/idi/idatt/transaction/PurchaseCalculator.java
create mode 100644 src/main/java/edu/ntnu/idi/idatt/transaction/SaleCalculator.java
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/PurchaseCalculator.java b/src/main/java/edu/ntnu/idi/idatt/transaction/PurchaseCalculator.java
new file mode 100644
index 0000000..cc9bd22
--- /dev/null
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/PurchaseCalculator.java
@@ -0,0 +1,70 @@
+package edu.ntnu.idi.idatt.transaction;
+
+import edu.ntnu.idi.idatt.marked.Share;
+
+import java.math.BigDecimal;
+
+/**
+ * PurchaseCalculator class
+ *
+ * Calculates transaction price based on
+ * share bought.
+ *
+ */
+public class PurchaseCalculator implements TransactionCalculator{
+
+ private final BigDecimal purchasePrice;
+ private final BigDecimal quantity;
+
+ /**
+ * Constructor for PurchaseCalculator
+ *
+ * @param share - The bought share
+ */
+ public PurchaseCalculator(Share share){
+ this.purchasePrice = share.getPurchasePrice();
+ this.quantity = share.getQuantity();
+ }
+
+ /**
+ * Method that calculates gross value
+ *
+ * @return - BigDecimal of purchase price x share quantity
+ */
+ @Override
+ public BigDecimal calculateGross() {
+ return purchasePrice.multiply(quantity);
+ }
+
+ /**
+ * Method that calculates the commission fee
+ *
+ * @return - BigDecimal of gross value x 0.5%.
+ */
+ @Override
+ public BigDecimal calculateCommision() {
+ BigDecimal fee = BigDecimal.valueOf(0.005); // Corresponding to 0.5%
+ return calculateGross().multiply(fee);
+ }
+
+ /**
+ * Method that calculates the tax
+ *
+ * @return - BigDecimal of 0 based on project requirements.
+ */
+ @Override
+ public BigDecimal calculateTax() {
+ return BigDecimal.ZERO;
+ }
+
+ /**
+ * Method that calculates the total price of a bought share
+ *
+ * @return - BigDecimal of gross value + commision fee + tax
+ */
+ @Override
+ public BigDecimal calculateTotal() {
+ return calculateGross().add(calculateCommision()).add(calculateTax());
+ }
+
+}
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/SaleCalculator.java b/src/main/java/edu/ntnu/idi/idatt/transaction/SaleCalculator.java
new file mode 100644
index 0000000..3c83ce3
--- /dev/null
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/SaleCalculator.java
@@ -0,0 +1,76 @@
+package edu.ntnu.idi.idatt.transaction;
+
+import edu.ntnu.idi.idatt.marked.Share;
+
+import java.math.BigDecimal;
+
+
+/**
+ * SaleCalculator class
+ *
+ * Calculates transaction profit based on
+ * share sold.
+ *
+ */
+public class SaleCalculator implements TransactionCalculator{
+
+ private final BigDecimal purchasePrice;
+ private final BigDecimal salesPrice;
+ private final BigDecimal quantity;
+
+ /**
+ * Constructor for SaleCaculator
+ *
+ * @param share - The sold share
+ */
+ public SaleCalculator(Share share){
+ this.purchasePrice = share.getPurchasePrice();
+ this.salesPrice = BigDecimal.ZERO; //TODO: Implement here
+ this.quantity = share.getQuantity();
+ }
+
+ /**
+ * Method that calculates gross value
+ *
+ * @return - BigDecimal of sale price x share quantity
+ */
+ @Override
+ public BigDecimal calculateGross() {
+ return salesPrice.multiply(quantity);
+ }
+
+ /**
+ * Method that calculates the commission fee
+ *
+ * @return - BigDecimal of gross value x 1%.
+ */
+ @Override
+ public BigDecimal calculateCommision() {
+ BigDecimal fee = BigDecimal.valueOf(0.01); // Corresponding to 1%
+ return calculateGross().multiply(fee);
+ }
+
+ /**
+ * Method that calculates the tax
+ *
+ * @return - BigDecimal of 30% of profit (gross - purchase price x quantity)
+ */
+ @Override
+ public BigDecimal calculateTax() {
+ BigDecimal taxPercentage = BigDecimal.valueOf(0.3); // Corresponding to 30%
+ BigDecimal profit = calculateGross().subtract(purchasePrice.multiply(quantity)); // gross - purchase price x quanitity
+ return profit.multiply(taxPercentage);
+
+ }
+
+ /**
+ * Method that calculates the total profit of a sold share
+ *
+ * @return - BigDecimal of gross value - commision fee - tax
+ */
+ @Override
+ public BigDecimal calculateTotal() {
+ return calculateGross().subtract(calculateCommision()).subtract(calculateTax());
+ }
+
+}
From 4eda27a1b10044fd7c9e2d2e9bcf14fcb2fba7f3 Mon Sep 17 00:00:00 2001
From: PawelSapula
Date: Thu, 12 Feb 2026 15:20:17 +0100
Subject: [PATCH 07/17] chore: Rename package (transaction -> calculator)
---
.../idatt/{transaction => calculator}/PurchaseCalculator.java | 2 +-
.../idi/idatt/{transaction => calculator}/SaleCalculator.java | 2 +-
.../{transaction => calculator}/TransactionCalculator.java | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
rename src/main/java/edu/ntnu/idi/idatt/{transaction => calculator}/PurchaseCalculator.java (97%)
rename src/main/java/edu/ntnu/idi/idatt/{transaction => calculator}/SaleCalculator.java (98%)
rename src/main/java/edu/ntnu/idi/idatt/{transaction => calculator}/TransactionCalculator.java (94%)
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/PurchaseCalculator.java b/src/main/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculator.java
similarity index 97%
rename from src/main/java/edu/ntnu/idi/idatt/transaction/PurchaseCalculator.java
rename to src/main/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculator.java
index cc9bd22..1bd3ae6 100644
--- a/src/main/java/edu/ntnu/idi/idatt/transaction/PurchaseCalculator.java
+++ b/src/main/java/edu/ntnu/idi/idatt/calculator/PurchaseCalculator.java
@@ -1,4 +1,4 @@
-package edu.ntnu.idi.idatt.transaction;
+package edu.ntnu.idi.idatt.calculator;
import edu.ntnu.idi.idatt.marked.Share;
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/SaleCalculator.java b/src/main/java/edu/ntnu/idi/idatt/calculator/SaleCalculator.java
similarity index 98%
rename from src/main/java/edu/ntnu/idi/idatt/transaction/SaleCalculator.java
rename to src/main/java/edu/ntnu/idi/idatt/calculator/SaleCalculator.java
index 3c83ce3..3f59521 100644
--- a/src/main/java/edu/ntnu/idi/idatt/transaction/SaleCalculator.java
+++ b/src/main/java/edu/ntnu/idi/idatt/calculator/SaleCalculator.java
@@ -1,4 +1,4 @@
-package edu.ntnu.idi.idatt.transaction;
+package edu.ntnu.idi.idatt.calculator;
import edu.ntnu.idi.idatt.marked.Share;
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/TransactionCalculator.java b/src/main/java/edu/ntnu/idi/idatt/calculator/TransactionCalculator.java
similarity index 94%
rename from src/main/java/edu/ntnu/idi/idatt/transaction/TransactionCalculator.java
rename to src/main/java/edu/ntnu/idi/idatt/calculator/TransactionCalculator.java
index 1818aa8..a1f9265 100644
--- a/src/main/java/edu/ntnu/idi/idatt/transaction/TransactionCalculator.java
+++ b/src/main/java/edu/ntnu/idi/idatt/calculator/TransactionCalculator.java
@@ -1,4 +1,4 @@
-package edu.ntnu.idi.idatt.transaction;
+package edu.ntnu.idi.idatt.calculator;
import java.math.BigDecimal;
From eea854c7fed3a6107c8d1a3bf065fcfa1ebb0a80 Mon Sep 17 00:00:00 2001
From: PawelSapula
Date: Thu, 12 Feb 2026 15:36:18 +0100
Subject: [PATCH 08/17] feat: Create Transaction abstract class
---
.../idi/idatt/transaction/Transaction.java | 65 +++++++++++++++++++
1 file changed, 65 insertions(+)
create mode 100644 src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java b/src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java
new file mode 100644
index 0000000..65de1b3
--- /dev/null
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java
@@ -0,0 +1,65 @@
+package edu.ntnu.idi.idatt.transaction;
+
+import edu.ntnu.idi.idatt.Player;
+import edu.ntnu.idi.idatt.calculator.TransactionCalculator;
+import edu.ntnu.idi.idatt.marked.Share;
+
+/**
+ * Transaction class
+ *
+ * An abstract class that handles a transaction
+ * based on week and share. Utilizes the calculators
+ * to perform calculations.
+ * @see TransactionCalculator
+ */
+abstract class Transaction {
+
+ private final Share share;
+ private int week;
+ private TransactionCalculator calculator;
+ private boolean commited;
+
+ /**
+ * Constructor for a Transaction
+ *
+ * @param share - The share the transaction is about.
+ * @param week - The current week
+ * @param calculator - Transaction (Purchasae/Sale)
+ */
+ Transaction(Share share, int week, TransactionCalculator calculator) {
+ this.share = share;
+ this.week = week;
+ this.calculator = calculator;
+ }
+
+ /**
+ *
+ * Getters
+ * @return - their corresponding variable
+ *
+ */
+
+ public Share getShare() {
+ return share;
+ }
+
+ public int getWeek() {
+ return week;
+ }
+
+ public TransactionCalculator getCalculator() {
+ return calculator;
+ }
+
+ public boolean isCommited() {
+ return commited;
+ }
+
+ /**
+ * Abstract commit method to set the isCommited flag that symbolizes a unique transaction.
+ *
+ * @param player - The player that does the transaction
+ */
+ abstract void commit(Player player);
+
+}
From 0b29c14f47ff3fc5df133fb7d1956dbed8b6bac9 Mon Sep 17 00:00:00 2001
From: PawelSapula
Date: Thu, 12 Feb 2026 15:36:50 +0100
Subject: [PATCH 09/17] feat: Implement Purchase and Sale classes
---
.../ntnu/idi/idatt/transaction/Purchase.java | 28 +++++++++++++++++++
.../edu/ntnu/idi/idatt/transaction/Sale.java | 27 ++++++++++++++++++
2 files changed, 55 insertions(+)
create mode 100644 src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java
create mode 100644 src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java b/src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java
new file mode 100644
index 0000000..4b61325
--- /dev/null
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java
@@ -0,0 +1,28 @@
+package edu.ntnu.idi.idatt.transaction;
+
+import edu.ntnu.idi.idatt.Player;
+import edu.ntnu.idi.idatt.calculator.PurchaseCalculator;
+import edu.ntnu.idi.idatt.calculator.TransactionCalculator;
+import edu.ntnu.idi.idatt.marked.Share;
+
+public class Purchase extends Transaction{
+ /**
+ * Constructor for a Purchase
+ *
+ * @param share - The purchased share.
+ * @param week - The current week
+ */
+ Purchase(Share share, int week) {
+ super(share, week, new PurchaseCalculator(share));
+ }
+
+ /**
+ * @see Transaction
+ * @param player - The player that does the transaction
+ */
+ @Override
+ void commit(Player player) {
+
+ }
+
+}
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java b/src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java
new file mode 100644
index 0000000..9d38c59
--- /dev/null
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java
@@ -0,0 +1,27 @@
+package edu.ntnu.idi.idatt.transaction;
+
+import edu.ntnu.idi.idatt.Player;
+import edu.ntnu.idi.idatt.calculator.SaleCalculator;
+import edu.ntnu.idi.idatt.calculator.TransactionCalculator;
+import edu.ntnu.idi.idatt.marked.Share;
+
+public class Sale extends Transaction{
+ /**
+ * Constructor for a Sale
+ *
+ * @param share - The sold share
+ * @param week - The current week
+ */
+ Sale(Share share, int week) {
+ super(share, week, new SaleCalculator(share));
+ }
+
+ /**
+ * @see Transaction
+ * @param player - The player that does the transaction
+ */
+ @Override
+ void commit(Player player) {
+
+ }
+}
From 9a3d706eb3f7ee1914e819654365f65a5a84989e Mon Sep 17 00:00:00 2001
From: PawelSapula
Date: Thu, 12 Feb 2026 15:40:40 +0100
Subject: [PATCH 10/17] Fix: Missing class accessibility scope
---
src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java b/src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java
index 65de1b3..d6979c4 100644
--- a/src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java
@@ -12,7 +12,7 @@
* to perform calculations.
* @see TransactionCalculator
*/
-abstract class Transaction {
+public abstract class Transaction {
private final Share share;
private int week;
From b289cbc256791d7f944ae6ac68d4068705af4990 Mon Sep 17 00:00:00 2001
From: PawelSapula
Date: Thu, 12 Feb 2026 15:48:57 +0100
Subject: [PATCH 11/17] feat: Temporary player class
---
src/main/java/edu/ntnu/idi/idatt/Player.java | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 src/main/java/edu/ntnu/idi/idatt/Player.java
diff --git a/src/main/java/edu/ntnu/idi/idatt/Player.java b/src/main/java/edu/ntnu/idi/idatt/Player.java
new file mode 100644
index 0000000..414f6e8
--- /dev/null
+++ b/src/main/java/edu/ntnu/idi/idatt/Player.java
@@ -0,0 +1,4 @@
+package edu.ntnu.idi.idatt;
+
+public class Player {
+}
From 97932817501df3722e76c02dfa8344abb3debecf Mon Sep 17 00:00:00 2001
From: PawelSapula
Date: Thu, 12 Feb 2026 15:53:52 +0100
Subject: [PATCH 12/17] feat: Add TransactionArchive class to store per player
transaction logic.
---
.../idatt/transaction/TransactionArchive.java | 78 +++++++++++++++++++
1 file changed, 78 insertions(+)
create mode 100644 src/main/java/edu/ntnu/idi/idatt/transaction/TransactionArchive.java
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/TransactionArchive.java b/src/main/java/edu/ntnu/idi/idatt/transaction/TransactionArchive.java
new file mode 100644
index 0000000..3fbeaa4
--- /dev/null
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/TransactionArchive.java
@@ -0,0 +1,78 @@
+package edu.ntnu.idi.idatt.transaction;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * TransactionArchive class
+ *
+ * Manages and handles transaction logic
+ *
+ */
+public class TransactionArchive {
+
+ private final ArrayList transactions = new ArrayList<>();
+
+ /**
+ * Method for adding a new transaction to ArrayList transactions.
+ *
+ * @param transaction - The transaction instance
+ * @return - was the list modified?
+ */
+ public boolean add(Transaction transaction){
+ return transactions.add(transaction);
+ }
+
+ /**
+ * Method for checking if there has been any transactions previously.
+ *
+ * @return - was the transactions ArrayList empty?
+ */
+ public boolean isEmpty(){
+ return transactions.isEmpty();
+ }
+
+ /**
+ * Getter for transactions done
+ *
+ * @param week - Transaction interval
+ * @return - List of Transaction done in a specified week.
+ */
+ public List getTransactions(int week) {
+ return transactions.stream().filter(transaction -> transaction.getWeek() == week).toList();
+ }
+
+ /**
+ * Getter for purchases done
+ *
+ * @param week - Purchase interval
+ * @return - List of Purchase done in a specified week.
+ */
+ public List getPurchases(int week) {
+ return transactions.stream().filter(t -> t instanceof Purchase)
+ .map(t -> (Purchase) t)
+ .toList();
+ }
+
+ /**
+ * Getter for sales done
+ *
+ * @param week - Sale interval
+ * @return - List of Sale done in a specified week.
+ */
+ public List getSales(int week) {
+ return transactions.stream().filter(t -> t instanceof Sale)
+ .map(t -> (Sale) t)
+ .toList();
+ }
+
+ /**
+ * Part 2
+ *
+ * @return
+ */
+ public int countDistinctWeeks(){ //TODO: HERE
+ return -1;
+ }
+
+}
From 8250eeeed1da2c0a60bcfa766eb60c33ef34b73e Mon Sep 17 00:00:00 2001
From: PawelSapula
Date: Thu, 12 Feb 2026 15:59:32 +0100
Subject: [PATCH 13/17] feat: Implementation of Player class structure
---
src/main/java/edu/ntnu/idi/idatt/Player.java | 52 ++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/src/main/java/edu/ntnu/idi/idatt/Player.java b/src/main/java/edu/ntnu/idi/idatt/Player.java
index 414f6e8..d3a288c 100644
--- a/src/main/java/edu/ntnu/idi/idatt/Player.java
+++ b/src/main/java/edu/ntnu/idi/idatt/Player.java
@@ -1,4 +1,56 @@
package edu.ntnu.idi.idatt;
+import edu.ntnu.idi.idatt.marked.Portfolio;
+import edu.ntnu.idi.idatt.transaction.TransactionArchive;
+
+import java.math.BigDecimal;
+
public class Player {
+
+ private final String name;
+ private final BigDecimal startingMoney;
+ private BigDecimal money;
+ private Portfolio portfolio;
+ private TransactionArchive transactionArchive;
+
+ public Player(String name, BigDecimal startingMoney) {
+ this.name = name;
+ this.startingMoney = startingMoney;
+ }
+
+ /**
+ * Getters
+ *
+ * @return - Their corresponding variables.
+ */
+
+ public String getName() {
+ return name;
+ }
+
+ public BigDecimal getMoney() {
+ return money;
+ }
+
+ public Portfolio getPortfolio() {
+ return portfolio;
+ }
+
+ public TransactionArchive getTransactionArchive() {
+ return transactionArchive;
+ }
+
+ /**
+ * Setters for money
+ *
+ * @param amount - Amount to be changed correspondingly.
+ */
+
+ public void addMoney(BigDecimal amount){
+ this.money = this.money.add(amount);
+ }
+
+ public void withdrawMoney(BigDecimal amount){
+ this.money = this.money.subtract(amount);
+ }
}
From ce4985bfff42394563c9ab488a3602facb78768a Mon Sep 17 00:00:00 2001
From: PawelSapula
Date: Thu, 12 Feb 2026 16:02:02 +0100
Subject: [PATCH 14/17] fix(Player class): Variable values on instance
creation.
---
src/main/java/edu/ntnu/idi/idatt/Player.java | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/main/java/edu/ntnu/idi/idatt/Player.java b/src/main/java/edu/ntnu/idi/idatt/Player.java
index d3a288c..cb2ae90 100644
--- a/src/main/java/edu/ntnu/idi/idatt/Player.java
+++ b/src/main/java/edu/ntnu/idi/idatt/Player.java
@@ -10,12 +10,13 @@ public class Player {
private final String name;
private final BigDecimal startingMoney;
private BigDecimal money;
- private Portfolio portfolio;
- private TransactionArchive transactionArchive;
+ private Portfolio portfolio = new Portfolio();
+ private TransactionArchive transactionArchive = new TransactionArchive();
public Player(String name, BigDecimal startingMoney) {
this.name = name;
this.startingMoney = startingMoney;
+ this.money = this.startingMoney;
}
/**
From 777184dddda77a3639cfe6027bd741e23695307c Mon Sep 17 00:00:00 2001
From: PawelSapula
Date: Thu, 12 Feb 2026 16:09:51 +0100
Subject: [PATCH 15/17] feat: Added commit method bodies to Purchase and Sale
---
src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java | 4 ++++
src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java | 4 ++++
src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java | 3 ++-
3 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java b/src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java
index 4b61325..0e4b42e 100644
--- a/src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java
@@ -22,7 +22,11 @@ public class Purchase extends Transaction{
*/
@Override
void commit(Player player) {
+ player.withdrawMoney(this.getCalculator().calculateTotal());
+ player.getPortfolio().addShare(this.getShare());
+ player.getTransactionArchive().add(this);
+ this.commited = true;
}
}
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java b/src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java
index 9d38c59..db37325 100644
--- a/src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java
@@ -22,6 +22,10 @@ public class Sale extends Transaction{
*/
@Override
void commit(Player player) {
+ player.addMoney(this.getCalculator().calculateTotal());
+ player.getPortfolio().removeShare(this.getShare());
+ player.getTransactionArchive().add(this);
+ this.commited = true;
}
}
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java b/src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java
index d6979c4..2a85dfe 100644
--- a/src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java
@@ -12,12 +12,13 @@
* to perform calculations.
* @see TransactionCalculator
*/
+
public abstract class Transaction {
private final Share share;
private int week;
private TransactionCalculator calculator;
- private boolean commited;
+ protected boolean commited;
/**
* Constructor for a Transaction
From 326ed304c70585e553838051303b8236b6fc6cf4 Mon Sep 17 00:00:00 2001
From: PawelSapula
Date: Thu, 12 Feb 2026 16:33:28 +0100
Subject: [PATCH 16/17] fix: Accessibility modifiers
---
src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java | 4 ++--
src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java | 4 ++--
src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java | 2 +-
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java b/src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java
index 0e4b42e..157c193 100644
--- a/src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/Purchase.java
@@ -12,7 +12,7 @@ public class Purchase extends Transaction{
* @param share - The purchased share.
* @param week - The current week
*/
- Purchase(Share share, int week) {
+ public Purchase(Share share, int week) {
super(share, week, new PurchaseCalculator(share));
}
@@ -21,7 +21,7 @@ public class Purchase extends Transaction{
* @param player - The player that does the transaction
*/
@Override
- void commit(Player player) {
+ public void commit(Player player) {
player.withdrawMoney(this.getCalculator().calculateTotal());
player.getPortfolio().addShare(this.getShare());
player.getTransactionArchive().add(this);
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java b/src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java
index db37325..d3dfee2 100644
--- a/src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/Sale.java
@@ -12,7 +12,7 @@ public class Sale extends Transaction{
* @param share - The sold share
* @param week - The current week
*/
- Sale(Share share, int week) {
+ public Sale(Share share, int week) {
super(share, week, new SaleCalculator(share));
}
@@ -21,7 +21,7 @@ public class Sale extends Transaction{
* @param player - The player that does the transaction
*/
@Override
- void commit(Player player) {
+ public void commit(Player player) {
player.addMoney(this.getCalculator().calculateTotal());
player.getPortfolio().removeShare(this.getShare());
player.getTransactionArchive().add(this);
diff --git a/src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java b/src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java
index 2a85dfe..1e955fe 100644
--- a/src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java
+++ b/src/main/java/edu/ntnu/idi/idatt/transaction/Transaction.java
@@ -61,6 +61,6 @@ public boolean isCommited() {
*
* @param player - The player that does the transaction
*/
- abstract void commit(Player player);
+ abstract public void commit(Player player);
}
From cf8ebfe7726326c1c7744ae1866fb75ff31f9f98 Mon Sep 17 00:00:00 2001
From: PawelSapula
Date: Thu, 12 Feb 2026 16:37:48 +0100
Subject: [PATCH 17/17] 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()));
+ }
+ }
+
+
+}