package name.abuchen.portfolio.model; import java.util.ArrayList; import java.util.List; import java.util.UUID; import name.abuchen.portfolio.money.CurrencyUnit; public class Account implements TransactionOwner<AccountTransaction>, InvestmentVehicle { private String uuid; private String name; private String currencyCode = CurrencyUnit.EUR; private String note; private boolean isRetired = false; private List<AccountTransaction> transactions = new ArrayList<>(); public Account() { this.uuid = UUID.randomUUID().toString(); } public Account(String name) { this(); this.name = name; } @Override public String getUUID() { return uuid; } /* package */void generateUUID() { // needed to assign UUIDs when loading older versions from XML uuid = UUID.randomUUID().toString(); } @Override public String getName() { return name; } @Override public void setName(String name) { this.name = name; } @Override public String getCurrencyCode() { return currencyCode; } @Override public void setCurrencyCode(String currencyCode) { this.currencyCode = currencyCode; } @Override public String getNote() { return note; } @Override public void setNote(String note) { this.note = note; } public boolean isRetired() { return isRetired; } public void setRetired(boolean isRetired) { this.isRetired = isRetired; } @Override public List<AccountTransaction> getTransactions() { return transactions; } @Override public void addTransaction(AccountTransaction transaction) { this.transactions.add(transaction); } @Override public void shallowDeleteTransaction(AccountTransaction transaction, Client client) { this.transactions.remove(transaction); } public long getCurrentAmount() { return transactions.stream().mapToLong(t -> { switch (t.getType()) { case DEPOSIT: case DIVIDENDS: case INTEREST: case SELL: case TRANSFER_IN: case TAX_REFUND: case FEES_REFUND: return t.getAmount(); case FEES: case INTEREST_CHARGE: case TAXES: case REMOVAL: case BUY: case TRANSFER_OUT: return -t.getAmount(); default: throw new UnsupportedOperationException(); } }).sum(); } @Override public String toString() { return getName(); } }