package nl.uva.sc.encoders.qls.ast; import java.util.ArrayList; import java.util.Collection; import java.util.List; import nl.uva.sc.encoders.ql.ast.TextLocation; import nl.uva.sc.encoders.qls.visitor.AstVisitor; public class Section extends AstNode { private final String name; private final List<Question> questions; private final List<Section> subSections; private final List<DefaultStyle> sectionDefaultStyles; public Section(TextLocation textLocation, String name, List<Question> questions, List<Section> subSections, List<DefaultStyle> sectionDefaultStyles) { super(textLocation); this.name = name; this.questions = questions; this.subSections = subSections; this.sectionDefaultStyles = sectionDefaultStyles; } public String getName() { return name; } public List<Question> getQuestions() { return questions; } public List<Section> getSubSections() { return subSections; } public List<DefaultStyle> getSectionDefaultStyles() { return sectionDefaultStyles; } public void collectQuestions(Collection<Question> questions) { questions.addAll(this.questions); for (Section subSection : subSections) { subSection.collectQuestions(questions); } } public boolean containsQuestion(String name) { List<Question> questions = new ArrayList<>(); collectQuestions(questions); return questions.stream().anyMatch(question -> question.getName().equals(name)); } public DefaultStyle getDefaultStyle(String questionName) { for (Section subSection : subSections) { if (subSection.containsQuestion(questionName)) { return subSection.getDefaultStyle(questionName); } } if (!sectionDefaultStyles.isEmpty()) { return sectionDefaultStyles.get(0); } return null; } public <T> T accept(AstVisitor<T> visitor) { return visitor.visit(this); } }