package com.liato.bankdroid.api.domain.account.impl;
import com.liato.bankdroid.api.domain.account.LiabilityAccount;
import com.liato.bankdroid.api.domain.account.Payment;
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 LiabilityAccountBuilder extends AbstractAccountBuilder<LiabilityAccountBuilder> {
private double mInterest;
private Collection<Payment> mPayments;
public LiabilityAccountBuilder(String id, String name, String currency) {
super(id, name, currency);
}
protected LiabilityAccountBuilder self() {
return this;
}
public LiabilityAccountBuilder interest(double interest) {
mInterest = interest;
return this;
}
public LiabilityAccountBuilder addPayment(Payment payment) {
if (mPayments == null) {
mPayments = new ArrayList<>();
}
mPayments.add(payment);
return this;
}
public LiabilityAccountBuilder payments(Collection<Payment> payments) {
mPayments = payments;
return this;
}
public LiabilityAccount build() {
return new BasicLiabilityAccount(mId, mName, mCurrency, mBalance, mCustomAttributes,
mInterest, mPayments);
}
private static class BasicLiabilityAccount extends BasicAccount implements LiabilityAccount {
private double mInterest;
private Collection<Payment> mPayments;
private BasicLiabilityAccount(String id, String name, String currency, BigDecimal balance,
Map<String, String> customAttributes, double interest, Collection<Payment> payments) {
super(id, name, currency, balance, customAttributes);
mInterest = interest;
mPayments = payments;
}
@Override
public double getInterest() {
return mInterest;
}
@Override
public Collection<Payment> getPayments() {
return mPayments == null ? Collections.<Payment>emptyList() : mPayments;
}
}
}