package nl.uva.polyql.ast.expressions.operations; import java.util.Set; import nl.uva.polyql.ast.Question; import nl.uva.polyql.ast.expressions.Expression; import nl.uva.polyql.utils.Log; import nl.uva.polyql.validation.InvalidUnaryOperationError; import nl.uva.polyql.validation.ValidationErrors; public class UnaryOperation extends Operation { private final UnaryOperator mOperator; private final Expression mExpression; public UnaryOperation(final String operatorSyntax, final Expression expression) { mOperator = OperatorManager.getUnaryOperator(operatorSyntax); mExpression = expression; if (mOperator == null) { throw new UnsupportedOperationException(); } Log.i("OPERATION " + this); } public UnaryOperator getOperator() { return mOperator; } public Expression getExpression() { return mExpression; } @Override public String toString() { return "(" + mOperator + mExpression + ")"; } @Override public Set<Question> getReferencedQuestions() { return mExpression.getReferencedQuestions(); } private void recalculate() { setValue(mOperator.performOperation(this)); } @Override public ValidationErrors validate() { final ValidationErrors errors = mExpression.validate(); if (!errors.isFatal()) { recalculate(); if (!isValid()) { errors.add(new InvalidUnaryOperationError(this)); } } return errors; } }