/// <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); }
/// <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); }
// Загрузка блока процедуры 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); } }
/// <summary> /// Переводит форму для сохранения в форму блока /// </summary> /// <param name="procedure"></param> /// <returns></returns> public static ProcedureWPF ToNormal(SaveProcedure procedure) { return(new ProcedureWPF(procedure.Position, procedure.Model)); }