/**
  * Schedules a certain course to a specific position in the course schedule. This method should be
  * called from the course scheduling algorithms or the interface to manually schedule courses.
  *
  * @param course the course to schedule.
  * @param lecturer the lecturer which held the course.
  * @param room the room in which the course should take place.
  * @param day the day specifying the position in the course schedule.
  * @param timeSlot the time slit specifying the position in the course schedule.
  */
 public void setCourse(Course course, User lecturer, Room room, int day, int timeSlot) {
   ScheduleEntry entry = new ScheduleEntry(course, lecturer, room, day, timeSlot);
   entries.add(entry);
   RoomSchedule schedule = schedules.get(room);
   for (int i = 0; i < course.getDuration(); i++) {
     schedule.setCourse(course, lecturer, day, timeSlot + i);
   }
 }
  /**
   * Initializes the present data structures of this class: the content of <code>entries</code> is
   * reflected to <code>schedules</code>.
   */
  @PostLoad
  public void initialize() {

    if (!isInitialized) {
      for (Room room : rooms) {
        schedules.put(room, new RoomSchedule(timeframe));
      }

      for (ScheduleEntry entry : entries) {
        Room room = entry.getRoom();
        Course course = entry.getCourse();
        User lecturer = entry.getLecturer();
        int day = entry.getDay();
        int timeSlot = entry.getTimeSlot();
        RoomSchedule schedule = schedules.get(room);
        for (int i = 0; i < course.getDuration(); i++) {
          schedule.setCourse(course, lecturer, day, timeSlot + i);
        }
      }

      isInitialized = true;
    }
  }