Exemplo n.º 1
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);
        }
Exemplo n.º 2
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);
        }
Exemplo n.º 3
0
        // Загрузка блока процедуры
        private ProcedureWPF LoadProcedureBlock(SaveProcedure Block, Dictionary <Guid, ProcedureWPF> worksavelist)
        {
            if (worksavelist.ContainsKey(Block.Id))
            {
                return(worksavelist[Block.Id]);
            }
            else
            {
                ProcedureWPF curProc;
                if (Block.IsProcess)
                {
                    Block.Model = processWorked[Block.ChildBlockID];
                    curProc     = new SubProcessWPF(Block.Position, Block.Model as Process);
                }
                else
                {
                    curProc = SaveProcedure.ToNormal(Block);
                }

                worksavelist.Add(Block.Id, curProc);

                return(curProc);
            }
        }
Exemplo n.º 4
0
 /// <summary>
 /// Переводит форму для сохранения в форму блока
 /// </summary>
 /// <param name="procedure"></param>
 /// <returns></returns>
 public static ProcedureWPF ToNormal(SaveProcedure procedure)
 {
     return(new ProcedureWPF(procedure.Position, procedure.Model));
 }