internal void Enforce(ISet <CheckResultProduct2Structure> result, LL.MDE.DataModels.XML.Tag fmStructures)
        {
            foreach (CheckResultProduct2Structure match in result)
            {
                // Extracting variables binded in source domains
                LL.MDE.DataModels.EnAr.Package productP = match.matchDomainProductP.productP;
                string productName = match.matchDomainProductP.productName;
                LL.MDE.DataModels.EnAr.Element productPE = match.matchDomainProductP.productPE;
                string productID = match.matchDomainProductP.productID;
                LL.MDE.DataModels.XML.Tag fmStructureRefs     = match.matchDomainFmStructureRefs.fmStructureRefs;
                LL.MDE.DataModels.XML.Tag fmStructureElements = match.matchDomainFmStructureElements.fmStructureElements;

                // Assigning variables binded in the where clause

                // Enforcing each enforced domain
                MatchDomainFmStructures targetMatchDomainFmStructures = EnforceFmStructures(productID, productName, fmStructures);

                // Retrieving variables binded in the enforced domains
                LL.MDE.DataModels.XML.Tag       fmStructure = targetMatchDomainFmStructures.fmStructure;
                LL.MDE.DataModels.XML.Attribute structureId = targetMatchDomainFmStructures.structureId;
                LL.MDE.DataModels.XML.Tag       longName1   = targetMatchDomainFmStructures.longName1;
                LL.MDE.DataModels.XML.Tag       l41         = targetMatchDomainFmStructures.l41;
                LL.MDE.DataModels.XML.Attribute lAttr1      = targetMatchDomainFmStructures.lAttr1;

                // Calling other relations as defined in the where clause
                new RelationCreateProjectStructureLink(editor, transformation).CheckAndEnforce(structureId, fmStructureRefs); new RelationAddStructureRoot(editor, transformation).CheckAndEnforce(productP, fmStructure, fmStructureElements);
            }
        }
        internal MatchDomainFmStructures EnforceFmStructures(string productID, string productName, LL.MDE.DataModels.XML.Tag fmStructures)
        {
            MatchDomainFmStructures match = new MatchDomainFmStructures();

            // Contructing fmStructures
            LL.MDE.DataModels.XML.Tag fmStructure = null;
            fmStructure = (LL.MDE.DataModels.XML.Tag)editor.CreateNewObjectInField(fmStructures, "childTags");

            // Contructing fmStructure
            editor.AddOrSetInField(fmStructure, "tagname", "FM-STRUCTURE");
            LL.MDE.DataModels.XML.Attribute structureId = null;
            structureId = (LL.MDE.DataModels.XML.Attribute)editor.CreateNewObjectInField(fmStructure, "attributes");

            LL.MDE.DataModels.XML.Tag longName1 = null;
            longName1 = (LL.MDE.DataModels.XML.Tag)editor.CreateNewObjectInField(fmStructure, "childTags");

            // Contructing structureId
            editor.AddOrSetInField(structureId, "name", "ID");
            editor.AddOrSetInField(structureId, "value", productID);

            // Contructing longName1
            editor.AddOrSetInField(longName1, "tagname", "LONG-NAME");
            LL.MDE.DataModels.XML.Tag l41 = null;
            l41 = (LL.MDE.DataModels.XML.Tag)editor.CreateNewObjectInField(longName1, "childTags");

            // Contructing l41
            editor.AddOrSetInField(l41, "tagname", "L-4");
            editor.AddOrSetInField(l41, "value", productName);
            LL.MDE.DataModels.XML.Attribute lAttr1 = null;
            lAttr1 = (LL.MDE.DataModels.XML.Attribute)editor.CreateNewObjectInField(l41, "attributes");

            // Contructing lAttr1
            editor.AddOrSetInField(lAttr1, "name", "L");
            editor.AddOrSetInField(lAttr1, "value", "Product2Structure");

            // Return newly binded variables
            match.fmStructures = fmStructures;
            match.fmStructure  = fmStructure;
            match.structureId  = structureId;
            match.longName1    = longName1;
            match.l41          = l41;
            match.lAttr1       = lAttr1;
            return(match);
        }