package org.nlamah.QL.Builders; import java.util.List; import org.nlamah.QBase.Tools.ArrayTools; import org.nlamah.QL.Interfaces.QLFormElementViewControllerVisitor; import org.nlamah.QL.View.Controllers.ConditionalBlockViewController; import org.nlamah.QL.View.Controllers.ElseIfThenBlockViewController; import org.nlamah.QL.View.Controllers.ElseThenBlockViewController; import org.nlamah.QL.View.Controllers.FormRootViewController; import org.nlamah.QL.View.Controllers.IfThenBlockViewController; import org.nlamah.QL.View.Controllers.QuestionViewController; import org.nlamah.QL.View.Controllers.Abstract.FormElementViewController; public class FormHeightEvaluator implements QLFormElementViewControllerVisitor { private int preferredHeight; private int currentlyCalculatedHeight; public int evaluate(List<FormElementViewController> formElementViewControllers) { preferredHeight = 0; if (ArrayTools.arrayExistsAndHasElements(formElementViewControllers)) { for (FormElementViewController formElementViewController : formElementViewControllers) { formElementViewController.accept(this); } } return preferredHeight; } @Override public void visit(FormRootViewController FormRootViewController) { assert(false); } @Override public void visit(QuestionViewController questionViewController) { questionViewController.view().layoutView(); currentlyCalculatedHeight = questionViewController.evaluateViewHeight(); preferredHeight += currentlyCalculatedHeight; } @Override public void visit(ElseIfThenBlockViewController elseIfThenBlockViewController) { currentlyCalculatedHeight = elseIfThenBlockViewController.evaluateViewHeight(); preferredHeight += currentlyCalculatedHeight; } @Override public void visit(ElseThenBlockViewController elseThenBlockViewController) { currentlyCalculatedHeight = elseThenBlockViewController.evaluateViewHeight(); preferredHeight += currentlyCalculatedHeight; } @Override public void visit(IfThenBlockViewController ifThenBlockViewController) { currentlyCalculatedHeight = ifThenBlockViewController.evaluateViewHeight(); preferredHeight += currentlyCalculatedHeight; } @Override public void visit(ConditionalBlockViewController conditionalBlockViewController) { currentlyCalculatedHeight = conditionalBlockViewController.evaluateViewHeight(); preferredHeight += currentlyCalculatedHeight; } }