Esempio n. 1
0
        /// <summary>
        /// Размещает на диаграмме укзаанный элемент и иерархию его контейнеров
        /// </summary>
        /// <param name="onlyParent"></param>
        /// <returns></returns>
        public ExecResult <Boolean> PutChildrenDHierarchyOnDiagram()
        {
            ExecResult <Boolean> result = new ExecResult <bool>();

            ElementDesignerHelper.CallLevel = 0;

            try
            {
                ExecResult <List <ComponentLevel> > displayLevelsResult = FSelectComponentLevels.Execute();
                if (displayLevelsResult.code != 0)
                {
                    return(result);
                }


                // Получаем текущий (библиотечный) элемент дерева
                EA.Element curElement = null;
                if (EARepository.GetTreeSelectedElements().Count > 0)
                {
                    curElement = EARepository.GetTreeSelectedElements().GetAt(0);
                }
                Logger.Out("элемент:", new EA.Element[] { curElement });
                if (curElement == null || !LibraryHelper.IsLibrary(curElement))
                {
                    throw new Exception("Не выделен библиотечный элемент");
                }

                // Получаем список дочерних элементов контейнеров
                List <EA.Element> сhildrenDHierarchy = LibraryHelper.GetChildHierarchy(curElement);


                // Размещаем на диаграмме элемент
                PutElementOnDiagram(curElement);

                // Проходимся по иерархии и размещаем элементы на диаграмме
                for (int i = 0; i < сhildrenDHierarchy.Count; i++)
                {
                    // размещает только элементы выбранных уровней
                    ComponentLevel componentLevel = CLHelper.GetComponentLevel(сhildrenDHierarchy[i]);
                    if (!displayLevelsResult.value.Contains(componentLevel))
                    {
                        continue;
                    }
                    // Размещаем элемент
                    EA.DiagramObject diagramObject = PutElementOnDiagram(сhildrenDHierarchy[i]);
                    diagramObject.Update();
                }

                CurrentDiagram.DiagramLinks.Refresh();
                Context.LinkDesigner.SetLinkTypeVisibility(LinkType.Deploy, false);
                EARepository.ReloadDiagram(CurrentDiagram.DiagramID);
            }
            catch (Exception ex)
            {
                result.setException(ex);
            }

            return(result);
        }
Esempio n. 2
0
        /// <summary>
        /// Размещает на диаграмме укзаанный элемент и иерархию его контейнеров
        /// </summary>
        /// <param name="onlyParent"></param>
        /// <returns></returns>
        public ExecResult <Boolean> PutParentHierarchyOnDiagram(bool onlyParent = false)
        {
            ExecResult <Boolean> result = new ExecResult <bool>();

            ElementDesignerHelper.CallLevel = 0;

            try
            {
                ExecResult <List <ComponentLevel> > displayLevelsResult = FSelectComponentLevels.Execute();
                if (displayLevelsResult.code != 0)
                {
                    return(result);
                }


                // Получаем текущий (библиотечный) элемент дерева
                EA.Element curElement = EARepository.GetTreeSelectedObject();
                Logger.Out("элемент:", new EA.Element[] { curElement });
                if (curElement == null || !LibraryHelper.IsLibrary(curElement))
                {
                    throw new Exception("Не выделен библиотечный элемент");
                }

                // Получаем цепочку родительских контейнеров
                List <EA.Element> deployments = LibraryHelper.GetParentHierarchy(curElement);
                Logger.Out("цепочка deploy-родителей:", deployments.ToArray());

                // Размещаем на диаграмме элемент
                PutElementOnDiagram(curElement);

                // Проходимся по иерархии и размещаем элементы на диаграмме
                EA.Element prevElement = null;
                for (int i = 0; i < deployments.Count; i++)
                {
                    // размещает только элементы выбранных уровней
                    ComponentLevel componentLevel = CLHelper.GetComponentLevel(deployments[i]);
                    if (!displayLevelsResult.value.Contains(componentLevel))
                    {
                        continue;
                    }


                    EA.DiagramObject diagramObject = PutElementOnDiagram(deployments[i]);
                    //diagramObject.Sequence = 1000 - (deployments.Count + i); // Это надо нормально сделать
                    diagramObject.Update();
                    prevElement = deployments[i];
                }

                CurrentDiagram.DiagramLinks.Refresh();
                Context.LinkDesigner.SetLinkTypeVisibility(LinkType.Deploy, false);
                EARepository.ReloadDiagram(CurrentDiagram.DiagramID);
            }
            catch (Exception ex)
            {
                result.setException(ex);
            }

            return(result);
        }
Esempio n. 3
0
        /// <summary>
        /// Функция возвращает размер элемента, соответствующий размеру элемента на библиотечной диаграмме
        /// </summary>
        /// <returns></returns>
        public static ExecResult <Size> GetElementSizeOnLibDiagram(EA.Element element)
        {
            ExecResult <Size> result = new ExecResult <Size>()
            {
                code = -1
            };

            try
            {
                // лезем от элемента вверх по дереву пакетов, пока не достигнем верха либо не достигнем пакета без тэга DP_Library после нахождения такого тэга
                EA.Package curPackage = EARepository.GetPackageByID(element.PackageID);
                bool       foundPackageAfterDPLibrary = false;
                bool       foundDPLibraryPackage      = false;

                while (curPackage != null & !(foundPackageAfterDPLibrary))
                {
                    // Проходимся по диаграммам пакета
                    foreach (EA.Diagram curDiagram in curPackage.Diagrams)
                    {
                        // ... В в диаграмме - по объектам
                        foreach (EA.DiagramObject diagramObject in curDiagram.DiagramObjects)
                        {
                            // если объект на диаграмме - наш объект, то срисовываем его размеры как дефолтные
                            if (diagramObject.ElementID == element.ElementID)
                            {
                                Size curSize = ElementDesignerHelper.GetSize(diagramObject);
                                result.value = curSize;
                                result.code  = 0;
                                return(result);
                            }
                        }

                        if (curPackage.ParentID != 0)
                        {
                            curPackage = EARepository.GetPackageByID(curPackage.ParentID);
                        }
                        else
                        {
                            curPackage = null;
                        }
                        if (LibraryHelper.IsLibrary(curPackage.Element))
                        {
                            foundDPLibraryPackage = true;
                        }
                        if (!LibraryHelper.IsLibrary(curPackage.Element) && foundDPLibraryPackage)
                        {
                            foundPackageAfterDPLibrary = true;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                result.setException(ex);
            }

            return(result);
        }
        public static ExecResult <bool> Export(string location)
        {
            var result = new ExecResult <bool>();

            try
            {
                EA.Diagram curDiagram = null;
                if (location == "Diagram" || location == "MainMenu")
                {
                    curDiagram = Context.EARepository.GetCurrentDiagram();
                }
                else if (location == "TreeView")
                {
                    curDiagram = Context.EARepository.GetTreeSelectedObject();
                }

                // Экспортируем PNG
                string pngSavePath = ExportPNG(curDiagram);

                // Экспортируем Текст
                string txtSavePath = ExportText(curDiagram);

                // Создаём .properties файл для публикации
                String propSavePath = Path.Combine(DPConfig.AppSettings["exchangePath"].Value, "export.properties");
                using (System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(propSavePath))
                {
                    String guidStr = curDiagram.DiagramGUID.Replace("{", "").Replace("}", "");
                    streamWriter.WriteLine("OBJID=" + curDiagram.DiagramGUID.Replace("{", "").Replace("}", ""));
                    streamWriter.WriteLine("PARENTPAGE=" + DPConfig.AppSettings["parentPage"].Value);
                    streamWriter.WriteLine("PAGEGENAME=" + guidStr + " " + curDiagram.Name);
                    streamWriter.WriteLine("IMAGE=" + Path.GetFileName(pngSavePath));
                    streamWriter.WriteLine("TEXT=" + Path.GetFileName(txtSavePath));
                }

                // Запусаем java - публикатор
                Process process = new Process();
                process.StartInfo.FileName  = Path.Combine(DPConfig.AppSettings["javaRuntime"].Value, "javaw.exe");
                process.StartInfo.Arguments = DPConfig.AppSettings["javaArguments"].Value + " " + propSavePath + "";
                //process.StartInfo.RedirectStandardOutput = true;
                //process.StartInfo.UseShellExecute = false;
                process.Start();

                process.WaitForExit();
            }
            catch (Exception ex)
            {
                result.setException(ex);
            }



            return(result);
        }
Esempio n. 5
0
        /// <summary>
        /// Функция ищет оптимальное место для размещения внутри родительского контейнера
        /// </summary>
        /// <param name="parentDA"></param>
        /// <param name="childDA"></param>
        /// <param name="childDAList">список других элементов внутри родительского, чтобы не наступить на один из них</param>
        /// <returns></returns>
        public static ExecResult <Point> GetPointForChild(EA.DiagramObject parentDA, EA.DiagramObject childDA, List <EA.DiagramObject> childDAList)
        {
            ExecResult <Point> result = new ExecResult <Point>()
            {
                code = -1
            };

            // Сначала просто пытаемся поместить childDA возле левого верхнего угла
            Rectangle requiredRectangle   = new Rectangle(parentDA.left + DAConst.border, parentDA.top - 2 * DAConst.border, childDA.right - childDA.left, childDA.top - childDA.bottom);
            bool      intersectsWithOther = false;

            if (Contain(parentDA, requiredRectangle))
            {
                foreach (var otherChildDA in childDAList)
                {
                    if (otherChildDA.ElementID == childDA.ElementID)
                    {
                        continue;
                    }
                    if (Intersects(otherChildDA, requiredRectangle))
                    {
                        intersectsWithOther = true;
                        break;
                    }
                }
                if (!intersectsWithOther)
                {
                    result.value = new Point(requiredRectangle.X, requiredRectangle.Y);
                    result.code  = 0;
                    return(result);
                }
            }

            // если мы здесь, значит тупо вписаться не удалось, начинаем шарить вокруг вписанных в родительский элементов, пытаясь найти место
            foreach (var otherChildDA in childDAList)
            {
                if (otherChildDA.ElementID == childDA.ElementID)
                {
                    continue;
                }

                Point point = FindSpaceAround(childDA, otherChildDA, parentDA, childDAList);
                if (!point.IsEmpty)
                {
                    result.value = point;
                    result.code  = 0;
                    break;
                }
            }

            return(result);
        }
Esempio n. 6
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);
        }
Esempio n. 7
0
        /// <summary>
        /// Помещения на текущкю диаграмму выбранных узлов и устройств
        /// </summary>
        /// <returns></returns>
        public ExecResult <Boolean> PutContourContourOnDiagram(string location)
        {
            ExecResult <Boolean> result = new ExecResult <bool>();

            try
            {
                if (location == "TreeView" || EARepository.GetCurrentDiagram() == null)
                {
                    throw new Exception("Операция разрешена только для диаграммы");
                }


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

                // получаем список библиотечных элементов нужного типа
                List <NodeData> nodeDataList = LibraryHelper.GetNodeData(new List <ComponentLevel>()
                {
                    ComponentLevel.ContourContour, ComponentLevel.SystemContour
                });

                // показываем список на форме для отмечания
                ExecResult <List <NodeData> > ndSelectresult = new FSelectContourContour().Execute(nodeDataList);
                if (ndSelectresult.code != 0)
                {
                    return(result);
                }

                // что на форме наотмечали, помещаем на диаграмму
                foreach (NodeData nodeData in ndSelectresult.value)
                {
                    PutElementOnDiagram(nodeData.Element);
                }

                EARepository.ReloadDiagram(CurrentDiagram.DiagramID);
            }
            catch (Exception ex)
            {
                result.setException(ex);
            }

            return(result);
        }
Esempio n. 8
0
        private ExecResult <Boolean> Test1()
        {
            ExecResult <Boolean> result = new ExecResult <bool>();

            try
            {
                // Открываем и чистим тестовую диаграмму
                EA.Diagram testDiagram = Context.EARepository.GetDiagramByGuid("{0093407F-0187-42a8-93DC-B97E8FA79EED}");
                if (test1Flag == 0)
                {
                    while (testDiagram.DiagramObjects.Count > 0)
                    {
                        testDiagram.DiagramObjects.DeleteAt(0, true);
                    }
                    testDiagram.Update();
                    testDiagram.DiagramObjects.Refresh();
                    Context.EARepository.ReloadDiagram(testDiagram.DiagramID);
                }

                Context.EARepository.OpenDiagram(testDiagram.DiagramID);
                Context.EARepository.ActivateDiagram(testDiagram.DiagramID);
                Context.CurrentDiagram = testDiagram;

                // Выделяем элемент
                EA.Element element = Context.EARepository.GetElementByGuid("{83142BDB-7EE4-48e7-B788-0011E0E2E343}");
                Context.EARepository.ShowInProjectView(element);

                // Запускаем формирование иерархии элементов диаграммы
                var putDeploymentHierarchyResult = Context.Designer.PutParentHierarchyOnDiagram();
                OutExecResult(putDeploymentHierarchyResult);


                test1Flag = 1;
            }
            catch (Exception ex)
            {
                result.setException(ex);
            }

            return(result);
        }
Esempio n. 9
0
        /// <summary>
        /// Функция запуска формы управления коннекторами
        /// </summary>
        /// <returns></returns>
        public ExecResult <Boolean> ManageLinks()
        {
            ExecResult <Boolean> result = new ExecResult <bool>();

            Logger.Out("");

            try
            {
                if (Context.CurrentLibrary == null)
                {
                    EA.Package libPackage = LibraryHelper.GetLibraryRoot();
                    Context.CurrentLibrary = libPackage;
                }

                result = FManageLinks.Execute();
            }
            catch (Exception ex)
            {
                result.setException(ex);
            }

            return(result);
        }
Esempio n. 10
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);
        }
Esempio n. 11
0
        /// <summary>
        /// Устанавливает текущую библиотеку
        /// </summary>
        /// <returns></returns>
        public static ExecResult <Boolean> SetCurrentLibrary(string location)
        {
            ExecResult <Boolean> result = new ExecResult <bool>();

            try
            {
                EA.Package libRoot = null;

                switch (location)
                {
                case "Diagram":
                    libRoot = GetLibraryRootFromPackage(EARepository.GetPackageByID(EARepository.GetCurrentDiagram().PackageID));
                    break;

                case "TreeView":
                case "MainMenu":
                    libRoot = GetLibraryRootFromTreeSelection();
                    break;
                }
                if (libRoot == null)
                {
                    throw new Exception("Не обнаружена библиотека ");
                }


                Context.CurrentLibrary = libRoot;
                result.code            = 0;
                result.value           = true;
            }
            catch (Exception ex)
            {
                result.setException(ex);
            }

            return(result);
        }
Esempio n. 12
0
        public static ExecResult <bool> DiagramElementsReport(string location)
        {
            ExecResult <Boolean> result = new ExecResult <bool>();

            try
            {
                // Получаем диаграмму
                EA.Diagram reportDiagram = null;

                switch (location)
                {
                case "Diagram":
                    reportDiagram = EARepository.GetCurrentDiagram();
                    break;

                case "MainMenu":
                case "TreeView":
                    if (EARepository.GetTreeSelectedItemType() != EA.ObjectType.otDiagram)
                    {
                        throw new Exception("Не выбрана диаграмма в ProjectExplorer");
                    }

                    reportDiagram = EARepository.GetTreeSelectedObject();
                    break;
                }

                // Проверяем, что это диаграмма - библиотечная
                EA.Package diagramPackage = EARepository.GetPackageByID(reportDiagram.PackageID);
                EA.Package libPackage     = LibraryHelper.GetLibraryRootFromPackage(diagramPackage);
                if (libPackage == null)
                {
                    throw new Exception("Диаграмма не в библиотеке");
                }

                // Устанавливаем текущую библиотеку
                if (Context.CurrentLibrary.PackageID != libPackage.PackageID)
                {
                    Context.CurrentLibrary = libPackage;
                }

                // Устанавливаем текущую диаграмму
                Context.CurrentDiagram = reportDiagram;

                // запрашиваем параметры показа
                ExecResult <List <ComponentLevel> > displayLevelsResult = FSelectComponentLevels.Execute(new List <ComponentLevel>()
                {
                    ComponentLevel.Node, ComponentLevel.Device, ComponentLevel.ExecutionEnv, ComponentLevel.Component
                });
                if (displayLevelsResult.code != 0)
                {
                    return(result);
                }


                // Подготавливаем имя RDLC - файла отчёта
                string fullReportName = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "Reports", "LibDiagram.rdlc");
                if (!File.Exists(fullReportName))
                {
                    throw new Exception("файл отчёта " + fullReportName + "не найден");
                }

                // Подготавливаем источники данных для отчёта
                List <ReportDataSource> reportDataSources = new List <ReportDataSource>();

                List <ElementData> elementDataList = EAHelper.GetCurDiagramElementData().Values.ToList <ElementData>();
                foreach (var elementData in elementDataList) // Дообогащаем информацию об элементах данными узла размещения
                {
                    int?rootDeployNodeID = LibraryHelper.GetDeployComponentNode(elementData._ElementID);
                    if (rootDeployNodeID != null)
                    {
                        elementData.RootDeployNodeID = rootDeployNodeID;
                    }
                }

                ReportDataSource reportDataSource = new ReportDataSource("DS_ElementData", elementDataList);
                reportDataSources.Add(reportDataSource);

                List <ConnectorData> connectorDataList = EAHelper.GetCurDiagramConnectors();
                ReportDataSource     reportDataSource1 = new ReportDataSource("DS_ConnectorData", connectorDataList);
                reportDataSources.Add(reportDataSource1);


                // Подготавливаем параметры отчёта
                List <ReportParameter> reportParameters = new List <ReportParameter>();
                // Картинка диаграммы
                string SavedDiagramImagePath = DiagramExporter.ExportPNG(reportDiagram);
                //string base64Image = Convert.ToBase64String(File.ReadAllBytes(SavedDiagramImagePath));
                reportParameters.Add(new ReportParameter("paramDiagramImage", "file:///" + SavedDiagramImagePath));
                reportParameters.Add(new ReportParameter("paramComponentLevels", string.Join(",", displayLevelsResult.value.Select(cl => ((int)cl).ToString()))));


                // запускаем форму
                ExecResult <bool> fReportResult = FReport.Execute(fullReportName, reportDataSources, reportParameters);
                if (fReportResult.code != 0)
                {
                    throw new Exception(fReportResult.message);
                }
            }
            catch (Exception ex)
            {
                result.setException(ex);
            }

            return(result);
        }
Esempio n. 13
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);
        }
Esempio n. 14
0
        /// <summary>
        /// Функция записывает в выделенные элементы признак библиотечного
        /// </summary>
        /// <returns></returns>
        public static ExecResult <Boolean> SetDPLibratyTag(string location)
        {
            ExecResult <Boolean> result = new ExecResult <bool>();

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

            try
            {
                switch (location)
                {
                case "Diagram":
                    if (Context.CurrentDiagram != null)
                    {
                        if (Context.CurrentDiagram.SelectedObjects.Count > 0)
                        {
                            foreach (EA.DiagramObject curDA in Context.CurrentDiagram.SelectedObjects)
                            {
                                EA.Element curElement = EARepository.GetElementByID(curDA.ElementID);
                                TaggedValueSet(curElement, DAConst.DP_LibraryTag, "");
                            }
                        }
                        else if (Context.CurrentDiagram.SelectedConnector != null)
                        {
                            TaggedValueSet(Context.CurrentDiagram.SelectedConnector, DAConst.DP_LibraryTag, "");
                        }
                    }
                    break;

                case "TreeView":
                    foreach (EA.Element curElement in EARepository.GetTreeSelectedElements())
                    {
                        TaggedValueSet(curElement, DAConst.DP_LibraryTag, "");
                    }
                    break;

                case "MainMenu":
                    if (Context.CurrentDiagram != null)
                    {
                        if (Context.CurrentDiagram.SelectedObjects.Count > 0)
                        {
                            foreach (EA.DiagramObject curDA in Context.CurrentDiagram.SelectedObjects)
                            {
                                EA.Element curElement = EARepository.GetElementByID(curDA.ElementID);
                                TaggedValueSet(curElement, DAConst.DP_LibraryTag, "");
                            }
                        }
                        else if (Context.CurrentDiagram.SelectedConnector != null)
                        {
                            TaggedValueSet(Context.CurrentDiagram.SelectedConnector, DAConst.DP_LibraryTag, "");
                        }
                    }
                    else
                    {
                        foreach (EA.Element curElement in EARepository.GetTreeSelectedElements())
                        {
                            TaggedValueSet(curElement, DAConst.DP_LibraryTag, "");
                        }
                        break;
                    }



                    break;
                }
            }
            catch (Exception ex)
            {
                result.setException(ex);
            }

            return(result);
        }
Esempio n. 15
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);
        }
Esempio n. 16
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);
        }
Esempio n. 17
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);
        }
Esempio n. 18
0
        /*
         * /// <summary>
         * /// Идентификатор текущей библиотеки
         * /// </summary>
         * private int _CurrentLibraryID;
         * public int CurrentLibraryID
         * {
         *  get
         *  {
         *      return _CurrentLibraryID;
         *  }
         *  set
         *  {
         *      _CurrentLibraryID = value;
         *  }
         * }
         */
        /*
         * public ExecResult<Boolean> SetCurrentLibrary()
         * {
         *  ExecResult<Boolean> result = new ExecResult<bool>();
         *  try
         *  {
         *      var selection = EARepository.GetTreeSelectedPackage();
         *      if (selection == null || !EAHelper.IsLibrary(selection.Element))
         *      {
         *          throw new Exception("Не выделен библиотечный пакет");
         *      }
         *      CurrentLibraryID = selection.PackageID;
         *      result.message = "установлен ID библиотеки=" + CurrentLibraryID;
         *
         *
         *  }
         *  catch (Exception ex)
         *  {
         *      result.setException(ex);
         *  }
         *
         *  return result;
         *
         * }
         */
        /// <summary>
        /// Размещает на диаграмме под элементом дерево компонентов, размещённых в нём
        /// </summary>
        /// <param name="onlyParent"></param>
        /// <returns></returns>
        public ExecResult <Boolean> PutChildrenDeployHierarchy(string location)
        {
            ExecResult <Boolean> result = new ExecResult <bool>();

            ElementDesignerHelper.CallLevel = 0;

            try
            {
                EA.Element selectedElement = null;



                switch (location)
                {
                case "TreeView":
                    throw new Exception("Доступно только для диаграммы");

                case "Diagram":
                case "MainMenu":
                    if ((EARepository.GetCurrentDiagram() == null) || (EARepository.GetCurrentDiagram() != null && EARepository.GetCurrentDiagram().DiagramID != CurrentDiagram.DiagramID))
                    {
                        throw new Exception("Текущая диаграмма должны быть открыта");
                    }

                    List <EA.Element> selectedElementList = EAHelper.GetSelectedLibElement_Diagram();
                    if (selectedElementList.Count == 0)
                    {
                        throw new Exception("На текщей диаграммме нет выделенных библиотечных элементов");
                    }

                    selectedElement = selectedElementList[0];
                    break;
                }

                // Получаем дерево дочерних элементов контейнеров
                DPTreeNode <EA.Element> сhildrenDHierarchy = LibraryHelper.GetDeployChildrenHierarchy(selectedElement);

                // Для начала размещаем на диаграмме корневой элемент
                EA.DiagramObject rootDA = PutElementOnDiagram(selectedElement);

                // Проходимся по иерархии и размещаем элементы на диаграмме
                List <DPTreeNode <EA.Element> > currentLevelNodes = new List <DPTreeNode <EA.Element> >();
                currentLevelNodes.Add(сhildrenDHierarchy);

                List <DPTreeNode <EA.Element> > childLevelNodes = сhildrenDHierarchy.Children.ToList <DPTreeNode <EA.Element> >();

                Point levelStartPoint = new Point(rootDA.left, rootDA.bottom - DAConst.border);
                Point levelEndPoint   = new Point(levelStartPoint.X, levelStartPoint.Y);

                while (childLevelNodes.Count > 0)
                {
                    foreach (DPTreeNode <EA.Element> childLevelNode in childLevelNodes)
                    {
                        // Размещаем элемент на диаграмме
                        EA.DiagramObject curDA = PutElementOnDiagram(childLevelNode.Value);
                        // Подвигаем элемент на отведённым ему уровень

                        EADOHelper.ApplyPointToDA(curDA, new Point(levelEndPoint.X, levelStartPoint.Y));
                        int newLevelRight  = curDA.right + DAConst.border;
                        int newLevelBottom = curDA.bottom < levelEndPoint.Y ? curDA.bottom : levelEndPoint.Y;
                        levelEndPoint = new Point(newLevelRight, newLevelBottom);
                    }

                    // коллекционируем список узлов уровнем ниже
                    List <DPTreeNode <EA.Element> > grandchildLevelNodes = new List <DPTreeNode <EA.Element> >();
                    foreach (DPTreeNode <EA.Element> childlevelNode in childLevelNodes)
                    {
                        grandchildLevelNodes.AddRange(childlevelNode.Children);
                    }
                    childLevelNodes = grandchildLevelNodes; // делаем список узлов уровнем ниже - текущим

                    // смещаем координаты размещения следующего уровня компонентов
                    levelStartPoint = new Point(levelStartPoint.X, levelEndPoint.Y - DAConst.border);
                    levelEndPoint   = new Point(levelStartPoint.X, levelStartPoint.Y - DAConst.border);
                }


                //CurrentDiagram.DiagramLinks.Refresh();
                //DPAddin.LinkDesigner.SetLinkTypeVisibility(LinkType.Deploy, false);
                EARepository.ReloadDiagram(CurrentDiagram.DiagramID);
            }
            catch (Exception ex)
            {
                result.setException(ex);
            }

            return(result);
        }
Esempio n. 19
0
 private void OutExecResult <T>(ExecResult <T> result)
 {
     Context.EARepository.WriteOutput("System", "result code=" + result.code + " " + result.message, 0);
 }