/** * 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/>. */ /* * InfoExecutionCourse.java * * Created on 28 de Novembro de 2002, 3:41 */ package org.fenixedu.academic.dto; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.fenixedu.academic.domain.CourseLoad; import org.fenixedu.academic.domain.CurricularCourse; import org.fenixedu.academic.domain.CurricularCourseScope; import org.fenixedu.academic.domain.EntryPhase; import org.fenixedu.academic.domain.Evaluation; import org.fenixedu.academic.domain.Exam; import org.fenixedu.academic.domain.ExecutionCourse; import org.fenixedu.academic.domain.ExecutionYear; import org.fenixedu.academic.domain.Grouping; import org.fenixedu.academic.domain.NonAffiliatedTeacher; import org.fenixedu.academic.domain.Shift; import org.fenixedu.academic.domain.ShiftType; import org.fenixedu.academic.domain.time.calendarStructure.AcademicInterval; import org.fenixedu.academic.dto.teacher.InfoNonAffiliatedTeacher; /** * @author tfc130 */ public class InfoExecutionCourse extends InfoObject { private final ExecutionCourse executionCourseDomainReference; public InfoExecutionCourse(final ExecutionCourse executionCourse) { executionCourseDomainReference = executionCourse; } public static InfoExecutionCourse newInfoFromDomain(final ExecutionCourse executionCourse) { return executionCourse == null ? null : new InfoExecutionCourse(executionCourse); } public ExecutionCourse getExecutionCourse() { return executionCourseDomainReference; } @Override public boolean equals(Object obj) { return obj instanceof InfoExecutionCourse && getExecutionCourse() == ((InfoExecutionCourse) obj).getExecutionCourse(); } @Override public int hashCode() { return getExecutionCourse().hashCode(); } @Override public String getExternalId() { return getExecutionCourse().getExternalId(); } @Override public void setExternalId(String integer) { throw new Error("Method should not be called!"); } // =================== FIELDS RETRIEVED BY DOMAIN LOGIC // ======================= public Double getWeeklyTheoreticalHours() { return getExecutionCourse().getWeeklyCourseLoadTotalQuantityByShiftType(ShiftType.TEORICA).doubleValue(); } public Double getWeeklyPraticalHours() { return getExecutionCourse().getWeeklyCourseLoadTotalQuantityByShiftType(ShiftType.PRATICA).doubleValue(); } public Double getWeeklyTheoPratHours() { return getExecutionCourse().getWeeklyCourseLoadTotalQuantityByShiftType(ShiftType.TEORICO_PRATICA).doubleValue(); } public Double getWeeklyLabHours() { return getExecutionCourse().getWeeklyCourseLoadTotalQuantityByShiftType(ShiftType.LABORATORIAL).doubleValue(); } public Double getWeeklyFieldWorkHours() { return getExecutionCourse().getWeeklyCourseLoadTotalQuantityByShiftType(ShiftType.FIELD_WORK).doubleValue(); } public Double getWeeklyProblemsHours() { return getExecutionCourse().getWeeklyCourseLoadTotalQuantityByShiftType(ShiftType.PROBLEMS).doubleValue(); } public Double getWeeklySeminaryHours() { return getExecutionCourse().getWeeklyCourseLoadTotalQuantityByShiftType(ShiftType.SEMINARY).doubleValue(); } public Double getWeeklyTrainingPeriodHours() { return getExecutionCourse().getWeeklyCourseLoadTotalQuantityByShiftType(ShiftType.TRAINING_PERIOD).doubleValue(); } public Double getWeeklyTutorialOrientationHours() { return getExecutionCourse().getWeeklyCourseLoadTotalQuantityByShiftType(ShiftType.TUTORIAL_ORIENTATION).doubleValue(); } public String getNome() { return getExecutionCourse().getNome(); } public String getSigla() { return getExecutionCourse().getSigla(); } public String getComment() { return getExecutionCourse().getComment(); } public Integer getNumberOfAttendingStudents() { return getExecutionCourse().getAttendsSet().size(); } public String getEqualLoad() { return getExecutionCourse().getEqualLoad(); } public Boolean getAvailableGradeSubmission() { return getExecutionCourse().getAvailableGradeSubmission(); } @Deprecated public InfoExecutionPeriod getInfoExecutionPeriod() { return InfoExecutionPeriod.newInfoFromDomain(getExecutionCourse().getExecutionPeriod()); } public AcademicInterval getAcademicInterval() { return getExecutionCourse().getAcademicInterval(); } public List<InfoShift> getAssociatedInfoShifts() { final List<InfoShift> result = new ArrayList<InfoShift>(); for (final Shift shift : getExecutionCourse().getAssociatedShifts()) { result.add(InfoShift.newInfoFromDomain(shift)); } return result; } public List<InfoNonAffiliatedTeacher> getNonAffiliatedTeachers() { final List<InfoNonAffiliatedTeacher> result = new ArrayList<InfoNonAffiliatedTeacher>(); for (final NonAffiliatedTeacher nonAffiliatedTeacher : getExecutionCourse().getNonAffiliatedTeachersSet()) { result.add(InfoNonAffiliatedTeacher.newInfoFromDomain(nonAffiliatedTeacher)); } return result; } public List<InfoEvaluation> getAssociatedInfoEvaluations() { final List<InfoEvaluation> result = new ArrayList<InfoEvaluation>(); for (final Evaluation nonAffiliatedTeacher : getExecutionCourse().getAssociatedEvaluationsSet()) { result.add(InfoEvaluation.newInfoFromDomain(nonAffiliatedTeacher)); } return result; } public List<InfoCurricularCourse> getAssociatedInfoCurricularCourses() { if (filteredAssociatedInfoCurricularCourses == null) { List<InfoCurricularCourse> result = new ArrayList<InfoCurricularCourse>(); for (final CurricularCourse curricularCourse : getExecutionCourse().getAssociatedCurricularCoursesSet()) { final InfoCurricularCourse infoCurricularCourse = InfoCurricularCourse.newInfoFromDomain(curricularCourse); infoCurricularCourse.setInfoScopes(getInfoScopes(curricularCourse.getScopesSet())); result.add(infoCurricularCourse); } setFilteredAssociatedInfoCurricularCourses(result); return result; } else { return getFilteredAssociatedInfoCurricularCourses(); } } public boolean getCanRemoveCurricularCourses() { return getAssociatedInfoCurricularCourses().size() > 1; } private List<InfoCurricularCourseScope> getInfoScopes(final Collection<CurricularCourseScope> curricularCourseScopes) { final List<InfoCurricularCourseScope> result = new ArrayList<InfoCurricularCourseScope>(); for (final CurricularCourseScope curricularCourseScope : curricularCourseScopes) { result.add(InfoCurricularCourseScope.newInfoFromDomain(curricularCourseScope)); } return result; } public List<InfoCurricularCourse> getAssociatedInfoCurricularCourses(final ExecutionYear executionYear) { List<InfoCurricularCourse> result = new ArrayList<InfoCurricularCourse>(); for (final CurricularCourse curricularCourse : getExecutionCourse().getAssociatedCurricularCoursesSet()) { final InfoCurricularCourse infoCurricularCourse = InfoCurricularCourse.newInfoFromDomain(curricularCourse); infoCurricularCourse.setInfoScopes(getInfoScopes(curricularCourse.findCurricularCourseScopesIntersectingPeriod( executionYear.getBeginDate(), executionYear.getEndDate()))); result.add(infoCurricularCourse); } return result; } public List<InfoExam> getAssociatedInfoExams() { if (filteredAssociatedInfoExams == null) { List<InfoExam> result = new ArrayList<InfoExam>(); for (final Exam exam : getExecutionCourse().getAssociatedExams()) { result.add(InfoExam.newInfoFromDomain(exam)); } return result; } else { return getFilteredAssociatedInfoExams(); } } public List<InfoGrouping> getInfoGroupings() { if (filteredInfoGroupings == null) { List<InfoGrouping> result = new ArrayList<InfoGrouping>(); for (final Grouping grouping : getExecutionCourse().getGroupings()) { result.add(InfoGrouping.newInfoFromDomain(grouping)); } return result; } else { return getFilteredInfoGroupings(); } } public Collection<CourseLoad> getCourseLoads() { return getExecutionCourse().getCourseLoadsSet(); } // =================== FIELDS NOT RETRIEVED BY DOMAIN LOGIC // ======================= // The following variable serves the purpose of indicating the // the curricular year in which the execution course is given // for a certain execution degree through which // the execution course 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 buisness logic. private Integer curricularYear; public Integer getCurricularYear() { return curricularYear; } public void setCurricularYear(Integer integer) { curricularYear = integer; } private Double occupancy; public Double getOccupancy() { return occupancy; } public void setOccupancy(Double occupancy) { this.occupancy = occupancy; } private List<InfoCurricularCourse> filteredAssociatedInfoCurricularCourses; private List<InfoCurricularCourse> getFilteredAssociatedInfoCurricularCourses() { return filteredAssociatedInfoCurricularCourses; } public void setFilteredAssociatedInfoCurricularCourses( final List<InfoCurricularCourse> filteredAssociatedInfoCurricularCourses) { this.filteredAssociatedInfoCurricularCourses = filteredAssociatedInfoCurricularCourses; } private List<InfoExam> filteredAssociatedInfoExams; private List<InfoExam> getFilteredAssociatedInfoExams() { return filteredAssociatedInfoExams; } public void setFilteredAssociatedInfoExams(final List<InfoExam> filteredAssociatedInfoExams) { this.filteredAssociatedInfoExams = filteredAssociatedInfoExams; } @Override public String toString() { return getExecutionCourse().toString(); } private List<InfoGrouping> filteredInfoGroupings; private List<InfoGrouping> getFilteredInfoGroupings() { return filteredInfoGroupings; } public void setFilteredInfoGroupings(List<InfoGrouping> filteredInfoGroupings) { this.filteredInfoGroupings = filteredInfoGroupings; } public EntryPhase getEntryPhase() { return getExecutionCourse().getEntryPhase(); } }