/* * */ package captor.domainsystem.metamodelvalidator.semanticValidator; import java.util.Iterator; import java.util.List; import captor.domainsystem.DomainSystem; import captor.domainsystem.FormType; import captor.domainsystem.FormsType; import captor.domainsystem.metamodelvalidator.ValidationResults; import captor.domainsystem.metamodelvalidator.semanticValidator.parts.ExtendsPart; import captor.domainsystem.metamodelvalidator.semanticValidator.parts.FormElementPart; import captor.domainsystem.metamodelvalidator.semanticValidator.parts.IdNameAndVariantPart; import captor.domainsystem.metamodelvalidator.semanticValidator.parts.IsRootPart; import captor.domainsystem.metamodelvalidator.semanticValidator.parts.NextPatternsPart; import captor.domainsystem.metamodelvalidator.semanticValidator.parts.PLNamePart; import captor.domainsystem.metamodelvalidator.semanticValidator.parts.PatternsIdsPart; import captor.modelsystem.Model; /** * @author Kicho * */ public class SemanticValidator { private Model model; private DomainSystem d; private ValidationResults vr; private ExtendsPart extendsPart; private NextPatternsPart nextPatternsPart; private FormElementPart formElementPart; private IdNameAndVariantPart idNameAndVariantPart; private PatternsIdsPart patternsIdsPart; private PLNamePart pLNamePart; private IsRootPart isRootPart; public SemanticValidator(Model model, ValidationResults vr) { this.model = model; this.vr = vr; d = new DomainSystem(model); extendsPart = new ExtendsPart(model, vr); nextPatternsPart = new NextPatternsPart(model, vr); formElementPart = new FormElementPart(model, vr); idNameAndVariantPart = new IdNameAndVariantPart(model, vr); patternsIdsPart = new PatternsIdsPart(model, vr); pLNamePart = new PLNamePart(model, vr); isRootPart = new IsRootPart(model, vr); } //------------------------------------------------------------------------- public void validate() { patternsIdsPart.check(model.getProject().getFormsType()); if ( !vr.isSuccess() ) return; pLNamePart.check(model.getProject().getFormsType()); if ( !vr.isSuccess() ) return; isRootPart.check(model.getProject().getFormsType()); if ( !vr.isSuccess() ) return; vr.newLine(); vr.appendBuffer("Validating all form attributes from meta-model."); FormType pt = d.getFirstForm(); if ( pt == null ) { vr.ident(); vr.newLine(); vr.appendBuffer("Cannot find root form in the meta-model."); vr.appendBuffer("The meta-model must contain a form with attribute 'isRoot=true'.\n"); vr.newLine(); vr.appendBuffer("Example: '<form isRoot=\"true\">'."); vr.dident(); vr.setSuccess(false); return; } //pra cada padr�o chamar a valida��o List patternList = model.getProject().getFormsType().getForm(); //isso nao vai acontecer nunca por causa do XMLSchema (mas eu vou deixar s� pra ter certeza) if ( patternList == null ) { vr.ident(); vr.appendBuffer("There are no forms in the meta-model."); vr.dident(); vr.setSuccess(false); return; } for(Iterator it1 = patternList.iterator(); it1.hasNext();) { if ( !vr.isSuccess() ) return; pt = (FormType) it1.next(); validate2(pt, model.getProject().getFormsType()); } vr.newLine(); vr.appendBuffer("Validating all form attributes from meta-model - OK"); return; } //------------------------------------------------------------------------- //------------------------------------------------------------------------- private void validate2(FormType pt, FormsType pts) { vr.ident(); vr.newLine(); vr.appendBuffer("Form id: " + pt.getId()); idNameAndVariantPart.check(pt, pts); if ( !vr.isSuccess() ) return; extendsPart.check(pt); if ( !vr.isSuccess() ) return; nextPatternsPart.check(pt); //ok if ( !vr.isSuccess() ) return; formElementPart.check(pt); if ( !vr.isSuccess() ) return; vr.newLine(); vr.dident(); vr.appendBuffer("Form id validation (" + pt.getId() + ") - OK"); vr.dident(); } //------------------------------------------------------------------------- }