package org.fugazi.ql.ast.form.form_data.visitor;
import org.fugazi.ql.ast.form.Form;
import org.fugazi.ql.ast.statement.ComputedQuestion;
import org.fugazi.ql.ast.statement.Question;
import org.fugazi.ql.ast.type.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
public class ComputedQuestionsVisitor extends StatementsVisitor {
private HashMap<String, Type> computedQuestionTypes;
private List<ComputedQuestion> computedQuestions;
public ComputedQuestionsVisitor(Form _form) {
super(_form);
this.computedQuestions = new ArrayList<>();
this.computedQuestionTypes = new HashMap<>();
}
/**
* =======================
* Visitor methods
* =======================
*/
@Override
public Void visitComputedQuestion(ComputedQuestion question) {
this.saveComputedQuestion(question);
this.saveQuestionType(question);
return null;
}
/**
* =======================
* Private data handling functions
* =======================
*/
private void saveComputedQuestion(ComputedQuestion question) {
this.computedQuestions.add(question);
}
private void saveQuestionType(Question question) {
String idName = question.getIdName();
Type type = question.getType();
this.computedQuestionTypes.put(idName, type);
}
/**
* =======================
* Exposed methods
* =======================
*/
public Iterator<ComputedQuestion> getComputedQuestions() {
if (this.computedQuestions.isEmpty()) {
this.visitForm();
}
return this.computedQuestions.iterator();
}
public HashMap<String, Type> getComputedQuestionTypes() {
if (this.computedQuestionTypes.keySet().isEmpty()) {
this.visitForm();
}
return this.computedQuestionTypes;
}
}