package schedule; import java.util.Collection; import database.Schedule; import schedule.InstructorPreference; import schedule.ScheduleConstraint; import schedule.ScheduleCourse; /** * The Scheduler class constains all data and methods that have to deal with * the scheduler. */ public abstract class Scheduler { /** * The schedule. */ public Schedule schedule; /** * A list of instructor preferences. */ public Collection instructorPreferences; /** * A list of schedule constraints. */ public Collection scheduleConstraints; /** * The schedule's generated courses given constraints and preferences. */ public Collection scheduleCourses; /** * Adds a constraint to this schedule. * @param constraint The constraint to be added. */ /*@ requires constraint != null; ensures scheduleConstraints.contains(constraint); @*/ public abstract void addScheduleConstraint(ScheduleConstraint constraint); /** * Adds an instructor preference to this schedule. * @param preference The preference to be added. */ /*@ requires preference != null; ensures instructorPreferences.contains(preference); @*/ public abstract void addInstructorPreference(InstructorPreference preference); /** * Adds a course to this schedule. * @param course The course to be added. */ /*@ requires course != null; ensures scheduleCourses.contains(course); @*/ public abstract void addScheduleCourse(ScheduleCourse course); /** * Removes a constraint from this schedule. * @param constraint The constraint to be removed. */ /*@ requires constraint != null; ensures !scheduleConstraints.contains(constraint); @*/ public abstract void removeScheduleConstraint(ScheduleConstraint constraint); /** * Removes an instructor preference from this schedule. * @param preference The preference to be removed. */ /*@ requires preference != null; ensures !instructorPreferences.contains(preference); @*/ public abstract void removeInstructorPreference(InstructorPreference preference); /** * Removes a course from this schedule. * @param course The course to be removed. */ /*@ requires course != null; ensures !scheduleCourses.contains(course); @*/ public abstract void removeScheduleCourse(ScheduleCourse course); /** * Publishes or unpublishes this schedule. * @param newStatus True if publish, False if unpublished. */ /*@ requires newStatus != schedule.published; ensures newStatus == schedule.published; @*/ public abstract void publish(boolean newStatus); /** * Generates schedule. */ /*@ ensures schedule.generated == true; @*/ public abstract void generateSchedule(); }