示例#1
0
        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);
        }
示例#2
0
文件: Main.cs 项目: HL7/ehrsfm-tool
        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);
            }
        }
示例#4
0
        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();
        }
示例#6
0
        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);
        }
示例#7
0
 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();
 }
示例#8
0
        /// <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!");
            }
        }
示例#9
0
        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));
        }
示例#10
0
        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);
        }
示例#11
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);
        }
示例#12
0
        /// <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");
            }
        }
示例#14
0
        /// <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();
        }
示例#16
0
 /// <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();
     }
 }
示例#17
0
        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);
        }
示例#21
0
 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);
        }
示例#23
0
        /// <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();
            }
        }
示例#24
0
        /// <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);
     }
 }
示例#27
0
        /// <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();
        }
示例#30
0
        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);
        }