コード例 #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>
        /// Возвращает Список дочерних (deploy) объектов для указанного (дальнейшая иерархия не раскручивается)
        /// </summary>
        /// <param name="element"></param>
        /// <returns></returns>
        public static List <EA.Element> GetDeployChildren(EA.Element element)
        {
            List <EA.Element> result = new List <EA.Element>();

            foreach (EA.Connector connector in element.Connectors)
            {
                if (ConnectorHelper.IsDeploymentLink(connector) && connector.SupplierID == element.ElementID)
                {
                    result.Add(EARepository.GetElementByID(connector.ClientID));
                }
            }

            return(result);
        }
コード例 #3
0
        /// <summary>
        /// Проверяет, что child размещён в parent
        /// т.е. есть библиотечный линк, направленный от child к parent , тип линка = Deploy
        /// </summary>
        /// <param name="childElement"></param>
        /// <param name="parentElement"></param>
        /// <returns></returns>
        public static bool IsDeployed(EA.Element childElement, EA.Element parentElement)
        {
            bool result = false;

            foreach (EA.Connector connector in childElement.Connectors)
            {
                if (ConnectorHelper.IsDeploymentLink(connector) && connector.ClientID == childElement.ElementID)
                {
                    result = true;
                    break;
                }
            }
            return(result);
        }
コード例 #4
0
        private ExecResult <Boolean> Test2()
        {
            ExecResult <Boolean> result = new ExecResult <bool>();

            try
            {
                Context.CurrentLibrary = Context.EARepository.GetPackageByGuid("{5C806428-D2F2-4bfc-A043-3B84D3E4CACD}");;  // SELECT * FROM t_package WHERE ea_guid = "{5C806428-D2F2-4bfc-A043-3B84D3E4CACD}"
                ConnectorHelper.LoadConnectorData2();
            }
            catch (Exception ex)
            {
                result.setException(ex);
            }

            return(result);
        }
コード例 #5
0
        /// <summary>
        /// Возвращает если есть родительский элемент размещения
        /// </summary>
        public static EA.Element GetDeployParent(EA.Element eaElement)
        {
            EA.Element result = null;


            foreach (EA.Connector connector in eaElement.Connectors)
            {
                if (ConnectorHelper.IsDeploymentLink(connector) && connector.ClientID == eaElement.ElementID)
                {
                    result = EARepository.GetElementByID(connector.SupplierID);
                    break;
                }
            }


            return(result);
        }
コード例 #6
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);
        }