package com.liato.bankdroid.api.domain.account.impl;
import com.liato.bankdroid.api.domain.account.Equity;
import java.math.BigDecimal;
public class EquityBuilder {
private BasicEquity mEquity;
public EquityBuilder(BigDecimal cost, BigDecimal revenue, String currency) {
mEquity = new BasicEquity(cost, revenue, currency);
}
/**
*
* @param balance Current balance of the equity.
* @param revenue The revenue in percentage. A value less than 1 is a loss
* and a value greater than one is a profit. e.g. {@code 0.75} represents
* a 25 % loss, while {@code 1.5} is 50 % profit.
* @param currency The currency of the equity.
*/
public EquityBuilder(BigDecimal balance, double revenue, String currency) {
mEquity = new BasicEquity(costFromBalanceAndRevenue(balance, revenue),
revenueFromBalanceAndRevenueAsPerecntage(balance, revenue), currency);
}
public EquityBuilder name(String name) {
mEquity.mName = name;
return this;
}
public EquityBuilder quantity(double quantity) {
mEquity.mQuantity = quantity;
return this;
}
public Equity build() {
return mEquity;
}
private BigDecimal costFromBalanceAndRevenue(BigDecimal balance, double revenue) {
return balance.divide(BigDecimal.valueOf(revenue));
}
private BigDecimal revenueFromBalanceAndRevenueAsPerecntage(BigDecimal balance, double revenue) {
return balance.subtract(balance.divide(BigDecimal.valueOf(revenue)));
}
private static class BasicEquity implements Equity {
private String mName;
private String mCurrency;
private double mQuantity;
private BigDecimal mCost;
private BigDecimal mRevenue;
private BasicEquity(BigDecimal cost, BigDecimal revenue, String currency) {
mCost = cost;
mRevenue = revenue;
mCurrency = currency;
}
@Override
public String getName() {
return mName;
}
@Override
public String getCurrency() {
return mCurrency;
}
@Override
public double getQuantity() {
return mQuantity;
}
@Override
public BigDecimal getCost() {
return mCost == null ? BigDecimal.ZERO : mCost;
}
@Override
public BigDecimal getRevenue() {
return mRevenue == null ? BigDecimal.ZERO : mRevenue;
}
@Override
public double getRevenueAsPercentage() {
return 1 + getRevenue().divide(getCost()).doubleValue();
}
@Override
public BigDecimal getBalance() {
return getCost().add(getRevenue());
}
}
}