SellCommand.java
package com.tdmconsult.ete.evaluation.commands;
import com.tdmconsult.ete.evaluation.EvaluableTransaction;
import com.tdmconsult.ete.evaluation.EvaluationPosition;
import com.tdmconsult.ete.evaluation.EvaluationState;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@RequiredArgsConstructor
public class SellCommand implements Command {
private final EvaluableTransaction trx;
@Override
public void execute(final EvaluationState state) {
final var sell = new EvaluationPosition(trx);
while (!sell.isFullyConsumed()) {
final var buy = state.getPositions().stream()
.filter(p -> p.getSource().isBuy())
.filter(p -> p.getSecurity().getPublicId().equals(sell.getSecurity().getPublicId()))
.filter(p -> !p.isFullyConsumed())
.findFirst().orElseThrow(() -> new IllegalStateException("leerverkauf"));
sell.consumes(buy);
}
state.getPositions().add(sell);
}
}