/// <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); }
/// <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); }
/// <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); }
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); }
/// <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); }
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); }