package com.liato.bankdroid.api.domain.account.impl; import com.liato.bankdroid.api.domain.account.Transaction; import com.liato.bankdroid.api.domain.account.TransactionAccount; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Map; import static com.liato.bankdroid.api.domain.account.impl.AccountBuilder.BasicAccount; public class TransactionAccountBuilder extends AbstractAccountBuilder<TransactionAccountBuilder> { private Collection<Transaction> mTransactions; public TransactionAccountBuilder(String id, String name, String currency) { super(id, name, currency); } protected TransactionAccountBuilder self() { return this; } public TransactionAccountBuilder addTransaction(Transaction transaction) { if (mTransactions == null) { mTransactions = new ArrayList<>(); } mTransactions.add(transaction); return this; } public TransactionAccountBuilder transactions(Collection<Transaction> transactions) { mTransactions = transactions; return this; } public TransactionAccount build() { return new BasicTransactionAccount(mId, mName, mCurrency, mBalance, mCustomAttributes, mTransactions); } private static class BasicTransactionAccount extends BasicAccount implements TransactionAccount { private Collection<Transaction> mTransactions; private BasicTransactionAccount(String id, String name, String currency, BigDecimal balance, Map<String, String> customAttributes, Collection<Transaction> transactions) { super(id, name, currency, balance, customAttributes); mTransactions = transactions; } @Override public Collection<Transaction> getTransactions() { return mTransactions == null ? Collections.<Transaction>emptyList() : mTransactions; } } }