コード例 #1
0
        private static void printCSPConstraintObject(EA.Element child, EA.Diagram diagram, EA.Repository repository, List <Point> usedPoints)
        {
            SQLRepository     sqlRep = new SQLRepository(repository, false);
            TGGObjectVariable ov     = new TGGObjectVariable(sqlRep.GetElementByID(child.ElementID), sqlRep);

            ov.loadTreeFromTaggedValue();

            int x = 4;
            int y = 1;


            while (usedPoints.Contains(new Point(x, y)))
            {
                y++;
            }

            EA.DiagramObject diagObject = diagram.DiagramObjects.AddNew("", "") as EA.DiagramObject;
            diagObject.ElementID = child.ElementID;
            diagObject.left      = x * 200;
            diagObject.right     = diagObject.left + 125;
            diagObject.top       = y * -100;
            diagObject.bottom    = diagObject.top - 50;
            diagObject.Update();
            usedPoints.Add(new Point(x, y));
        }
コード例 #2
0
        private void addTGGElementToRuleFromSchema(EA.Element elementToBeCopied, EA.DiagramObject diagramObjectToBeCopied)
        {
            EA.Element newElement = newRuleElement.Elements.AddNew(elementToBeCopied.Name.Substring(0, 1).ToLower() + elementToBeCopied.Name.Substring(1, elementToBeCopied.Name.Length - 1), Main.EAObjectType) as EA.Element;
            newElement.ClassifierID = elementToBeCopied.ElementID;
            newElement.Update();

            newElementIdToNewElement.Add(newElement.ElementID, newElement);
            oldElementIdToNewElementId.Add(elementToBeCopied.ElementID, newElement.ElementID);

            EA.DiagramObject newDiagramObject = newRuleDiagram.DiagramObjects.AddNew("", newElement.Type) as EA.DiagramObject;
            newDiagramObject.ElementID = newElement.ElementID;
            newDiagramObject.left      = diagramObjectToBeCopied.left;
            newDiagramObject.right     = diagramObjectToBeCopied.right;
            newDiagramObject.top       = diagramObjectToBeCopied.top;
            newDiagramObject.bottom    = diagramObjectToBeCopied.bottom;
            newDiagramObject.Update();

            SQLElement sqlElement = repository.GetElementByID(newElement.ElementID);

            if (elementToBeCopied.Stereotype == ECOREModeling.ECOREModelingMain.EClassStereotype)
            {
                TGGObjectVariable tggOv = new TGGObjectVariable(sqlElement, repository);
                tggOv.loadTreeFromTaggedValue();
                tggOv.BindingOperator = SDMModeling.SDMExportWrapper.patterns.BindingOperator.CREATE;
                tggOv.saveTreeToEATaggedValue(true);
            }
            else if (elementToBeCopied.Stereotype == TGGModelingMain.TggCorrespondenceTypeStereotype)
            {
                TGGCorrespondence tggCorr = new TGGCorrespondence(sqlElement, repository);
                tggCorr.loadTreeFromTaggedValue();
                tggCorr.BindingOperator = SDMModeling.SDMExportWrapper.patterns.BindingOperator.CREATE;
                tggCorr.saveTreeToEATaggedValue(true);
            }
        }
コード例 #3
0
        private static void printTGGOvObject(SQLElement child, EA.Diagram diagram, EA.Repository repository, List <Point> usedPoints)
        {
            TGGObjectVariable ov = new TGGObjectVariable(child, new SQLRepository(repository, false));

            ov.loadTreeFromTaggedValue();

            int x = 1;
            int y = 1;

            if (ov.domain == DomainType.TARGET)
            {
                x = 3;
            }

            while (usedPoints.Contains(new Point(x, y)))
            {
                y++;
            }

            EA.DiagramObject diagObject = diagram.DiagramObjects.AddNew("", "") as EA.DiagramObject;
            diagObject.ElementID = child.ElementID;
            diagObject.left      = x * 200;
            diagObject.right     = diagObject.left + 125;
            diagObject.top       = y * -100;
            diagObject.bottom    = diagObject.top - 50;
            diagObject.Update();
            usedPoints.Add(new Point(x, y));
        }
コード例 #4
0
        private void onTggOvDoubleClicked(SQLRepository sqlRepository, EA.Element doubleClickedElement)
        {
            TGGObjectVariable tggObjectVariable = new TGGObjectVariable(sqlRepository.GetElementByID(doubleClickedElement.ElementID), sqlRepository);

            this.ObjectVariableDialog = new OvDialog(sqlRepository, tggObjectVariable);
            ObjectVariableDialog.ShowDialog();
        }
コード例 #5
0
        private static DomainType determineDomainUsingPrefixConvention(TGGObjectVariable tggOv, SQLRepository repository)
        {
            if (tggOv.Name.StartsWith("src__"))
            {
                return(DomainType.SOURCE);
            }
            else if (tggOv.Name.StartsWith("trg__"))
            {
                return(DomainType.TARGET);
            }

            return(DomainType.UNDEFINED);
        }
コード例 #6
0
        public static List <ObjectVariable> getTGGObjectVariablesInTggRule(TGGRule tggRule, SQLRepository repository)
        {
            List <ObjectVariable> ovs = new List <ObjectVariable>();
            String tggOvQuery         = repository.SQLQuery("select a.Name, max(a.Classifier) as Classifier from t_object a where a.Stereotype = '" + TGGModelingMain.TggObjectVariableStereotype + "' and a.ParentID = " + tggRule.rule.ElementID + " group by a.Name");

            foreach (String row in EAEcoreAddin.Util.EAUtil.getXMLNodeContentFromSQLQueryString(tggOvQuery, "Row"))
            {
                SQLElement        actOV = new SQLElement(repository, row);
                TGGObjectVariable tggOv = new TGGObjectVariable(actOV, repository);
                ovs.Add(tggOv);
            }
            return(ovs);
        }
コード例 #7
0
        public override List <String> doRule(SQLElement eaElement, SQLWrapperClasses.SQLRepository repository)
        {
            List <String> results = new List <string>();

            if (eaElement.Stereotype == TGGModelingMain.TggObjectVariableStereotype || eaElement.Stereotype == TGGModelingMain.TggCorrespondenceStereotype)
            {
                TGGObjectVariable tggOV  = new TGGObjectVariable(eaElement, repository);
                DomainType        domain = TGGModelingUtil.getDomainOfObjectVariable(repository, tggOV);
                if (domain == DomainType.UNDEFINED)
                {
                    results.Add("Domain of the Object Variable (source or target) cannot be defined. Prefix the name of this object variable with \"src__\" or \"trg__\".");
                }
            }
            return(results);
        }
コード例 #8
0
        public static DomainType getDomainOfLinkVariable(SQLRepository repository, SQLConnector tggLv)
        {
            TGGObjectVariable supplier = new TGGObjectVariable(repository.GetElementByID(tggLv.SupplierID), repository);
            TGGObjectVariable client   = new TGGObjectVariable(repository.GetElementByID(tggLv.ClientID), repository);

            DomainType supplierDom = getDomainOfObjectVariable(repository, supplier);
            DomainType clientDom   = getDomainOfObjectVariable(repository, client);

            if (!supplierDom.Equals(clientDom))
            {
                return(DomainType.CORRESPONDENCE);
            }
            else
            {
                return(supplierDom);
            }
        }
コード例 #9
0
        public MocaNode processTggObjectVariable(SQLElement objectVariable)
        {
            SQLTaggedValue mocaTreeTag = EAEcoreAddin.Util.EAUtil.findTaggedValue(objectVariable, Main.MoflonExportTreeTaggedValueName);

            ObjectVariable ov = null;

            if (objectVariable.Stereotype == TGGModelingMain.TggObjectVariableStereotype)
            {
                ov = new TGGObjectVariable(objectVariable, repository);
            }
            else if (objectVariable.Stereotype == TGGModelingMain.TggCorrespondenceStereotype)
            {
                ov = new TGGCorrespondence(objectVariable, repository);
            }
            SQLElement classifier = repository.GetElementByID(objectVariable.ClassifierID);

            ExportMain.computeAndAddToDependencies(repository, classifier);

            MocaNode ovMocaNode = new MocaNode();

            ovMocaNode.deserializeFromXmlTree(MocaTreeUtil.stringToXmlDocument(mocaTreeTag.Notes).DocumentElement.FirstChild as XmlElement);

            ov.addAttributesDuringExport(ovMocaNode);

            this.currentNode.appendChildNode(ovMocaNode);

            foreach (SQLConnector linkVariable in objectVariable.Connectors)
            {
                try
                {
                    SQLElement source = repository.GetElementByID(linkVariable.ClientID);
                    SQLElement target = repository.GetElementByID(linkVariable.SupplierID);

                    if ((linkVariable.Stereotype == TGGModelingMain.TggLinkVariableStereotype || linkVariable.Type == Main.EAAssociationType) && linkVariable.ClientID == objectVariable.ElementID)
                    {
                        this.currentNode = ovMocaNode.getChildNodeWithName(ObjectVariable.OutgoingLinksNodeName);
                        processTggLinkVariable(linkVariable);
                    }
                }
                catch
                {
                }
            }
            return(ovMocaNode);
        }
コード例 #10
0
        private static DomainType determineDomainSimple(SQLRepository repository, TGGObjectVariable tggOv)
        {
            if (tggOv.sqlElement.Stereotype == TGGModelingMain.TggCorrespondenceStereotype)
            {
                return(DomainType.CORRESPONDENCE);
            }

            EClass classifierElement = tggOv.Classifier;

            if (classifierElement != null)
            {
                SQLElement eClass          = repository.GetElementByID(classifierElement.EaElement.ElementID);
                SQLPackage wantedDomainPkg = repository.GetPackageByID(eClass.PackageID);
                while (!wantedDomainPkg.IsModel)
                {
                    wantedDomainPkg = repository.GetPackageByID(wantedDomainPkg.ParentID);
                }

                SQLPackage tggPackage = repository.GetPackageByID(tggOv.sqlElement.PackageID);
                while (!tggPackage.IsModel)
                {
                    tggPackage = repository.GetPackageByID(tggPackage.ParentID);
                }

                TGG tgg = new TGG(repository, tggPackage);
                tgg.loadTreeFromTaggedValue();

                // source metamodel == target metamodel
                if (tgg.getDomain(DomainType.SOURCE).MetamodelGuid == tgg.getDomain(DomainType.TARGET).MetamodelGuid)
                {
                    return(determineDomainUsingPrefixConvention(tggOv, repository));
                }

                if (wantedDomainPkg.PackageGUID == tgg.getDomain(DomainType.SOURCE).MetamodelGuid)
                {
                    return(DomainType.SOURCE);
                }
                else if (wantedDomainPkg.PackageGUID == tgg.getDomain(DomainType.TARGET).MetamodelGuid)
                {
                    return(DomainType.TARGET);
                }
            }

            return(determineDomainUsingPrefixConvention(tggOv, repository));
        }
コード例 #11
0
        public static ObjectVariable createCorrectOvType(SQLElement eaElement, SQLRepository repository)
        {
            ObjectVariable ov = null;

            if (eaElement.Stereotype == SDMModelingMain.ObjectVariableStereotype)
            {
                ov = new ObjectVariable(eaElement, repository);
            }
            else if (eaElement.Stereotype == TGGModelingMain.TggObjectVariableStereotype)
            {
                ov = new TGGObjectVariable(eaElement, repository);
            }
            else if (eaElement.Stereotype == TGGModelingMain.TggCorrespondenceStereotype)
            {
                ov = new TGGCorrespondence(eaElement, repository);
            }
            return(ov);
        }
コード例 #12
0
        private static DomainType determineDomainUsingDirectCorrespondence(TGGObjectVariable tggOv, SQLRepository repository)
        {
            int itsID = tggOv.sqlElement.ElementID;

            foreach (SQLConnector connector in tggOv.sqlElement.Connectors)
            {
                if (connector.ClientID == itsID && connector.ClientEnd.Role == "target")
                {
                    TGGObjectVariable potentialCorr = new TGGObjectVariable(repository.GetElementByID(connector.SupplierID), repository);
                    if (getDomainOfObjectVariable(repository, potentialCorr) == DomainType.CORRESPONDENCE)
                    {
                        return(DomainType.TARGET);
                    }
                }

                else if (connector.SupplierID == itsID && connector.SupplierEnd.Role == "target")
                {
                    TGGObjectVariable potentialCorr = new TGGObjectVariable(repository.GetElementByID(connector.ClientID), repository);
                    if (getDomainOfObjectVariable(repository, potentialCorr) == DomainType.CORRESPONDENCE)
                    {
                        return(DomainType.TARGET);
                    }
                }

                else if (connector.ClientID == itsID && connector.ClientEnd.Role == "source")
                {
                    TGGObjectVariable potentialCorr = new TGGObjectVariable(repository.GetElementByID(connector.SupplierID), repository);
                    if (getDomainOfObjectVariable(repository, potentialCorr) == DomainType.CORRESPONDENCE)
                    {
                        return(DomainType.SOURCE);
                    }
                }

                else if (connector.SupplierID == itsID && connector.SupplierEnd.Role == "source")
                {
                    TGGObjectVariable potentialCorr = new TGGObjectVariable(repository.GetElementByID(connector.ClientID), repository);
                    if (getDomainOfObjectVariable(repository, potentialCorr) == DomainType.CORRESPONDENCE)
                    {
                        return(DomainType.SOURCE);
                    }
                }
            }
            return(DomainType.UNDEFINED);
        }
コード例 #13
0
 public override void doRuleQuickFix(SQLElement eaElement, SQLWrapperClasses.SQLRepository repository, int i, String errorMessage)
 {
     if (errorMessage == "AttributeAssignments and BindingOperator check_only is not allowed")
     {
         if (i == 0)
         {
             TGGObjectVariable tggOv = new TGGObjectVariable(eaElement, repository);
             tggOv.loadTreeFromTaggedValue();
             TGGModelingUtil.assignmentsToConstraints(tggOv, repository);
             tggOv.saveTreeToEATaggedValue(true);
         }
         else if (i == 1)
         {
             TGGObjectVariable tggOv = new TGGObjectVariable(eaElement, repository);
             tggOv.loadTreeFromTaggedValue();
             tggOv.BindingOperator = BindingOperator.CREATE;
             tggOv.saveTreeToEATaggedValue(true);
         }
     }
 }
コード例 #14
0
        private static DomainType determineDomainUsingConnectivity(TGGObjectVariable tggOv, SQLRepository repository, HashSet <int> alreadyVisited)
        {
            alreadyVisited.Add(tggOv.sqlElement.ElementID);

            DomainType result = DomainType.UNDEFINED;

            result = determineDomainSimple(repository, tggOv);
            if (result != DomainType.UNDEFINED)
            {
                return(result);
            }

            result = determineDomainUsingDirectCorrespondence(tggOv, repository);
            if (result != DomainType.UNDEFINED)
            {
                return(result);
            }

            int itsID = tggOv.sqlElement.ElementID;

            foreach (SQLConnector connector in tggOv.sqlElement.Connectors)
            {
                SQLElement client    = repository.GetElementByID(connector.ClientID);
                SQLElement supplier  = repository.GetElementByID(connector.SupplierID);
                SQLElement neighbour = client.ElementID == itsID ? supplier : client;

                if (!alreadyVisited.Contains(neighbour.ElementID) && neighbour.Stereotype == TGGModelingMain.TggObjectVariableStereotype)
                {
                    DomainType neigbourDomain = determineDomainUsingConnectivity(new TGGObjectVariable(neighbour, repository), repository, alreadyVisited);
                    if (neigbourDomain != DomainType.UNDEFINED)
                    {
                        return(neigbourDomain);
                    }
                }
            }

            return(DomainType.UNDEFINED);
        }
コード例 #15
0
        public bool EA_OnPostNewElement(SQLRepository sqlRepository, EA.Element newElement, EA.Diagram currentDiagram)
        {
            EA.Repository repository = sqlRepository.GetOriginalRepository();

            try
            {
                //a correspondence is created as an instance of CorrespondenceType
                //Therefore its stereotype is at first time "CorrespondenceType"
                //but we want to change it to "Correspondence"

                if (TGGModelingMain.TggRuleDiagramMetatype.Contains(currentDiagram.MetaType))
                {
                    sqlRepository.SuppressEADialogs = true;

                    if (newElement.Type == Main.EAObjectType)
                    {
                        TGGObjectVariable tggOv = null;

                        //drag & drop is used
                        if (newElement.ClassifierID != 0)
                        {
                            SQLElement classifier = sqlRepository.GetElementByID(newElement.ClassifierID);
                            if (classifier.Stereotype == ECOREModelingMain.EClassStereotype)
                            {
                                tggOv                     = new TGGObjectVariable(sqlRepository.GetElementByID(newElement.ElementID), sqlRepository);
                                tggOv.Name                = classifier.Name.ToLower().Substring(0, 1) + classifier.Name.Substring(1, classifier.Name.Length - 1);
                                tggOv.BindingOperator     = BindingOperator.CREATE;
                                this.ObjectVariableDialog = new OvDialog(sqlRepository, tggOv);
                                ObjectVariableDialog.ShowDialog();
                            }
                            else if (classifier.Stereotype == TGGModelingMain.TggCorrespondenceTypeStereotype)
                            {
                                tggOv                     = new TGGCorrespondence(sqlRepository.GetElementByID(newElement.ElementID), sqlRepository);
                                tggOv.Name                = classifier.Name.ToLower().Substring(0, 1) + classifier.Name.Substring(1, classifier.Name.Length - 1);
                                tggOv.BindingOperator     = BindingOperator.CREATE;
                                this.ObjectVariableDialog = new OvDialog(sqlRepository, tggOv);
                                ObjectVariableDialog.ShowDialog();
                            }
                        }
                        else
                        {
                            //toolbox is used
                            if (newElement.Stereotype == TGGModelingMain.TggObjectVariableStereotype)
                            {
                                tggOv = new TGGObjectVariable(sqlRepository.GetElementByID(newElement.ElementID), sqlRepository);
                                this.ObjectVariableDialog = new OvDialog(sqlRepository, tggOv);
                                ObjectVariableDialog.ShowDialog();
                            }
                            else if (newElement.Stereotype == TGGModelingMain.TggCorrespondenceStereotype)
                            {
                                tggOv = new TGGCorrespondence(sqlRepository.GetElementByID(newElement.ElementID), sqlRepository);
                                this.ObjectVariableDialog = new OvDialog(sqlRepository, tggOv);
                                this.ObjectVariableDialog.ShowDialog();
                            }
                            else if (newElement.Stereotype == SDMModelingMain.CSPInstanceStereotype)
                            {
                                TGG tggPackage = new TGG(sqlRepository, EAUtil.getOutermostPackage(newElement, sqlRepository));
                                tggPackage.loadTreeFromTaggedValue();

                                CSPInstanceDialog cspInstanceDialog = new CSPInstanceDialog(sqlRepository, sqlRepository.GetElementByID(newElement.ElementID), new TGGCSPController(tggPackage));
                                cspInstanceDialog.ShowDialog();
                            }
                        }
                    }
                }
                else if (TGGModelingMain.TggRulesDiagramMetatype.Contains(currentDiagram.MetaType))
                {
                    sqlRepository.SuppressEADialogs = true;
                    if (newElement.Type == Main.EAClassType && (newElement.Stereotype == TGGModelingMain.TggRuleStereotype))
                    {
                        newElement = EAUtil.sqlEAObjectToOriginalObject(sqlRepository, newElement) as EA.Element;

                        EA.Diagram ruleDiagram = newElement.Diagrams.AddNew(newElement.Name, TGGModelingMain.TggRuleDiagramMetatype[0]) as EA.Diagram;
                        ruleDiagram.Update();

                        EA_OnNotifyContextItemModified(sqlRepository.GetOriginalRepository(), newElement.ElementGUID, EA.ObjectType.otElement);
                    }
                }
                else if (TGGModelingMain.TggPatternsDiagramMetatype.Contains(currentDiagram.MetaType))
                {
                    sqlRepository.SuppressEADialogs = true;
                }
            }
            catch
            {
            }
            return(true);
        }
コード例 #16
0
        private void addElementCopyToRule(EA.Element elementToBeCopied, EA.DiagramObject diagramObjectToBeCopied)
        {
            EA.Element newElement = newRuleElement.Elements.AddNew(elementToBeCopied.Name.Substring(0, 1).ToLower() + elementToBeCopied.Name.Substring(1, elementToBeCopied.Name.Length - 1), elementToBeCopied.Type) as EA.Element;
            newElement.Stereotype   = elementToBeCopied.Stereotype;
            newElement.ClassifierID = elementToBeCopied.ClassifierID;
            newElement.Notes        = elementToBeCopied.Notes;
            newElement.Update();

            newElementIdToNewElement.Add(newElement.ElementID, newElement);
            oldElementIdToNewElementId.Add(elementToBeCopied.ElementID, newElement.ElementID);

            foreach (EA.TaggedValue tags in elementToBeCopied.TaggedValues)
            {
                EA.TaggedValue newTag = newElement.TaggedValues.AddNew(tags.Name, "") as EA.TaggedValue;
                if (!checkBoxExactCopy.Checked)
                {
                    newTag.Value = tags.Value.Replace(elementToBeCopied.ElementGUID, newElement.ElementGUID).Replace("create", "check_only");
                    newTag.Notes = tags.Notes.Replace(elementToBeCopied.ElementGUID, newElement.ElementGUID).Replace("\"bindingOperator\" value=\"create", "\"bindingOperator\" value=\"check_only");
                }
                else
                {
                    newTag.Value = tags.Value;
                    newTag.Notes = tags.Notes;
                }
                newTag.Update();
            }

            EA.DiagramObject newDiagramObject = newRuleDiagram.DiagramObjects.AddNew("", newElement.Type) as EA.DiagramObject;
            newDiagramObject.ElementID = newElement.ElementID;
            newDiagramObject.left      = diagramObjectToBeCopied.left;
            newDiagramObject.right     = diagramObjectToBeCopied.right;
            newDiagramObject.top       = diagramObjectToBeCopied.top;
            newDiagramObject.bottom    = diagramObjectToBeCopied.bottom;
            newDiagramObject.Update();


            if (newElement.Stereotype == TGGModelingMain.TggObjectVariableStereotype)
            {
                TGGObjectVariable tggOv = new TGGObjectVariable(repository.GetElementByID(newElement.ElementID), repository);
                tggOv.loadTreeFromTaggedValue();
                if (!checkBoxExactCopy.Checked)
                {
                    tggOv.BindingOperator = SDMModeling.SDMExportWrapper.patterns.BindingOperator.CHECK_ONLY;
                    TGGModelingUtil.assignmentsToConstraints(tggOv, repository);
                }
                tggOv.saveTreeToEATaggedValue(true);
            }
            else if (newElement.Stereotype == TGGModelingMain.TggCorrespondenceStereotype)
            {
                TGGCorrespondence tggCorr = new TGGCorrespondence(repository.GetElementByID(newElement.ElementID), repository);
                tggCorr.loadTreeFromTaggedValue();
                if (!checkBoxExactCopy.Checked)
                {
                    tggCorr.BindingOperator = SDMModeling.SDMExportWrapper.patterns.BindingOperator.CHECK_ONLY;
                    TGGModelingUtil.assignmentsToConstraints(tggCorr, repository);
                }
                tggCorr.saveTreeToEATaggedValue(true);
            }
            else if (newElement.Stereotype == TGGModelingMain.CSPConstraintStereotype)
            {
                CSPInstance instance = new CSPInstance(repository, repository.GetElementByID(newElement.ElementID));
                instance.loadTreeFromTaggedValue();
                instance.saveTreeToEATaggedValue(true);
            }
        }
コード例 #17
0
 public TggOvExpressionProvider(TGGObjectVariable ov, SQLRepository repository)
     : base(ov, repository)
 {
 }
コード例 #18
0
 public static DomainType getDomainOfObjectVariable(SQLRepository repository, TGGObjectVariable tggOv)
 {
     return(determineDomainUsingConnectivity(tggOv, repository, new HashSet <int>()));
 }
コード例 #19
0
        private void importRule(SQLPackage modelPackage, MocaNode ruleNode)
        {
            EA.Element ruleElement = MainImport.getInstance().EcoreImport.getOrCreateElement(modelPackage, ruleNode, Main.EAClassType);

            if (ruleElement.Diagrams.Count == 0)
            {
                EA.Diagram ruleDiagram = ruleElement.Diagrams.AddNew(ruleElement.Name, TGGModelingMain.TggRuleDiagramMetatype[0]) as EA.Diagram;
                ruleDiagram.Update();
                MainImport.getInstance().DiagramsToBeFilled.Add(ruleDiagram);
            }

            EA.Method mainMethod = MainImport.getInstance().EcoreImport.getOrCreateMethod(sqlRep.GetElementByID(ruleElement.ElementID), ruleNode.getAttributeOrCreate("mainMethodGuid").Value, ruleElement.Name, "");

            MocaNode parametersNode = ruleNode.getChildNodeWithName(EOperation.ParametersChildNodeName);

            if (parametersNode != null)
            {
                foreach (MocaNode paramNode in parametersNode.Children)
                {
                    EA.Parameter parameter = MainImport.getInstance().EcoreImport.getOrCreateParameter(mainMethod, paramNode);

                    MainImport.getInstance().OldGuidToNewGuid.Add(paramNode.getAttributeOrCreate(Main.GuidStringName).Value, parameter.ParameterGUID);
                }
            }

            EClass eClass = MainImport.getInstance().EcoreImport.importEClassFeatures(ruleNode, sqlRep.GetElementByID(ruleElement.ElementID));

            MainImport.getInstance().MocaTaggableElements.Remove(eClass);
            TGGRule rule = new TGGRule(sqlRep, sqlRep.GetElementByID(ruleElement.ElementID));

            rule.deserializeFromMocaTree(ruleNode);

            MainImport.getInstance().MocaTaggableElements.Add(rule);

            foreach (MocaNode ovNode in ruleNode.getChildNodeWithName(StoryPattern.ObjectVariablesChildNodeName).Children)
            {
                if (ovNode.Name == TGGModelingMain.TggObjectVariableStereotype)
                {
                    ObjectVariable ov = MainImport.getInstance().SdmImport.importObjectVariable(sqlRep.GetElementByID(ruleElement.ElementID), ovNode);
                    MainImport.getInstance().MocaTaggableElements.Remove(ov);
                    ov = new TGGObjectVariable(ov.sqlElement, sqlRep);
                    ov.deserializeFromMocaTree(ovNode);
                    MainImport.getInstance().MocaTaggableElements.Add(ov);
                }
                else if (ovNode.Name == TGGCorrespondence.CorrespondenceNodeName)
                {
                    ObjectVariable ov = MainImport.getInstance().SdmImport.importObjectVariable(sqlRep.GetElementByID(ruleElement.ElementID), ovNode);
                    MainImport.getInstance().MocaTaggableElements.Remove(ov);
                    ov = new TGGCorrespondence(ov.sqlElement, sqlRep);
                    ov.deserializeFromMocaTree(ovNode);
                    MainImport.getInstance().MocaTaggableElements.Add(ov);
                }
            }

            MocaNode cspsNode = ruleNode.getChildNodeWithName(TGGRule.CspsChildNodeName);

            if (cspsNode != null)
            {
                foreach (MocaNode cspInstanceNode in cspsNode.Children)
                {
                    importTGGCSP(sqlRep.GetElementByID(ruleElement.ElementID), cspInstanceNode);
                }
            }
            else
            {
                if (ruleNode.getAttributeOrCreate(TGGRule.CspSpecAttributeName).Value != "")
                {
                    EA.Element constraintElement = ruleElement.Elements.AddNew("", Main.EAClassType) as EA.Element;
                    constraintElement.Stereotype = TGGModelingMain.CSPConstraintStereotype;
                    constraintElement.Notes      = ruleNode.getAttributeOrCreate(TGGRule.CspSpecAttributeName).Value;
                    constraintElement.Update();

                    CSPInstance cspInstance = new CSPInstance(sqlRep, sqlRep.GetElementByID(constraintElement.ElementID));
                    cspInstance.CspStringValueFromImport = ruleNode.getAttributeOrCreate(TGGRule.CspSpecAttributeName).Value;
                    MainImport.getInstance().MocaTaggableElements.Add(cspInstance);
                }
            }
        }