package com.liato.bankdroid.api.domain.account.impl; import com.liato.bankdroid.api.domain.account.CreditCardAccount; import com.liato.bankdroid.api.domain.account.Transaction; import java.math.BigDecimal; 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 CreditCardAccountBuilder extends AbstractAccountBuilder<CreditCardAccountBuilder> { private BigDecimal mCreditLimit; private Collection<Transaction> mTransactions; public CreditCardAccountBuilder(String id, String name, String currency) { super(id, name, currency); } protected CreditCardAccountBuilder self() { return this; } public CreditCardAccountBuilder creditLimit(BigDecimal creditLimit) { mCreditLimit = creditLimit; return this; } public CreditCardAccountBuilder transactions(Collection<Transaction> transactions) { mTransactions = transactions; return this; } public CreditCardAccount build() { return new BasicCreditCardAccount(mId, mName, mCurrency, mBalance, mCustomAttributes, mCreditLimit, mTransactions); } private class BasicCreditCardAccount extends BasicAccount implements CreditCardAccount { private BigDecimal mCreditLimit; private Collection<Transaction> mTransactions; BasicCreditCardAccount(String id, String name, String currency, BigDecimal balance, Map<String, String> customAttributes, BigDecimal creditLimit, Collection<Transaction> transactions) { super(id, name, currency, balance, customAttributes); mCreditLimit = creditLimit; mTransactions = transactions; } @Override public BigDecimal getCreditLimit() { return mCreditLimit == null ? BigDecimal.ZERO : mCreditLimit; } public Collection<Transaction> getTransactions() { return mTransactions == null ? Collections.<Transaction>emptyList() : mTransactions; } } }