001package org.cpsolver.studentsct.model; 002 003import java.util.List; 004import java.util.Set; 005 006import org.cpsolver.coursett.model.RoomLocation; 007import org.cpsolver.coursett.model.TimeLocation; 008import org.cpsolver.ifs.assignment.Assignment; 009 010 011/** 012 * Time and room assignment. This can be either {@link Section} or 013 * {@link FreeTimeRequest}. <br> 014 * <br> 015 * 016 * @author Tomáš Müller 017 * @version StudentSct 1.3 (Student Sectioning)<br> 018 * Copyright (C) 2007 - 2014 Tomáš Müller<br> 019 * <a href="mailto:muller@unitime.org">muller@unitime.org</a><br> 020 * <a href="http://muller.unitime.org">http://muller.unitime.org</a><br> 021 * <br> 022 * This library is free software; you can redistribute it and/or modify 023 * it under the terms of the GNU Lesser General Public License as 024 * published by the Free Software Foundation; either version 3 of the 025 * License, or (at your option) any later version. <br> 026 * <br> 027 * This library is distributed in the hope that it will be useful, but 028 * WITHOUT ANY WARRANTY; without even the implied warranty of 029 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 030 * Lesser General Public License for more details. <br> 031 * <br> 032 * You should have received a copy of the GNU Lesser General Public 033 * License along with this library; if not see 034 * <a href='http://www.gnu.org/licenses/'>http://www.gnu.org/licenses/</a>. 035 */ 036public interface SctAssignment { 037 /** Time assignment 038 * @return time assignment 039 **/ 040 public TimeLocation getTime(); 041 042 /** 043 * Room assignment 044 * 045 * @return list of {@link org.cpsolver.coursett.model.RoomLocation} 046 */ 047 public List<RoomLocation> getRooms(); 048 049 /** Number of rooms in which a section meets 050 * @return number of rooms in which a section meets 051 **/ 052 public int getNrRooms(); 053 054 /** 055 * True, if this assignment is overlapping in time and space with the given 056 * assignment. 057 * @param assignment another assignment 058 * @return true if there is an overlap 059 */ 060 public boolean isOverlapping(SctAssignment assignment); 061 062 /** 063 * True, if this assignment is overlapping in time and space with the given 064 * set of assignments. 065 * @param assignments a set of assignments 066 * @return true if one of them overlaps 067 */ 068 public boolean isOverlapping(Set<? extends SctAssignment> assignments); 069 070 /** Enrollment with this assignment was assigned to a {@link Request}. 071 * @param assignment current assignment 072 * @param enrollment an enrollment that was just assigned 073 **/ 074 public void assigned(Assignment<Request, Enrollment> assignment, Enrollment enrollment); 075 076 /** Enrollment with this assignment was unassigned from a {@link Request}. 077 * @param assignment current assignment 078 * @param enrollment an enrollment that was just unassigned 079 **/ 080 public void unassigned(Assignment<Request, Enrollment> assignment, Enrollment enrollment); 081 082 /** Return the list of assigned enrollments that contains this assignment. 083 * @param assignment current assignments 084 * @return a list of assigned enrollments (of this request) that contains this assignment 085 **/ 086 public Set<Enrollment> getEnrollments(Assignment<Request, Enrollment> assignment); 087 088 /** Return true if overlaps are allowed, but the number of overlapping slots should be minimized. 089 * @return true, if overlaps are allowed 090 **/ 091 public boolean isAllowOverlap(); 092 093 /** Unique id 094 * @return section unique id 095 **/ 096 public long getId(); 097 098 /** Compare assignments by unique ids. 099 * @param a another section assignment 100 * @return comparison 101 **/ 102 public int compareById(SctAssignment a); 103}