package nl.uva.sc.encoders.qlruntime.ui.handler; import java.util.ArrayList; import java.util.List; import nl.uva.sc.encoders.ql.ast.Questionnaire; import nl.uva.sc.encoders.ql.ast.expression.Expression; import nl.uva.sc.encoders.ql.ast.statement.ConditionalBlock; import nl.uva.sc.encoders.ql.ast.statement.Question; import nl.uva.sc.encoders.ql.ast.statement.Statement; import nl.uva.sc.encoders.ql.ast.type.BooleanType; import nl.uva.sc.encoders.ql.ast.type.DataType; import nl.uva.sc.encoders.ql.ast.type.IntegerType; import nl.uva.sc.encoders.ql.ast.type.StringType; import nl.uva.sc.encoders.ql.visitor.DataTypeVisitor; import nl.uva.sc.encoders.ql.visitor.StatementVisitor; import nl.uva.sc.encoders.qlruntime.model.RuntimeQuestion; import nl.uva.sc.encoders.qlruntime.model.value.BooleanValue; import nl.uva.sc.encoders.qlruntime.model.value.IntegerValue; import nl.uva.sc.encoders.qlruntime.model.value.StringValue; import nl.uva.sc.encoders.qlruntime.model.value.Value; public class QuestionnaireToRuntimeQuestions implements StatementVisitor<List<RuntimeQuestion>>, DataTypeVisitor<Value> { public List<RuntimeQuestion> createRuntimeQuestions(Questionnaire questionnaire) { List<Statement> statements = questionnaire.getStatements(); List<RuntimeQuestion> runtimeQuestions = new ArrayList<>(); for (Statement statement : statements) { runtimeQuestions.addAll(statement.accept(this)); } return runtimeQuestions; } @Override public List<RuntimeQuestion> visit(Question question) { ArrayList<RuntimeQuestion> result = new ArrayList<>(); DataType dataType = question.getDataType(); Value defaultValue = dataType.accept(this); result.add(new RuntimeQuestion(question, defaultValue)); return result; } @Override public List<RuntimeQuestion> visit(ConditionalBlock conditionalBlock) { List<RuntimeQuestion> result = new ArrayList<>(); List<Question> questions = conditionalBlock.getQuestions(); Expression condition = conditionalBlock.getCondition(); for (Question question : questions) { DataType dataType = question.getDataType(); Value defaultValue = dataType.accept(this); result.add(new RuntimeQuestion(question, condition, defaultValue)); } return result; } @Override public BooleanValue visit(BooleanType qlBoolean) { return new BooleanValue(false); } @Override public IntegerValue visit(IntegerType qlInteger) { return new IntegerValue(0); } @Override public StringValue visit(StringType qlString) { return new StringValue(""); } }