package org.nlamah.QLS.View.Controllers;
import java.util.ArrayList;
import java.util.List;
import org.nlamah.QBase.Tools.QLTools;
import org.nlamah.QL.Builders.FragmentedFormElementFinder;
import org.nlamah.QL.Model.Expression.Literal.IdentifierLiteral;
import org.nlamah.QL.Model.Form.Form;
import org.nlamah.QL.Model.Form.Abstract.FormElement;
import org.nlamah.QL.Model.Form.Abstract.FormQuestion;
import org.nlamah.QL.View.Controllers.Abstract.FormElementViewController;
import org.nlamah.QLS.Builders.QLSViewControllersFactory;
import org.nlamah.QLS.Builders.QLSViewFactory;
import org.nlamah.QLS.Model.Abstract.SectionItem;
import org.nlamah.QLS.Model.StylesheetBlock.Section;
import org.nlamah.QLS.Model.StylesheetBlock.StyledQuestion;
import org.nlamah.QLS.View.Stylesheet.SectionView;
public class SectionViewController extends StylesheetViewController
{
private Form form;
private List<FormElementViewController> formElementViewControllers;
private List<SectionViewController> childSectionViewControllers;
public SectionViewController(RootFormViewControllerStyled rootViewController, Form form, Section section, StylesheetViewController parentViewController)
{
super (rootViewController, parentViewController);
this.form = form;
view = new SectionView(section);
createChildViewsAndControllers(section.sectionItems());
}
private void createChildViewsAndControllers(List<? extends SectionItem> sectionItems)
{
childSectionViewControllers = new ArrayList<SectionViewController>();
formElementViewControllers = new ArrayList<FormElementViewController>();
QLSViewControllersFactory viewControllersFactory = new QLSViewControllersFactory(rootViewController());
QLSViewFactory viewFactory = new QLSViewFactory();
for (SectionItem sectionItem : sectionItems)
{
if (sectionItem instanceof StyledQuestion)
{
StyledQuestion styledQuestion = (StyledQuestion) sectionItem;
FormQuestion formQuestion = QLTools.getQuestionWithIdentifier(form.questions(), new IdentifierLiteral(styledQuestion.identifier().toString()));
FragmentedFormElementFinder fragmentedFormElementFinder = new FragmentedFormElementFinder();
FormElement formElement = fragmentedFormElementFinder.findFragementedFormElementForQuestion(formQuestion);
FormElementViewController formElementViewController = viewControllersFactory.createFormElementViewController(formElement);
formElementViewControllers.add(formElementViewController);
view.add(viewFactory.gatherViewForFormViewController(formElementViewController, styledQuestion.styleBlock()));
}
else if (sectionItem instanceof Section)
{
SectionViewController sectionViewController = new SectionViewController(rootViewController(), form, (Section)sectionItem, this);
childSectionViewControllers.add(sectionViewController);
view.add(sectionViewController.view);
}
else
{
assert(false);
}
}
}
@Override
public int neededViewHeight()
{
for (FormElementViewController formElementViewController : formElementViewControllers)
{
formElementViewController.evaluateViewHeight();
}
for (SectionViewController sectionViewController : childSectionViewControllers)
{
sectionViewController.neededViewHeight();
}
((SectionView) view).layoutView();
return view.getPreferredSize().height;
}
}