package org.jtwig.render.expression.calculator.operation.binary.calculators.selection; import com.google.common.base.Optional; import org.jtwig.model.expression.ConstantExpression; import org.jtwig.model.expression.Expression; import org.jtwig.model.expression.FunctionExpression; import org.jtwig.model.expression.VariableExpression; public class SelectionErrorMessageGenerator { public String explain(Expression leftOperand, Expression rightOperand) { Optional<String> leftName = getName(leftOperand); Optional<String> rightName = getName(rightOperand); if (leftName.isPresent()) { if (rightName.isPresent()) { return String.format("Cannot extract property '%s' out of '%s'", rightName.get(), leftName.get()); } else { return String.format("Cannot extract property out of '%s'", leftName.get()); } } else { if (rightName.isPresent()) { return String.format("Cannot extract property '%s'", rightName.get()); } else { return "Cannot extract property"; } } } private Optional<String> getName(Expression expression) { if (expression instanceof VariableExpression) { return Optional.of(((VariableExpression) expression).getIdentifier()); } if (expression instanceof FunctionExpression) { return Optional.of(((FunctionExpression) expression).getFunctionIdentifier()); } if (expression instanceof ConstantExpression) { return Optional.of(String.valueOf(((ConstantExpression) expression).getConstantValue())); } return Optional.absent(); } }