Example #1
0
        public static SQLConnector getRelatedEReference(LinkVariable lv)
        {
            SQLRepository repository          = lv.Repository;
            SQLConnector  referencedReference = repository.GetConnectorByGuid(lv.linkDialogueEntry.CorrespondingConnectorGuid);

            if (referencedReference == null && lv.linkDialogueEntry.CorrespondingConnectorGuid != "")
            {
                try
                {
                    referencedReference = repository.GetConnectorByID(int.Parse(lv.linkDialogueEntry.CorrespondingConnectorGuid));
                }
                catch
                {
                }
            }
            if (referencedReference == null)
            {
                SQLConnectorTag guidOfRef = EAEcoreAddin.Util.EAUtil.findTaggedValue(lv.LinkVariableEA, "idOfReference");
                if (guidOfRef != null)
                {
                    referencedReference = repository.GetConnectorByGuid(guidOfRef.Value);
                    if (referencedReference == null)
                    {
                        try
                        {
                            referencedReference = repository.GetConnectorByID(int.Parse(guidOfRef.Value));
                        }
                        catch
                        {
                        }
                    }
                }
            }
            return(referencedReference);
        }
Example #2
0
        public void importTGGLinkVariable(MocaNode refNode, SQLElement parent)
        {
            LinkVariable lv = MainImport.getInstance().SdmImport.importLinkVariable(parent, refNode);

            MainImport.getInstance().MocaTaggableElements.Remove(lv);
            lv = new TGGLinkVariable(lv.LinkVariableEA, sqlRep);
            lv.deserializeFromMocaTree(refNode);
            MainImport.getInstance().MocaTaggableElements.Add(lv);
        }
Example #3
0
        public void processLinkVariable(SQLConnector linkVariable)
        {
            SQLConnectorTag mocaTreeTag = EAEcoreAddin.Util.EAUtil.findTaggedValue(linkVariable, Main.MoflonExportTreeTaggedValueName);

            LinkVariable lv = new LinkVariable(linkVariable, repository);

            lv.loadTreeFromTaggedValue();
            MocaNode linkVariableMocaNode = new MocaNode();

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

            lv.addAttributesDuringExport(linkVariableMocaNode);

            this.currentNode.appendChildNode(linkVariableMocaNode);
        }
        public override void doRuleQuickFix(SQLConnector eaConnector, SQLRepository repository, int i, String errorMessage)
        {
            LinkVariable lv = new LinkVariable(eaConnector, repository);

            lv.loadTreeFromTaggedValue();


            if (errorMessage == "The rolename(s) of the LinkVariable differs from the related EReference")
            {
                if (i == 0)
                {
                    SQLConnector referencedReference = SDMUtil.getRelatedEReference(lv);
                    if (referencedReference != null)
                    {
                        EA.Diagram currentDiagram = repository.GetCurrentDiagram();

                        lv.linkDialogueEntry.clientRoleName   = referencedReference.ClientEnd.Role;
                        lv.linkDialogueEntry.supplierRoleName = referencedReference.SupplierEnd.Role;
                        lv.saveTreeToEATaggedValue(true);


                        if (currentDiagram != null)
                        {
                            repository.SaveDiagram(currentDiagram.DiagramID);
                            repository.ReloadDiagram(currentDiagram.DiagramID);
                        }
                    }
                }
            }
            else
            {
                if (i == 0)
                {
                    if (eaConnector.Stereotype == SDMModelingMain.LinkVariableStereotype)
                    {
                        lv = new LinkVariable(eaConnector, repository);
                    }
                    else if (eaConnector.Stereotype == TGGModelingMain.TggLinkVariableStereotype)
                    {
                        lv = new TGGLinkVariable(eaConnector, repository);
                    }
                    LinkVariablePropertiesForm lvForm = new LinkVariablePropertiesForm(lv, repository, true);
                }
            }
        }
Example #5
0
        public LinkVariable importLinkVariable(SQLElement ovElement, MocaNode lvNode)
        {
            String oldTargetGuid = lvNode.getAttributeOrCreate("targetGuid").Value;
            String newTargetGuid = MainImport.getInstance().OldGuidToNewGuid[oldTargetGuid];

            EA.Element targetElement = MainImport.getInstance().ElementGuidToElement[newTargetGuid];

            EA.Connector newLinkConnector = MainImport.getInstance().EcoreImport.getOrCreateConnector(ovElement, sqlRep.GetElementByID(targetElement.ElementID), lvNode.getAttributeOrCreate(Main.GuidStringName).Value, Main.EAAssociationType);


            LinkVariable lv = new LinkVariable(sqlRep.GetConnectorByID(newLinkConnector.ConnectorID), sqlRep);

            lv.deserializeFromMocaTree(lvNode);
            if (lv.linkDialogueEntry.clientRoleName != "" && lv.linkDialogueEntry.supplierRoleName != "")
            {
                lv.linkDialogueEntry.direction = LinkDialogueEntryDirection.BI;
            }
            MainImport.getInstance().MocaTaggableElements.Add(lv);

            return(lv);
        }
        /// <summary>
        /// Initialization of the form, searching for the connected associations
        /// </summary>
        /// <param name="link"></param>
        /// <param name="repository"></param>
        /// <param name="editExistingLink"></param>
        public LinkVariablePropertiesForm(LinkVariable linkVariable, SQLRepository repository, bool editExistingLink)
        {
            InitializeComponent();

            linkVariable.loadTreeFromTaggedValue();

            this.linkDialogueEntries = new List <LinkDialogueEntry>();
            this.linkVariable        = linkVariable;
            this.edit       = editExistingLink;
            this.repository = repository;
            this.lvClient   = repository.GetElementByID(linkVariable.LinkVariableEA.ClientID);
            this.lvSupplier = repository.GetElementByID(linkVariable.LinkVariableEA.SupplierID);



            addPossibleLinks();

            initializeDialog();

            this.StartPosition = FormStartPosition.CenterScreen;
            this.ShowDialog();
        }
Example #7
0
        private void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            BindingSemantics bindingSemantics = BindingSemantics.MANDATORY;
            BindingOperator  bindingOperator  = BindingOperator.CHECK_ONLY;

            if (radioButtonMandatory.Checked)
            {
                bindingSemantics = BindingSemantics.MANDATORY;
            }
            else if (radioButtonNegative.Checked)
            {
                bindingSemantics = BindingSemantics.NEGATIVE;
            }
            if (radioButtonDestroy.Checked)
            {
                bindingOperator = BindingOperator.DESTROY;
            }
            else if (radioButtonCreate.Checked)
            {
                bindingOperator = BindingOperator.CREATE;
            }
            else if (radioButtonCheckOnly.Checked)
            {
                bindingOperator = BindingOperator.CHECK_ONLY;
            }


            foreach (EA.Element selectedOv in this.selectedObjectVariables)
            {
                ObjectVariable currentOV = ObjectVariable.createCorrectOvType(repository.GetElementByID(selectedOv.ElementID), repository);
                currentOV.loadTreeFromTaggedValue();

                currentOV.BindingSemantics = bindingSemantics;
                currentOV.BindingOperator  = bindingOperator;

                if (bindingOperator == BindingOperator.CHECK_ONLY)
                {
                    TGGModelingUtil.assignmentsToConstraints(currentOV, repository);
                }
                else if (bindingOperator == BindingOperator.CREATE)
                {
                    TGGModelingUtil.constraintsToAssignments(currentOV, repository);
                }

                currentOV.saveTreeToEATaggedValue(true);
            }

            if (checkBoxLinksToo.Checked)
            {
                foreach (EA.Connector selectedLink in this.selectedLinkVariables)
                {
                    LinkVariable lv = null;
                    if (selectedLink.Stereotype == SDMModelingMain.LinkVariableStereotype)
                    {
                        lv = new LinkVariable(repository.GetConnectorByID(selectedLink.ConnectorID), repository);
                    }
                    else if (selectedLink.Stereotype == TGGModelingMain.TggLinkVariableStereotype)
                    {
                        lv = new TGGLinkVariable(repository.GetConnectorByID(selectedLink.ConnectorID), repository);
                    }

                    lv.loadTreeFromTaggedValue();
                    lv.BindingOperator  = bindingOperator;
                    lv.BindingSemantics = bindingSemantics;

                    lv.saveTreeToEATaggedValue(true);
                }
            }
            repository.ReloadDiagram(repository.GetCurrentDiagram().DiagramID);
            Close();
        }
        public override List <String> doRule(SQLConnector eaConnector, SQLWrapperClasses.SQLRepository repository)
        {
            List <String> results = new List <string>();

            if (eaConnector.Stereotype == SDMModelingMain.LinkVariableStereotype || eaConnector.Stereotype == TGGModelingMain.TggLinkVariableStereotype)
            {
                LinkVariable lv = new LinkVariable(eaConnector, repository);
                lv.loadTreeFromTaggedValue();

                SQLConnector referencedReference = SDMUtil.getRelatedEReference(lv);


                //try to get the related EReference

                //related EReference cant be found
                if (referencedReference == null)
                {
                    results.Add("There is no related EReference");
                }


                //rolename of linkVariable not existing in the referenced EReference
                if (eaConnector.SupplierEnd.Role != "" && referencedReference != null)
                {
                    if (!((eaConnector.SupplierEnd.Role == referencedReference.ClientEnd.Role || eaConnector.SupplierEnd.Role == referencedReference.SupplierEnd.Role) &&
                          (eaConnector.ClientEnd.Role == referencedReference.ClientEnd.Role || eaConnector.ClientEnd.Role == referencedReference.SupplierEnd.Role)))
                    {
                        results.Add("The rolename(s) of the LinkVariable differs from the related EReference");
                    }
                }

                //for unidirectional EReferences the supplierEnd.Role of the linkvariable must be the "value" rolename
                if (eaConnector.ClientEnd.Role != "" && eaConnector.SupplierEnd.Role == "")
                {
                    results.Add("The rolename(s) of the LinkVariable differs from the related EReference");
                }

                //checks if the related reference is connecting the correct EClasses

                if (referencedReference != null)
                {
                    try
                    {
                        SQLElement lvSource = repository.GetElementByID(eaConnector.ClientID);
                        SQLElement lvTarget = repository.GetElementByID(eaConnector.SupplierID);

                        SQLElement sourceClassifier = EAUtil.getClassifierElement(repository, lvSource.ClassifierID);
                        SQLElement targetClassifier = EAUtil.getClassifierElement(repository, lvTarget.ClassifierID);


                        SQLElement refRefClient   = repository.GetElementByID(referencedReference.ClientID);
                        SQLElement refRefSupplier = repository.GetElementByID(referencedReference.SupplierID);


                        if (sourceClassifier != null && targetClassifier != null)
                        {
                            List <SQLElement> sourceBases = EAUtil.getBaseClasses(sourceClassifier);
                            List <SQLElement> targetBases = EAUtil.getBaseClasses(targetClassifier);

                            Boolean valid = false;

                            foreach (SQLElement sourceBase in sourceBases)
                            {
                                foreach (SQLElement targetBase in targetBases)
                                {
                                    if (((referencedReference.ClientID == sourceBase.ElementID || referencedReference.ClientID == targetBase.ElementID) &&
                                         (referencedReference.SupplierID == sourceBase.ElementID || referencedReference.SupplierID == targetBase.ElementID)))
                                    {
                                        valid = true;
                                    }
                                }
                            }

                            //maybe there is a direct connectio to EObject

                            if (!valid)
                            {
                                if (refRefClient.Name == "EObject" && (eaConnector.SupplierEnd.Role == referencedReference.SupplierEnd.Role || eaConnector.SupplierEnd.Role == referencedReference.ClientEnd.Role) ||
                                    refRefSupplier.Name == "EObject" && (eaConnector.SupplierEnd.Role == referencedReference.SupplierEnd.Role || eaConnector.SupplierEnd.Role == referencedReference.ClientEnd.Role))
                                {
                                    valid = true;
                                }
                            }


                            if (!valid)
                            {
                                results.Add("The related EReference doesn't connect EClasses from the same type hiearchy as the LinkVariable");
                            }
                        }
                    }
                    catch
                    {
                        results.Add("Error during computing of related EReference. Please update your LinkVariable manually");
                    }
                }
            }


            return(results);
        }
        public Boolean EA_OnPostNewConnector(SQLRepository sqlRep, EA.Connector actCon, EA.Diagram currentDiagram)
        {
            if (SdmDiagramMetatype.Contains(currentDiagram.MetaType))
            {
                sqlRep.SaveDiagram(currentDiagram.DiagramID);
                if (actCon.Stereotype == SDMModelingMain.LinkVariableStereotype)
                {
                    //save initial data for linkVariable
                    LinkVariable   linkVariable = new LinkVariable(sqlRep.GetConnectorByID(actCon.ConnectorID), sqlRep);
                    ObjectVariable newClient    = new ObjectVariable(sqlRep.GetElementByID(actCon.ClientID), sqlRep);
                    ObjectVariable newSupplier  = new ObjectVariable(sqlRep.GetElementByID(actCon.SupplierID), sqlRep);
                    newClient.loadTreeFromTaggedValue();
                    newSupplier.loadTreeFromTaggedValue();
                    String           clientBindingOperator   = newClient.BindingOperator.ToString().ToLower();
                    String           supplierBindingOperator = newSupplier.BindingOperator.ToString().ToLower();
                    BindingSemantics bindingSemantics        = BindingSemantics.MANDATORY;
                    BindingOperator  bindingOperator         = BindingOperator.CHECK_ONLY;

                    if (supplierBindingOperator == BindingOperator.CREATE.ToString().ToLower() || clientBindingOperator == BindingOperator.CREATE.ToString().ToLower())
                    {
                        bindingSemantics = BindingSemantics.MANDATORY;
                        bindingOperator  = BindingOperator.CREATE;
                    }
                    else if (supplierBindingOperator == BindingOperator.DESTROY.ToString().ToLower() || clientBindingOperator == BindingOperator.DESTROY.ToString().ToLower())
                    {
                        bindingSemantics = BindingSemantics.MANDATORY;
                        bindingOperator  = BindingOperator.DESTROY;
                    }
                    else if (supplierBindingOperator == BindingOperator.CHECK_ONLY.ToString().ToLower() && clientBindingOperator == BindingOperator.CHECK_ONLY.ToString().ToLower())
                    {
                        bindingSemantics = BindingSemantics.MANDATORY;
                        bindingOperator  = BindingOperator.CHECK_ONLY;
                    }
                    else if (supplierBindingOperator == BindingOperator.CHECK_ONLY.ToString().ToLower() && clientBindingOperator == BindingOperator.DESTROY.ToString().ToLower() || supplierBindingOperator == BindingOperator.DESTROY.ToString().ToLower() && clientBindingOperator == BindingOperator.CREATE.ToString().ToLower())
                    {
                        bindingSemantics = BindingSemantics.MANDATORY;
                        bindingOperator  = BindingOperator.CHECK_ONLY;
                    }
                    linkVariable.BindingOperator  = bindingOperator;
                    linkVariable.BindingSemantics = bindingSemantics;
                    LinkVariablePropertiesForm linkVariableDialogue = new LinkVariablePropertiesForm(linkVariable, sqlRep, false);
                }
                else if (actCon.Type.Equals(Main.EAControlFlowType))
                {
                    ActivityEdge activityEdge = new ActivityEdge(sqlRep, sqlRep.GetConnectorByID(actCon.ConnectorID));

                    //if there is already Success / Failure / ForEach / End guarded edge set new Edge respectively
                    foreach (SQLConnector outgoingEdge in activityEdge.Source.Connectors)
                    {
                        if (outgoingEdge.ClientID == activityEdge.Source.ElementID && outgoingEdge.ConnectorID != activityEdge.EaConnector.ConnectorID)
                        {
                            if (outgoingEdge.TransitionGuard == ActivityEdge.EdgeGuardFailureGui)
                            {
                                activityEdge.GuardType = EdgeGuard.SUCCESS;
                                break;
                            }
                            else if (outgoingEdge.TransitionGuard == ActivityEdge.EdgeGuardSuccessGui)
                            {
                                activityEdge.GuardType = EdgeGuard.FAILURE;
                                break;
                            }
                            else if (outgoingEdge.TransitionGuard == ActivityEdge.EdgeGuardEachTimeGui)
                            {
                                activityEdge.GuardType = EdgeGuard.END;
                                break;
                            }
                            else if (outgoingEdge.TransitionGuard == ActivityEdge.EdgeGuardEndGui)
                            {
                                activityEdge.GuardType = EdgeGuard.EACH_TIME;
                                break;
                            }
                        }
                    }

                    if (activityEdge.GuardType == EdgeGuard.NONE)
                    {
                        SQLElement sourceNode = sqlRep.GetElementByID(actCon.ClientID);
                        if (sourceNode.Stereotype == SDMModelingMain.StoryNodeStereotype)
                        {
                            StoryNode storyNode = new StoryNode(sqlRep, sourceNode);
                            storyNode.loadTreeFromTaggedValue();
                            if (storyNode.ForEach)
                            {
                                activityEdge.GuardType = EdgeGuard.END;
                            }
                        }
                    }

                    activityEdge.saveTreeToEATaggedValue(true);
                }
            }
            return(true);
        }