コード例 #1
0
        /// <summary>
        /// Вычисляет (предлагаемый) ID инфопотока, исходящего из элемента
        /// </summary>
        /// <param name="element"></param>
        /// <returns></returns>
        public static string SuggestFlowIDName(EA.Element element)
        {
            string result = "";

            string flowID = EATVHelper.GetTaggedValue(element, DAConst.DP_NameForFlowIDTag, false);

            // от данного элемента лезем вверх по его  свзям SoftwareClassification и склеиваем тэги DP_NameForFlowID
            List <EA.Element> connectedElements = ConnectorHelper.GetConnectedElements(element, LinkType.SoftwareClassification, 1);

            // если у элемента нет таких зависимостей, но есть классификатор - ищем зависимости у классификатора
            if (connectedElements.Count == 0)
            {
                if (element.ClassifierID != 0)
                {
                    flowID            = EATVHelper.GetTaggedValue(element, DAConst.DP_NameForFlowIDTag, false);
                    connectedElements = ConnectorHelper.GetConnectedElements(EARepository.GetElementByID(element.ClassifierID), LinkType.SoftwareClassification, 1);
                }
            }

            while (connectedElements.Count > 0)
            {
                string nextname = EATVHelper.GetTaggedValue(connectedElements[0], DAConst.DP_NameForFlowIDTag, false);
                if (nextname != "")
                {
                    if (flowID == "")
                    {
                        flowID = nextname;
                    }
                    else
                    {
                        flowID = nextname + "." + flowID;
                    }
                }

                connectedElements = ConnectorHelper.GetConnectedElements(connectedElements[0], LinkType.SoftwareClassification, 1);
            }

            // Теперь ищем подбираем номер
            int segmentNumber = 1;

            string flowIDWithNumber = flowID + " " + segmentNumber.ToString();

            throw new NotImplementedException();

            /*
             * while (Context.ConnectorData[LinkType.SoftwareClassification].ContainsKey(flowIDWithNumber))
             * {
             *  segmentNumber++;
             *  flowIDWithNumber = flowID + " " + segmentNumber.ToString();
             * }
             */

            result = flowIDWithNumber;

            return(result);
        }
コード例 #2
0
        /// <summary>
        /// Функция возвращает список данных элементов библиотеки, соответствующих переданному уровню
        /// Даные возвращаются в формате NodeData
        /// </summary>
        /// <param name="clList"></param>
        public static List <NodeData> GetNodeData(List <ComponentLevel> clList, bool onlyAppropriateForDiagram = true)
        {
            List <NodeData> result = new List <NodeData>();


            EA.Package LibRoot = Context.CurrentLibrary;

            List <EA.Package> curLevelPackages = new List <EA.Package>();

            curLevelPackages.Add(LibRoot);


            // Последовательно проходимся по уровням дерева пакетов
            while (curLevelPackages.Count > 0)
            {
                List <EA.Package> nextLevelPackages = new List <EA.Package>(); // список пакетов для перехода на следующий уровень

                foreach (EA.Package curPackage in curLevelPackages)
                {
                    // Выбираем из списка пакетов текущего уровня требуемые элементы
                    foreach (EA.Element curElement in curPackage.Elements)
                    {
                        if (IsLibrary(curElement) && clList.Contains(CLHelper.GetComponentLevel(curElement)) && (onlyAppropriateForDiagram ? AppropriateForDiagram(curElement) : true))
                        {
                            NodeData nodeData = new NodeData();
                            nodeData.Element        = curElement;
                            nodeData.ComponentLevel = CLHelper.GetComponentLevel(curElement);
                            nodeData.Contour        = GetElementContour(curElement);
                            nodeData.GroupNames     = EATVHelper.GetTaggedValue(curElement, DAConst.DP_NodeGroupsTag).Split(',');
                            result.Add(nodeData);
                        }
                    }

                    // строим список пакетов для перехода на следующий уровень
                    foreach (EA.Package nextPackage in curPackage.Packages)
                    {
                        nextLevelPackages.Add(nextPackage);
                    }
                }

                curLevelPackages = nextLevelPackages;
            }

            return(result);
        }
コード例 #3
0
        /// <summary>
        /// Функция обновляет данные коннектора пор данным переданного ConnectorData
        /// </summary>
        /// <param name="connectorData"></param>
        public static void UpdateConnectorByData(ConnectorData connectorData)
        {
            EA.Connector connector = connectorData.Connector;

            connector.Name       = connectorData.Name;
            connector.Notes      = connectorData.Notes;
            connector.ClientID   = connectorData.SourceElementID;
            connector.SupplierID = connectorData.TargetElementID;
            connector.Update();

            if (connectorData.IsLibrary)
            {
                EATVHelper.TaggedValueSet(connector, DAConst.DP_LibraryTag, "");
                EATVHelper.TaggedValueSet(connector, DAConst.DP_LinkTypeTag, connectorData.LinkType.ToString());
                EATVHelper.TaggedValueSet(connector, DAConst.DP_FlowIDTag, connectorData.FlowID);
                EATVHelper.TaggedValueSet(connector, DAConst.DP_SegmentIDTag, connectorData.SegmentID);
            }

            Context.ConnectorData[connectorData.ConnectorID] = connectorData;
        }
コード例 #4
0
        /// <summary>
        /// Функция вычисляет размеры элемента по умолчанию, если они нулевые
        /// Если есть настройки размера в элементе - используются настройки в элементе
        /// Если нет - используются общие дефолтные константы
        /// </summary>
        /// <param name="da"></param>
        /// <returns>размер объекта</returns>
        public static Size GetDefaultDASize(EA.DiagramObject diagramObject)
        {
            Size result = new Size(diagramObject.right - diagramObject.left, diagramObject.top - diagramObject.bottom);

            EA.Element element = EARepository.GetElementByID(diagramObject.ElementID);

            // Для начала пытаемся установить размер из тэгов
            if (result.Width == 0 && EATVHelper.GetTaggedValues(element).GetByName(DAConst.defaultWidthTag) != null)
            {
                result.Width = int.Parse(EATVHelper.GetTaggedValues(element).GetByName(DAConst.defaultWidthTag).Value);
            }
            if (result.Height == 0 && EATVHelper.GetTaggedValues(element).GetByName(DAConst.defaultHeightTag) != null)
            {
                result.Height = int.Parse(EATVHelper.GetTaggedValues(element).GetByName(DAConst.defaultHeightTag).Value);
            }

            // Если из тэгов не установили, пытаемся вычислить на лету по библиотечной диаграмме

            /*
             * if (result.Height == 0 || result.Width == 0)
             * {
             *  ExecResult<Size> GetElementSizeOnLibDiagramResult = EAHelper.GetElementSizeOnLibDiagram(element);
             *  if (GetElementSizeOnLibDiagramResult.code == 0)
             *  {
             *      result = GetElementSizeOnLibDiagramResult.value;
             *  }
             * }
             */
            // Ну если совсем ничего, то просто ставим цифры по умолчанию
            if (result.Height == 0)
            {
                result.Height = DAConst.defaultHeight;
            }
            if (result.Width == 0)
            {
                result.Width = DAConst.defaultWidth;
            }

            return(result);
        }
コード例 #5
0
        /// <summary>
        /// Проверяет, что элемент является библиотечным. Если это инстанс, проверяет также класс
        /// </summary>
        /// <param name="element"></param>
        /// <returns></returns>
        public static bool IsLibrary(EA.Element element)
        {
            bool result = false;

            if (element.Type != "DeploymentSpecification")
            {
                EA.Collection taggedValues = EATVHelper.GetTaggedValues(element);
                try
                {
                    if (taggedValues != null && taggedValues.GetByName(DAConst.DP_LibraryTag) != null)
                    {
                        result = true;
                    }
                }
                catch
                {
                    result = false; // ибо обращение к несуществующему тэгу раизит ошибку, а проверить наличие можно только перебором тэгов, что неудобно
                }
            }

            return(result);
        }
コード例 #6
0
        /// <summary>
        /// Функция устанавливает размер элемента по умолчанию, соответствующий размеру элемента на библиотечной диаграмме
        /// </summary>
        /// <returns></returns>
        public static ExecResult <Boolean> SetElementDefaultSize()
        {
            ExecResult <Boolean> result = new ExecResult <bool>();

            try
            {
                var obj = EARepository.GetContextObject();
                if (obj == null)
                {
                    throw new Exception("Нет текущего объекта");
                }
                if (!(obj is EA.Element) || !LibraryHelper.IsLibrary((EA.Element)obj))
                {
                    throw new Exception("Выделен не библиотечный элемент");
                }
                EA.Element curElement = (EA.Element)obj;

                // Ищем размер на библиотечных диаграммах
                ExecResult <Size> GetElementSizeOnLibDiagramResult = GetElementSizeOnLibDiagram(curElement);
                if (GetElementSizeOnLibDiagramResult.code != 0)
                {
                    throw new Exception(GetElementSizeOnLibDiagramResult.message);
                }

                EATVHelper.TaggedValueSet(curElement, DAConst.defaultWidthTag, GetElementSizeOnLibDiagramResult.value.Width.ToString());
                EATVHelper.TaggedValueSet(curElement, DAConst.defaultHeightTag, GetElementSizeOnLibDiagramResult.value.Height.ToString());

                Logger.Out("Найден элемент диаграммы для установки размеров " + GetElementSizeOnLibDiagramResult.value.Width.ToString() + "x" + GetElementSizeOnLibDiagramResult.value.Height.ToString());
            }
            catch (Exception ex)
            {
                result.setException(ex);
            }

            return(result);
        }
コード例 #7
0
        /// <summary>
        /// Установка Tags для выделенных элементов
        /// </summary>
        /// <returns></returns>
        public ExecResult <Boolean> SetElementTags(string location)
        {
            ExecResult <Boolean> result = new ExecResult <bool>();

            try
            {
                // Сначала получаем список выделеннеых библиотечных элементов
                List <EA.Element> selectedLibElements = new List <EA.Element>();

                switch (location)
                {
                case "TreeView":
                    selectedLibElements = EAHelper.GetSelectedLibElement_Tree();
                    break;

                case "Diagram":
                    if (!Context.CheckCurrentDiagram())
                    {
                        throw new Exception("Не установлена или не открыта текущая диаграмма");
                    }

                    selectedLibElements = EAHelper.GetSelectedLibElement_Diagram();
                    break;

                case "MainMenu":
                    if (CurrentDiagram != null)
                    {
                        if (Context.CheckCurrentDiagram())
                        {
                            selectedLibElements = EAHelper.GetSelectedLibElement_Diagram();
                        }
                        else
                        {
                            selectedLibElements = EAHelper.GetSelectedLibElement_Tree();
                        }
                    }
                    else
                    {
                        selectedLibElements = EAHelper.GetSelectedLibElement_Tree();
                    }
                    break;
                }

                if (selectedLibElements.Count == 0) // если не выделены элементы  - пытаемся найти выделенные коннекторы
                {
                    if (location == "Diagram" || location == "MainMenu")
                    {
                        EA.Connector selectedConnector = EAHelper.GetSelectedLibConnector_Diagram();
                        if (selectedConnector != null)
                        {
                            return(Context.LinkDesigner.SetConnectorTags(location));
                        }
                    }
                    else
                    {
                        throw new Exception("Не выделены библиотечные элементы");
                    }
                }


                // Конструируем данные тэгов для формы
                List <TagData> curTagDataList = new List <TagData>();
                foreach (EA.Element curElement in selectedLibElements)
                {
                    foreach (EA.TaggedValue taggedValue in curElement.TaggedValuesEx)
                    {
                        string tagName = taggedValue.Name;

                        TagData curTagData;
                        curTagData = curTagDataList.FirstOrDefault(item => (item.TagName == tagName));
                        if (curTagData == null)
                        {
                            curTagData = new TagData()
                            {
                                TagName = tagName, TagValue = taggedValue.Value
                            };
                            curTagDataList.Add(curTagData);
                        }
                        curTagData.TagState = true;
                        curTagData.Count++;
                        if (taggedValue.ElementID != curElement.ElementID)
                        {
                            curTagData.Ex = true;
                        }
                    }
                }
                // Открываем форму для установки Tags
                ExecResult <List <TagData> > setTagsResult = new FSetTags().Execute(curTagDataList);
                if (setTagsResult.code != 0)
                {
                    return(result);
                }

                // Прописываем в элементах что наустанавливали на форме
                foreach (EA.Element curElement in selectedLibElements)
                {
                    foreach (TagData curTagData in setTagsResult.value)
                    {
                        if (curTagData.Enabled) // записываем только для Tags, в котоорые разрешено
                        {
                            if (curTagData.TagState == false)
                            {
                                EATVHelper.TaggedValueRemove(curElement, curTagData.TagName);
                            }
                            else
                            {
                                EATVHelper.TaggedValueSet(curElement, curTagData.TagName, curTagData.TagValue);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                result.setException(ex);
            }

            return(result);
        }
コード例 #8
0
        public static EA.Connector CreateConnector(ConnectorData createNewLinkData, bool putOnDiagram = true)
        {
            EA.Connector newConnector = null;

            EA.Element firstElement  = EARepository.GetElementByID(createNewLinkData.SourceElementID);
            EA.Element secondElement = EARepository.GetElementByID(createNewLinkData.TargetElementID);

            // Определяем тип создаваемого коннектора
            string creatingConnectorType;

            switch (createNewLinkData.LinkType)
            {
            case LinkType.Communication:
            case LinkType.Deploy:
                creatingConnectorType = "Dependency";
                break;

            case LinkType.InformationFlow:
                creatingConnectorType = "InformationFlow";
                break;

            case LinkType.SoftwareClassification:
                creatingConnectorType = "Generalization";
                break;

            default:
                throw new Exception("Непредусмотренный тип коннектора при создании");
            }

            // Создаём
            newConnector = firstElement.Connectors.AddNew("", creatingConnectorType);

            if (createNewLinkData.LinkType == LinkType.InformationFlow || createNewLinkData.LinkType == LinkType.Deploy)
            {
                newConnector.Direction = "Source -> Destination";
            }
            else
            {
                newConnector.Direction = "Unspecified";
            }
            newConnector.ClientID   = firstElement.ElementID;
            newConnector.SupplierID = secondElement.ElementID;

            newConnector.Name  = createNewLinkData.Name;
            newConnector.Notes = createNewLinkData.Notes;

            newConnector.Update();

            EATVHelper.TaggedValueSet(newConnector, DAConst.DP_LibraryTag, "");
            EATVHelper.TaggedValueSet(newConnector, DAConst.DP_LinkTypeTag, Enum.GetName(typeof(LinkType), createNewLinkData.LinkType));
            EATVHelper.TaggedValueSet(newConnector, DAConst.DP_FlowIDTag, createNewLinkData.FlowID);
            EATVHelper.TaggedValueSet(newConnector, DAConst.DP_SegmentIDTag, createNewLinkData.SegmentID);
            //EAHelper.TaggedValueSet(newConnector, DAConst.DP_TempLinkTag, createNewLinkData.tempLink.ToString());
            //EAHelper.TaggedValueSet(newConnector, DAConst.DP_TempLinkDiagramIDTag, createNewLinkData.tempLink ? createNewLinkData.tempLinkDiagramID : "");


            newConnector.Update();
            newConnector.TaggedValues.Refresh();

            // Добавляем коннектор к кэш информации о коннекторах
            createNewLinkData.ConnectorID = newConnector.ConnectorID;
            Context.ConnectorData.Add(createNewLinkData.ConnectorID, createNewLinkData);

            if (putOnDiagram)
            {
                // Помещаем на диаграмму
                EA.DiagramLink diagramLink = DiagramLinkHelper.CreateDiagramLink(newConnector);
            }

            return(newConnector);
        }
コード例 #9
0
        public ExecResult <Boolean> CreateLink()
        {
            ExecResult <Boolean> result = new ExecResult <bool>();

            Logger.Out("");

            try
            {
                if (!Context.CheckCurrentDiagram())
                {
                    throw new Exception("Не установлена или не открыта текущая диаграмма");
                }


                // На диаграмме должны быть выделены 2 (библиотечных) элемента
                var selectedObjects = CurrentDiagram.SelectedObjects;
                if (selectedObjects.Count != 2)
                {
                    throw new Exception("Должно быть выделено 2 элемента");
                }

                EA.DiagramObject firstDA       = selectedObjects.GetAt(0);
                EA.Element       firstElement  = EARepository.GetElementByID(firstDA.ElementID);
                EA.DiagramObject secondDA      = selectedObjects.GetAt(1);
                EA.Element       secondElement = EARepository.GetElementByID(secondDA.ElementID);

                if (!LibraryHelper.IsLibrary(firstElement) || !LibraryHelper.IsLibrary(secondElement))
                {
                    throw new Exception("Должны быть выделены библиотечные элементы");
                }

                Logger.Out("Выделенные элементы: ", new EA.Element[] { firstElement, secondElement });

                // запускаем форму
                ExecResult <ConnectorData> createNewLinkData = FCreateNewLink.Execute(firstDA, secondDA);
                if (createNewLinkData.code != 0)
                {
                    return(result);
                }


                // надо проверить, нет ли уже такого линка между элементами
                foreach (EA.Connector connector in firstElement.Connectors)
                {
                    if (connector.ClientID == secondElement.ElementID || connector.SupplierID == secondElement.ElementID)
                    {
                        if (LibraryHelper.IsLibrary(connector))
                        {
                            LinkType connectorLinkType = LTHelper.GetConnectorType(connector);
                            if (createNewLinkData.value.LinkType == connectorLinkType)
                            {
                                if (EATVHelper.GetTaggedValue(connector, DAConst.DP_FlowIDTag) == createNewLinkData.value.FlowID && EATVHelper.GetTaggedValue(connector, DAConst.DP_SegmentIDTag) == createNewLinkData.value.SegmentID)
                                {
                                    throw new Exception("Запрашиваемая связь уже существует");
                                }
                            }
                        }
                    }
                }


                // Создаём
                EA.Connector newConnector = ConnectorHelper.CreateConnector(createNewLinkData.value, true);

                CurrentDiagram.DiagramLinks.Refresh();
                EARepository.ReloadDiagram(CurrentDiagram.DiagramID);

                Logger.Out("Создан ", new EA.Connector[] { newConnector });
            }
            catch (Exception ex)
            {
                result.setException(ex);
            }

            return(result);
        }
コード例 #10
0
        /// <summary>
        /// Установка Tags для выделеного коннектора и других видимых на диаграмме линков того же типа
        /// </summary>
        /// <returns></returns>
        public ExecResult <Boolean> SetSimilarLinksTags(string location)
        {
            ExecResult <Boolean> result = new ExecResult <bool>();

            try
            {
                // Сначала получаем список выделеннеых библиотечных элементов
                EA.Connector selectedConnector = EAHelper.GetSelectedLibConnector_Diagram();

                if (selectedConnector == null)
                {
                    throw new Exception("Не выделены библиотечные элементы");
                }

                // Создаём список коннекторов и добавляем к нему выделенный
                List <EA.Connector> connectorList = new List <EA.Connector>();

                // Ищем на диаграмме другие линки такого же типа
                foreach (EA.DiagramLink curDL in CurrentDiagram.DiagramLinks)
                {
                    EA.Connector curConnector = EARepository.GetConnectorByID(curDL.ConnectorID);
                    if (!curDL.IsHidden && curConnector.Type == selectedConnector.Type)
                    {
                        connectorList.Add(curConnector);
                    }
                }


                // Конструируем данные тэгов для формы
                List <TagData> curTagDataList = new List <TagData>();

                foreach (EA.Connector connector in connectorList)
                {
                    foreach (EA.ConnectorTag taggedValue in selectedConnector.TaggedValues)
                    {
                        string tagName = taggedValue.Name;

                        TagData curTagData;
                        curTagData = curTagDataList.FirstOrDefault(item => (item.TagName == tagName));
                        if (curTagData == null)
                        {
                            curTagData = new TagData()
                            {
                                TagName = tagName, TagValue = taggedValue.Value
                            };
                            curTagDataList.Add(curTagData);
                        }
                        curTagData.TagState = true;
                        curTagData.Ex       = false;
                        curTagData.Count++;
                    }
                }

                // Открываем форму для установки Tags
                ExecResult <List <TagData> > setTagsResult = new FSetTags().Execute(curTagDataList);
                if (setTagsResult.code != 0)
                {
                    return(result);
                }

                // Прописываем в элементах что наустанавливали на форме
                foreach (EA.Connector connector in connectorList)
                {
                    foreach (TagData curTagData in setTagsResult.value)
                    {
                        if (curTagData.Enabled) // записываем только для Tags, в котоорые разрешено
                        {
                            if (curTagData.TagState == false)
                            {
                                EATVHelper.TaggedValueRemove(connector, curTagData.TagName);
                            }
                            else
                            {
                                EATVHelper.TaggedValueSet(connector, curTagData.TagName, curTagData.TagValue);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                result.setException(ex);
            }

            return(result);
        }
コード例 #11
0
        /// <summary>
        /// Установка Tags для выделенного коннектора
        /// </summary>
        /// <returns></returns>
        public ExecResult <Boolean> SetConnectorTags(string location)
        {
            if (!Context.CheckCurrentDiagram())
            {
                throw new Exception("Не установлена или не открыта текущая диаграмма");
            }


            ExecResult <Boolean> result = new ExecResult <bool>();

            try
            {
                // Сначала получаем список выделеннеых библиотечных элементов
                EA.Connector selectedConnector = EAHelper.GetSelectedLibConnector_Diagram(false);

                if (selectedConnector == null)
                {
                    throw new Exception("Не выделены библиотечные элементы");
                }


                // Конструируем данные тэгов для формы
                List <TagData> curTagDataList = new List <TagData>();

                foreach (EA.ConnectorTag taggedValue in selectedConnector.TaggedValues)
                {
                    string tagName = taggedValue.Name;

                    TagData curTagData = new TagData()
                    {
                        TagName = tagName, TagValue = taggedValue.Value
                    };
                    curTagData.TagState = true;
                    curTagData.Ex       = false;
                    curTagData.Count    = 1;
                    curTagDataList.Add(curTagData);
                }

                // Открываем форму для установки Tags
                ExecResult <List <TagData> > setTagsResult = new FSetTags().Execute(curTagDataList);
                if (setTagsResult.code != 0)
                {
                    return(result);
                }

                // Прописываем в элементах что наустанавливали на форме
                foreach (TagData curTagData in setTagsResult.value)
                {
                    if (curTagData.Enabled) // записываем только для Tags, в котоорые разрешено
                    {
                        if (curTagData.TagState == false)
                        {
                            EATVHelper.TaggedValueRemove(selectedConnector, curTagData.TagName);
                        }
                        else
                        {
                            EATVHelper.TaggedValueSet(selectedConnector, curTagData.TagName, curTagData.TagValue);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                result.setException(ex);
            }

            return(result);
        }
コード例 #12
0
        ///
        /// Called when user makes a selection in the menu.
        /// This is your main exit point to the rest of your Add-in
        ///
        /// <param name="Repository" />the repository
        /// <param name="Location" />the location of the menu
        /// <param name="MenuName" />the name of the menu
        /// <param name="ItemName" />the name of the selected menu item
        public void EA_MenuClick(EA.Repository repository, string location, string menuName, string itemName)
        {
            switch (itemName)
            {
            // ------ DESIGN --------------------------------------------------------------

            case menuPutLibElementOnDiagram:
                var putLibElementResult = Context.Designer.PutElementOnDiagram();
                OutExecResult(putLibElementResult);
                break;

            case menuPutContourContour:
                var putContourContourResult = Context.Designer.PutContourContourOnDiagram(location);
                OutExecResult(putContourContourResult);
                break;

            case menuPutParentDHierarchyOnDiagram:
                var putDeploymentHierarchyResult = Context.Designer.PutParentHierarchyOnDiagram();
                OutExecResult(putDeploymentHierarchyResult);
                break;

            case menuPutChildrenDHierarchyOnDiagram:
                var putPutCDHResult = Context.Designer.PutChildrenDHierarchyOnDiagram();
                OutExecResult(putPutCDHResult);
                break;

            case menuPutChildrenDeployHierarchy:
                var putChildrenDeployHierarchyResult = Context.Designer.PutChildrenDeployHierarchy(location);
                OutExecResult(putChildrenDeployHierarchyResult);
                break;

            case menuSetElementTags:
                var setElementTagsResult = Context.Designer.SetElementTags(location);
                OutExecResult(setElementTagsResult);
                break;



            // ------ DESIGN LINKS --------------------------------------------------------------
            case menuCreateLink:
                var createCommunicationResult = Context.LinkDesigner.CreateLink();
                OutExecResult(createCommunicationResult);
                break;

            case menuManageLinks:
                var ManageLinksResult = Context.LinkDesigner.ManageLinks();
                OutExecResult(ManageLinksResult);
                break;


            case menuManageLinkVisibility:
                var ManageLinkVisibilityResult = Context.LinkDesigner.ManageLinkVisibility();
                OutExecResult(ManageLinkVisibilityResult);
                break;


            case menuSetConnectorTags:
                var setConnectorTagsResult = Context.LinkDesigner.SetConnectorTags(location);
                OutExecResult(setConnectorTagsResult);
                break;

            case menuSetSimilarLinksTags:
                var setSimilarLinksTags = Context.LinkDesigner.SetSimilarLinksTags(location);
                OutExecResult(setSimilarLinksTags);
                break;

            // ------ UTILS --------------------------------------------------------------
            case menuSetCurrentDiagram:
                Context.CurrentDiagram = Context.EARepository.GetCurrentDiagram();
                Logger.Out("Установлена текущая диаграмма = " + Context.CurrentDiagram.Name);
                break;

            case menuSetCurrentLibrary:
                var setCurrentLibraryResult = LibraryHelper.SetCurrentLibrary(location);
                OutExecResult(setCurrentLibraryResult);
                break;

            case menuSetDPLibratyTag:
                var setDPLibratyTagResult = EATVHelper.SetDPLibratyTag(location);
                OutExecResult(setDPLibratyTagResult);
                break;


            case menuReloadConnectorData:
                Context.ConnectorData = null;
                Logger.Out("Сброшены данные коннекторов");
                break;

            case menuDoOnConnectActions:
                Addin_OnConnectActions();
                break;

            case menuRunSQLQuery:
                var fRunSQLQueryResult = FRunSQLQuery.Execute();
                OutExecResult(fRunSQLQueryResult);
                break;

            // --------- REPORTS ------------------------------------------------------------
            case menuDiagramElementsReport:
                var fDiagramElementsReportResult = ReportsHelper.DiagramElementsReport(location);
                OutExecResult(fDiagramElementsReportResult);
                break;



            // ------ EXPORT --------------------------------------------------------------
            case menuExportDiagram:
                var exportResult = DiagramExporter.Export(location);
                break;


            // ------ TEST --------------------------------------------------------------
            case menuTest1:
                var test1Result = Test1();
                OutExecResult(test1Result);
                break;

            case menuTest2:
                var test2Result = Test2();
                OutExecResult(test2Result);
                break;

            case menuTest3:
                var test3Result = Test3();
                OutExecResult(test3Result);
                break;
            }
        }