package org.jtwig.render.expression.calculator.operation.unary; import com.google.common.base.Optional; import org.jtwig.exceptions.CalculationException; import org.jtwig.model.expression.UnaryOperationExpression; import org.jtwig.render.RenderRequest; import org.jtwig.render.expression.calculator.operation.unary.calculators.UnaryOperationCalculator; import org.jtwig.util.ErrorMessageFormatter; public class UnaryOperationService { private final UnaryOperationCalculatorSelector unaryOperationCalculatorSelector; public UnaryOperationService(UnaryOperationCalculatorSelector unaryOperationCalculatorSelector) { this.unaryOperationCalculatorSelector = unaryOperationCalculatorSelector; } public Object calculate (RenderRequest request, UnaryOperationExpression expression) { Optional<UnaryOperationCalculator> optional = unaryOperationCalculatorSelector.calculatorFor(expression.getOperator()); if (optional.isPresent()) { return optional.get().calculate(request, expression.getPosition(), expression.getOperand()); } else { throw new CalculationException(ErrorMessageFormatter.errorMessage(expression.getPosition(), String.format("No calculator for operator %s found", expression.getOperator().getClass()))); } } }