001 package net.sf.cpsolver.exam.reports;
002
003 import java.util.Enumeration;
004 import java.util.Iterator;
005 import java.util.Vector;
006
007 import net.sf.cpsolver.exam.model.Exam;
008 import net.sf.cpsolver.exam.model.ExamModel;
009 import net.sf.cpsolver.exam.model.ExamPlacement;
010 import net.sf.cpsolver.exam.model.ExamRoomPlacement;
011 import net.sf.cpsolver.ifs.util.CSVFile;
012 import net.sf.cpsolver.ifs.util.CSVFile.CSVField;
013
014 /**
015 * Export exam time and room assignments into a CSV file.
016 * <br><br>
017 * Usage:<br>
018 * <code>
019 * new ExamAssignments(model).report().save(file);
020 * </code>
021 * <br><br>
022 *
023 * @version
024 * ExamTT 1.1 (Examination Timetabling)<br>
025 * Copyright (C) 2008 Tomáš Müller<br>
026 * <a href="mailto:muller@unitime.org">muller@unitime.org</a><br>
027 * Lazenska 391, 76314 Zlin, Czech Republic<br>
028 * <br>
029 * This library is free software; you can redistribute it and/or
030 * modify it under the terms of the GNU Lesser General Public
031 * License as published by the Free Software Foundation; either
032 * version 2.1 of the License, or (at your option) any later version.
033 * <br><br>
034 * This library is distributed in the hope that it will be useful,
035 * but WITHOUT ANY WARRANTY; without even the implied warranty of
036 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
037 * Lesser General Public License for more details.
038 * <br><br>
039 * You should have received a copy of the GNU Lesser General Public
040 * License along with this library; if not, write to the Free Software
041 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
042 */
043 public class ExamAssignments {
044 private ExamModel iModel = null;
045
046 /**
047 * Constructor
048 * @param model examination timetabling model
049 */
050 public ExamAssignments(ExamModel model) {
051 iModel = model;
052 }
053
054 /**
055 * generate report
056 */
057 public CSVFile report() {
058 CSVFile csv = new CSVFile();
059 csv.setHeader(new CSVField[] {
060 new CSVField("Exam"),
061 new CSVField("Enrl"),
062 new CSVField("Alt"),
063 new CSVField("Period"),
064 new CSVField("Date"),
065 new CSVField("Time"),
066 new CSVField("Room"),
067 new CSVField("Cap")
068 });
069 for (Enumeration e=iModel.variables().elements();e.hasMoreElements();) {
070 Exam exam = (Exam)e.nextElement();
071 ExamPlacement placement = (ExamPlacement)exam.getAssignment();
072 Vector fields = new Vector();
073 fields.addElement(new CSVField(exam.getName()));
074 fields.addElement(new CSVField(exam.getStudents().size()));
075 fields.addElement(new CSVField(exam.hasAltSeating()?"Yes":"No"));
076 if (placement==null) {
077 fields.addElement(new CSVField(""));
078 fields.addElement(new CSVField(""));
079 fields.addElement(new CSVField(""));
080 fields.addElement(new CSVField(""));
081 fields.addElement(new CSVField(""));
082 } else {
083 fields.addElement(new CSVField(placement.getPeriod().getIndex()+1));
084 fields.addElement(new CSVField(placement.getPeriod().getDayStr()));
085 fields.addElement(new CSVField(placement.getPeriod().getTimeStr()));
086 String rooms = "";
087 String roomSizes = "";
088 for (Iterator i=placement.getRoomPlacements().iterator();i.hasNext();) {
089 ExamRoomPlacement room = (ExamRoomPlacement)i.next();
090 rooms += room.getRoom().getName();
091 roomSizes += room.getSize(exam.hasAltSeating());
092 if (i.hasNext()) {
093 rooms+=", ";
094 roomSizes+=", ";
095 }
096 }
097 fields.addElement(new CSVField(rooms));
098 fields.addElement(new CSVField(roomSizes));
099 }
100 csv.addLine(fields);
101 }
102 return csv;
103 }
104 }