package nl.uva.polyql.ast.expressions; import java.util.HashSet; import java.util.Set; import nl.uva.polyql.ast.Question; import nl.uva.polyql.ast.RuleContainer; import nl.uva.polyql.ast.values.Type; import nl.uva.polyql.ast.values.Value; import nl.uva.polyql.validation.UnknownIdError; import nl.uva.polyql.validation.ValidationErrors; public class QuestionAtom extends Expression { private final String mQuestionId; private final Question mQuestion; public QuestionAtom(final RuleContainer parentRuleContainer, final String id) { mQuestionId = id; mQuestion = parentRuleContainer.getQuestion(id); } public String getId() { return mQuestionId; } @Override public Type getReturnType() { return mQuestion.getType(); } @Override public Value<?> getValue() { return mQuestion.getValue(); } @Override public String toString() { return (mQuestion != null ? mQuestion.getId() : "No ID"); } @Override public Set<Question> getReferencedQuestions() { final Set<Question> questions = new HashSet<>(); if (mQuestion != null) { questions.add(mQuestion); } return questions; } @Override public ValidationErrors validate() { final ValidationErrors errors = new ValidationErrors(); if (mQuestion == null) { errors.add(new UnknownIdError(this)); } return errors; } @Override public boolean isValid() { return getReturnType() != Type.INVALID; } }