package org.jtwig.render.expression.test;
import com.google.common.base.Optional;
import org.jtwig.model.expression.Expression;
import org.jtwig.model.expression.test.TestExpression;
import org.jtwig.model.position.Position;
import org.jtwig.render.RenderRequest;
import org.jtwig.render.expression.test.calculator.TestExpressionCalculator;
import org.jtwig.util.ErrorMessageFormatter;
public class CalculateTestExpressionService {
private final TestExpressionCalculatorSelector selector;
public CalculateTestExpressionService(TestExpressionCalculatorSelector selector) {
this.selector = selector;
}
public Object calculate (RenderRequest request, Position position, TestExpression test, Expression argument) {
Optional<TestExpressionCalculator> optional = selector.calculatorFor(test);
if (optional.isPresent()) {
return optional.get().calculate(request, position, test, argument);
} else {
throw new IllegalArgumentException(ErrorMessageFormatter.errorMessage(position, String.format("Cannot find test calculator for '%s'", test.getClass())));
}
}
}