package org.nlamah.QBase.Builders; import org.nlamah.QBase.Constants.Language; import org.nlamah.QBase.Error.QBaseException; import org.nlamah.QL.Builders.QLFormFragmentiser; import org.nlamah.QL.Builders.QLInterpreter; import org.nlamah.QL.Model.Form.Form; import org.nlamah.QL.TypeChecker.QLTypeChecker; public class FormFactory { private boolean skipTypeChecking; private Language language; public FormFactory(Language language) { this.language = language; } public Form form(String qlSourceCodePath) throws QBaseException { Form form = null; switch (language) { case QL: { form = createBaseForm(qlSourceCodePath); typeCheck(form); break; } case QLS: { form = createBaseForm(qlSourceCodePath); typeCheck(form); form = new QLFormFragmentiser(form).form(); break; } } return form; } private void typeCheck(Form form) throws QBaseException { if (!skipTypeChecking) { QLTypeChecker qlTypeChecker = new QLTypeChecker(); qlTypeChecker.check(form); } } public void skipTypeChecking() { skipTypeChecking = true; } private Form createBaseForm(String qlSourceCodePath) throws QBaseException { QLInterpreter qlInterpreter = new QLInterpreter(); if (skipTypeChecking) { qlInterpreter.skipTypeChecking(); } return qlInterpreter.interprete(qlSourceCodePath); } }