/// <summary> /// Initialization of the Form /// </summary> /// <param name="transition"></param> /// <param name="Repository"></param> public ActivityEdgePropertiesForm(ActivityEdge activityEdge, EA.Repository Repository) { InitializeComponent(); activityEdge.loadTreeFromTaggedValue(); this.repository = Repository; this.activityEdge = activityEdge; this.StartPosition = FormStartPosition.CenterScreen; this.cmbGuard.comboBoxFromEdgeGuard(activityEdge.GuardType); this.ShowDialog(); }
public void importActivityEdge(SQLElement activityNodeElement, MocaNode activityEdgeNode) { String targetgGuid = MainImport.getInstance().OldGuidToNewGuid[activityEdgeNode.getAttributeOrCreate("targetGuid").Value]; EA.Element targetElement = MainImport.getInstance().ElementGuidToElement[targetgGuid]; EA.Connector activityEdgeConnector = MainImport.getInstance().EcoreImport.getOrCreateConnector(activityNodeElement, sqlRep.GetElementByID(targetElement.ElementID), activityEdgeNode.getAttributeOrCreate(Main.GuidStringName).Value, Main.EAControlFlowType); ActivityEdge actEdge = new ActivityEdge(sqlRep, sqlRep.GetConnectorByID(activityEdgeConnector.ConnectorID)); actEdge.deserializeFromMocaTree(activityEdgeNode); MainImport.getInstance().MocaTaggableElements.Add(actEdge); }
public void processActivityEdge(SQLConnector activityEdgeEAElement) { SQLConnectorTag mocaTreeTag = EAEcoreAddin.Util.EAUtil.findTaggedValue(activityEdgeEAElement, Main.MoflonExportTreeTaggedValueName); ActivityEdge aEdge = new ActivityEdge(repository, activityEdgeEAElement); Boolean valid = aEdge.loadTreeFromTaggedValue(); MocaNode activityEdgeMocaNode = new MocaNode(); activityEdgeMocaNode.deserializeFromXmlTree(MocaTreeUtil.stringToXmlDocument(mocaTreeTag.Notes).DocumentElement.FirstChild as XmlElement); aEdge.addAttributesDuringExport(activityEdgeMocaNode); this.currentNode.appendChildNode(activityEdgeMocaNode); }
public override List <String> doRule(SQLElement eaElement, SQLWrapperClasses.SQLRepository repository) { List <String> results = new List <string>(); if (eaElement.Stereotype == SDMModelingMain.StatementNodeStereotype) { StatementNode statementNode = new StatementNode(repository, eaElement); statementNode.loadTreeFromTaggedValue(); if (statementNode.StatementExpression != null) { String result = statementNode.StatementExpression.ToString(); if (!ConsistencyUtil.checkExpression(eaElement, statementNode.StatementExpression, repository)) { results.Add("StatementExpression is invalid: (" + result + ")"); } } else { results.Add("StatementExpression is missing"); } foreach (SQLConnector outgoingCon in eaElement.Connectors) { if (outgoingCon.ClientID == eaElement.ElementID) { ActivityEdge edge = new ActivityEdge(repository, outgoingCon); edge.loadTreeFromTaggedValue(); if (edge.GuardType == EdgeGuard.FAILURE || edge.GuardType == EdgeGuard.SUCCESS) { if (statementNode.StatementExpression is MethodCallExpression) { MethodCallExpression mCe = statementNode.StatementExpression as MethodCallExpression; SQLMethod method = repository.GetMethodByGuid(mCe.MethodGuid); if (method != null && method.ReturnType != "EBoolean") { results.Add("Method must be of type EBoolean if StatementNode has success/failure guards"); } } } } } } 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); }
/// <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 createExtractedSDMStatementNode() { Boolean thisPatternCreated = false; int leftMax = 0; int topMax = -100000; computeLeftAndTopMax(ref leftMax, ref topMax); EA.Element thisObject = searchThisObject(); //only create a statementNode if there exists a this object on the sdm //otherwise create new story node with an this variable if (thisObject == null) { thisOvPattern = createStoryPattern("this Activity"); thisObject = createThisOv(thisOvPattern); createDiagramObject(leftMax + 50, topMax - 20, 50, 100, thisObject); createDiagramObject(leftMax, topMax, 100, 200, thisOvPattern); thisPatternCreated = true; leftMax += 300; } //create new story node with objectvariable bound to new sdm. if (checkBoxBoundOv.Checked) { EA.Element boundOvPattern = createStoryPattern("Bound new SDM"); EA.Element boundObject2 = createThisOv(boundOvPattern); SQLElement boundObject = sqlRepository.GetElementByID(boundObject2.ElementID); createDiagramObject(leftMax + 20, topMax - 20, 50, 100, boundObject2); createDiagramObject(leftMax, topMax, 100, 200, boundOvPattern); ObjectVariable ov = new ObjectVariable(boundObject, sqlRepository); ov.loadTreeFromTaggedValue(); ov.BindingState = BindingState.BOUND; MethodCallExpression mcExp = new MethodCallExpression(sqlRepository.GetMethodByID(newMethod.MethodID), sqlRepository); ObjectVariableExpression ovExp = new ObjectVariableExpression(sqlRepository.GetElementByID(thisObject.ElementID), sqlRepository); mcExp.Target = ovExp; ov.BindingExpression = mcExp; ov.Classifier = ovClassifiersComboBox1.Classifiers[ovClassifiersComboBox1.SelectedIndex]; ov.saveTreeToEATaggedValue(true); sdmCallPattern = boundOvPattern; EA.Method sdmMethod = repository.GetMethodByGuid(EAUtil.findTaggedValue(sqlRepository.GetElementByID(newSdmContainer.ElementID), SDMModelingMain.SDMContainerAssociatedMethodTaggedValueName).Value); sdmMethod.ClassifierID = "" + ov.Classifier.EaElement.ElementID; sdmMethod.ReturnType = ov.Classifier.EaElement.Name; sdmMethod.Update(); } //instead create statement node construct else { EA.Element statementActivity = createStoryPattern("Call extracted method"); StatementNode statementNode = new StatementNode(sqlRepository, sqlRepository.GetElementByID(statementActivity.ElementID)); MethodCallExpression mcExp = new MethodCallExpression(sqlRepository.GetMethodByID(newMethod.MethodID), sqlRepository); ObjectVariableExpression ovExp = new ObjectVariableExpression(sqlRepository.GetElementByID(thisObject.ElementID), sqlRepository); mcExp.Target = ovExp; statementNode.StatementExpression = mcExp; statementActivity.Notes = thisObject.Name + "." + newMethod.Name + "()"; EAEcoreAddin.Util.EAUtil.setTaggedValue(sqlRepository, statementActivity, "activityType", "call"); EAEcoreAddin.Util.EAUtil.setTaggedValue(sqlRepository, statementActivity, "evacuated", "false"); statementActivity.Update(); createDiagramObject(leftMax, topMax, 200, 200, statementActivity); statementNode.saveTreeToEATaggedValue(true); sdmCallPattern = statementActivity; } if (thisPatternCreated) { //create edge between this pattern and statement pattern EA.Connector acEdge = thisOvPattern.Connectors.AddNew("", Main.EAControlFlowType) as EA.Connector; acEdge.SupplierID = sdmCallPattern.ElementID; acEdge.Update(); ActivityEdge edge = new ActivityEdge(sqlRepository, sqlRepository.GetConnectorByID(acEdge.ConnectorID)); edge.saveTreeToEATaggedValue(true); } }
private void arrangeUnselectedConnectors(EA.Element newSdmContainer, EA.Diagram newSdmDiagram, EA.Element newStartNode, EA.Element selectedElement, int diagObjectBottom, int diagObjectLeft) { foreach (EA.Connector connector in selectedElement.Connectors) { if (!this.selectedElementIDs.Contains(connector.ClientID)) { ActivityEdge oldEdge = new ActivityEdge(sqlRepository, sqlRepository.GetConnectorByID(connector.ConnectorID)); oldEdge.loadTreeFromTaggedValue(); //rearrange connector target to new statement node if (thisOvPattern != null) { connector.SupplierID = thisOvPattern.ElementID; } else { connector.SupplierID = sdmCallPattern.ElementID; } connector.Update(); //create new connection from new start node to selected Element EA.Connector newConnection = newStartNode.Connectors.AddNew("", Main.EAControlFlowType) as EA.Connector; newConnection.SupplierID = selectedElement.ElementID; newConnection.Update(); ActivityEdge newEdge = new ActivityEdge(sqlRepository, sqlRepository.GetConnectorByID(newConnection.ConnectorID)); //newEdge.GuardType = oldEdge.GuardType; newEdge.saveTreeToEATaggedValue(true); } else if (!this.selectedElementIDs.Contains(connector.SupplierID)) { ActivityEdge oldEdge = new ActivityEdge(sqlRepository, sqlRepository.GetConnectorByID(connector.ConnectorID)); oldEdge.loadTreeFromTaggedValue(); //rearrange target source to new statement node connector.ClientID = sdmCallPattern.ElementID; connector.Update(); EdgeGuard newGuard = oldEdge.GuardType; oldEdge.GuardType = EdgeGuard.NONE; oldEdge.saveTreeToEATaggedValue(true); //create new stopnode for old outgoing edge from selected element EA.Element newStopNode = newSdmContainer.Elements.AddNew("", Main.EAStateNodeType) as EA.Element; newStopNode.Subtype = Main.EAStopNodeSubtype; newStopNode.Update(); StopNode stopNode = new StopNode(sqlRepository, sqlRepository.GetElementByID(newStopNode.ElementID)); stopNode.saveTreeToEATaggedValue(true); EA.DiagramObject stopNodeDiagramObject = newSdmDiagram.DiagramObjects.AddNew("", Main.EAStateNodeType) as EA.DiagramObject; stopNodeDiagramObject.ElementID = newStopNode.ElementID; stopNodeDiagramObject.top = diagObjectBottom - 20; stopNodeDiagramObject.bottom = diagObjectBottom - 40; stopNodeDiagramObject.left = diagObjectLeft + 20; stopNodeDiagramObject.right = diagObjectLeft + 40; stopNodeDiagramObject.Update(); EA.Connector newConnection = selectedElement.Connectors.AddNew("", Main.EAControlFlowType) as EA.Connector; newConnection.SupplierID = newStopNode.ElementID; newConnection.Update(); ActivityEdge newEdge = new ActivityEdge(sqlRepository, sqlRepository.GetConnectorByID(newConnection.ConnectorID)); newEdge.GuardType = newGuard; newEdge.saveTreeToEATaggedValue(true); } } }