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