package schedule;
import java.util.Collection;
import admin.CourseDB;
import admin.Course;
/**
   * This class defines a Collection of courses the admin populates. 
   * This Collection of courses may not be scheduled at the same time.
   * The score tells how "well" the generated schedule met this constraint to give an idea    
   * of how good the generated schedule turned out. 
   *     <p>
   * This object is derived from Section 2.4.1.2 of the Functional Requirements.
   */
abstract class AdminCourseOverlap {
   public Collection<Course> courses;
   public CourseDB CourseDataBase;
   public int overlapScore;

   /**
     * This method is called each time an admin adds a course to a Collection of courses 
     * they would not like to be scheduled with overlap. 
     */
    /*@
      requires
      	// 
      	// The input course is not null and it is a valid course
      	//
      	(toAdd != null)
     
              &&

        (CourseDataBase.contains(toAdd) == true);
      
      ensures
      	// 
      	// The course added is valid and it is added to the collection
      	//
      	(courses.contains(toAdd) == true);
     @*/
   public abstract void addCourse(Course toAdd);

   /**
     * This method is called when the admin wants to save the Collection of courses.
     */  
    /*@
      requires
      	// 
      	// The input course is not null and it is a valid course
      	//
      	(courses != null)
     
              &&

        (foreach(Item m : courses) CourseDataBase.contains(m) == true);
      
      ensures
      	// 
      	// The course list is saved
      	//
      	(courses != null);
     @*/
   public abstract void saveCourseList();
}