Пример #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
        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);
        }