package ql.ast.form; import javax.swing.JPanel; import ql.ast.environment.Environment; import ql.ast.expr.exprType.Expr; import ql.ast.expr.exprType.Ident; import ql.ast.type.Type; import ql.ast.value.Value; import ql.ast.message.Error; public class ComputedQuestion extends Question{ private final Expr expr; public ComputedQuestion(Ident ident, String question, Type type, Expr expr) { super(ident, question,type); this.expr = expr; } public Expr getExpression() { return expr; } @Override public boolean validate(Environment environment) { boolean valid = super.validate(environment); if(valid){ errors.addAll(expr.checkType(environment)); if (expr.getType(environment) != null && expr.getType(environment).getClass() != getType().getClass()) { errors.add(new Error("" + "The type of question " + getIdent() + "(" + getType() + ")" + " is not compatible with the type of expression (" + expr.getType(environment) + ")")); } return errors.size() == 0; } else return false; } @Override public void buildForm(JPanel panel, Environment environment, Form form) { panel.add(super.getQuestionLabel()); panel.add(super.getAnswerComponent().getAnswerField(false, environment, form, super.getIdent()), "span"); } @Override public void eval(Environment environment) { Value exprValue = expr.eval(environment); getAnswerComponent().setAnswerValue(exprValue); environment.addValue(getIdent(), exprValue); } }