Exemple #1
0
        /// <summary>
        /// Производит сохранение информации о блоке процедуры
        /// </summary>
        /// <param name="Block"></param>
        /// <param name="processes"></param>
        /// <param name="saveProcess"></param>
        /// <returns></returns>
        private SaveProcedure SaveBlockProcedure(BlockWPF Block, Dictionary <ProcedureWPF, Guid> procedures, SaveProcess saveProcess)
        {
            SaveProcedure temp = null;

            // Если обрабатываемый блок - начальный или конечный элемент
            if (Block is StartBlockWPF || Block is EndBlockWPF)
            {
                temp = new SaveProcedure()
                {
                    Id = new Guid(), Model = null, Position = Block.Position
                };
            }
            else
            {
                if (!procedures.ContainsKey(Block as ProcedureWPF))
                {
                    var  info      = (Block as ProcedureWPF).BlockModel;
                    bool IsProcess = info is Process;
                    Guid childId   = new Guid();

                    // Проверяем, не является ли содержимое подпроцессом
                    if (IsProcess)
                    {
                        // Если является

                        // Проверяем, сохранен ли он
                        if (!processSaved.ContainsKey(info as Process))
                        {
                            // Если не сохранён, быстро сохраняем, передавая родительский блок
                            SaveProcess childProc = ExtrSaveProcess((info as Process).Description);
                            childId = childProc.ProcessId;
                            processSaved.Add(info as Process, childId);
                            project.ProcessList.Add(childProc);
                            //processSaved.Add(info as Process, childId);
                        }
                        else // Сохранён
                        {
                            // Находим процесс
                            childId = processSaved[info as Process]; // Достаём его ID
                        }
                    }

                    temp = SaveProcedure.ToSave(Block as ProcedureWPF, IsProcess, childId);
                    procedures.Add(Block as ProcedureWPF, temp.Id);
                    saveProcess.ProcedureList.Add(temp);
                }
                else
                {
                    temp = saveProcess.ProcedureList.Where(x => x.Id.CompareTo(procedures[Block as ProcedureWPF]) == 0).First();
                }
            }

            return(temp);
        }
Exemple #2
0
        // <!--------------------------------- Сохранение - Конец ----------------------------->

        // <!--------------------------------- Загрузка - Начало ----------------------------->
        public void LoadProcess(SaveProcess process, DrawArea area)
        {
            // Создаём начальный и конечный блоки
            StartBlockWPF startBlock = new StartBlockWPF(process.StartElement);
            EndBlockWPF   endBlock   = new EndBlockWPF(process.EndElement);

            // Кидаем их на поле
            area.Children.Add(startBlock);
            area.Children.Add(endBlock);

            // Помечаем, что они уже есть
            area.IsHaveStartEnd = true;

            // Тут лежат уже обработанные блоки
            Dictionary <Guid, ProcedureWPF> worksavelistproc = new Dictionary <Guid, ProcedureWPF>();
            Dictionary <Guid, ResourceWPF>  worksavelistres  = new Dictionary <Guid, ResourceWPF>();

            // Проходим по сохранённым процедурам
            foreach (var proc in process.ProcedureList)
            {
                area.Children.Add(LoadProcedureBlock(proc, worksavelistproc));
            }

            // Проходим по всем ресурсам
            foreach (var res in process.ResourceList)
            {
                area.Children.Add(LoadResourceBlock(res, worksavelistres));
            }

            // Проходим по всем связям с процедурами
            foreach (SaveProcedureConnection connectproc in process.ProcedureConnectonList)
            {
                area.Children.Add(LoadProcConnection(connectproc, worksavelistproc, startBlock, endBlock));
            }

            // Проходим по всем связям с ресурсами
            foreach (SaveResourceConnection connectres in process.ResourceConnectionList)
            {
                area.Children.Add(LoadResConnection(connectres, worksavelistproc, worksavelistres));
            }
        }
Exemple #3
0
        /// <summary>
        /// Производит сохранение о блоке ресурса
        /// </summary>
        /// <param name="Block"></param>
        /// <param name="resources"></param>
        /// <param name="saveProcess"></param>
        /// <returns></returns>
        private SaveResource SaveBlockResourse(BlockWPF Block, Dictionary <ResourceWPF, Guid> resources, SaveProcess saveProcess)
        {
            SaveResource temp = null;

            // Если обрабатываемый блок - начальный или конечный элемент
            if (Block is StartBlockWPF || Block is EndBlockWPF)
            {
                temp = new SaveResource()
                {
                    Id = new Guid(), Model = null, Position = Block.Position
                };
            }
            else
            {
                // Проверяем видели ли элемент текущий
                if (!resources.ContainsKey(Block as ResourceWPF))
                {
                    temp = SaveResource.ToSave(Block as ResourceWPF);
                    resources.Add(Block as ResourceWPF, temp.Id); // Добавляем в обработанные блоки
                    saveProcess.ResourceList.Add(temp);           // Добавляем в сохранённые
                }
                else
                {
                    temp = saveProcess.ResourceList.Where(x => x.Id.CompareTo(resources[Block as ResourceWPF]) == 0).First();  // Возвращаем блок из списка
                }
            }

            return(temp);
        }
Exemple #4
0
        /// <summary>
        /// Производит сохранение информации о связи с ресурсами
        /// </summary>
        /// <param name="element"></param>
        /// <param name="processes"></param>
        /// <param name="resources"></param>
        /// <param name="saveProcess"></param>
        private void SaveResourceConnection(UIElement element, Dictionary <ProcedureWPF, Guid> procedures, Dictionary <ResourceWPF, Guid> resources, SaveProcess saveProcess)
        {
            var connection = element as ResConnectionWPF; // Достаём информацию о связи

            // Информация о начальных и конечных блоках
            BlockWPF Start = connection.StartBlock;
            BlockWPF End   = connection.EndBlock;

            SaveProcedure procedure = null;
            SaveResource  resource  = null;

            // Если начальный элемент - процедура
            if (Start is ProcedureWPF)
            {
                procedure = SaveBlockProcedure(Start, procedures, saveProcess);
                resource  = SaveBlockResourse(End, resources, saveProcess);
            }
            else
            {
                procedure = SaveBlockProcedure(End, procedures, saveProcess);
                resource  = SaveBlockResourse(Start, resources, saveProcess);
            }

            // Формируем информацию
            SaveResourceConnection resConnection = new Utility.SaveResourceConnection()
            {
                StartID = procedure.Id,
                EndID   = resource.Id
            };

            // Сохраняем
            saveProcess.ResourceConnectionList.Add(resConnection);
        }
Exemple #5
0
        /// <summary>
        /// Производит сохранение информации о связи с процедурами
        /// </summary>
        /// <param name="element"></param>
        /// <param name="processes"></param>
        /// <param name="saveProcess"></param>
        private void SaveProcConnection(UIElement element, Dictionary <ProcedureWPF, Guid> procedures, SaveProcess saveProcess)
        {
            var connection = element as ProcConnectionWPF;                           // Достаём информацию о связи

            BlockWPF Start = connection.StartBlock;                                  // Информация о начальном блоке в связи
            BlockWPF End   = connection.EndBlock;                                    // Информация о конечном блоке в связи

            var StartProcedure = SaveBlockProcedure(Start, procedures, saveProcess); // Сохраняем информацию о начальной процедуре
            var EndProcedure   = SaveBlockProcedure(End, procedures, saveProcess);   // Сохраняем информацию о конецной процедуре

            // Формируем информацию о связи
            SaveProcedureConnection connect = new SaveProcedureConnection()
            {
                StartID               = StartProcedure.Id,
                EndID                 = EndProcedure.Id,
                StartPort             = connection.StartPort,
                EndPort               = connection.EndPort,
                RelativeStartPosition = connection.RelateStart,
                RelativeEndPosition   = connection.RelateEnd
            };

            // Сохраняем информацию
            saveProcess.ProcedureConnectonList.Add(connect);
        }
Exemple #6
0
        // <!--------------------------------- Сохранение - Начало ----------------------------->
        private SaveProcess SaveProcessExecute(UIElementCollection collection, String name)
        {
            SaveProcess temp = new SaveProcess
            {
                ProcessName = name
            };

            Dictionary <ProcedureWPF, Guid> ProcedureList = new Dictionary <ProcedureWPF, Guid>(); // Тут лежит список обработанных процедур
            Dictionary <ResourceWPF, Guid>  ResourceList  = new Dictionary <ResourceWPF, Guid>();  // Тут лежит список обработанных ресурсов

            // Сохраняем информацию о начальном и конечном элементе
            temp.StartElement = (collection[0] as StartBlockWPF).Position;
            temp.EndElement   = (collection[1] as EndBlockWPF).Position;

            temp.ProcessName = name;
            temp.ProcessId   = Guid.NewGuid();

            List <UIElement> procedureConnections = new List <UIElement>(); // Список с соединениями процедур
            List <UIElement> resourceConnections  = new List <UIElement>(); // Блок с соединениями ресурсов
            List <UIElement> procedures           = new List <UIElement>(); // Список с процедурами
            List <UIElement> resourses            = new List <UIElement>(); // Список с ресурсами

            // Проходим по всем элементам
            foreach (UIElement element in collection)
            {
                // Если элемент - связь процедур
                if (element is ProcConnectionWPF)
                {
                    procedureConnections.Add(element);
                }

                // Если элемент - связь ресурсов
                if (element is ResConnectionWPF)
                {
                    resourceConnections.Add(element);
                }

                // Если элемент - процедура
                if (element is ProcedureWPF)
                {
                    procedures.Add(element);
                }

                // Если элемент - рксурс
                if (element is ResourceWPF)
                {
                    resourses.Add(element);
                }
            }

            // Проходим по всем связям с процедурами
            foreach (var element in procedureConnections)
            {
                SaveProcConnection(element, ProcedureList, temp);
            }

            // Проходим по всем связям с ресурсами
            foreach (var element in resourceConnections)
            {
                SaveResourceConnection(element, ProcedureList, ResourceList, temp);
            }

            // Проходим по необработанным процедурам
            foreach (var element in procedures)
            {
                SaveBlockProcedure(element as ProcedureWPF, ProcedureList, temp);
            }

            // Проходимся по необработанным ресурсам
            foreach (var element in resourses)
            {
                SaveBlockResourse(element as ResourceWPF, ResourceList, temp);
            }


            return(temp); // Возвращаем всю информацию о процессе
        }