package net.objectlab.kit.pf.validator;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.List;
import java.util.stream.Collectors;
import net.objectlab.kit.pf.ExistingPortfolioLine;
import net.objectlab.kit.pf.RuleIssue;
import net.objectlab.kit.pf.Severity;
import net.objectlab.kit.pf.ValidatedPortfolioLine;
import net.objectlab.kit.util.BigDecimalUtil;
import net.objectlab.kit.util.StringUtil;
import org.apache.commons.lang.StringUtils;
public class ValidatedPortfolioLineImpl implements ValidatedPortfolioLine {
private final ExistingPortfolioLine line;
private final Results results;
private BigDecimal allocationWeight;
public ValidatedPortfolioLineImpl(final ExistingPortfolioLine line, final Results results) {
this.line = line;
this.results = results;
}
@Override
public String toString() {
StringBuilder b = new StringBuilder();
NumberFormat defaultFormat = NumberFormat.getPercentInstance();
b.append(StringUtils.leftPad(StringUtils.abbreviate(getAssetCode(), 20), 20));
b.append(StringUtils.leftPad(StringUtils.abbreviate(getAssetName(), 30), 31));
b.append(StringUtils.leftPad(StringUtils.abbreviate(BigDecimalUtil.format(getQuantity()), 10), 11));
b.append(StringUtils.leftPad(StringUtils.abbreviate(BigDecimalUtil.format(getValueInPortfolioCcy()), 10), 11));
b.append(StringUtils.leftPad(StringUtils.abbreviate(defaultFormat.format(getAllocationWeight()), 10), 11));
// b.append(StringUtils.leftPad(StringUtils.abbreviate(validation.toString(), 250), 10));
b.append(StringUtil.NEW_LINE);
return b.toString();
}
@Override
public String getAssetCode() {
return line.getAssetCode();
}
@Override
public String getAssetName() {
return line.getAssetName();
}
@Override
public BigDecimal getQuantity() {
return line.getQuantity();
}
@Override
public BigDecimal getPriceInPortfolioCcy() {
return line.getPriceInPortfolioCcy();
}
@Override
public BigDecimal getValueInPortfolioCcy() {
return line.getValueInPortfolioCcy();
}
@Override
public BigDecimal getAllocationWeight() {
return allocationWeight;
}
public void setAllocationWeight(final BigDecimal allocationWeight) {
this.allocationWeight = allocationWeight;
}
public void addIssue(final Severity sev, final String ruleName, final String message) {
results.addIssue(sev, ruleName, message, this);
}
@Override
public boolean isValid() {
return !results.getIssues().stream().anyMatch(t -> t.getLine() == this);
}
@Override
public List<RuleIssue> getIssues() {
return results.getIssues().stream().filter(t -> t.getLine() == this).collect(Collectors.toList());
}
}