示例#1
0
        public GraphConfig Process(bool withCriticalPath)
        {
            Schedule upperSchedule;
            Schedule lowerSchedule;

            var activities = _repository.GetActivities();
            var link       = _repository.GetLink();

            var upwardActivities   = activities.Where(a => a.Section == ActivitySection.UPWARD);
            var downwardActivities = activities.Where(a => a.Section == ActivitySection.DOWNWARD);

            upperSchedule = _activityProcessor.Calculate(upwardActivities);
            lowerSchedule = _activityProcessor.Calculate(downwardActivities);

            if (withCriticalPath)
            {
                var startingUpwardActivity   = GetStartingActivity(upwardActivities);
                var endingUpwardActivity     = GetEndingActivity(upwardActivities);
                var downwardStartingActivity = GetStartingActivity(downwardActivities);
                var endingDownwardActivity   = GetEndingActivity(downwardActivities);

                if (link != null && link.DownwardAct != null && link.UpwardAct != null)
                {
                    endingUpwardActivity     = link.UpwardAct;
                    downwardStartingActivity = link.DownwardAct;
                }

                upperSchedule = _activityProcessor.Process(upwardActivities, startingUpwardActivity,
                                                           endingUpwardActivity);
                lowerSchedule = _activityProcessor.Process(downwardActivities, downwardStartingActivity,
                                                           endingDownwardActivity);

                if (link != null)
                {
                    _linkProcessor.Process(activities, link, ref upperSchedule, ref lowerSchedule);
                }
            }

            return(_graphProcessor.ProcessGraph(withCriticalPath, upperSchedule, lowerSchedule));
        }
 public LinkWithActivity GetLink()
 {
     return(_repository.GetLink());
 }