コード例 #1
0
        private void processTggRule(SQLElement ruleClass)
        {
            //this.exportProgressBar.invokePerformNext("exporting EClass: " + eaClass.Name);
            SQLTaggedValue mocaTreeTag = EAEcoreAddin.Util.EAUtil.findTaggedValue(ruleClass, Main.MoflonExportTreeTaggedValueName);
            TGGRule        tggRule     = new TGGRule(repository, ruleClass);

            tggRule.loadTreeFromTaggedValue();
            MocaNode tggRuleMocaNode = new MocaNode();

            tggRuleMocaNode.deserializeFromXmlTree(MocaTreeUtil.stringToXmlDocument(mocaTreeTag.Notes).DocumentElement.FirstChild as XmlElement);
            this.currentNode.appendChildNode(tggRuleMocaNode);

            tggRule.additionalAttributesDuringExport(tggRuleMocaNode);

            foreach (SQLElement element in ruleClass.Elements)
            {
                //handle tgg rule pattern

                if (element.Stereotype == TGGModelingMain.TggObjectVariableStereotype || element.Stereotype == TGGModelingMain.TggCorrespondenceStereotype)
                {
                    this.currentNode = tggRuleMocaNode.getChildNodeWithName(StoryPattern.ObjectVariablesChildNodeName);
                    processTggObjectVariable(element);
                }
                //handle sdms of tgg rule class
                else if (element.Stereotype == SDMModelingMain.SdmContainerStereotype)
                {
                    String   associatedMethodguid = EAEcoreAddin.Util.EAUtil.findTaggedValue(element, SDMModelingMain.SDMContainerAssociatedMethodTaggedValueName).Value;
                    MocaNode operationsNode       = tggRuleMocaNode.getChildNodeWithName(EClass.OperationsChildNodeName);
                    MocaNode owningOperationNode  = null;

                    foreach (MocaNode EOperationNode in operationsNode.Children)
                    {
                        MocaAttribute guidAttribute = EOperationNode.getAttributeOrCreate(Main.GuidStringName);
                        if (guidAttribute != null && guidAttribute.Value == associatedMethodguid)
                        {
                            owningOperationNode = EOperationNode;
                        }
                    }

                    if (owningOperationNode != null)
                    {
                        MocaNode sdmActivityNode = this.ExportMain.ecoreExport.sdmExport.processActivity(element);
                        owningOperationNode.appendChildNode(sdmActivityNode);
                    }
                }
                else if (element.Stereotype == TGGModelingMain.CSPConstraintStereotype || element.Stereotype == "TGGCsp")
                {
                    MocaNode cspsNode = tggRuleMocaNode.getChildNodeWithName(TGGRule.CspsChildNodeName);
                    if (cspsNode == null)
                    {
                        cspsNode = tggRuleMocaNode.appendChildNode(TGGRule.CspsChildNodeName);
                    }
                    this.currentNode = cspsNode;
                    processTGGCSP(element);


                    tggRuleMocaNode.getAttributeOrCreate(TGGRule.CspSpecAttributeName).Value += element.Notes.Replace(Environment.NewLine, "");
                }
            }
        }
コード例 #2
0
        public override void doRuleQuickFix(SQLElement sqlElement, SQLWrapperClasses.SQLRepository repository, int i, String errorMessage)
        {
            EA.Element realElement = sqlElement.getRealElement();
            if (errorMessage == "TGG Rule name shouldnt be equal to TGG CorrespondenceType name")
            {
                if (i == 0)
                {
                    realElement.Name = "Rule" + realElement.Name;
                    realElement.Update();

                    TGGRule tggRule = new TGGRule(repository, sqlElement);
                    tggRule.saveTreeToEATaggedValue(true);
                }
            }
            else if (errorMessage == "TGG Rule name must not contain spaces")
            {
                if (i == 0)
                {
                    realElement.Name = realElement.Name.Replace(" ", "");
                    realElement.Update();

                    TGGRule tggRule = new TGGRule(repository, sqlElement);
                    tggRule.saveTreeToEATaggedValue(true);
                }
            }
        }
コード例 #3
0
        private static void onNotifyTggRuleModified(SQLRepository sqlRepository, EA.Element element)
        {
            TGGRule tggRule = new TGGRule(sqlRepository, sqlRepository.GetElementByID(element.ElementID));

            //tggRule.loadTreeFromTaggedValue();
            tggRule.saveTreeToEATaggedValue(false);
            Main.addToTreeQueue(element.ElementGUID, tggRule);
        }
コード例 #4
0
 public override void doRuleQuickFix(SQLElement eaElement, SQLWrapperClasses.SQLRepository repository, int i, string errorMessage)
 {
     if (i == 0)
     {
         if (eaElement.Stereotype == TGGModelingMain.TggRuleStereotype)
         {
             TGGRule tggRule = new TGGRule(repository, eaElement);
             tggRule.saveTreeToEATaggedValue(true);
         }
     }
 }
コード例 #5
0
        private void createRuleElementAndRuleDiagram()
        {
            this.newRuleElement            = rulesPackage.Elements.AddNew(this.textBoxRuleName.Text, "Class") as EA.Element;
            this.newRuleElement.Stereotype = TGGModelingMain.TggRuleStereotype;
            this.newRuleElement.Update();

            EA.Diagram rulesDiagram = rulesPackage.Diagrams.GetAt(0) as EA.Diagram;

            EA.DiagramObject newRuleDiagramObject = rulesDiagram.DiagramObjects.AddNew("", this.newRuleElement.Type) as EA.DiagramObject;
            if (this.addInheritanceLinkCheckBox.Checked)
            {
                EA.DiagramObject originalRuleDiagramObject = null;
                foreach (EA.DiagramObject diagramObject in rulesDiagram.DiagramObjects)
                {
                    if (diagramObject.ElementID == this.originalRuleElement.ElementID)
                    {
                        originalRuleDiagramObject = diagramObject;
                        break;
                    }
                }
                if (originalRuleDiagramObject != null)
                {
                    int verticalOffset = -(originalRuleDiagramObject.top - originalRuleDiagramObject.bottom + 40);
                    newRuleDiagramObject.left   = originalRuleDiagramObject.left - 10;
                    newRuleDiagramObject.right  = originalRuleDiagramObject.right + 10;
                    newRuleDiagramObject.top    = originalRuleDiagramObject.top + verticalOffset;
                    newRuleDiagramObject.bottom = originalRuleDiagramObject.bottom + verticalOffset;
                }
            }
            else
            {
                newRuleDiagramObject.left   = 10;
                newRuleDiagramObject.right  = 110;
                newRuleDiagramObject.top    = -10;
                newRuleDiagramObject.bottom = -80;
            }
            newRuleDiagramObject.ElementID = this.newRuleElement.ElementID;
            newRuleDiagramObject.Update();

            if (this.addInheritanceLinkCheckBox.Checked)
            {
                addInheritanceLinkToOriginalRule();
            }

            repository.ReloadDiagram(rulesDiagram.DiagramID);

            newRuleDiagram = newRuleElement.Diagrams.AddNew(this.textBoxRuleName.Text, TGGModelingMain.TggRuleDiagramMetatype[0]) as EA.Diagram;
            newRuleDiagram.Update();


            TGGRule rule = new TGGRule(repository, repository.GetElementByID(newRuleElement.ElementID));

            rule.saveTreeToEATaggedValue(true);
        }
コード例 #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
        private void addPossibleNamesToComboBox()
        {
            List <ObjectVariable> listOfOvs        = new List <ObjectVariable>();
            List <EParameter>     listOfParameters = new List <EParameter>();

            if (objectVariable is TGGObjectVariable)
            {
                TGGRule tggRule = objectVariable.StoryPattern as TGGRule;
                listOfOvs = SDMUtil.getTGGObjectVariablesInTggRule(tggRule, repository);
            }
            else if (objectVariable is ObjectVariable)
            {
                Activity activity = objectVariable.StoryPattern.ParentStoryNode.OwningActivity;
                listOfOvs = SDMUtil.getSDMObjectVariablesInActivity(activity, repository);
                try
                {
                    foreach (EParameter eParameter in objectVariable.StoryPattern.ParentStoryNode.OwningActivity.OwningOperation.EParameters)
                    {
                        listOfParameters.Add(eParameter);
                    }
                }
                catch
                {
                }
            }
            ObjectVariable ovToDelete = null;

            foreach (ObjectVariable ov in listOfOvs)
            {
                if (ov.Name == this.objectVariable.ObjectVariableEA.Name)
                {
                    ovToDelete = ov;
                }
            }
            listOfOvs.Remove(ovToDelete);
            InternalList.AddRange(listOfOvs);
            InternalList.AddRange(listOfParameters);

            foreach (Object possibleObject in InternalList)
            {
                if (possibleObject is ObjectVariable)
                {
                    this.Items.Add((possibleObject as ObjectVariable).Name);
                }
                else if (possibleObject is EParameter)
                {
                    this.Items.Add((possibleObject as EParameter).Name);
                }
            }
        }
コード例 #8
0
        public override List <String> doRule(SQLElement eaElement, SQLWrapperClasses.SQLRepository repository)
        {
            List <String> results = new List <string>();

            if (eaElement.Stereotype == TGGModelingMain.TggRuleStereotype)
            {
                TGGRule tggRule = new TGGRule(repository, eaElement);
                tggRule.loadTreeFromTaggedValue();
                if (tggRule.Guid != eaElement.ElementGUID)
                {
                    results.Add("TGGRule is invalid and has to be updated");
                }
            }
            return(results);
        }
コード例 #9
0
        private void updateMocaTreeFragments()
        {
            // For all packages (recursively!) in TGG and Ecore projects
            foreach (EA.Package p in EAUtil.findAllMoflonPackages(repository))
            {
                SQLPackage p2 = sqlRep.GetPackageByID(p.PackageID);
                if (p.Element.Stereotype == TGGModelingMain.TggSchemaPackageStereotype)
                {
                    TGG tgg = new TGG(sqlRep, p2);
                    tgg.loadTreeFromTaggedValue();
                    tgg.saveTreeToEATaggedValue(false);
                }
                else if (p.Element.Stereotype == TGGModelingMain.TggRulePackageStereotype)
                {
                    TGGRulePackage package = new TGGRulePackage(p2, sqlRep);
                    package.loadTreeFromTaggedValue();
                    package.saveTreeToEATaggedValue(false);
                }
                else
                {
                    EPackage package = new EPackage(p2, sqlRep);
                    package.loadTreeFromTaggedValue();
                    package.saveTreeToEATaggedValue(false);
                }
            }

            foreach (EA.Element eClassElement in EAUtil.findAllEClasses(repository))
            {
                EClass eClass = new EClass(sqlRep.GetElementByID(eClassElement.ElementID), sqlRep);
                eClass.saveTreeToEATaggedValue(false);
            }

            foreach (EA.Element ruleElement in EAUtil.findAllStereotypedElements(repository, TGGModelingMain.TggRuleStereotype))
            {
                TGGRule rule = new TGGRule(sqlRep, sqlRep.GetElementByID(ruleElement.ElementID));
                rule.loadTreeFromTaggedValue();
                rule.saveTreeToEATaggedValue(false);
            }

            foreach (EA.Element corrTypeElement in EAUtil.findAllStereotypedElements(repository, TGGModelingMain.TggCorrespondenceTypeStereotype))
            {
                TGGCorrespondenceType corrType = new TGGCorrespondenceType(sqlRep.GetElementByID(corrTypeElement.ElementID), sqlRep);
                corrType.loadTreeFromTaggedValue();
                corrType.saveTreeToEATaggedValue(false);
            }
        }
コード例 #10
0
        private void addPossibleNamesToComboBox()
        {
            List <ObjectVariable> listOfOvs = new List <ObjectVariable>();

            List <MocaSerializableElement> existingNames = new List <MocaSerializableElement>();

            if (objectVariable is TGGObjectVariable)
            {
                TGGRule tggRule = objectVariable.StoryPattern as TGGRule;
                listOfOvs = SDMUtil.getTGGObjectVariablesInTggRule(tggRule, repository);
            }
            else if (objectVariable is ObjectVariable)
            {
                Activity activity = objectVariable.StoryPattern.ParentStoryNode.OwningActivity;
                listOfOvs = SDMUtil.getSDMObjectVariablesInActivity(activity, repository);
                try
                {
                    foreach (EParameter eParameter in objectVariable.StoryPattern.ParentStoryNode.OwningActivity.OwningOperation.EParameters)
                    {
                        if (eParameter.EaParameter.ClassifierID != "0" && eParameter.EaParameter.ClassifierID != "")
                        {
                            existingNames.Add(eParameter);
                        }
                    }
                }
                catch
                {
                }
            }

            foreach (ObjectVariable ov in listOfOvs)
            {
                existingNames.Add(ov);
            }


            existingNames.Sort(new SDMExportWrapperComparator());

            foreach (Object possibleObject in existingNames)
            {
                if (possibleObject is MocaSerializableElement)
                {
                    MocaSerializableElement entry = possibleObject as MocaSerializableElement;
                    if (!this.Items.Contains(entry.Name))
                    {
                        this.Items.Add((possibleObject as MocaSerializableElement).Name);
                        InternalList.Add(possibleObject);
                    }
                }
            }

            /*
             *
             * ObjectVariable ovToDelete = null;
             * foreach (ObjectVariable ov in listOfOvs)
             * {
             *  if (ov.Name == this.objectVariable.ObjectVariableEA.Name)
             *      ovToDelete = ov;
             * }
             * listOfOvs.Remove(ovToDelete);
             * InternalList.AddRange(listOfOvs);
             * InternalList.AddRange(listOfParameters);
             *
             * foreach (Object possibleObject in InternalList)
             * {
             *  if (possibleObject is ObjectVariable)
             *  {
             *      this.Items.Add((possibleObject as ObjectVariable).Name);
             *  }
             *  else if (possibleObject is EParameter)
             *  {
             *      this.Items.Add((possibleObject as EParameter).Name);
             *  }
             * }
             */
        }
コード例 #11
0
 public TGGExpressionProvider(TGGRule tggRule, SQLRepository repository)
     : base(repository)
 {
     this.tggRule = tggRule;
 }
コード例 #12
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);
                }
            }
        }