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 }