public Boolean EA_OnPreNewConnector(EA.Repository repository, EA.EventProperties info) { if (info.Get("Stereotype").Value.Equals(SDMModelingMain.LinkVariableStereotype)) { EA.Element client = repository.GetElementByID(Int32.Parse(info.Get("ClientID").Value as String)); EA.Element supplier = repository.GetElementByID(Int32.Parse(info.Get("SupplierID").Value as String)); if (client != null && supplier != null) { List <SQLConnector> clientToSupplierAssociations = new List <SQLConnector>(); List <SQLConnector> supplierToClientAssociations = new List <SQLConnector>(); SQLRepository sqlRepository = new SQLRepository(repository, false); SQLElement clientClassifier = sqlRepository.GetElementByID(client.ClassfierID); SQLElement supplierClassifier = sqlRepository.GetElementByID(supplier.ClassfierID); LinkVariablePropertiesForm.collectPossibleAssociations(ref clientClassifier, ref supplierClassifier, ref clientToSupplierAssociations, ref supplierToClientAssociations, ref sqlRepository); if (clientToSupplierAssociations.Count == 0 && supplierToClientAssociations.Count == 0) { System.Windows.Forms.MessageBox.Show("There is no Association between these two elements"); return(false); } } else { return(false); } } return(true); }
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); }
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); }
/// <summary> /// Defines what happens if the user doubleclicks on SDM related Elements. /// </summary> /// <param name="repository"></param> /// <param name="GUID"></param> /// <param name="ot"></param> /// <returns>True if the EA Dialogs should not be openend. False if the standard EA Dialogs should be opened. /// </returns> public bool EA_OnContextItemDoubleClicked(EA.Repository repository, String GUID, EA.ObjectType ot) { SQLRepository sqlRepository = new SQLRepository(repository, false); EA.Diagram actDiag = repository.GetCurrentDiagram(); SQLMethod meth = sqlRepository.GetMethodByGuid(GUID); SQLElement elem = sqlRepository.GetElementByGuid(GUID); SQLConnector con = sqlRepository.GetConnectorByGuid(GUID); if (actDiag != null) { if (ECOREModelingMain.EcoreDiagramMetatype.Contains(actDiag.MetaType) && ot == EA.ObjectType.otMethod) { SQLElement methParent; SQLElement container; if (!openSelectedMethodSDM(actDiag, meth, sqlRepository, out methParent, out container)) { if (methParent.Stereotype == ECOREModelingMain.EClassStereotype) { CreateSDMDialog createSdmDialog = new CreateSDMDialog(); if (createSdmDialog.ShowDialog() == DialogResult.OK) { createStoryDiagram(meth, repository, actDiag); } return(true); } } else { return(true); } } else if (SdmDiagramMetatype.Contains(actDiag.MetaType)) { repository.SaveDiagram(actDiag.DiagramID); if (elem != null) { if (elem.Stereotype == SDMModelingMain.ObjectVariableStereotype) { ObjectVariable ov = new ObjectVariable(elem, sqlRepository); OvDialog objectVariableDialogue = new OvDialog(sqlRepository, ov); objectVariableDialogue.ShowDialog(); return(true); } else if (elem.Stereotype == SDMModelingMain.StoryNodeStereotype || elem.Stereotype == SDMModelingMain.StatementNodeStereotype) { SQLTaggedValue extractedTag = EAEcoreAddin.Util.EAUtil.findTaggedValue(elem, Main.MoflonExtractedStoryPatternTaggedValueName); if (extractedTag == null) { SQLTaggedValue oldExtractedTag = EAEcoreAddin.Util.EAUtil.findTaggedValue(elem, "evacuated"); if (oldExtractedTag != null) { EAEcoreAddin.Util.EAUtil.setTaggedValue(sqlRepository, elem.getRealElement(), Main.MoflonExtractedStoryPatternTaggedValueName, oldExtractedTag.Value); } else { EAEcoreAddin.Util.EAUtil.setTaggedValue(sqlRepository, elem.getRealElement(), Main.MoflonExtractedStoryPatternTaggedValueName, "false"); } extractedTag = EAEcoreAddin.Util.EAUtil.findTaggedValue(elem, Main.MoflonExtractedStoryPatternTaggedValueName); } if (extractedTag != null && extractedTag.Value == Main.TrueValue) { SQLDiagram diagram = (SQLDiagram)elem.Diagrams.GetAt(0); Navigator.addAnchorEntry(diagram.DiagramID, actDiag.DiagramID); repository.OpenDiagram(diagram.DiagramID); } else { if (elem.Stereotype == SDMModelingMain.StoryNodeStereotype) { ActivityNodeTabsForm activityNodeDialog = new ActivityNodeTabsForm(new StoryNode(sqlRepository, elem), sqlRepository); } else if (elem.Stereotype == SDMModelingMain.StatementNodeStereotype) { ActivityNodeTabsForm activityNodeDialog = new ActivityNodeTabsForm(new StatementNode(sqlRepository, elem), sqlRepository); } } return(true); } else if (elem.Stereotype == SDMModelingMain.StopNodeStereotype) { StopNode stopNode = new StopNode(sqlRepository, elem); StopNodeForm sNodeForm = new StopNodeForm(stopNode, sqlRepository); return(true); } else if (elem.Stereotype == TGGModelingMain.CSPConstraintStereotype) { SDMCSPDialog sdmCspDialog = new SDMCSPDialog(elem, sqlRepository); sdmCspDialog.ShowDialog(); return(true); } } if (con != null) { if (con.Stereotype == SDMModelingMain.LinkVariableStereotype) { LinkVariablePropertiesForm linkVariableDialogue = new LinkVariablePropertiesForm(new LinkVariable(con, sqlRepository), sqlRepository, true); return(true); } else if (con.Type == Main.EAControlFlowType) { ActivityEdge activityEdge = new ActivityEdge(sqlRepository, con); ActivityEdgePropertiesForm activityEdgeDialog = new ActivityEdgePropertiesForm(activityEdge, repository); return(true); } else if (con.Stereotype == SDMModelingMain.BindingExpressionLinkStereotype) { SQLElement targetElement = sqlRepository.GetElementByID(con.SupplierID); ObjectVariable ov = new ObjectVariable(targetElement, sqlRepository); OvDialog ovDialog = new OvDialog(sqlRepository, ov); ovDialog.showTab(2); ovDialog.ShowDialog(); return(true); } } if (ot == EA.ObjectType.otDiagram) { EA.Diagram diag = (EA.Diagram)repository.GetDiagramByGuid(GUID); EA.Element activity = null; SQLTaggedValue evacuatedTag = null; if (diag.ParentID != 0) { activity = repository.GetElementByID(diag.ParentID); evacuatedTag = EAEcoreAddin.Util.EAUtil.findTaggedValue(sqlRepository.GetElementByID(activity.ElementID), Main.MoflonExtractedStoryPatternTaggedValueName); } if (evacuatedTag != null && evacuatedTag.Value == Main.TrueValue) { StoryNode activityNode = new StoryNode(sqlRepository, sqlRepository.GetElementByID(activity.ElementID)); ActivityNodeTabsForm activityNodeDialog = new ActivityNodeTabsForm(activityNode, sqlRepository); return(true); } } //sqlRepository.ReloadDiagram(actDiag.DiagramID); } else if (TGGModelingMain.TggRulesDiagramMetatype.Contains(actDiag.MetaType) && ot == EA.ObjectType.otMethod) { EA.TaggedValue aTag = null; EA.Element methParent = repository.GetElementByID(meth.ParentID); EA.Element container = null; foreach (EA.Element sdmContainer in methParent.Elements) { if (sdmContainer.Stereotype == SDMModelingMain.SdmContainerStereotype) { aTag = EAEcoreAddin.Util.EAUtil.findTaggedValue(sdmContainer, SDMModelingMain.SDMContainerAssociatedMethodTaggedValueName); if (aTag.Value == meth.MethodGUID.ToString()) { container = sdmContainer; break; } } } EA.Diagram sdmDiagg = null; if (container != null) { foreach (EA.Diagram sdmDiag in container.Diagrams) { sdmDiagg = sdmDiag; repository.OpenDiagram(sdmDiag.DiagramID); return(true); } } if (sdmDiagg == null && container == null) // no SDM Diagram exists { if (methParent.Stereotype == TGGModelingMain.TggRuleStereotype) { createStoryDiagram(meth, repository, actDiag); return(true); } } } } return(false); }
private void onTggLvDoubleClicked(SQLRepository sqlRepository, SQLConnector doubleClickedConnector) { TGGLinkVariable tggLv = new TGGLinkVariable(doubleClickedConnector, sqlRepository); this.LinkVariableDialog = new LinkVariablePropertiesForm(tggLv, sqlRepository, true); }