示例#1
0
        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);
        }
示例#2
0
        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);
                        }
                    }
                }
            }
        }