package gui.listeners;
import ast.expression.Expression;
import evaluator.BooleanValue;
import evaluator.EvaluatorVisitor;
import evaluator.Value;
import evaluator.ValueRepository;
import gui.questions.IQuestionUI;
public class EvaluateExpression {
private ValueRepository valueRepository;
private final EvaluatorVisitor evaluatorVisitor;
private final Expression expression;
private final IQuestionUI setQuestion;
public EvaluateExpression(ValueRepository valueRepository, Expression expression, IQuestionUI setQuestion) {
this.valueRepository = valueRepository;
this.expression = expression;
this.evaluatorVisitor = new EvaluatorVisitor(this.valueRepository);
this.setQuestion = setQuestion;
setValueInGUI();
}
public Value evaluate() {
Value evaluatedValue = expression.accept(this.evaluatorVisitor);
return evaluatedValue;
}
public void setValueInGUI() {
String insertedValue = evaluate().toString();
String regexDigits ="[-+]?\\d+(\\.\\d+)?";
if (!insertedValue.isEmpty() && insertedValue.matches(regexDigits)) {
this.setQuestion.setValue(evaluate());
}
String trueValue = new BooleanValue(true).toString();
String falseValue = new BooleanValue(false).toString();
if (trueValue.equals(insertedValue) || falseValue.equals(insertedValue)) {
this.setQuestion.setVisibilityValue(evaluate());
}
}
}