public void UpdateGraphForPerRisk() { List <IScheduleInput> newSchedules = new List <IScheduleInput>(); bool existed; List <IScheduleInput> CopyOfOriginalSchedules = new List <IScheduleInput>(OriginalSchedules); List <IScheduleInput> PerRiskScheduleList = new List <IScheduleInput>(); HashSet <RITE> ExplodedRiteSet = new HashSet <RITE>(); List <IScheduleInput> ExplodedRiteScheduleSet = new List <IScheduleInput>(); foreach (IScheduleInput schedule in CopyOfOriginalSchedules) { if (schedule.IsPerRisk) { PerRiskScheduleList.Add(schedule); ScheduleTree.Remove(schedule.ScheduleName); //TODO: also remove the schedule from the second key OriginalSchedules.Remove(schedule); ExplodedRiteSet.UnionWith(schedule.GetScheduleRITEList()); } } foreach (RITE aRite in ExplodedRiteSet) { IScheduleInput newS = FormScheduleFromARITE(aRite, out existed); if (!existed) { ExplodedRiteScheduleSet.Add(newS); } } GrowScheduleTree(ExplodedRiteScheduleSet, OriginalSchedules); }
public void GrowScheduleTree(List <IScheduleInput> scheduleList1, List <IScheduleInput> scheduleList2) { foreach (IScheduleInput schedule1 in scheduleList1) { foreach (IScheduleInput schedule2 in scheduleList2) { if (ScheduleTree.ContainsKey(schedule1.ScheduleName) && ScheduleTree[schedule1.ScheduleName].ContainsKey(schedule2.ScheduleName)) { continue; } else { ScheduleCompareOutcome result = CompareTwoSchedules(schedule1, schedule2); ScheduleCompareOutcome resultOpposite; if (result == ScheduleCompareOutcome.Overlap || result == ScheduleCompareOutcome.Disjoin || result == ScheduleCompareOutcome.Equal) { resultOpposite = result; } else if (result == ScheduleCompareOutcome.Child) { resultOpposite = ScheduleCompareOutcome.Parent; } else if (result == ScheduleCompareOutcome.Parent) { resultOpposite = ScheduleCompareOutcome.Child; } else { throw new NotSupportedException(); } if (!ScheduleTree.ContainsKey(schedule1.ScheduleName)) { ScheduleTree.Add(schedule1.ScheduleName, new Dictionary <string, ScheduleCompareOutcome>() { { schedule2.ScheduleName, result } }); } else if (!ScheduleTree[schedule1.ScheduleName].ContainsKey(schedule2.ScheduleName)) { ScheduleTree[schedule1.ScheduleName].Add(schedule2.ScheduleName, result); } if (!ScheduleTree.ContainsKey(schedule2.ScheduleName)) { ScheduleTree.Add(schedule2.ScheduleName, new Dictionary <string, ScheduleCompareOutcome>() { { schedule1.ScheduleName, resultOpposite } }); } else if (!ScheduleTree[schedule2.ScheduleName].ContainsKey(schedule1.ScheduleName)) { ScheduleTree[schedule2.ScheduleName].Add(schedule1.ScheduleName, resultOpposite); } } } } }