diff --git a/src/main/java/edu/ntnu/idi/idatt/model/portfolio/Portfolio.java b/src/main/java/edu/ntnu/idi/idatt/model/portfolio/Portfolio.java index 5bfba56..4eb2a21 100644 --- a/src/main/java/edu/ntnu/idi/idatt/model/portfolio/Portfolio.java +++ b/src/main/java/edu/ntnu/idi/idatt/model/portfolio/Portfolio.java @@ -43,6 +43,11 @@ public boolean removeShare(Share share) { return shares.remove(share); } + // TODO: JavaDocs, Junit + public void removeShares() { + shares.clear(); + } + /** * Getter for ArrayList shares. * diff --git a/src/main/java/edu/ntnu/idi/idatt/storage/SessionManager.java b/src/main/java/edu/ntnu/idi/idatt/storage/SessionManager.java index 8b40489..94626d1 100644 --- a/src/main/java/edu/ntnu/idi/idatt/storage/SessionManager.java +++ b/src/main/java/edu/ntnu/idi/idatt/storage/SessionManager.java @@ -17,7 +17,10 @@ import com.google.gson.reflect.TypeToken; import edu.ntnu.idi.idatt.model.Exchange; +import edu.ntnu.idi.idatt.model.market.Stock; import edu.ntnu.idi.idatt.model.player.Player; +import edu.ntnu.idi.idatt.model.portfolio.Portfolio; +import edu.ntnu.idi.idatt.model.portfolio.Share; import edu.ntnu.idi.idatt.model.transaction.Transaction; import edu.ntnu.idi.idatt.service.transaction.TransactionCalculator; import edu.ntnu.idi.idatt.session.UserSession; @@ -104,6 +107,21 @@ public static boolean loadSession(String playerName) { if (session.getPlayer().getName().equals(playerName)) { UserSession.getInstance().setPlayer(session.getPlayer()); UserSession.getInstance().setExchange(session.getExchange()); + + // Reseed portfolio based on exchange's stock instances. + // This has to be done due to Gson loading via reflection. + Portfolio portfolio = UserSession.getInstance().getPlayer().getPortfolio(); + ArrayList validatedShares = new ArrayList<>(); + + for (Share oldShare : portfolio.getShares()) { // Create new instances + Stock stock = UserSession.getInstance().getExchange().getStock(oldShare.getStock().getSymbol()); + Share newShare = new Share(stock, oldShare.getQuantity(), oldShare.getPurchasePrice()); + validatedShares.add(newShare); + } + + portfolio.removeShares(); // Remove all old + validatedShares.forEach(share -> portfolio.addShare(share)); // Add new + return true; } }