package nl.uva.sc.encoders.qlruntime.model;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.List;
import nl.uva.sc.encoders.ql.ast.expression.Expression;
import nl.uva.sc.encoders.ql.ast.statement.Question;
import nl.uva.sc.encoders.qlruntime.model.value.Value;
public class RuntimeQuestion {
private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
private final Question question;
private final Expression condition;
private Value value;
public RuntimeQuestion(Question question, Value value) {
this(question, null, value);
}
public RuntimeQuestion(Question question, Expression condition, Value value) {
this.question = question;
this.condition = condition;
this.value = value;
}
public Expression getCondition() {
return condition;
}
public Value getValue() {
return value;
}
public void setValue(Value value) {
Object old = this.value;
this.value = value;
pcs.firePropertyChange("value", old, value);
}
@Override
public String toString() {
return question + " " + value;
}
public Question getQuestion() {
return question;
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
this.pcs.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
this.pcs.removePropertyChangeListener(listener);
}
public static RuntimeQuestion getRuntimeQuestion(String name, List<RuntimeQuestion> runtimeQuestions) {
for (RuntimeQuestion runtimeQuestion : runtimeQuestions) {
Question question = runtimeQuestion.getQuestion();
if (questionHasName(question, name)) {
return runtimeQuestion;
}
}
return null;
}
private static boolean questionHasName(Question question, String name) {
return name.equals(question.getName());
}
}