private void embedStoryPattern() { EA.Diagram evacuateDiagram = currentSdmDiagram; EA.Diagram embedDiagram = null; activityTabsForm.ActivityNode.ActivityNodeEAElement.Diagrams.Refresh(); SQLElement sdmContainer = repository.GetElementByID(activityTabsForm.ActivityNode.ActivityNodeEAElement.ParentID); repository.SaveDiagram(currentSdmDiagram.DiagramID); EA.DiagramObject activityDiagObj = null; foreach (SQLDiagram diagrams in sdmContainer.Diagrams) { if (activityDiagObj == null) { activityDiagObj = EAUtil.findDiagramObject(repository, activityTabsForm.ActivityNode.ActivityNodeEAElement.getRealElement(), diagrams.getRealDiagram()); embedDiagram = EAUtil.sqlEAObjectToOriginalObject(repository, diagrams) as EA.Diagram; } } try { int i = 30; foreach (SQLElement element in activityTabsForm.ActivityNode.ActivityNodeEAElement.Elements) { if (element.Stereotype == SDMModelingMain.ObjectVariableStereotype) { EAUtil.deleteDiagramObject(repository.GetOriginalRepository(), evacuateDiagram, element.getRealElement()); int l = activityDiagObj.left + i; int r = l + 90; int t = activityDiagObj.top - i; int b = t - 50; EA.DiagramObject elementDiagObj = (EA.DiagramObject)embedDiagram.DiagramObjects.AddNew( "l=" + l + ";r=" + r + ";t=" + t + ";b=" + b, element.Type); i += 60; elementDiagObj.ElementID = element.ElementID; elementDiagObj.Sequence = activityDiagObj.Sequence + 1; elementDiagObj.Update(); } } activityDiagObj.Sequence = int.MaxValue; activityDiagObj.Update(); repository.ReloadDiagram(embedDiagram.DiagramID); EAEcoreAddin.Util.EAUtil.setTaggedValue(repository, activityTabsForm.ActivityNode.ActivityNodeEAElement.getRealElement(), Main.MoflonExtractedStoryPatternTaggedValueName, "false"); buttonEvacuate.Text = "Extract Story Pattern"; repository.OpenDiagram(embedDiagram.DiagramID); this.ParentForm.Close(); } catch { System.Windows.Forms.MessageBox.Show("The associated Activity is not on any diagrams"); } }
private static void transformConstraintToCSPElement(SQLElement eaElement2, SQLWrapperClasses.SQLRepository sqlRep, EA.Repository repository) { EA.Element eaElement = EAUtil.sqlEAObjectToOriginalObject(sqlRep, eaElement2) as EA.Element; String result = repository.SQLQuery("select Diagram_ID from t_diagramobjects where Object_ID = " + eaElement.ElementID); string diagramId = EAUtil.getXMLNodeContentFromSQLQueryString(result, "Diagram_ID")[0]; if (diagramId != "") { EA.Diagram diagram = repository.GetDiagramByID(int.Parse(diagramId)); EA.DiagramObject oldDiagObject = EAUtil.findDiagramObject(sqlRep, eaElement, diagram); EA.Element ruleElement = repository.GetElementByID(diagram.ParentID); if (ruleElement.Stereotype == TGGModelingMain.TggRuleStereotype) { List <EA.Connector> outgoingCons = new List <EA.Connector>(); foreach (EA.Connector con in eaElement.Connectors) { if (con.Stereotype == "ConstraintLink" && con.ClientID == eaElement.ElementID) { outgoingCons.Add(con); } } EA.Element newCsp = ruleElement.Elements.AddNew("", Main.EAClassType) as EA.Element; newCsp.Notes = eaElement.Notes; newCsp.Stereotype = TGGModelingMain.CSPConstraintStereotype; newCsp.Update(); EA.TaggedValue oldTag = EAUtil.findTaggedValue(eaElement, Main.MoflonExportTreeTaggedValueName); if (oldTag != null) { EAUtil.setTaggedValueNotes(sqlRep, newCsp, oldTag.Name, oldTag.Notes); } EA.DiagramObject newDiagObject = diagram.DiagramObjects.AddNew("", Main.EAClassType) as EA.DiagramObject; newDiagObject.ElementID = newCsp.ElementID; newDiagObject.left = oldDiagObject.left; newDiagObject.right = oldDiagObject.right; newDiagObject.bottom = oldDiagObject.bottom; newDiagObject.top = oldDiagObject.top; newDiagObject.Update(); foreach (EA.Connector con in outgoingCons) { con.ClientID = newCsp.ElementID; con.Update(); } EAUtil.deleteDiagramObject(repository, diagram, eaElement); EAUtil.deleteElement(eaElement, sqlRep); } } }
private void copyDiagramObjects(int leftMax, int topMax, EA.Diagram newSdmDiagram, EA.Element selectedElement) { //copy storypattern diagramObjects foreach (EA.Element ov in selectedElement.Elements) { EA.DiagramObject oldOVDiagramObject = getDiagramObject(ov.ElementID); if (oldOVDiagramObject != null) { copyDiagramObject(leftMax, topMax, newSdmDiagram, oldOVDiagramObject, ov, 1); EAUtil.deleteDiagramObject(repository, oldSDMDiagram, ov); } } }
private void appendNewMethodAndSdm() { repository.SaveDiagram(oldSDMDiagram.DiagramID); EA.Element eClass = getContainingClass(); this.newMethod = eClass.Methods.AddNew(textBoxNewSDM.Text, "void") as EA.Method; newMethod.Update(); SDMModelingMain.createStoryDiagram(sqlRepository.GetMethodByID(newMethod.MethodID), sqlRepository.GetOriginalRepository(), oldSDMDiagram); newSdmContainer = sqlRepository.GetOriginalRepository().GetElementByID(sqlRepository.GetCurrentDiagram().ParentID); EA.Diagram newSdmDiagram = newSdmContainer.Diagrams.GetAt(0) as EA.Diagram; EA.Element newStartNode = findNewStartNode(newSdmContainer); createExtractedSDMStatementNode(); int leftMax = 10000000; int topMax = -100000; computeLeftAndTopMin(ref leftMax, ref topMax); //copy elements foreach (EA.Element selectedElement in this.selectedActivityNodes) { selectedElement.ParentID = newSdmContainer.ElementID; EA.DiagramObject newPatternDiagramObject = null; copyDiagramObjects(leftMax - 100, topMax + 100, newSdmDiagram, selectedElement); EA.DiagramObject selectedDiagramObject = getDiagramObject(selectedElement.ElementID); if (selectedDiagramObject != null) { newPatternDiagramObject = copyDiagramObject(leftMax - 100, topMax + 100, newSdmDiagram, selectedDiagramObject, selectedElement, 2); EAUtil.deleteDiagramObject(repository, oldSDMDiagram, selectedElement); } //deleteUnselectedConnectors(selectedElement); selectedElement.Update(); arrangeUnselectedConnectors(newSdmContainer, newSdmDiagram, newStartNode, selectedElement, newPatternDiagramObject.bottom, newPatternDiagramObject.left); } repository.ReloadDiagram(newSdmDiagram.DiagramID); repository.ReloadDiagram(oldSDMDiagram.DiagramID); repository.OpenDiagram(oldSDMDiagram.DiagramID); }
private void extractStoryPattern() { Dictionary <EA.DiagramObject, EA.Element> diagramObjectsToElement = new Dictionary <EA.DiagramObject, EA.Element>(); EA.Diagram newDiagram = null; //create new diagram if necessary if (activityTabsForm.ActivityNode.ActivityNodeEAElement.Diagrams.Count == 0) { newDiagram = (EA.Diagram)activityTabsForm.ActivityNode.ActivityNodeEAElement.getRealElement().Diagrams.AddNew(activityTabsForm.ActivityNode.ActivityNodeEAElement.Name, SDMModelingMain.SdmDiagramMetatype[0]); } //or choose already existing diagram else { newDiagram = (activityTabsForm.ActivityNode.ActivityNodeEAElement.Diagrams.GetAt(0) as SQLDiagram).getRealDiagram(); newDiagram.Name = activityTabsForm.ActivityNode.ActivityNodeEAElement.Name; newDiagram.Update(); } newDiagram.ParentID = activityTabsForm.ActivityNode.ActivityNodeEAElement.ElementID; repository.SaveDiagram(newDiagram.DiagramID); newDiagram.Update(); int leftMin = int.MaxValue; int topMax = int.MinValue; //compute the minimal left value and the maximal top value of all object variables contained by current StoryNode foreach (SQLElement actElement in activityTabsForm.ActivityNode.ActivityNodeEAElement.Elements) { EA.DiagramObject actDiagObj = EAEcoreAddin.Util.EAUtil.findDiagramObject(repository, actElement.getRealElement(), currentSdmDiagram); if (actDiagObj != null) { if (leftMin > actDiagObj.left) { leftMin = actDiagObj.left; } if (topMax < actDiagObj.top) { topMax = actDiagObj.top; } diagramObjectsToElement.Add(actDiagObj, actElement.getRealElement()); } } //compute the difference for the new diagram objects so they are pinned on the left top corner int differenceLeftRight = leftMin - 40; if (differenceLeftRight < 0) { differenceLeftRight = 40; } int differenceTopBottom = topMax + 40; if (differenceTopBottom > 0) { differenceTopBottom = -40; } //delete all old diagramobjects and create new ones on the extracted diagram- foreach (EA.DiagramObject oldDiagramObject in diagramObjectsToElement.Keys) { EA.Element element = diagramObjectsToElement[oldDiagramObject]; EAUtil.deleteDiagramObject(repository.GetOriginalRepository(), currentSdmDiagram, element); EA.DiagramObject newDiaObj = (EA.DiagramObject)newDiagram.DiagramObjects.AddNew("", element.Type); newDiaObj.left = oldDiagramObject.left - differenceLeftRight; newDiaObj.right = oldDiagramObject.right - differenceLeftRight; newDiaObj.top = oldDiagramObject.top - differenceTopBottom; newDiaObj.bottom = oldDiagramObject.bottom - differenceTopBottom; newDiaObj.ElementID = element.ElementID; newDiaObj.Update(); } activityTabsForm.ActivityNode.ActivityNodeEAElement.getRealElement().Update(); repository.SaveDiagram(currentSdmDiagram.DiagramID); repository.ReloadDiagram(currentSdmDiagram.DiagramID); repository.ReloadDiagram(newDiagram.DiagramID); buttonEvacuate.Text = "Embed Story Pattern"; Navigator.addAnchorEntry(newDiagram.DiagramID, currentSdmDiagram.DiagramID); repository.OpenDiagram(newDiagram.DiagramID); SDMModelingMain.setAnchorElementTags(repository, currentSdmDiagram, activityTabsForm.ActivityNode.ActivityNodeEAElement); this.ParentForm.Close(); EAEcoreAddin.Util.EAUtil.setTaggedValue(repository, activityTabsForm.ActivityNode.ActivityNodeEAElement.getRealElement(), Main.MoflonExtractedStoryPatternTaggedValueName, "true"); }