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();
        }
        public static int jumpToAnchorPredecessor(EA.Repository repository, int currentDiagramId)
        {
            SQLRepository sqlRepository = new SQLRepository(repository, false);

            if (targetDiagramIdToSourceDiagramId.ContainsKey(currentDiagramId))
            {
                int sourceDiagramId = targetDiagramIdToSourceDiagramId[currentDiagramId];
                repository.OpenDiagram(sourceDiagramId);
                lastAnchorSourceId = currentDiagramId;
                targetDiagramIdToSourceDiagramId.Remove(currentDiagramId);
                return(currentDiagramId);
            }
            else
            {
                EA.Diagram diagramToOpen  = null;
                EA.Diagram currentDiagram = repository.GetDiagramByID(currentDiagramId);


                if (currentDiagram != null)
                {
                    if (currentDiagram.ParentID != 0)
                    {
                        SQLElement    parentElement = sqlRepository.GetElementByID(currentDiagram.ParentID);
                        List <String> diagramIds    = EAUtil.getDiagramIDsOfObject(parentElement, sqlRepository);
                        while (diagramIds.Count == 1 && diagramIds[0] == "")
                        {
                            if (parentElement.ParentID != 0)
                            {
                                diagramIds = EAUtil.getDiagramIDsOfObject(sqlRepository.GetElementByID(parentElement.ParentID), sqlRepository);
                            }
                        }
                        diagramToOpen = repository.GetDiagramByID(int.Parse(diagramIds[0]));
                    }
                    if (diagramToOpen == null)
                    {
                        EA.Package parentPackage = repository.GetPackageByID(currentDiagram.PackageID);
                        if (parentPackage.Diagrams.Count > 0)
                        {
                            EA.Diagram firstDiagram = parentPackage.Diagrams.GetAt(0) as EA.Diagram;
                            if (firstDiagram.DiagramID != currentDiagramId)
                            {
                                diagramToOpen = firstDiagram;
                            }
                            else
                            {
                                if (parentPackage.ParentID != 0)
                                {
                                    parentPackage = repository.GetPackageByID(parentPackage.ParentID);
                                    if (parentPackage.Diagrams.Count > 0)
                                    {
                                        EA.Diagram parentDiagram = parentPackage.Diagrams.GetAt(0) as EA.Diagram;
                                        if (parentDiagram.DiagramID != currentDiagramId)
                                        {
                                            diagramToOpen = parentDiagram;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    if (diagramToOpen != null)
                    {
                        lastAnchorSourceId = currentDiagramId;
                        repository.OpenDiagram(diagramToOpen.DiagramID);
                        return(currentDiagramId);
                    }
                }
            }
            return(-1);
        }
        private void autoSetDiagramObjectSize(String bindingExprText)
        {
            //three empty lines to ensure the attribute assignments output are on the correct position

            int longestOvStringLength = 0;

            foreach (AttributeAssignment attrAssignment in this.AttributeAssignments)
            {
                String assignmentString = attrAssignment.ToString();
                if (assignmentString.StartsWith(this.sqlElement.Name))
                {
                    assignmentString = assignmentString.Remove(0, this.sqlElement.Name.Length + 1);
                }
                if (assignmentString.Length > longestOvStringLength)
                {
                    longestOvStringLength = assignmentString.Length;
                }
                sqlElement.getRealElement().Notes += "\r\n" + assignmentString;
            }
            foreach (Constraint constraint in this.Constraints)
            {
                String constraintString = constraint.ToString();
                constraintString = constraintString.Remove(0, this.sqlElement.Name.Length + 1);
                if (constraintString.Length > longestOvStringLength)
                {
                    longestOvStringLength = constraintString.Length;
                }
                sqlElement.getRealElement().Notes += "\r\n" + constraintString;
            }
            if (bindingExprText.Length > longestOvStringLength)
            {
                longestOvStringLength = bindingExprText.Length;
            }
            if (this.sqlElement.Name.Length > longestOvStringLength)
            {
                longestOvStringLength = this.sqlElement.Name.Length;
            }
            if (this.Classifier != null && (sqlElement.Name + this.Classifier.EaElement.Name).Length > longestOvStringLength)
            {
                longestOvStringLength = (sqlElement.Name + this.Classifier.EaElement.Name).Length;
            }


            int widthMultiplier = 6;
            int widthOffset     = 10;

            //set the size of all diagramObjects of the current objectvariable
            foreach (String id in EAUtil.getDiagramIDsOfObject(sqlElement, Repository))
            {
                if (id != "")
                {
                    EA.Diagram currentDiagram = Repository.GetOriginalRepository().GetDiagramByID(int.Parse(id));
                    if (currentDiagram != null)
                    {
                        EA.DiagramObject diagramObject = EAEcoreAddin.Util.EAUtil.findDiagramObject(Repository, sqlElement.getRealElement(), currentDiagram);
                        if (diagramObject != null)
                        {
                            //only auto update width right after OV creation
                            if (Main.getLastBroadcastMethod() == Main.EAOnPostNewElement)
                            {
                                diagramObject.right = diagramObject.left + widthOffset + longestOvStringLength * widthMultiplier;
                                //size shouldnt be less than 90
                                if (diagramObject.right - diagramObject.left < 90)
                                {
                                    diagramObject.right = diagramObject.left + 90;
                                }
                            }

                            int assignmentConstraintCount = this.AttributeAssignments.Count + this.Constraints.Count;
                            //ideal height if there is exactly one assignment or constraint
                            if (assignmentConstraintCount == 1)
                            {
                                diagramObject.bottom = diagramObject.top - 30 - assignmentConstraintCount * 25;
                            }
                            //ideal height for more than one
                            else if (assignmentConstraintCount > 1)
                            {
                                diagramObject.bottom = diagramObject.top - 50 - assignmentConstraintCount * 13;
                            }
                            //else leave height as it is

                            diagramObject.Update();
                        }
                    }
                }
            }
        }