package org.nlamah.QL.Builders;
import org.nlamah.QL.Interfaces.QLNodeVisitor;
import org.nlamah.QL.Model.Expression.Binary.AddExpression;
import org.nlamah.QL.Model.Expression.Binary.AndExpression;
import org.nlamah.QL.Model.Expression.Binary.DivideExpression;
import org.nlamah.QL.Model.Expression.Binary.EqualExpression;
import org.nlamah.QL.Model.Expression.Binary.GreaterThanEqualExpression;
import org.nlamah.QL.Model.Expression.Binary.GreaterThanExpression;
import org.nlamah.QL.Model.Expression.Binary.MultiplyExpression;
import org.nlamah.QL.Model.Expression.Binary.OrExpression;
import org.nlamah.QL.Model.Expression.Binary.SmallerThanEqualExpression;
import org.nlamah.QL.Model.Expression.Binary.SmallerThanExpression;
import org.nlamah.QL.Model.Expression.Binary.SubtractExpression;
import org.nlamah.QL.Model.Expression.Binary.UnEqualExpression;
import org.nlamah.QL.Model.Expression.Literal.BooleanLiteral;
import org.nlamah.QL.Model.Expression.Literal.IdentifierLiteral;
import org.nlamah.QL.Model.Expression.Literal.NumberLiteral;
import org.nlamah.QL.Model.Expression.Literal.TextLiteral;
import org.nlamah.QL.Model.Expression.Unary.MinusExpression;
import org.nlamah.QL.Model.Expression.Unary.NotExpression;
import org.nlamah.QL.Model.Expression.Unary.PlusExpression;
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;
import org.nlamah.QL.Model.Form.Abstract.FormElement;
import org.nlamah.QL.Model.Form.Abstract.FormQuestion;
import org.nlamah.QL.Model.Form.Abstract.QLNode;
public class FragmentedFormElementFinder implements QLNodeVisitor
{
private FormElement lastVisitedFormElement;
public FormElement findFragementedFormElementForQuestion(FormQuestion question)
{
question.accept(this);
assert(lastVisitedFormElement != null);
return lastVisitedFormElement;
}
@Override
public QLNode visit(AddExpression addExpression)
{
addExpression.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(AndExpression andExpression)
{
andExpression.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(DivideExpression divideExpression)
{
divideExpression.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(EqualExpression equalExpression)
{
equalExpression.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(GreaterThanExpression greaterThanExpression)
{
greaterThanExpression.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(GreaterThanEqualExpression greaterThanEqualExpression)
{
greaterThanEqualExpression.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(MultiplyExpression multiplyExpression)
{
multiplyExpression.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(OrExpression orExpression)
{
orExpression.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(SmallerThanExpression smallerThanExpression)
{
smallerThanExpression.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(SmallerThanEqualExpression smallerThanEqualExpression)
{
smallerThanEqualExpression.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(SubtractExpression subtractExpression)
{
subtractExpression.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(UnEqualExpression unEqualExpression)
{
unEqualExpression.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(BooleanLiteral booleanLiteral)
{
booleanLiteral.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(IdentifierLiteral identifierLiteral)
{
identifierLiteral.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(NumberLiteral numberLiteral)
{
numberLiteral.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(TextLiteral textLiteral)
{
textLiteral.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(MinusExpression minusExpression)
{
minusExpression.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(NotExpression notExpression)
{
notExpression.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(PlusExpression plusExpression)
{
plusExpression.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(ConditionalBlock conditionalBlock)
{
lastVisitedFormElement = conditionalBlock;
conditionalBlock.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(ElseIfThenBlock elseIfThenBlock)
{
lastVisitedFormElement = elseIfThenBlock;
elseIfThenBlock.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(ElseThenBlock elseThenBlock)
{
lastVisitedFormElement = elseThenBlock;
elseThenBlock.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(Form form)
{
return null;
}
@Override
public QLNode visit(IfThenBlock ifThenBlock)
{
lastVisitedFormElement = ifThenBlock;
ifThenBlock.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(InputQuestion inputQuestion)
{
lastVisitedFormElement = inputQuestion;
inputQuestion.parentNode().accept(this);
return null;
}
@Override
public QLNode visit(ComputedQuestion computedQuestion)
{
lastVisitedFormElement = computedQuestion;
computedQuestion.parentNode().accept(this);
return null;
}
}