/// <summary> /// Adds the specified process. /// </summary> /// <param name="process"> The process. </param> /// <remarks> /// </remarks> public void Add(Process process) { if (Index.ContainsKey(process.Code)) { Errors.Add( new EcoProcessException("Структура процессов включет в себя дублирующийся код процесса :" + process.Code, process.Xml)); return; } Index[process.Code] = process; }
/// <summary> /// Finds the depend. /// </summary> /// <param name="current"> The current. </param> /// <param name="whatToFind"> The what to find. </param> /// <returns> </returns> /// <remarks> /// </remarks> private static bool FindDepend(Process current, Process whatToFind) { return current.InDepends.Any(d => d.Process == whatToFind || FindDepend(d.Process, whatToFind)); }
/// <summary> /// Adds the element from XML. /// </summary> /// <param name="e"> The e. </param> /// <remarks> /// </remarks> private void AddElementFromXml(XElement e) { var process = new Process(); e.Apply(process); process.Xml = e; if (process.Code.IsEmpty()) { Errors.Add( new EcoProcessException("Процессу " + e.Describe().ToWhereString() + " не сопоставлен исполнительный узел", process.Xml)); return; } process.OrgNodeCode = e.Attr("orgnode"); if (e.Parent != null && e.Parent.Name.LocalName == "orgnode") { process.OrgNodeCode = e.Parent.Id(); } if (process.OrgNodeCode.IsEmpty()) { Errors.Add( new EcoProcessException("Процессу " + process.Code + " не сопоставлен исполнительный узел", process.Xml)); return; } foreach (var t in e.Elements("thema")) { var themaref = new ProcessThemaRef(); t.Apply(themaref); if (themaref.Code.IsEmpty()) { Errors.Add( new EcoProcessException("Процесс " + process.Code + " имеет путсую ссылку на тему ", process.Xml) ); continue; } if (null != process.ThemaRefs.FirstOrDefault(x => x.Code == themaref.Code)) { Errors.Add( new EcoProcessException("Процесс " + process.Code + " имеет двойную ссылку на тему " + themaref.Code, process.Xml)); continue; } if (themaref.OutLock && !themaref.OutView) { Errors.Add( new EcoProcessException("Процесс " + process.Code + " имеет неверную ссылку на тему " + themaref.Code + " - тема помечена к блокировке, но к экспорту", process.Xml)); continue; } process.ThemaRefs.Add(themaref); } foreach (var p in e.Elements("in")) { var processin = new ProcessInRef(); p.Apply(processin); processin.Xml = p; if (processin.Code.IsEmpty()) { Errors.Add( new EcoProcessException("Процесс " + process.Code + " имеет путсую ссылку процесс", process.Xml)); continue; } if (null != process.InDepends.FirstOrDefault(x => x.Code == processin.Code)) { Errors.Add( new EcoProcessException("Процесс " + process.Code + " имеет двойную ссылку на процесс " + processin.Code, process.Xml)); continue; } process.InDepends.Add(processin); } Add(process); }