package org.nlamah.QL.Builders; import org.nlamah.QBase.Tools.ArrayTools; import org.nlamah.QL.Model.Form.ConditionalBlock; import org.nlamah.QL.View.Controllers.ConditionalBlockAllViewController; import org.nlamah.QL.View.Controllers.ConditionalBlockIfElseIfViewController; import org.nlamah.QL.View.Controllers.ConditionalBlockIfElseViewController; import org.nlamah.QL.View.Controllers.ConditionalBlockIfViewController; import org.nlamah.QL.View.Controllers.ConditionalBlockViewController; public class ConditionalBlockViewControllerFactory { static public ConditionalBlockViewController createConditionalBlockViewController(ConditionalBlock conditionalBlock) { boolean ifThenBlockExists = ifThenBlockExists(conditionalBlock); boolean elseIfThenBlocksExist = elseIfThenBlocksExist(conditionalBlock); boolean elseThenBlockExists = elseThenBlockExists(conditionalBlock); if (ifThenBlockExists && elseIfThenBlocksExist && elseThenBlockExists) { return new ConditionalBlockAllViewController(conditionalBlock); } if (ifThenBlockExists && !elseIfThenBlocksExist && elseThenBlockExists) { return new ConditionalBlockIfElseViewController(conditionalBlock); } if (ifThenBlockExists && elseIfThenBlocksExist && !elseThenBlockExists) { return new ConditionalBlockIfElseIfViewController(conditionalBlock); } if (ifThenBlockExists && !elseIfThenBlocksExist && !elseThenBlockExists) { return new ConditionalBlockIfViewController(conditionalBlock); } if (ifThenBlockExists && !elseIfThenBlocksExist && !elseThenBlockExists) { assert false; } if (!ifThenBlockExists && (elseIfThenBlocksExist || elseThenBlockExists)) { assert false; } return null; } static private boolean ifThenBlockExists(ConditionalBlock conditionalBlock) { return conditionalBlock.ifThenBlock() != null; } static private boolean elseIfThenBlocksExist(ConditionalBlock conditionalBlock) { return ArrayTools.arrayExistsAndHasElements(conditionalBlock.elseIfThenBlocks()); } static private boolean elseThenBlockExists(ConditionalBlock conditionalBlock) { return conditionalBlock.elseThenBlock() != null; } }