/** * Copyright © 2002 Instituto Superior Técnico * * This file is part of FenixEdu Academic. * * FenixEdu Academic is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * FenixEdu Academic is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with FenixEdu Academic. If not, see <http://www.gnu.org/licenses/>. */ /* * InfoExam.java * * Created on 2003/03/19 */ package org.fenixedu.academic.dto; /** * @author Luis Cruz & Sara Ribeiro */ import java.util.Calendar; import java.util.List; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.Transformer; import org.fenixedu.academic.domain.Exam; import org.fenixedu.academic.util.DiaSemana; import org.fenixedu.academic.util.EvaluationType; import org.fenixedu.academic.util.Season; public class InfoExam extends InfoWrittenEvaluation { protected Season season; private List infoExecutionCourses; /** * The following variable serves the purpose of indicating the execution * course associated with this exam through which the exam was obtained. It * should serve only for view purposes!!! It was created to be used and set * by the ExamsMap Utilities. It has no meaning in the business logic. */ private InfoExecutionCourse infoExecutionCourse; public InfoExam() { } public InfoExam(Calendar day, Calendar beginning, Calendar end, Season season) { this.setDay(day); this.setBeginning(beginning); this.setEnd(end); this.setSeason(season); } @Override public String toString() { return "[INFOEXAM:" + " day= '" + this.getDay() + "'" + " beginning= '" + this.getBeginning() + "'" + " end= '" + this.getEnd() + "'" + " season= '" + this.getSeason() + "'" + ""; } public Season getSeason() { return season; } public void setSeason(Season season) { this.season = season; } public InfoExecutionCourse getInfoExecutionCourse() { return infoExecutionCourse; } public void setInfoExecutionCourse(InfoExecutionCourse course) { infoExecutionCourse = course; } public List getAssociatedRooms() { return (List) CollectionUtils.collect(super.getWrittenEvaluationSpaceOccupations(), new Transformer() { @Override public Object transform(Object arg0) { InfoRoomOccupation roomOccupation = (InfoRoomOccupation) arg0; return roomOccupation.getInfoRoom(); } }); } public String getDate() { if (getDay() == null) { return "0/0/0"; } String result = String.valueOf(getDay().get(Calendar.DAY_OF_MONTH)); result += "/"; result += String.valueOf(getDay().get(Calendar.MONTH) + 1); result += "/"; result += String.valueOf(getDay().get(Calendar.YEAR)); return result; } public String getBeginningHour() { if (getBeginning() == null) { return "00:00"; } String result = format(String.valueOf(getBeginning().get(Calendar.HOUR_OF_DAY))); result += ":"; result += format(String.valueOf(getBeginning().get(Calendar.MINUTE))); return result; } public String getEndHour() { if (getEnd() == null) { return "00:00"; } String result = format(String.valueOf(getEnd().get(Calendar.HOUR_OF_DAY))); result += ":"; result += format(String.valueOf(getEnd().get(Calendar.MINUTE))); return result; } private String format(String string) { if (string.length() == 1) { string = "0" + string; } return string; } public String dateFormatter(Calendar calendar) { String result = ""; if (calendar != null) { result += calendar.get(Calendar.DAY_OF_MONTH); result += "/"; result += calendar.get(Calendar.MONTH) + 1; result += "/"; result += calendar.get(Calendar.YEAR); } return result; } public String timeFormatter(Calendar calendar) { String result = ""; if (calendar != null) { result += calendar.get(Calendar.HOUR_OF_DAY); result += ":"; if (calendar.get(Calendar.MINUTE) < 10) { result += "0"; result += calendar.get(Calendar.MINUTE); } else { result += calendar.get(Calendar.MINUTE); } } return result; } public String getEnrollmentBeginDayFormatted() { return dateFormatter(getEnrollmentBeginDay()); } public String getEnrollmentEndDayFormatted() { return dateFormatter(getEnrollmentEndDay()); } public String getEnrollmentBeginTimeFormatted() { return timeFormatter(getEnrollmentBeginTime()); } public String getEnrollmentEndTimeFormatted() { return timeFormatter(getEnrollmentEndTime()); } public boolean getEnrollmentAuthorization() { if (getEnrollmentEndDay() == null) { return false; } Calendar enrollmentEnd = Calendar.getInstance(); enrollmentEnd.set(Calendar.DAY_OF_MONTH, getEnrollmentEndDay().get(Calendar.DAY_OF_MONTH)); enrollmentEnd.set(Calendar.MONTH, getEnrollmentEndDay().get(Calendar.MONTH)); enrollmentEnd.set(Calendar.YEAR, getEnrollmentEndDay().get(Calendar.YEAR)); enrollmentEnd.set(Calendar.HOUR_OF_DAY, getEnrollmentEndTime().get(Calendar.HOUR_OF_DAY)); enrollmentEnd.set(Calendar.MINUTE, getEnrollmentEndTime().get(Calendar.MINUTE)); Calendar now = Calendar.getInstance(); if (enrollmentEnd.getTimeInMillis() > now.getTimeInMillis()) { return true; } return false; } @Override public boolean equals(Object obj) { boolean result = false; if (obj instanceof InfoExam) { InfoExam infoExam = (InfoExam) obj; result = getExternalId().equals(infoExam.getExternalId()) && getDate().equals(infoExam.getDate()) && getEnrollmentBeginDayFormatted().equals(infoExam.getEnrollmentBeginDayFormatted()) && getEnrollmentBeginTimeFormatted().equals(infoExam.getEnrollmentBeginTimeFormatted()) && getEnrollmentEndDayFormatted().equals(infoExam.getEnrollmentEndDayFormatted()) && getEnrollmentEndTimeFormatted().equals(infoExam.getEnrollmentEndTimeFormatted()); } return result; } @Override public DiaSemana getDiaSemana() { Calendar day = this.getDay(); return new DiaSemana(day.get(Calendar.DAY_OF_WEEK)); } public List getInfoExecutionCourses() { return infoExecutionCourses; } public void setInfoExecutionCourses(List infoExecutionCourses) { this.infoExecutionCourses = infoExecutionCourses; } public void copyFromDomain(Exam exam) { super.copyFromDomain(exam); if (exam != null) { setSeason(exam.getSeason()); setEvaluationType(EvaluationType.EXAM_TYPE); } } public static InfoExam newInfoFromDomain(Exam exam) { InfoExam infoExam = null; if (exam != null) { infoExam = new InfoExam(); infoExam.copyFromDomain(exam); } return infoExam; } }