001 package net.sf.cpsolver.exam.model;
002
003 import java.util.HashSet;
004 import java.util.Set;
005
006 /**
007 * Representation of a course or a section (or any other group of students that is
008 * associated with an exam). This entity is not used
009 * for examination timetabling, but it may be important for reports since
010 * students are usually enrolled to sections and/or courses and an exam
011 * can be offered for a set of courses/sections.
012 * <br><br>
013 * The relations between course/section and exams, students and instructors are
014 * bidirectional, see {@link Exam#getOwners()},
015 * {@link ExamStudent#getOwners()}, and
016 * {@link ExamInstructor#getOwners()}.
017 * <br><br>
018 *
019 * @version
020 * ExamTT 1.1 (Examination Timetabling)<br>
021 * Copyright (C) 2008 Tomáš Müller<br>
022 * <a href="mailto:muller@unitime.org">muller@unitime.org</a><br>
023 * Lazenska 391, 76314 Zlin, Czech Republic<br>
024 * <br>
025 * This library is free software; you can redistribute it and/or
026 * modify it under the terms of the GNU Lesser General Public
027 * License as published by the Free Software Foundation; either
028 * version 2.1 of the License, or (at your option) any later version.
029 * <br><br>
030 * This library is distributed in the hope that it will be useful,
031 * but WITHOUT ANY WARRANTY; without even the implied warranty of
032 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
033 * Lesser General Public License for more details.
034 * <br><br>
035 * You should have received a copy of the GNU Lesser General Public
036 * License along with this library; if not, write to the Free Software
037 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
038 */
039 public class ExamOwner implements Comparable {
040 private long iId;
041 private String iName;
042 private Exam iExam;
043 private HashSet iStudents = new HashSet();
044 private HashSet iInstructors = new HashSet();
045
046 /**
047 * Constructor.
048 * @param exam an exam for this course/section
049 * @param id unique id
050 * @param name course/section name
051 */
052 public ExamOwner(Exam exam, long id, String name) {
053 iExam = exam;
054 iId = id;
055 iName = name;
056 }
057
058 /**
059 * Unique identifier
060 */
061 public long getId() {
062 return iId;
063 }
064
065 /**
066 * Course/section name
067 */
068 public String getName() {
069 return iName;
070 }
071
072 /**
073 * An exam for this course/section
074 */
075 public Exam getExam() {
076 return iExam;
077 }
078
079 /**
080 * List of students that are enrolled into this section/course
081 * @return set of {@link ExamStudent}
082 */
083 public Set getStudents() {
084 return iStudents;
085 }
086
087 /**
088 * List of instructors that are enrolled into this section/course
089 * @return set of {@link ExamInstructor}
090 */
091 public Set getIntructors() {
092 return iInstructors;
093 }
094
095 /**
096 * String representation -- course/section name
097 */
098 public String toString() {
099 return iName;
100 }
101
102 /** Hash code */
103 public int hashCode() {
104 return (int)(iId ^ (iId >>> 32));
105 }
106
107 /** Compare two exam owners for equality */
108 public boolean equals(Object o) {
109 if (o==null || !(o instanceof ExamOwner)) return false;
110 return getId() == ((ExamOwner)o).getId();
111 }
112
113 /** Compare two exam owners by name */
114 public int compareTo(Object o) {
115 ExamOwner owner = (ExamOwner)o;
116 if (!getName().equals(owner.getName())) return getName().compareTo(owner.getName());
117 return Double.compare(getId(),owner.getId());
118 }
119 }