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); }
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); }
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); } } }
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(); }
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); }