package org.jtwig.render.expression;
import com.google.common.base.Optional;
import org.jtwig.model.expression.Expression;
import org.jtwig.render.expression.calculator.ExpressionCalculator;
import org.jtwig.util.ErrorMessageFormatter;
import java.util.Map;
public class ExpressionCalculatorSelector {
private final Map<Class<? extends Expression>, ExpressionCalculator> expressionCalculatorMap;
public ExpressionCalculatorSelector(Map<Class<? extends Expression>, ExpressionCalculator> expressionCalculatorMap) {
this.expressionCalculatorMap = expressionCalculatorMap;
}
public ExpressionCalculator calculatorFor (Expression expression) {
Optional<ExpressionCalculator> optional = Optional.fromNullable(expressionCalculatorMap.get(expression.getClass()));
if (optional.isPresent()) {
return optional.get();
} else {
throw new IllegalArgumentException(ErrorMessageFormatter.errorMessage(expression.getPosition(), String.format("No calculator for expression of type %s", expression.getClass())));
}
}
}