Ejemplo n.º 1
0
        /// <summary>
        /// Включает/выключает показ коннекторов указанного типа на диаграмме
        /// </summary>
        /// <param name="linkType"></param>
        /// <param name="visibility"></param>
        public void SetConnectorVisibility(LinkType linkType, bool visibility = true)
        {
            // проходимся по элементам диаграммы
            foreach (EA.DiagramObject diagramObject in CurrentDiagram.DiagramObjects)
            {
                // Получаем элемент
                EA.Element diagramElement = EARepository.GetElementByID(diagramObject.ElementID);

                // Получаем коннекторы элемента
                foreach (EA.Connector connector in diagramElement.Connectors)
                {
                    // Получаем тип коннектора
                    try
                    {
                        LinkType curLinkType = LTHelper.GetConnectorType(connector);
                        if (linkType != curLinkType)
                        {
                            continue;
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.OutA("Не удалось определить тип коннектора " + ex.StackTrace, new EA.Connector[] { connector });
                        continue;
                    }

                    // проверяем, что коннектор может быть потенциально показан на диаграмме, т.е, что оба его элемента на диаграмме
                    EA.Element       secondElement   = EARepository.GetElementByID((connector.ClientID == diagramElement.ElementID) ? connector.SupplierID : connector.ClientID);
                    EA.DiagramObject secondElementDA = CurrentDiagram.GetDiagramObjectByID(secondElement.ElementID, "");
                    if (secondElementDA == null)
                    {
                        continue;
                    }

                    // Теперь смотрим на настройки видимости коннектора
                    if (LibraryHelper.IsLibrary(connector))
                    {
                        LinkType connectorlinkType = LTHelper.GetConnectorType(connector);
                        if (linkType == connectorlinkType)
                        {
                            EA.DiagramLink connectorLink = DiagramLinkHelper.GetDLForConnector(connector);
                            if (connectorLink == null)
                            {
                                connectorLink = DiagramLinkHelper.CreateDiagramLink(connector);
                                connectorLink.Update();
                            }

                            DiagramLinkHelper.SetDiagramLinkVisibility(connectorLink, visibility);
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public ConnectorData(EA.Connector connector)
        {
            Connector = connector;

            Name      = Connector.Name;
            Notes     = Connector.Notes;
            LinkType  = LTHelper.GetConnectorType(connector);
            FlowID    = EATVHelper.GetTaggedValue(connector, DAConst.DP_FlowIDTag);
            SegmentID = EATVHelper.GetTaggedValue(connector, DAConst.DP_SegmentIDTag);

            SourceElementID = connector.ClientID;
            TargetElementID = connector.SupplierID;
        }
Ejemplo n.º 3
0
        public ConnectorData(EA.DiagramLink diagramLink) : base()
        {
            ConnectorID = diagramLink.ConnectorID;

            Name      = Connector.Name;
            Notes     = Connector.Notes;
            LinkType  = LTHelper.GetConnectorType(Connector);
            FlowID    = EATVHelper.GetTaggedValue(Connector, DAConst.DP_FlowIDTag);
            SegmentID = EATVHelper.GetTaggedValue(Connector, DAConst.DP_SegmentIDTag);

            SourceElementID = Connector.ClientID;
            TargetElementID = Connector.SupplierID;
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Функция возвращает название ПО, которому принадлежит элемент
        /// </summary>
        /// <param name="element"></param>
        /// <returns></returns>
        public static string GetElementSoftwareName(EA.Element element)
        {
            string result = "";

            // пока тупо взвращаем ПО верхнего уровня

            // сначала пооучаем классификатор
            if (element.ClassifierID != 0)
            {
                EA.Element classifier = EARepository.GetElementByID(element.ClassifierID);
                // проверяем наличие связи SoftwareClassifier
                foreach (EA.Connector connector in classifier.Connectors)
                {
                    if (LTHelper.GetConnectorType(connector) == LinkType.SoftwareClassification && connector.ClientEnd == classifier)
                    {
                        result = classifier.Name;

                        // есть такая связь - ползём по связям по дереву вверх
                        // пока "сверху" есть следующий элемент, присваиваем результату имя текущего элемента
                        EA.Connector curConnector = connector;

                        while (curConnector != null)
                        {
                            EA.Element   parent        = EARepository.GetElementByID(curConnector.SupplierID);
                            EA.Connector nextConnector = null;

                            foreach (EA.Connector parentConnector in classifier.Connectors)
                            {
                                if (LTHelper.GetConnectorType(connector) == LinkType.SoftwareClassification && connector.ClientEnd == classifier)
                                {
                                    nextConnector = parentConnector;
                                    break;
                                }
                            }

                            if (nextConnector != null)
                            {
                                result = parent.Name;
                            }

                            curConnector = nextConnector;
                        }
                    }
                }
            }

            return(result);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Устанавливает видимость указанного типа коннекторов на диаграммме
        /// </summary>
        public void SetLinkTypeVisibility(LinkType LinkType, bool visibility = true)
        {
            foreach (EA.DiagramLink diagramLink in Context.CurrentDiagram.DiagramLinks)
            {
                EA.Connector connector         = Context.EARepository.GetConnectorByID(diagramLink.ConnectorID);
                LinkType     connectorLinkType = LTHelper.GetConnectorType(connector);

                switch (LinkType)
                {
                case LinkType.Deploy:

                    if (connectorLinkType == LinkType.Deploy)
                    {
                        DiagramLinkHelper.SetDiagramLinkVisibility(diagramLink, visibility);
                    }
                    break;
                }
            }
        }
Ejemplo n.º 6
0
        /*
         * /// <summary>
         * /// Функция загружает список коннекторов из текущей библиотеки
         * /// </summary>
         * /// <returns></returns>
         * public static Dictionary<LinkType, Dictionary<string, List<ConnectorData>>> LoadConnectorData()
         * {
         *  var result = new Dictionary<LinkType, Dictionary<string, List<ConnectorData>>>();
         *  IEqualityComparer<ConnectorData> ConnectorDataEqualityComparer = new IEqualityComparer_ConnectorData();
         *
         *
         *  foreach (LinkType linkType in Enum.GetValues(typeof(LinkType)))
         *  {
         *      result.Add(linkType, new Dictionary<string, List<ConnectorData>>());
         *  }
         *
         *  // Получаем библиотеку
         *  EA.Package libRoot = Context.CurrentLibrary;
         *  if (libRoot == null)
         *      throw new Exception("Не установлена библиотека");
         *
         *  // Ползём по библиотеке и добавляем найденные библиотечные коннекторы в коллекцию
         *  List<EA.Package> curLibpackages = new List<EA.Package>();
         *  curLibpackages.Add(libRoot);
         *
         *  while (curLibpackages.Count > 0)
         *  {
         *      List<EA.Package> nextLibpackages = new List<EA.Package>();
         *
         *      foreach (EA.Package curPackage in curLibpackages)
         *      {
         *          //EAHelper.Out("Checking package elements ", new EA.Package[] { curPackage });
         *
         *          foreach (EA.Element curElement in EAHelper.GetAllPackageElements(curPackage))
         *          {
         *              //EAHelper.Out("Checking element connectors ", new EA.Element[] { curElement });
         *
         *              foreach (EA.Connector curConnector in curElement.Connectors)
         *              {
         *
         *                  if (LibraryHelper.IsLibrary(curConnector))
         *                  {
         *                      LinkType connectorLinkType = LTHelper.GetConnectorType(curConnector);
         *                      string connectorFlowID = EAHelper.GetTaggedValue(curConnector, DAConst.DP_FlowIDTag);
         *                      string connectorSegmentID = EAHelper.GetTaggedValue(curConnector, DAConst.DP_SegmentIDTag);
         *
         *                      if (!result[connectorLinkType].ContainsKey(connectorFlowID))
         *                          result[connectorLinkType].Add(connectorFlowID, new List<ConnectorData>());
         *
         *                      // Добавляем
         *                      ConnectorData connectorData = new ConnectorData();
         *                      connectorData.Name = curConnector.Name;
         *                      connectorData._ConnectorID = curConnector.ConnectorID;
         *                      connectorData.Connector = curConnector;
         *                      connectorData.LinkType = connectorLinkType;
         *                      connectorData.FlowID = connectorFlowID;
         *                      connectorData.SegmentID = connectorSegmentID;
         *
         *                      connectorData.SourceElementID = curConnector.ClientID;
         *                      connectorData.TargetElementID = curConnector.SupplierID;
         *
         *                      if (!result[connectorLinkType][connectorFlowID].Contains(connectorData, ConnectorDataEqualityComparer))
         *                          result[connectorLinkType][connectorFlowID].Add(connectorData);
         *                  }
         *
         *              }
         *          }
         *
         *          foreach (EA.Package nextPackage in curPackage.Packages)
         *              nextLibpackages.Add(nextPackage);
         *      }
         *
         *      curLibpackages = nextLibpackages;
         *  }
         *
         *  return result;
         * }
         */

        /// <summary>
        /// Возвращает элементы, связанные с указанным заданной связью + находящиеся с указанного конца
        /// </summary>
        /// <param name="package"></param>
        /// <returns></returns>
        public static List <EA.Element> GetConnectedElements(EA.Element element, LinkType linkType, byte connectorEnd = 1 /*0=source 1=target*/)
        {
            List <EA.Element> result = new List <EA.Element>();

            foreach (EA.Connector connector in element.Connectors)
            {
                if ((connectorEnd == 0 /*source*/ && connector.ClientID == element.ElementID) || connectorEnd == 1 /*source*/ && connector.SupplierID == element.ElementID)
                {
                    continue; // не тем концом в другой элемент упирается
                }
                if (LibraryHelper.IsLibrary(connector) && LTHelper.GetConnectorType(connector) == linkType)
                { // если связь нужного типа
                    EA.Element otherEndElement = EARepository.GetElementByID((connectorEnd == 0) ? connector.ClientID : connector.SupplierID);
                    if (LibraryHelper.IsLibrary(otherEndElement))
                    {
                        result.Add(otherEndElement);
                    }
                }
            }
            return(result);
        }
Ejemplo n.º 7
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);
        }