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()); }