package com.liato.bankdroid.api.domain.account.impl;
import com.liato.bankdroid.api.domain.account.Equity;
import com.liato.bankdroid.api.domain.account.EquityAccount;
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 EquityAccountBuilder extends AbstractAccountBuilder<EquityAccountBuilder> {
private BigDecimal mCost;
private BigDecimal mRevenue;
private Collection<Equity> mEquities;
public EquityAccountBuilder(String id, String name, String currency) {
super(id, name, currency);
}
protected EquityAccountBuilder self() {
return this;
}
public EquityAccountBuilder cost(BigDecimal cost) {
mCost = cost;
return this;
}
public EquityAccountBuilder revenue(BigDecimal revenue) {
mRevenue = revenue;
return this;
}
public EquityAccountBuilder addEquity(Equity equity) {
if (mEquities == null) {
mEquities = new ArrayList<>();
}
mEquities.add(equity);
return this;
}
public EquityAccountBuilder equities(Collection<Equity> equities) {
mEquities = equities;
return this;
}
public EquityAccount build() {
return new BasicEquityAccount(mId, mName, mCurrency, mBalance, mCustomAttributes, mCost,
mRevenue, mEquities);
}
private class BasicEquityAccount extends BasicAccount implements EquityAccount {
private BigDecimal mCost;
private BigDecimal mRevenue;
private Collection<Equity> mEquities;
private BasicEquityAccount(String id, String name, String currency, BigDecimal balance,
Map<String, String> customAttributes, BigDecimal cost, BigDecimal revenue,
Collection<Equity> equities) {
super(id, name, currency, balance, customAttributes);
mCost = cost;
mRevenue = revenue;
mEquities = equities;
}
@Override
public BigDecimal getBalance() {
//TODO calculate balance from getCost() and getRevenue()
return super.getBalance();
}
@Override
public BigDecimal getCost() {
//TODO calculate cost by summarizing cost of equities collection.
return mCost == null ? BigDecimal.ZERO : mCost;
}
@Override
public BigDecimal getRevenue() {
//TODO calculate revenue by summarizing revenue of equities collection.
return mRevenue == null ? BigDecimal.ZERO : mRevenue;
}
@Override
public double getRevenueAsPercentage() {
return 1 + getRevenue().divide(getCost()).doubleValue();
}
@Override
public Collection<Equity> getEquities() {
return mEquities == null ? Collections.<Equity>emptyList() : mEquities;
}
}
}