private EA.Diagram CreateDiagramFromElement(EA.Element element) { EA.Diagram diagram = (EA.Diagram)element.Diagrams.AddNew(element.Name, "Requirements"); diagram.Update(); EA.DiagramObject fobj = (EA.DiagramObject)diagram.DiagramObjects.AddNew(string.Format("l={0};r={1};t={2};b={3}", 10, 630, 10, 110), ""); fobj.ElementID = element.ElementID; fobj.Update(); int left = 10; int top = 210; const int width = 200; const int height = 100; const int padding = 10; foreach (EA.Element subElement in element.Elements) { string dimensions = string.Format("l={0};r={1};t={2};b={3};", left, left + width, top, top + height); EA.DiagramObject obj = (EA.DiagramObject)diagram.DiagramObjects.AddNew(dimensions, ""); obj.ElementID = subElement.ElementID; obj.Update(); left += width + padding; if (left > 600) { left = 10; top += height + padding; } } diagram.Update(); return(diagram); }
private void mergeDiagrams(EA.Repository repository, EA.Package package) { Dictionary <int, EA.DiagramObject> dobjects = new Dictionary <int, EA.DiagramObject>(); Dictionary <int, EA.DiagramLink> dlinks = new Dictionary <int, EA.DiagramLink>(); foreach (EA.Diagram diagram in package.Diagrams) { foreach (EA.DiagramObject dobject in diagram.DiagramObjects) { dobjects[dobject.ElementID] = dobject; } foreach (EA.DiagramLink dlink in diagram.DiagramLinks) { dlinks[dlink.ConnectorID] = dlink; } } EA.Diagram mdiagram = (EA.Diagram)package.Diagrams.AddNew(string.Format("{0} (Merged)", package.Name), "Custom"); mdiagram.Update(); // copy objects int left = 10; int top = 10; const int width = 100; const int height = 80; const int padding = 10; foreach (EA.DiagramObject dobject in dobjects.Values) { EA.Element element = repository.GetElementByID(dobject.ElementID); if ("Boundary".Equals(element.Type)) { continue; } string dimensions = string.Format("l={0};r={1};t={2};b={3};", left, left + width, top, top + height); left += padding + width; EA.DiagramObject mobject = (EA.DiagramObject)mdiagram.DiagramObjects.AddNew(dimensions, ""); mobject.ElementID = element.ElementID; mobject.Update(); if (left == 1000) { left = 10; top += height; } } mdiagram.Update(); // copy links (o.a. NoteLinks) foreach (EA.DiagramLink dlink in dlinks.Values) { EA.DiagramLink mlink = (EA.DiagramLink)mdiagram.DiagramLinks.AddNew("", ""); mlink.ConnectorID = dlink.ConnectorID; mlink.Update(); } package.Update(); repository.OpenDiagram(mdiagram.DiagramID); }
private void addTGGElementToRuleFromSchema(EA.Element elementToBeCopied, EA.DiagramObject diagramObjectToBeCopied) { EA.Element newElement = newRuleElement.Elements.AddNew(elementToBeCopied.Name.Substring(0, 1).ToLower() + elementToBeCopied.Name.Substring(1, elementToBeCopied.Name.Length - 1), Main.EAObjectType) as EA.Element; newElement.ClassifierID = elementToBeCopied.ElementID; newElement.Update(); newElementIdToNewElement.Add(newElement.ElementID, newElement); oldElementIdToNewElementId.Add(elementToBeCopied.ElementID, newElement.ElementID); EA.DiagramObject newDiagramObject = newRuleDiagram.DiagramObjects.AddNew("", newElement.Type) as EA.DiagramObject; newDiagramObject.ElementID = newElement.ElementID; newDiagramObject.left = diagramObjectToBeCopied.left; newDiagramObject.right = diagramObjectToBeCopied.right; newDiagramObject.top = diagramObjectToBeCopied.top; newDiagramObject.bottom = diagramObjectToBeCopied.bottom; newDiagramObject.Update(); SQLElement sqlElement = repository.GetElementByID(newElement.ElementID); if (elementToBeCopied.Stereotype == ECOREModeling.ECOREModelingMain.EClassStereotype) { TGGObjectVariable tggOv = new TGGObjectVariable(sqlElement, repository); tggOv.loadTreeFromTaggedValue(); tggOv.BindingOperator = SDMModeling.SDMExportWrapper.patterns.BindingOperator.CREATE; tggOv.saveTreeToEATaggedValue(true); } else if (elementToBeCopied.Stereotype == TGGModelingMain.TggCorrespondenceTypeStereotype) { TGGCorrespondence tggCorr = new TGGCorrespondence(sqlElement, repository); tggCorr.loadTreeFromTaggedValue(); tggCorr.BindingOperator = SDMModeling.SDMExportWrapper.patterns.BindingOperator.CREATE; tggCorr.saveTreeToEATaggedValue(true); } }
private static void printCSPConstraintObject(EA.Element child, EA.Diagram diagram, EA.Repository repository, List <Point> usedPoints) { SQLRepository sqlRep = new SQLRepository(repository, false); TGGObjectVariable ov = new TGGObjectVariable(sqlRep.GetElementByID(child.ElementID), sqlRep); ov.loadTreeFromTaggedValue(); int x = 4; int y = 1; while (usedPoints.Contains(new Point(x, y))) { y++; } EA.DiagramObject diagObject = diagram.DiagramObjects.AddNew("", "") as EA.DiagramObject; diagObject.ElementID = child.ElementID; diagObject.left = x * 200; diagObject.right = diagObject.left + 125; diagObject.top = y * -100; diagObject.bottom = diagObject.top - 50; diagObject.Update(); usedPoints.Add(new Point(x, y)); }
public override void doEaGuiStuff() { base.doEaGuiStuff(); EA.Element realElement = ActivityNodeEAElement.getRealElement(); if (StatementExpression == null) { realElement.Notes = ""; realElement.Update(); } else { realElement.Notes = StatementExpression.ToString(); //diagramObject.right = diagramObject.left + 20 + longestConstraint * 5; foreach (String id in EAUtil.getDiagramIDsOfObject(ActivityNodeEAElement, Repository)) { if (id != "") { EA.Diagram currentDiagram = Repository.GetOriginalRepository().GetDiagramByID(int.Parse(id)); if (currentDiagram != null) { EA.DiagramObject diagramObject = EAEcoreAddin.Util.EAUtil.findDiagramObject(Repository, realElement, currentDiagram); if (diagramObject != null) { diagramObject.right = diagramObject.left + 20 + StatementExpression.ToString().Length * 5; diagramObject.bottom = diagramObject.top - 80; diagramObject.Update(); } } } } } realElement.Stereotype = SDMModelingMain.StatementNodeStereotype; realElement.Update(); }
private EA.DiagramObject AddDiagramInteractionFragment(EA.Diagram diagram, int iLinkedElementID, int iFirstObject, int iLastObject, int iFirstStep, int iLastStep) { string strLogInfo = "Diagram InteractionFragment for link ID: " + iLinkedElementID.ToString(); EAImporter.LogMsg(EAImporter.LogMsgType.Adding, strLogInfo); int iLeft = (iFirstObject * m_iObjCenterOffset) - m_iLOffsetFromObjCenter; if (iLeft < 10) { iLeft = 10; } int iRight = (iLastObject * m_iObjCenterOffset) + m_iROffsetFromObjCenter; int iTop = m_iTopOffset + (m_iHeightOneStep * iFirstStep); int iBottom = m_iTopOffset + (m_iHeightOneStep * (iLastStep + 1)); string strPos = "l=" + iLeft.ToString() + ";r=" + iRight.ToString() + ";t=" + iTop + ";b=" + iBottom + ";"; EA.DiagramObject diagramObj = diagram.DiagramObjects.AddNew(strPos, ""); diagramObj.ElementID = iLinkedElementID; diagramObj.Update(); diagram.DiagramObjects.Refresh(); return(diagramObj); }
private void createDiagramObject(int leftMax, int topMax, int height, int width, EA.Element thisActivity) { EA.DiagramObject diagObject = oldSDMDiagram.DiagramObjects.AddNew("l=" + (leftMax) + ";r=" + (leftMax + width) + ";t=" + topMax + "+;b=" + (topMax - height) + ";", thisActivity.Type) as EA.DiagramObject; diagObject.ElementID = thisActivity.ElementID; diagObject.Sequence = 1; diagObject.Update(); }
/// <summary> /// Set DiagramObject style. /// /// </summary> /// <param name="rep"></param> /// <param name="diaObject"></param> /// <param name="style"></param> public static void SetDiagramObjectStyle(EA.Repository rep, EA.DiagramObject diaObject, string style) { // preserve DUID Diagram Unit Identifier string s = (string)diaObject.Style; Match match = Regex.Match(s, @"DUID=[A-Z0-9a-z]+;"); string duid = ""; if (match.Success) { duid = match.Groups[0].Value; } diaObject.Style = duid + style.Replace(",", ";").Replace(" ", "").Replace(" ", "").Replace(" ", "").Trim(); try { diaObject.Update(); } catch (Exception e) { // Probably style is to long to contain all features MessageBox.Show($@"EA has a restriction of the length of the Database field. {e} ", @"Style is to long, make it shorter!"); } }
private static void printTGGOvObject(SQLElement child, EA.Diagram diagram, EA.Repository repository, List <Point> usedPoints) { TGGObjectVariable ov = new TGGObjectVariable(child, new SQLRepository(repository, false)); ov.loadTreeFromTaggedValue(); int x = 1; int y = 1; if (ov.domain == DomainType.TARGET) { x = 3; } while (usedPoints.Contains(new Point(x, y))) { y++; } EA.DiagramObject diagObject = diagram.DiagramObjects.AddNew("", "") as EA.DiagramObject; diagObject.ElementID = child.ElementID; diagObject.left = x * 200; diagObject.right = diagObject.left + 125; diagObject.top = y * -100; diagObject.bottom = diagObject.top - 50; diagObject.Update(); usedPoints.Add(new Point(x, y)); }
private int AddUCComponentToDiagram(EA.Package eAMainPackage, EA.Diagram diagram, int iElementID) { int iTopOffset = 10; int iHeightOneStep = 200; int iSpaceBetweenSteps = 20; int iL = 100; int iR = 200; int iT = iTopOffset + (iHeightOneStep * m_NoUseCaseComponents) + iSpaceBetweenSteps; int iB = iTopOffset + (iHeightOneStep * (m_NoUseCaseComponents + 1)); string strPos = "l=" + iL.ToString() + ";r=" + iR.ToString() + ";t=" + iT.ToString() + ";b=" + iB.ToString() + ";"; EA.DiagramObject diagramObj = diagram.DiagramObjects.AddNew(strPos, ""); if (diagramObj == null) { //EAImporter.LogError(EAImporter.LogErrorLevel.A, strLogInfo); return(1); } diagramObj.ElementID = iElementID; diagramObj.Update(); diagram.DiagramObjects.Refresh(); eAMainPackage.Diagrams.Refresh(); diagram.Update(); m_NoUseCaseComponents++; return(0); }
/// <summary> /// adds a package with the given Stereotype as a Subpackage to the given package /// </summary> /// <param name="package">The package, which is the parent of the newly created package</param> /// <param name="cStereotype">The stereotype of which the newly created package should be type of</param> /// <param name="name">The name of the package to add</param> /// internal EA.Package addViewPackage(EA.Package package, UMM cStereotype, String name, EA_Element diagramType) { // at first add the new package to the parent package EA.Package childPackage = (EA.Package)package.Packages.AddNew(name, ""); childPackage.Update(); childPackage = this.populateUMMView(childPackage, cStereotype); /* also add the child package to the package diagram contained in the parent * package, if wanted. if the package diagram doenst exist than create it */ EA.Diagram packageDiagram = (EA.Diagram)childPackage.Diagrams.AddNew(childPackage.Name, diagramType.ToString()); packageDiagram.ShowDetails = 0; packageDiagram.Update(); /* now add the child package to the package diagram of the parent */ EA.Collection diagramObjects = packageDiagram.DiagramObjects; EA.DiagramObject diagramObject = (EA.DiagramObject)diagramObjects.AddNew("l=200;r=400;t=200;b=600;", ""); diagramObject.ElementID = childPackage.Element.ElementID; diagramObject.Update(); repository.RefreshModelView(package.PackageID); return(childPackage); }
/// <summary> /// Размещает на диаграмме укзаанный элемент и иерархию его контейнеров /// </summary> /// <param name="onlyParent"></param> /// <returns></returns> public ExecResult <Boolean> PutChildrenDHierarchyOnDiagram() { ExecResult <Boolean> result = new ExecResult <bool>(); ElementDesignerHelper.CallLevel = 0; try { ExecResult <List <ComponentLevel> > displayLevelsResult = FSelectComponentLevels.Execute(); if (displayLevelsResult.code != 0) { return(result); } // Получаем текущий (библиотечный) элемент дерева EA.Element curElement = null; if (EARepository.GetTreeSelectedElements().Count > 0) { curElement = EARepository.GetTreeSelectedElements().GetAt(0); } Logger.Out("элемент:", new EA.Element[] { curElement }); if (curElement == null || !LibraryHelper.IsLibrary(curElement)) { throw new Exception("Не выделен библиотечный элемент"); } // Получаем список дочерних элементов контейнеров List <EA.Element> сhildrenDHierarchy = LibraryHelper.GetChildHierarchy(curElement); // Размещаем на диаграмме элемент PutElementOnDiagram(curElement); // Проходимся по иерархии и размещаем элементы на диаграмме for (int i = 0; i < сhildrenDHierarchy.Count; i++) { // размещает только элементы выбранных уровней ComponentLevel componentLevel = CLHelper.GetComponentLevel(сhildrenDHierarchy[i]); if (!displayLevelsResult.value.Contains(componentLevel)) { continue; } // Размещаем элемент EA.DiagramObject diagramObject = PutElementOnDiagram(сhildrenDHierarchy[i]); diagramObject.Update(); } CurrentDiagram.DiagramLinks.Refresh(); Context.LinkDesigner.SetLinkTypeVisibility(LinkType.Deploy, false); EARepository.ReloadDiagram(CurrentDiagram.DiagramID); } catch (Exception ex) { result.setException(ex); } return(result); }
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"); } }
/// <summary> /// Размещает на диаграмме укзаанный элемент и иерархию его контейнеров /// </summary> /// <param name="onlyParent"></param> /// <returns></returns> public ExecResult <Boolean> PutParentHierarchyOnDiagram(bool onlyParent = false) { ExecResult <Boolean> result = new ExecResult <bool>(); ElementDesignerHelper.CallLevel = 0; try { ExecResult <List <ComponentLevel> > displayLevelsResult = FSelectComponentLevels.Execute(); if (displayLevelsResult.code != 0) { return(result); } // Получаем текущий (библиотечный) элемент дерева EA.Element curElement = EARepository.GetTreeSelectedObject(); Logger.Out("элемент:", new EA.Element[] { curElement }); if (curElement == null || !LibraryHelper.IsLibrary(curElement)) { throw new Exception("Не выделен библиотечный элемент"); } // Получаем цепочку родительских контейнеров List <EA.Element> deployments = LibraryHelper.GetParentHierarchy(curElement); Logger.Out("цепочка deploy-родителей:", deployments.ToArray()); // Размещаем на диаграмме элемент PutElementOnDiagram(curElement); // Проходимся по иерархии и размещаем элементы на диаграмме EA.Element prevElement = null; for (int i = 0; i < deployments.Count; i++) { // размещает только элементы выбранных уровней ComponentLevel componentLevel = CLHelper.GetComponentLevel(deployments[i]); if (!displayLevelsResult.value.Contains(componentLevel)) { continue; } EA.DiagramObject diagramObject = PutElementOnDiagram(deployments[i]); //diagramObject.Sequence = 1000 - (deployments.Count + i); // Это надо нормально сделать diagramObject.Update(); prevElement = deployments[i]; } CurrentDiagram.DiagramLinks.Refresh(); Context.LinkDesigner.SetLinkTypeVisibility(LinkType.Deploy, false); EARepository.ReloadDiagram(CurrentDiagram.DiagramID); } catch (Exception ex) { result.setException(ex); } return(result); }
private void createCorrespondenceDiagramObject(EA.Diagram currentDiagram, EA.Repository Repository, EA.Element clientOv, EA.Element supplierOv, EA.Element tggCorrespondenceObject) { //create a new diagram object Repository.SaveDiagram(currentDiagram.DiagramID); EA.DiagramObject sourceDiagObj = null; EA.DiagramObject targetDiagObj = null; currentDiagram.DiagramObjects.Refresh(); foreach (EA.DiagramObject diagObj in currentDiagram.DiagramObjects) { if (diagObj.ElementID == clientOv.ElementID) { sourceDiagObj = diagObj; } else if (diagObj.ElementID == supplierOv.ElementID) { targetDiagObj = diagObj; } if (sourceDiagObj != null && targetDiagObj != null) { continue; } } int sourceLeft = (sourceDiagObj == null) ? 0 : sourceDiagObj.left; int sourceRight = (sourceDiagObj == null) ? 0 : sourceDiagObj.right; int sourceBottom = (sourceDiagObj == null) ? 0 : sourceDiagObj.bottom; int sourceTop = (sourceDiagObj == null) ? 0 : sourceDiagObj.top; int targetLeft = (targetDiagObj == null) ? 0 : targetDiagObj.left; int targetRight = (targetDiagObj == null) ? 0 : targetDiagObj.right; int targetBottom = (targetDiagObj == null) ? 0 : targetDiagObj.bottom; int targetTop = (targetDiagObj == null) ? 0 : targetDiagObj.top; EA.DiagramObject tggLinkDiagObj = currentDiagram.DiagramObjects.AddNew("", "") as EA.DiagramObject; tggLinkDiagObj.ElementID = tggCorrespondenceObject.ElementID; tggLinkDiagObj.Update(); tggLinkDiagObj.left = (sourceLeft + targetLeft) / 2; tggLinkDiagObj.right = (sourceRight + targetRight) / 2; tggLinkDiagObj.bottom = (sourceBottom + targetBottom) / 2; tggLinkDiagObj.top = (sourceTop + targetTop) / 2; tggLinkDiagObj.Update(); currentDiagram.DiagramObjects.Refresh(); }
/// <summary> /// Функция применяет указанный размер к объекту DiagramObject /// </summary> /// <param name="diagramObject"></param> /// <param name="size"></param> /// <param name="doUpdate"></param> public static void ApplySizeToDA(EA.DiagramObject diagramObject, Size size, bool doUpdate = true) { diagramObject.right = diagramObject.left + size.Width; diagramObject.bottom = diagramObject.top - size.Height; if (doUpdate) { diagramObject.Update(); } }
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 createThisObject() { EA.DiagramObject activityDiagramObject = EAEcoreAddin.Util.EAUtil.findDiagramObject(repository, activityTabsForm.ActivityNode.ActivityNodeEAElement.getRealElement(), currentSdmDiagram); SQLElement sdmContainer = repository.GetElementByID(activityTabsForm.ActivityNode.ActivityNodeEAElement.ParentID); SQLElement containingEClass = repository.GetElementByID(sdmContainer.ParentID); String b = ""; String r = ""; String l = ""; String t = ""; //compute the coordinates of the new diagramObject according to the StoryNode if (evacuated == Main.FalseValue) { b = "" + (activityDiagramObject.bottom + 20); r = "" + (activityDiagramObject.left + 110); l = "" + (activityDiagramObject.left + 20); t = "" + (activityDiagramObject.bottom + 70); } //compute the coordinates of the new diagramObject with static values else if (evacuated == Main.TrueValue) { b = "" + 60; r = "" + 100; l = "" + 10; t = "" + 10; } //create a new EA.Element which represents our new this ObjectVariable EA.Element obj = (EA.Element)activityTabsForm.ActivityNode.ActivityNodeEAElement.getRealElement().Elements.AddNew("this", Main.EAObjectType); obj.Name = "this"; obj.ParentID = activityTabsForm.ActivityNode.ActivityNodeEAElement.ElementID; obj.ClassifierID = containingEClass.ElementID; obj.Update(); //set the default values for the xml representation of the objectVariable ObjectVariable objectVariable = new ObjectVariable(repository.GetElementByID(obj.ElementID), repository); objectVariable.BindingState = BindingState.BOUND; objectVariable.BindingSemantics = BindingSemantics.MANDATORY; objectVariable.BindingOperator = BindingOperator.CHECK_ONLY; objectVariable.saveTreeToEATaggedValue(true); //create new diagramObject with the computed coordinates EA.DiagramObject diaObj = (EA.DiagramObject)currentSdmDiagram.DiagramObjects.AddNew("l=" + l + ";r=" + r + ";t=" + t + ";b=" + b, Main.EAObjectType); diaObj.ElementID = obj.ElementID; diaObj.Update(); //this is required since EA 10. if (activityDiagramObject != null) { activityDiagramObject.Sequence = int.MaxValue; activityDiagramObject.Update(); } repository.ReloadDiagram(currentSdmDiagram.DiagramID); }
private bool Update(EA.DiagramObject dgrO) { bool result = dgrO.Update(); if (result == false) { throw new Exception("Update Didn't work out properlly!!!"); } return(result); }
private void createRuleElementAndRuleDiagram() { this.newRuleElement = rulesPackage.Elements.AddNew(this.textBoxRuleName.Text, "Class") as EA.Element; this.newRuleElement.Stereotype = TGGModelingMain.TggRuleStereotype; this.newRuleElement.Update(); EA.Diagram rulesDiagram = rulesPackage.Diagrams.GetAt(0) as EA.Diagram; EA.DiagramObject newRuleDiagramObject = rulesDiagram.DiagramObjects.AddNew("", this.newRuleElement.Type) as EA.DiagramObject; if (this.addInheritanceLinkCheckBox.Checked) { EA.DiagramObject originalRuleDiagramObject = null; foreach (EA.DiagramObject diagramObject in rulesDiagram.DiagramObjects) { if (diagramObject.ElementID == this.originalRuleElement.ElementID) { originalRuleDiagramObject = diagramObject; break; } } if (originalRuleDiagramObject != null) { int verticalOffset = -(originalRuleDiagramObject.top - originalRuleDiagramObject.bottom + 40); newRuleDiagramObject.left = originalRuleDiagramObject.left - 10; newRuleDiagramObject.right = originalRuleDiagramObject.right + 10; newRuleDiagramObject.top = originalRuleDiagramObject.top + verticalOffset; newRuleDiagramObject.bottom = originalRuleDiagramObject.bottom + verticalOffset; } } else { newRuleDiagramObject.left = 10; newRuleDiagramObject.right = 110; newRuleDiagramObject.top = -10; newRuleDiagramObject.bottom = -80; } newRuleDiagramObject.ElementID = this.newRuleElement.ElementID; newRuleDiagramObject.Update(); if (this.addInheritanceLinkCheckBox.Checked) { addInheritanceLinkToOriginalRule(); } repository.ReloadDiagram(rulesDiagram.DiagramID); newRuleDiagram = newRuleElement.Diagrams.AddNew(this.textBoxRuleName.Text, TGGModelingMain.TggRuleDiagramMetatype[0]) as EA.Diagram; newRuleDiagram.Update(); TGGRule rule = new TGGRule(repository, repository.GetElementByID(newRuleElement.ElementID)); rule.saveTreeToEATaggedValue(true); }
private EA.DiagramObject copyDiagramObject(int leftMax, int topMax, EA.Diagram newDiagram, EA.DiagramObject oldDiagramObject, EA.Element element, int sequence) { EA.DiagramObject newDiaObj2 = (EA.DiagramObject)newDiagram.DiagramObjects.AddNew( "l=" + (oldDiagramObject.left - leftMax) + ";r=" + (oldDiagramObject.right - leftMax) + ";t=" + (oldDiagramObject.top - topMax) + ";b=" + (oldDiagramObject.bottom - topMax), element.Type); newDiaObj2.Sequence = sequence; newDiaObj2.ElementID = element.ElementID; newDiaObj2.Update(); return(newDiaObj2); }
public static EA.Element createAnchorElementIfNecessary(EA.Repository repository, EA.Diagram openedDiagram, Boolean reloadDiagramAfter) { //checks if the current SDM Diagram already contains an Anchor element. //String sqlResult = repository.SQLQuery(@"SELECT Count(*) as Count FROM t_object WHERE ParentID = " + openedDiagram.ParentID + // " AND Stereotype = '" + SDMModelingMain.SDMAnchorStereotype + "'"); String sqlResult = repository.SQLQuery(@"select Count(*) as Count from t_diagramobjects d, t_object o where d.Object_ID = o.Object_ID and o.Stereotype = '" + SDMModelingMain.SDMAnchorStereotype + "' and d.Diagram_ID = " + openedDiagram.DiagramID); String count = EAUtil.getXMLNodeContentFromSQLQueryString(sqlResult, "Count")[0]; if (count == "0") { Boolean locked = false; EA.Element newAnchorElement = null; if (openedDiagram.ParentID != 0) { EA.Element parentElement = repository.GetElementByID(openedDiagram.ParentID); locked = parentElement.Locked; newAnchorElement = parentElement.Elements.AddNew("", Main.EAClassType) as EA.Element; } else { EA.Package parentPackage = repository.GetPackageByID(openedDiagram.PackageID); locked = parentPackage.Element.Locked; newAnchorElement = parentPackage.Elements.AddNew("", Main.EAClassType) as EA.Element; } if (!locked) { newAnchorElement.Stereotype = SDMModelingMain.SDMAnchorStereotype; newAnchorElement.Update(); EA.DiagramObject newAnchorDiagramObject = openedDiagram.DiagramObjects.AddNew("", newAnchorElement.Type) as EA.DiagramObject; newAnchorDiagramObject.left = 5; newAnchorDiagramObject.top = -5; newAnchorDiagramObject.right = 25; newAnchorDiagramObject.bottom = -25; newAnchorDiagramObject.ElementID = newAnchorElement.ElementID; newAnchorDiagramObject.Update(); if (reloadDiagramAfter) { repository.ReloadDiagram(openedDiagram.DiagramID); } return(newAnchorElement); } } return(null); }
/// <summary> /// Функция передвигает DA в указанную точку /// </summary> /// <param name="diagramObject"></param> /// <param name="newStart"></param> /// <param name="doUpdate"></param> public static void ApplyPointToDA(EA.DiagramObject diagramObject, Point newStart, bool doUpdate = true) { Size diagramObjectSize = ElementDesignerHelper.GetSize(diagramObject); diagramObject.left = newStart.X; diagramObject.right = diagramObject.left + diagramObjectSize.Width; diagramObject.top = newStart.Y; diagramObject.bottom = diagramObject.top - diagramObjectSize.Height; if (doUpdate) { diagramObject.Update(); } }
/// <summary> /// Функция передвигает DA по указанному вектору (т.е. смещает на размеры точки) /// </summary> /// <param name="diagramObject"></param> /// <param name="newStart"></param> /// <param name="doUpdate"></param> public static void ApplyVectorToDA(EA.DiagramObject diagramObject, Point vector, bool doUpdate = true) { Size diagramObjectSize = ElementDesignerHelper.GetSize(diagramObject); diagramObject.left += vector.X; diagramObject.right += vector.X; diagramObject.top += vector.Y; diagramObject.bottom += vector.Y; if (doUpdate) { diagramObject.Update(); } }
/// <summary> /// creates an empty story diagram related to the given Method /// </summary> /// <param name="method"></param> /// <param name="repository"></param> /// <param name="currentDiagram"></param> The currently open diagram. An anchor will be added to this diagram. public static void createStoryDiagram(SQLMethod method, EA.Repository repository, EA.Diagram currentDiagram) { EA.Element containingEClass = repository.GetElementByID(method.ParentID); SQLRepository sqlRepository = new SQLRepository(repository, false); EA.Element sdmContainer = (EA.Element)(containingEClass.Elements.AddNew(method.Name, Main.EAClassType)); sdmContainer.ParentID = containingEClass.ElementID; EA.Diagram sdmDiagram = (EA.Diagram)(sdmContainer.Diagrams.AddNew(method.Name + " Story Diagram", SdmDiagramMetatype[0])); sdmDiagram.ParentID = sdmContainer.ElementID; sdmDiagram.ExtendedStyle = "HideRel=0;ShowTags=0;ShowReqs=0;ShowCons=0;OpParams=1;ShowSN=0;ScalePI=0;PPgs.cx=1;PPgs.cy=1;PSize=9;ShowIcons=1;SuppCN=0;HideProps=0;HideParents=0;UseAlias=0;HideAtts=0;HideOps=0;HideStereo=0;HideEStereo=1;FormName=;"; sdmDiagram.StyleEx = sdmDiagram.StyleEx + "HideConnStereotype=0;"; repository.SaveDiagram(sdmDiagram.DiagramID); sdmDiagram.Update(); EA.Element startNode = (EA.Element)sdmContainer.Elements.AddNew(" Start", Main.EAStateNodeType); startNode.Subtype = Main.EAStartNodeSubtype; startNode.ParentID = sdmContainer.ElementID; startNode.Name = SDMUtil.computeStartNodeName(sqlRepository.GetMethodByID(method.MethodID), sqlRepository.GetElementByID(containingEClass.ElementID)); startNode.Update(); EA.DiagramObject startNodeDiagramObject = (EA.DiagramObject)sdmDiagram.DiagramObjects.AddNew("l=50;r=70;t=50;b=70;", Main.EAStateNodeType); startNodeDiagramObject.ElementID = startNode.ElementID; startNodeDiagramObject.Update(); method.getRealMethod().Update(); sdmContainer.Update(); Navigator.addAnchorEntry(sdmDiagram.DiagramID, currentDiagram.DiagramID); String objectStyleString = "StateNodeLBL=CX=437:CY=13:OX=-9:OY=-18:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:ALT=0:ROT=0;DUID=2B547EF9;LBL=CX=437:CY=13:OX=-6:OY=-17:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:ALT=0:ROT=0;"; repository.Execute("UPDATE t_diagramobjects SET ObjectStyle = '" + objectStyleString + "' WHERE Object_ID = " + startNodeDiagramObject.ElementID); repository.OpenDiagram(sdmDiagram.DiagramID); sdmContainer.Elements.Refresh(); setAnchorElementTags(sqlRepository, currentDiagram, sqlRepository.GetElementByID(sdmContainer.ElementID)); Activity activity = new Activity(sqlRepository.GetElementByID(sdmContainer.ElementID), sqlRepository); activity.OwningOperation = new ECOREModeling.ECOREExportWrapper.EOperation(sqlRepository.GetMethodByID(method.MethodID), sqlRepository); activity.saveTreeToEATaggedValue(true); StartNode startNodeObject = new StartNode(sqlRepository, sqlRepository.GetElementByID(startNode.ElementID)); startNodeObject.saveTreeToEATaggedValue(true); }
public override void doRuleQuickFix(SQLElement eaElement, SQLRepository repository, int i, String errorMessage) { if (i == 0) { EAUtil.deleteElement(eaElement.getRealElement(), repository); } else if (i == 1) { EA.Diagram possibleDiagram = null; SQLElement parent = eaElement; SQLPackage parentPackage = null; while (possibleDiagram == null) { if (parent.ParentID != 0) { parent = repository.GetElementByID(parent.ParentID); if (parent.Diagrams.Count > 0) { possibleDiagram = parent.Diagrams.GetAt(0) as EA.Diagram; } } else { if (parentPackage == null) { parentPackage = repository.GetPackageByID(parent.PackageID); } else { parentPackage = repository.GetPackageByID(parentPackage.ParentID); } if (parentPackage.Diagrams.Count > 0) { possibleDiagram = parentPackage.Diagrams.GetAt(0) as EA.Diagram; } } } possibleDiagram = EAUtil.sqlEAObjectToOriginalObject(repository, possibleDiagram) as EA.Diagram; EA.DiagramObject diagObject = possibleDiagram.DiagramObjects.AddNew("", eaElement.Type) as EA.DiagramObject; diagObject.left = 20; diagObject.right = 120; diagObject.top = -20; diagObject.bottom = -70; diagObject.ElementID = eaElement.ElementID; diagObject.Update(); repository.OpenDiagram(possibleDiagram.DiagramID); EAUtil.clearSelectedDiagramObjects(repository); possibleDiagram.SelectedObjects.AddNew(diagObject.ElementID.ToString(), ""); repository.ReloadDiagram(possibleDiagram.DiagramID); } }
/// <summary> /// Устанавливает Zorder для нового элемента /// </summary> private void SetElementZorder(EA.DiagramObject diagramObject) { /* * План такой: * - на входе считаем, что ZOrder у всех нормальный кроме устанавливаемого * * - есть дерево дочерних (deploy) - обрабатываемый элемент надо положить "под них" * - есть прочие элементы, ZOrder которых был больше (ниже) дочерних выше - их всех надо "притопить" на единичку, т.к. под дочерними вставлен обрабатываемый * - все остальные не трогаем * */ EA.Element element = EARepository.GetElementByID(diagramObject.ElementID); // Получаем список родителей на диаграммме //List<EA.DiagramObject> parentDAList = EAHelper.GetDeployParentHierarchyDA(element); // Получаем список детей на диаграмме List <EA.DiagramObject> childrenDAList = LibraryHelper.GetDeployChildrenHierarchyDA(element); // наличие на диаграмме элементов дочерней иерархии, если есть такие - подкладываем элемент под них int elementZOrder = 0; foreach (var childDA in childrenDAList) { if (childDA.Sequence >= elementZOrder) { elementZOrder = childDA.Sequence + 1; } } foreach (EA.DiagramObject curDA in CurrentDiagram.DiagramObjects) { if (curDA.ElementID == diagramObject.ElementID) { diagramObject.Sequence = elementZOrder; diagramObject.Update(); } else if (curDA.Sequence >= elementZOrder) { curDA.Sequence = curDA.Sequence + 1; curDA.Update(); } } foreach (EA.DiagramObject curDA in CurrentDiagram.DiagramObjects) { Logger.Out("Zorder=" + curDA.Sequence, new EA.DiagramObject[] { curDA }); } }
private static bool CreateDefaultElementsForActivity(EA.Repository rep, EA.Diagram dia, EA.Element act) { // check if init and final node are available bool init = false; bool final = false; foreach (EA.Element node in act.Elements) { if (node.Type == "StateNode" & node.Subtype == 100) { init = true; } if (node.Type == "StateNode" & node.Subtype == 101) { final = true; } } if (!init) { EA.Element initNode = (EA.Element)act.Elements.AddNew("", "StateNode"); initNode.Subtype = 100; initNode.Update(); if (dia != null) { EA.DiagramObject initDiaNode = (EA.DiagramObject)dia.DiagramObjects.AddNew("l=295;r=315;t=125;b=135;", ""); initDiaNode.ElementID = initNode.ElementID; initDiaNode.Update(); } } if (!final) { EA.Element finalNode = (EA.Element)act.Elements.AddNew("", "StateNode"); finalNode.Subtype = 101; finalNode.Update(); if (dia != null) { EA.DiagramObject finalDiaNode = (EA.DiagramObject)dia.DiagramObjects.AddNew("l=285;r=305;t=745;b=765;", ""); finalDiaNode.ElementID = finalNode.ElementID; finalDiaNode.Update(); } } act.Elements.Refresh(); dia.DiagramObjects.Refresh(); dia.Update(); rep.ReloadDiagram(dia.DiagramID); return(true); }
private void addConstraintCopyToRule(EA.Element elementToBeCopied, EA.DiagramObject diagramObjectToBeCopied) { EA.Element newConstraint = newRuleElement.EmbeddedElements.AddNew(elementToBeCopied.Name, "Note") as EA.Element; newConstraint.Type = "Constraint"; newConstraint.Notes = elementToBeCopied.Notes; newConstraint.Update(); EA.DiagramObject newDiagramObject = newRuleDiagram.DiagramObjects.AddNew("", newConstraint.Type) as EA.DiagramObject; newDiagramObject.ElementID = newConstraint.ElementID; newDiagramObject.left = diagramObjectToBeCopied.left; newDiagramObject.right = diagramObjectToBeCopied.right; newDiagramObject.top = diagramObjectToBeCopied.top; newDiagramObject.bottom = diagramObjectToBeCopied.bottom; newDiagramObject.Update(); }
private int AddUCToUCDiagram(EA.Package eaPackage, EA.Diagram diagram, int iUCElementID, int iUCClassElementID, int iVertPos) { int iTopOffset = 10; int iHeightOneStep = 200; int iSpaceBetweenSteps = 20; int iL = 300; int iR = 400; int iT = iTopOffset + (iHeightOneStep * iVertPos) + iSpaceBetweenSteps; int iB = iTopOffset + (iHeightOneStep * (iVertPos + 1)); string strPos = "l=" + iL.ToString() + ";r=" + iR.ToString() + ";t=" + iT.ToString() + ";b=" + iB.ToString() + ";"; EA.DiagramObject diagramObj = diagram.DiagramObjects.AddNew(strPos, ""); if (diagramObj == null) { //EAImporter.LogError(EAImporter.LogErrorLevel.A, strLogInfo); return(1); } diagramObj.ElementID = iUCElementID; diagramObj.Update(); iL = 700; iR = 800; iT = iTopOffset + (iHeightOneStep * iVertPos) + iSpaceBetweenSteps; iB = iTopOffset + (iHeightOneStep * (iVertPos + 1)); strPos = "l=" + iL.ToString() + ";r=" + iR.ToString() + ";t=" + iT.ToString() + ";b=" + iB.ToString() + ";"; EA.DiagramObject diagramObj2 = diagram.DiagramObjects.AddNew(strPos, ""); if (diagramObj2 == null) { //EAImporter.LogError(EAImporter.LogErrorLevel.A, strLogInfo); return(1); } diagramObj2.ElementID = iUCClassElementID; diagramObj2.Update(); diagram.DiagramObjects.Refresh(); eaPackage.Diagrams.Refresh(); diagram.Update(); return(0); }