Beispiel #1
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);
        }
        private void addTGGLinkVariableCopyToRule(EA.Connector connectorToBeCopied)
        {
            EA.Element newSource = newElementIdToNewElement[oldElementIdToNewElementId[connectorToBeCopied.ClientID]];
            EA.Element newTarget = newElementIdToNewElement[oldElementIdToNewElementId[connectorToBeCopied.SupplierID]];

            EA.Connector newConnector = newSource.Connectors.AddNew("", connectorToBeCopied.Type) as EA.Connector;
            newConnector.Stereotype       = TGGModelingMain.TggLinkVariableStereotype;
            newConnector.ClientEnd.Role   = connectorToBeCopied.ClientEnd.Role;
            newConnector.SupplierEnd.Role = connectorToBeCopied.SupplierEnd.Role;
            newConnector.SupplierID       = newTarget.ElementID;
            newConnector.ClientID         = newSource.ElementID;
            newConnector.Update();
            if (connectorToBeCopied.Stereotype == TGGModelingMain.TggLinkVariableStereotype)
            {
                foreach (EA.ConnectorTag tag in connectorToBeCopied.TaggedValues)
                {
                    EA.ConnectorTag newTag = newConnector.TaggedValues.AddNew(tag.Name, "") as EA.ConnectorTag;
                    if (!checkBoxExactCopy.Checked)
                    {
                        newTag.Value = tag.Value.Replace("create", "check_only");
                        newTag.Notes = tag.Notes.Replace("\"bindingOperator\" value=\"create", "\"bindingOperator\" value=\"check_only");
                    }
                    else
                    {
                        newTag.Value = tag.Value;
                        newTag.Notes = tag.Notes;
                    }
                    newTag.Update();
                }
            }
            EA.DiagramLink newDiagramLink = newRuleDiagram.DiagramLinks.AddNew("", newConnector.Type) as EA.DiagramLink;
            newDiagramLink.ConnectorID = newConnector.ConnectorID;
            newDiagramLink.Update();
            if (connectorToBeCopied.Stereotype != TGGModelingMain.TggLinkVariableStereotype)
            {
                LinkDialogueEntry linkEntry = new LinkDialogueEntry();
                linkEntry.direction = LinkDialogueEntryDirection.RIGHT;
                linkEntry.CorrespondingConnectorGuid = connectorToBeCopied.ConnectorGUID;
                if (newConnector.ClientEnd.Role != "")
                {
                    linkEntry.supplierRoleName = newConnector.ClientEnd.Role;
                }
                else if (newConnector.SupplierEnd.Role != "")
                {
                    linkEntry.supplierRoleName = newConnector.SupplierEnd.Role;
                }
                TGGLinkVariable tggLv = new TGGLinkVariable(repository.GetConnectorByID(newConnector.ConnectorID), repository);
                tggLv.linkDialogueEntry = linkEntry;
                if (!checkBoxExactCopy.Checked)
                {
                    tggLv.BindingOperator = SDMModeling.SDMExportWrapper.patterns.BindingOperator.CREATE;
                }
                tggLv.saveTreeToEATaggedValue(true);
            }
        }
Beispiel #3
0
        public void processTggLinkVariable(SQLConnector linkVariable)
        {
            SQLConnectorTag mocaTreeTag = EAEcoreAddin.Util.EAUtil.findTaggedValue(linkVariable, Main.MoflonExportTreeTaggedValueName);

            TGGLinkVariable lv    = new TGGLinkVariable(linkVariable, repository);
            Boolean         valid = 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);
                }
            }
        }
        private void onPostLinkVariableConnector(SQLRepository sqlRepository, EA.Connector actCon2)
        {
            //save initial data for linkVariable
            SQLConnector     actCon           = sqlRepository.GetConnectorByID(actCon2.ConnectorID);
            TGGLinkVariable  linkVariable     = new TGGLinkVariable(actCon, sqlRepository);
            SQLElement       newClient        = sqlRepository.GetElementByID(actCon.ClientID);
            SQLElement       newSupplier      = sqlRepository.GetElementByID(actCon.SupplierID);
            String           clientObjMod     = EAEcoreAddin.Util.EAUtil.findTaggedValue(newClient, ObjectVariable.BindingOperatorTaggedValueName).Value;
            String           supplierObjMod   = EAEcoreAddin.Util.EAUtil.findTaggedValue(newSupplier, ObjectVariable.BindingOperatorTaggedValueName).Value;
            BindingSemantics bindingSemantics = BindingSemantics.MANDATORY;
            BindingOperator  bindingOperator  = BindingOperator.CHECK_ONLY;

            if (supplierObjMod == "create" || clientObjMod == "create")
            {
                bindingSemantics = BindingSemantics.MANDATORY;
                bindingOperator  = BindingOperator.CREATE;
            }
            else if (supplierObjMod == "destroy" || clientObjMod == "destroy")
            {
                bindingSemantics = BindingSemantics.MANDATORY;
                bindingOperator  = BindingOperator.DESTROY;
            }
            else if (supplierObjMod == "check_only" && clientObjMod == "check_only")
            {
                bindingSemantics = BindingSemantics.MANDATORY;
                bindingOperator  = BindingOperator.CHECK_ONLY;
            }
            else if (supplierObjMod == "create" && clientObjMod == "destroy" || supplierObjMod == "destroy" && clientObjMod == "create")
            {
                bindingSemantics = BindingSemantics.MANDATORY;
                bindingOperator  = BindingOperator.CHECK_ONLY;
            }

            linkVariable.BindingOperator  = bindingOperator;
            linkVariable.BindingSemantics = bindingSemantics;

            this.LinkVariableDialog = new LinkVariablePropertiesForm(linkVariable, sqlRepository, false);
            EAEcoreAddin.Util.EAUtil.setTaggedValue(sqlRepository, actCon.getRealConnector(), Main.MoflonVerboseTaggedValueName, Main.FalseValue);
        }
Beispiel #6
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();
        }
        private Boolean createCorrespondenceObjectWithLinks(EA.Repository Repositorya, EA.EventProperties Info)
        {
            DateTime      t1         = DateTime.Now;
            SQLRepository Repository = new SQLRepository(Repositorya, false);

            EA.Diagram curDiagram = Repository.GetCurrentDiagram();

            int tggPackageId = EAUtil.getOutermostPackage(curDiagram, Repository).PackageID;

            BindingOperator newBindingOperator = BindingOperator.CHECK_ONLY;

            SQLElement clientOv   = Repository.GetElementByID(int.Parse(Info.Get("ClientID").Value.ToString()));
            SQLElement supplierOv = Repository.GetElementByID(int.Parse(Info.Get("SupplierID").Value.ToString()));

            EA.Element ruleClass = Repository.GetOriginalRepository().GetElementByID(clientOv.ParentID);

            SQLElement clientClassifier   = Repository.GetElementByID(clientOv.ClassifierID);
            SQLElement supplierClassifier = Repository.GetElementByID(supplierOv.ClassifierID);

            //compute domains of source and target classifiers
            DomainType clientDomain   = TGGModelingUtil.getDomainOfObjectVariable(Repository, new TGGObjectVariable(clientOv, Repository));
            DomainType supplierDomain = TGGModelingUtil.getDomainOfObjectVariable(Repository, new TGGObjectVariable(supplierOv, Repository));

            //get possible correspondence classes with connectors
            Dictionary <int, List <SQLConnector> > possibleCorrespondencesLinkWithConnectors = computeCorrespondencesWithLinks(clientClassifier, supplierClassifier, Repository, tggPackageId);

            //check for existing bindingOperator
            SQLTaggedValue bindingOperatorTag = EAEcoreAddin.Util.EAUtil.findTaggedValue(clientOv, ObjectVariable.BindingOperatorTaggedValueName);

            if (bindingOperatorTag != null)
            {
                newBindingOperator = (BindingOperator)Enum.Parse(typeof(BindingOperator), bindingOperatorTag.Value.ToUpper());
            }

            //create new correspondence ov
            EA.Element tggCorrespondenceObject = ruleClass.Elements.AddNew("", Main.EAObjectType) as EA.Element;
            tggCorrespondenceObject.Update();

            //dont know what this line does :)
            EA_OnNotifyContextItemModified(Repository.GetOriginalRepository(), tggCorrespondenceObject.ElementGUID, EA.ObjectType.otElement);

            //create connector from correspondence object to client ov
            EA.Connector connectorToClient = tggCorrespondenceObject.Connectors.AddNew("", ECOREModelingMain.EReferenceConnectorType) as EA.Connector;
            connectorToClient.SupplierID = clientOv.ElementID;

            connectorToClient.Direction = "Unspecified";
            connectorToClient.Update();
            tggCorrespondenceObject.Connectors.Refresh();

            //create connector from correspondence object to supplier ov
            EA.Connector connectorToTarget = tggCorrespondenceObject.Connectors.AddNew("", ECOREModelingMain.EReferenceConnectorType) as EA.Connector;
            connectorToTarget.SupplierID = supplierOv.ElementID;
            connectorToTarget.Direction  = "Unspecified";
            connectorToTarget.Update();
            tggCorrespondenceObject.Connectors.Refresh();

            createCorrespondenceDiagramObject(curDiagram, Repository.GetOriginalRepository(), clientOv.getRealElement(), supplierOv.getRealElement(), tggCorrespondenceObject);

            SelectCorrespondenceObject selectCorr = new SelectCorrespondenceObject(possibleCorrespondencesLinkWithConnectors, Repository.GetElementByID(tggCorrespondenceObject.ElementID), Repository, newBindingOperator, clientClassifier, supplierClassifier, clientOv, supplierOv);

            if (selectCorr.DialogResult == DialogResult.Cancel)
            {
                return(true);
            }

            //compute correct linkDialogueEntries so the rolenames can be set correctly

            LinkDialogueEntry sourceEntry = computeLinkDialogEntry("source", possibleCorrespondencesLinkWithConnectors[selectCorr.selectedCorrespondenceLinkId]);
            LinkDialogueEntry targetEntry = computeLinkDialogEntry("target", possibleCorrespondencesLinkWithConnectors[selectCorr.selectedCorrespondenceLinkId]);

            TGGLinkVariable sourceLv = new TGGLinkVariable(Repository.GetConnectorByID(connectorToClient.ConnectorID), Repository);

            sourceLv.BindingOperator = newBindingOperator;

            TGGLinkVariable targetLv = new TGGLinkVariable(Repository.GetConnectorByID(connectorToTarget.ConnectorID), Repository);

            targetLv.BindingOperator = newBindingOperator;

            if (clientDomain == DomainType.SOURCE && supplierDomain == DomainType.TARGET)
            {
                sourceLv.linkDialogueEntry = sourceEntry;
                targetLv.linkDialogueEntry = targetEntry;
            }
            else if (clientDomain == DomainType.TARGET && supplierDomain == DomainType.SOURCE)
            {
                sourceLv.linkDialogueEntry = targetEntry;
                targetLv.linkDialogueEntry = sourceEntry;
            }
            else
            {
                sourceLv.linkDialogueEntry = sourceEntry;
                targetLv.linkDialogueEntry = targetEntry;
            }
            sourceLv.saveTreeToEATaggedValue(true);
            targetLv.saveTreeToEATaggedValue(true);


            Repository.ReloadDiagram(curDiagram.DiagramID);



            return(true);
        }
        private void onTggLvDoubleClicked(SQLRepository sqlRepository, SQLConnector doubleClickedConnector)
        {
            TGGLinkVariable tggLv = new TGGLinkVariable(doubleClickedConnector, sqlRepository);

            this.LinkVariableDialog = new LinkVariablePropertiesForm(tggLv, sqlRepository, true);
        }