package org.uva.sea.ql.gui.questionaire;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JPanel;
import org.uva.sea.ql.ast.Expression;
import org.uva.sea.ql.evaluate.BooleanValue;
import org.uva.sea.ql.evaluate.EvaluateExpression;
import org.uva.sea.ql.evaluate.Value;
public class ConditionalObserver implements Observer{
private final Expression condition;
private final State state;
private final JPanel trueIf;
private final JPanel falseIf;
public ConditionalObserver(Expression condition, State state, JPanel trueIf, JPanel falseIf){
this.condition = condition;
this.state = state;
this.trueIf = trueIf;
this.falseIf = falseIf;
}
public void update(Observable o, Object arg) {
Value value = condition.accept(new EvaluateExpression(state.getEnvironment()));
boolean visible = value.isDefined() && ((BooleanValue)value).getValue();
trueIf.setVisible(visible);
if (falseIf != null) {
falseIf.setVisible(!visible);
}
}
}