package org.nlamah.QL.TypeChecker;
import java.util.ArrayList;
import java.util.List;
import org.nlamah.QBase.Tools.ArrayTools;
import org.nlamah.QL.Interfaces.QLFormElementVisitor;
import org.nlamah.QL.Model.Form.Abstract.FormElement;
import org.nlamah.QL.Model.Form.Abstract.FormQuestion;
import org.nlamah.QL.Model.Form.ComputedQuestion;
import org.nlamah.QL.Model.Form.ConditionalBlock;
import org.nlamah.QL.Model.Form.ElseIfThenBlock;
import org.nlamah.QL.Model.Form.ElseThenBlock;
import org.nlamah.QL.Model.Form.Form;
import org.nlamah.QL.Model.Form.IfThenBlock;
import org.nlamah.QL.Model.Form.InputQuestion;
public class FormQuestionsCollector implements QLFormElementVisitor
{
private List<FormQuestion> questions;
public FormQuestionsCollector(Form form)
{
questions = new ArrayList<FormQuestion>();
form.accept(this);
}
public List<FormQuestion> questions()
{
return questions;
}
@Override
public void visit(Form form)
{
if (ArrayTools.arrayExistsAndHasElements(form.childElements()))
{
for (FormElement childElement : form.childElements())
{
childElement.accept(this);
}
}
}
@Override
public void visit(ElseIfThenBlock elseIfThenBlock)
{
for (FormElement childElement : elseIfThenBlock.childElements())
{
childElement.accept(this);
}
}
@Override
public void visit(ElseThenBlock elseThenBlock)
{
for (FormElement childElement : elseThenBlock.childElements())
{
childElement.accept(this);
}
}
@Override
public void visit(IfThenBlock ifThenBlock)
{
for (FormElement childElement : ifThenBlock.childElements())
{
childElement.accept(this);
}
}
@Override
public void visit(ConditionalBlock conditionalBlock)
{
if (conditionalBlock.ifThenBlock() != null)
{
conditionalBlock.ifThenBlock().accept(this);
}
if (ArrayTools.arrayExistsAndHasElements(conditionalBlock.elseIfThenBlocks()))
{
for (ElseIfThenBlock elseIfThenBlock : conditionalBlock.elseIfThenBlocks())
{
elseIfThenBlock.accept(this);
}
}
if (conditionalBlock.elseThenBlock() != null)
{
conditionalBlock.elseThenBlock().accept(this);
}
}
@Override
public void visit(InputQuestion inputQuestion)
{
questions.add(inputQuestion);
}
@Override
public void visit(ComputedQuestion computedQuestion)
{
questions.add(computedQuestion);
}
}