EvaluableTransaction.java
package com.tdmconsult.ete.evaluation;
import com.tdmconsult.ete.masterdata.Security;
import com.tdmconsult.ete.transactions.PortfolioTransaction;
import com.tdmconsult.ete.transactions.TradeTransaction;
import jakarta.annotation.Nullable;
import java.math.BigDecimal;
import java.time.LocalDate;
public interface EvaluableTransaction {
PortfolioTransaction getPortfolioTransaction();
BigDecimal getTotalCost();
@Nullable BigDecimal getPrincipleAmount();
Long getQuantity();
boolean isBuy();
boolean isLikeBuy();
boolean isSell();
default String getPublicId() {
return getPortfolioTransaction().getPublicId();
}
default Security getSecurity() {
return getPortfolioTransaction().getSecurity();
}
default LocalDate getTradingDate() {
return getPortfolioTransaction().getTradingDate();
}
static EvaluableTransaction of(final TradeTransaction transaction) {
return new EvaluableTransaction() {
@Override
public PortfolioTransaction getPortfolioTransaction() {
return transaction;
}
@Override
public BigDecimal getTotalCost() {
return transaction.getTotalCost();
}
@Override
public @Nullable BigDecimal getPrincipleAmount() {
return transaction.getPrincipleAmount();
}
@Override
public Long getQuantity() {
return transaction.getQuantity();
}
@Override
public boolean isBuy() {
return transaction.getType() == TradeTransaction.TransactionType.BUY;
}
@Override
public boolean isLikeBuy() {
return transaction.getType() == TradeTransaction.TransactionType.BUY
|| transaction.getType() == TradeTransaction.TransactionType.SPLIT_BUY;
}
@Override
public boolean isSell() {
return transaction.getType() == TradeTransaction.TransactionType.SELL;
}
};
}
}