package org.fugazi.ql.gui;
import org.fugazi.ql.ast.expression.Expression;
import org.fugazi.ql.ast.statement.ComputedQuestion;
import org.fugazi.ql.ast.statement.IfStatement;
import org.fugazi.ql.evaluator.Evaluator;
import org.fugazi.ql.evaluator.ValueStorage;
import org.fugazi.ql.evaluator.expression_value.BoolValue;
import org.fugazi.ql.evaluator.expression_value.ExpressionValue;
public class GUIEvaluator {
private final Evaluator evaluator;
private final ValueStorage valueStorage;
public GUIEvaluator(ValueStorage _valueStorage) {
this.valueStorage = _valueStorage;
this.evaluator = new Evaluator(valueStorage);
}
private ExpressionValue evaluateComputedQuestion(ComputedQuestion _computedQuest) {
Expression expression = _computedQuest.getComputedExpression();
return evaluator.evaluateExpression(expression);
}
public ExpressionValue evaluateComputedExpression(ComputedQuestion _computedQuest) {
ExpressionValue result = this.evaluateComputedQuestion(_computedQuest);
valueStorage.saveValue(_computedQuest.getIdName(), result);
return result;
}
public boolean evaluateIfStatement(IfStatement _ifStatement) {
Expression condition = _ifStatement.getCondition();
return this.getConditionResult(condition);
}
private boolean getConditionResult(Expression _condition) {
ExpressionValue expressionValue = this.evaluator.evaluateExpression(_condition);
BoolValue result;
if (!expressionValue.isUndefined()) {
result = (BoolValue) expressionValue;
} else {
result = new BoolValue(false);
}
return result.getValue();
}
}