package name.abuchen.portfolio.model; import java.time.LocalDate; public class AccountTransferEntry implements CrossEntry, Annotated { private Account accountFrom; private AccountTransaction transactionFrom; private Account accountTo; private AccountTransaction transactionTo; public AccountTransferEntry() { this.transactionFrom = new AccountTransaction(); this.transactionFrom.setType(AccountTransaction.Type.TRANSFER_OUT); this.transactionFrom.setCrossEntry(this); this.transactionTo = new AccountTransaction(); this.transactionTo.setType(AccountTransaction.Type.TRANSFER_IN); this.transactionTo.setCrossEntry(this); } public AccountTransferEntry(Account accountFrom, Account accountTo) { this(); this.accountFrom = accountFrom; this.accountTo = accountTo; } public AccountTransaction getSourceTransaction() { return this.transactionFrom; } public AccountTransaction getTargetTransaction() { return this.transactionTo; } public void setSourceAccount(Account account) { this.accountFrom = account; } public Account getSourceAccount() { return accountFrom; } public void setTargetAccount(Account account) { this.accountTo = account; } public Account getTargetAccount() { return accountTo; } public void setDate(LocalDate date) { this.transactionFrom.setDate(date); this.transactionTo.setDate(date); } public void setAmount(long amount) { this.transactionFrom.setAmount(amount); this.transactionTo.setAmount(amount); } public void setCurrencyCode(String currencyCode) { this.transactionFrom.setCurrencyCode(currencyCode); this.transactionTo.setCurrencyCode(currencyCode); } @Override public String getNote() { return this.transactionFrom.getNote(); } @Override public void setNote(String note) { this.transactionFrom.setNote(note); this.transactionTo.setNote(note); } public void insert() { accountFrom.addTransaction(transactionFrom); accountTo.addTransaction(transactionTo); } @Override public void updateFrom(Transaction t) { if (t == transactionFrom) copyAttributesOver(transactionFrom, transactionTo); else if (t == transactionTo) copyAttributesOver(transactionTo, transactionFrom); else throw new UnsupportedOperationException(); } private void copyAttributesOver(AccountTransaction source, AccountTransaction target) { target.setDate(source.getDate()); target.setNote(source.getNote()); } @Override public TransactionOwner<? extends Transaction> getOwner(Transaction t) { if (t.equals(transactionFrom)) return accountFrom; else if (t.equals(transactionTo)) return accountTo; else throw new UnsupportedOperationException(); } @Override public Transaction getCrossTransaction(Transaction t) { if (t.equals(transactionFrom)) return transactionTo; else if (t.equals(transactionTo)) return transactionFrom; else throw new UnsupportedOperationException(); } @Override public TransactionOwner<? extends Transaction> getCrossOwner(Transaction t) { if (t.equals(transactionFrom)) return accountTo; else if (t.equals(transactionTo)) return accountFrom; else throw new UnsupportedOperationException(); } }