diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Portfolio.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Portfolio.java index f27e44c..25b0953 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Portfolio.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Portfolio.java @@ -1,79 +1,102 @@ package edu.ntnu.idi.idatt2003.g40.mappe; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Objects; /** * Represents a player's portfolio of shares. - *

- * The portfolio stores shares and provides operations for adding, removing, - * retrieving and checking ownership of shares. - *

+ * + *

The portfolio stores shares and provides operations for adding, removing, + * retrieving and checking ownership of shares.

*/ -public class Portfolio { +public final class Portfolio { - private final List shares = new ArrayList<>(); + /** + * List of shares. + * */ + private final List shares = new ArrayList<>(); - /** - * Creates an empty portfolio. - */ - public Portfolio() { - // Intentionally empty - } + /** + * Creates an empty portfolio. + */ + public Portfolio() { + // Intentionally empty + } - /** - * Adds a share to the portfolio. - * - * @param share the share to add - * @return {@code true} if the share was added, {@code false} otherwise - */ - public boolean addShare(Share share) { - Objects.requireNonNull(share, "share cannot be null"); - return shares.add(share); - } + /** + * Adds a share to the portfolio. + * + * @param share the share to add + * @return {@code true} if the share was added, {@code false} otherwise + */ + public boolean addShare(final Share share) { + Objects.requireNonNull(share, "share cannot be null"); + return shares.add(share); + } - /** - * Removes a share from the portfolio. - * - * @param share the share to remove - * @return {@code true} if the share was removed, {@code false} if it was not present - */ - public boolean removeShare(Share share) { - Objects.requireNonNull(share, "share cannot be null"); - return shares.remove(share); - } + /** + * Removes a share from the portfolio. + * + * @param share the share to remove + * @return {@code true} if the share was removed, + * {@code false} if it was not present. + */ + public boolean removeShare(final Share share) { + Objects.requireNonNull(share, "share cannot be null"); + return shares.remove(share); + } - /** - * Returns an immutable snapshot of all shares in the portfolio. - * - * @return a list of shares - */ - public List getShares() { - return List.copyOf(shares); - } + /** + * Returns an immutable snapshot of all shares in the portfolio. + * + * @return a list of shares + */ + public List getShares() { + return List.copyOf(shares); + } - /** - * Returns an immutable snapshot of all shares whose stock symbol matches the given symbol. - * - * @param symbol the stock symbol to match - * @return a list of shares matching the symbol - */ - public List getShares(String symbol) { - Objects.requireNonNull(symbol, "symbol cannot be null"); - return shares.stream() - .filter(s -> symbol.equalsIgnoreCase(s.getStock().getSymbol())) - .toList(); - } + /** + * Returns an immutable snapshot of all shares whose + * stock symbol matches the given symbol. + * + * @param symbol the stock symbol to match + * @return a list of shares matching the symbol + */ + public List getShares(final String symbol) { + Objects.requireNonNull(symbol, "symbol cannot be null"); + return shares.stream() + .filter(s -> symbol.equalsIgnoreCase(s.getStock().getSymbol())) + .toList(); + } + + /** + * Checks whether the given share exists in the portfolio. + * + * @param share the share to check + * @return {@code true} if the portfolio + * contains the share, otherwise {@code false} + */ + public boolean contains(final Share share) { + Objects.requireNonNull(share, "share cannot be null"); + return shares.contains(share); + } + + /** + * Returns the total net worth of the portfolios shares, + * using a sale calculator. + * + * @return the net worth. + * */ + public BigDecimal getNetWorth() { + BigDecimal netWorth = new BigDecimal("0"); + + for (Share s : shares) { + SaleCalculator calculator = new SaleCalculator(s); - /** - * Checks whether the given share exists in the portfolio. - * - * @param share the share to check - * @return {@code true} if the portfolio contains the share, otherwise {@code false} - */ - public boolean contains(Share share) { - Objects.requireNonNull(share, "share cannot be null"); - return shares.contains(share); + netWorth = netWorth.add(calculator.calculateTotal()); } + return netWorth; + } }