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 e69de29..f27e44c 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 @@ -0,0 +1,79 @@ +package edu.ntnu.idi.idatt2003.g40.mappe; + +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. + *

+ */ +public class Portfolio { + + private final List shares = new ArrayList<>(); + + /** + * 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); + } + + /** + * 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); + } + + /** + * 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(); + } + + /** + * 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); + } +}