package name.abuchen.portfolio.checks.impl; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; import name.abuchen.portfolio.Messages; import name.abuchen.portfolio.checks.Check; import name.abuchen.portfolio.checks.Issue; import name.abuchen.portfolio.checks.QuickFix; import name.abuchen.portfolio.model.Account; import name.abuchen.portfolio.model.Client; import name.abuchen.portfolio.model.Portfolio; public class ReferenceAccountCheck implements Check { private static class MissingReferenceAccountIssue extends AbstractPortfolioIssue { public MissingReferenceAccountIssue(Client client, Portfolio portfolio) { super(client, portfolio, null); } @Override public String getLabel() { return Messages.IssueMissingReferenceAccount; } @Override public List<QuickFix> getAvailableFixes() { List<QuickFix> answer = new ArrayList<QuickFix>(); answer.add(new CreateReferenceAccountFix(client, portfolio)); for (Account account : client.getAccounts()) answer.add(new AssignExistingAccountFix(portfolio, account)); return answer; } } private static class AssignExistingAccountFix implements QuickFix { private Portfolio portfolio; private Account account; public AssignExistingAccountFix(Portfolio portfolio, Account account) { this.portfolio = portfolio; this.account = account; } @Override public String getLabel() { return MessageFormat.format(Messages.FixAssignExistingAccount, account.getName()); } @Override public String getDoneLabel() { return MessageFormat.format(Messages.FixAssignExistingAccountDone, account.getName()); } @Override public void execute() { portfolio.setReferenceAccount(account); } } private static class CreateReferenceAccountFix implements QuickFix { private Client client; private Portfolio portfolio; private String nameProposal; public CreateReferenceAccountFix(Client client, Portfolio portfolio) { this.client = client; this.portfolio = portfolio; this.nameProposal = MessageFormat.format(Messages.FixReferenceAccountNameProposal, portfolio.getName()); } @Override public String getLabel() { return MessageFormat.format(Messages.FixCreateReferenceAccount, nameProposal); } @Override public String getDoneLabel() { return MessageFormat.format(Messages.FixCreateReferenceAccountDone, nameProposal); } @Override public void execute() { Account account = new Account(); account.setName(nameProposal); client.addAccount(account); portfolio.setReferenceAccount(account); } } @Override public List<Issue> execute(Client client) { List<Issue> answer = new ArrayList<Issue>(); for (Portfolio portfolio : client.getPortfolios()) { if (portfolio.getReferenceAccount() == null) answer.add(new MissingReferenceAccountIssue(client, portfolio)); } return answer; } }