/** * Copyright © ${project.inceptionYear} Instituto Superior Técnico * * This file is part of Fenix IST. * * Fenix IST 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. * * Fenix IST 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 Fenix IST. If not, see <http://www.gnu.org/licenses/>. */ package pt.ist.fenix.ui.struts.action.gep; import java.io.IOException; import java.io.Serializable; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.collections.Predicate; import org.apache.commons.lang.StringUtils; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.fenixedu.academic.domain.ExecutionYear; import org.fenixedu.academic.domain.Person; import org.fenixedu.academic.domain.QueueJob; import org.fenixedu.academic.domain.degree.DegreeType; import org.fenixedu.academic.domain.reports.CourseLoadAndResponsiblesReportFile; import org.fenixedu.academic.domain.reports.CourseLoadReportFile; import org.fenixedu.academic.domain.reports.DissertationsProposalsReportFile; import org.fenixedu.academic.domain.reports.DissertationsWithExternalAffiliationsReportFile; import org.fenixedu.academic.domain.reports.EctsLabelCurricularCourseReportFile; import org.fenixedu.academic.domain.reports.EctsLabelDegreeReportFile; import org.fenixedu.academic.domain.reports.EtiReportFile; import org.fenixedu.academic.domain.reports.EurAceReportFile; import org.fenixedu.academic.domain.reports.FlunkedReportFile; import org.fenixedu.academic.domain.reports.GepReportFile; import org.fenixedu.academic.domain.reports.GraduationReportFile; import org.fenixedu.academic.domain.reports.RaidesDfaReportFile; import org.fenixedu.academic.domain.reports.RaidesGraduationReportFile; import org.fenixedu.academic.domain.reports.RaidesPhdReportFile; import org.fenixedu.academic.domain.reports.RaidesSpecializationReportFile; import org.fenixedu.academic.domain.reports.RegistrationReportFile; import org.fenixedu.academic.domain.reports.StatusAndApprovalReportFile; import org.fenixedu.academic.domain.reports.SummaryOccupancyReportFile; import org.fenixedu.academic.domain.reports.WrittenEvaluationReportFile; import org.fenixedu.academic.predicate.AccessControl; import org.fenixedu.academic.ui.struts.action.base.FenixDispatchAction; import org.fenixedu.academic.ui.struts.action.gep.GepApplication.GepPortalApp; import org.fenixedu.bennu.struts.annotations.Forward; import org.fenixedu.bennu.struts.annotations.Forwards; import org.fenixedu.bennu.struts.annotations.Mapping; import org.fenixedu.bennu.struts.portal.EntryPoint; import org.fenixedu.bennu.struts.portal.StrutsFunctionality; import pt.ist.fenix.domain.ReportFileFactory; import pt.ist.fenixWebFramework.renderers.utils.RenderUtils; import pt.ist.fenixedu.teacher.domain.reports.EffectiveTeachingLoadReportFile; import pt.ist.fenixedu.teacher.domain.reports.TeacherCreditsReportFile; import pt.ist.fenixedu.teacher.domain.reports.TeachersByShiftReportFile; import pt.ist.fenixedu.teacher.domain.reports.TeachersListFromGiafReportFile; import pt.ist.fenixedu.teacher.domain.reports.TimetablesReportFile; import pt.ist.fenixedu.tutorship.domain.reports.TutorshipProgramReportFile; import pt.ist.fenixframework.FenixFramework; @StrutsFunctionality(app = GepPortalApp.class, path = "reports", titleKey = "link.reports") @Mapping(module = "gep", path = "/reportsByDegreeType") @Forwards({ @Forward(name = "selectDegreeType", path = "/gep/reportsByDegreeType.jsp"), @Forward(name = "viewReports", path = "/gep/viewReports.jsp") }) public class ReportsByDegreeTypeDA extends FenixDispatchAction { private static final int MAX_AUTHORIZED_REPORT_FILES = 20; public static class ReportBean implements Serializable { private DegreeType degreeType; private ExecutionYear executionYearReference; public DegreeType getDegreeType() { return degreeType; } public void setDegreeType(DegreeType degreeType) { this.degreeType = degreeType; } public ExecutionYear getExecutionYear() { return executionYearReference; } public String getExecutionYearOID() { return getExecutionYear() == null ? null : getExecutionYear().getExternalId(); } public void setExecutionYear(final ExecutionYear executionYear) { executionYearReference = executionYear; } public ExecutionYear getExecutionYearFourYearsBack() { final ExecutionYear executionYear = getExecutionYear(); return executionYear == null ? null : ReportsByDegreeTypeDA.getExecutionYearFourYearsBack(executionYear); } } public static ExecutionYear getExecutionYearFourYearsBack(final ExecutionYear executionYear) { ExecutionYear executionYearFourYearsBack = executionYear; if (executionYear != null) { for (int i = 5; i > 1; i--) { final ExecutionYear previousExecutionYear = executionYearFourYearsBack.getPreviousExecutionYear(); if (previousExecutionYear != null) { executionYearFourYearsBack = previousExecutionYear; } } } return executionYearFourYearsBack; } public List<QueueJob> getLatestJobs() { return QueueJob.getLastJobsForClassOrSubClass(GepReportFile.class, 5); } @EntryPoint public ActionForward selectDegreeType(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { ReportBean reportBean = getRenderedObject(); DegreeType degreeType; ExecutionYear executionYear; if (reportBean == null) { degreeType = getDegreeType(request); executionYear = getExecutionYear(request); reportBean = new ReportBean(); reportBean.setDegreeType(degreeType); reportBean.setExecutionYear(executionYear); } else { degreeType = reportBean.getDegreeType(); executionYear = reportBean.getExecutionYear(); } RenderUtils.invalidateViewState(); request.setAttribute("reportBean", reportBean); request.setAttribute("queueJobList", getLatestJobs()); countReports(request, degreeType, executionYear); return mapping.findForward("selectDegreeType"); } private void countReports(HttpServletRequest request, DegreeType degreeType, ExecutionYear executionYear) { for (Integer i = 1;; ++i) { Class aClass = getClassForParameter(i.toString()); if (aClass == null) { break; } request.setAttribute("numberOfReportsType" + i, getCountReportsForParameters(degreeType, executionYear, aClass)); } } private int getCountReportsForParameters(DegreeType degreeType, ExecutionYear executionYear, Class reportClass) { Predicate predicate = new FindSelectedGepReports(executionYear, degreeType, reportClass); List<GepReportFile> selectedJobs = (List<GepReportFile>) org.apache.commons.collections.CollectionUtils.select(rootDomainObject.getQueueJobSet(), predicate); return getValidCounterForReports(selectedJobs.size()); } private int getValidCounterForReports(int totalCounter) { if (totalCounter > MAX_AUTHORIZED_REPORT_FILES) { return MAX_AUTHORIZED_REPORT_FILES; } else { return totalCounter; } } public ActionForward cancelQueuedJob(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { cancelQueuedJob(request); return selectDegreeType(mapping, actionForm, request, response); } public ActionForward cancelQueuedJobFromViewReports(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { cancelQueuedJob(request); return viewReports(mapping, actionForm, request, response); } private void cancelQueuedJob(HttpServletRequest request) { QueueJob job = getDomainObject(request, "id"); job.cancel(); } public ActionForward resendJob(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { resendJob(request); return selectDegreeType(mapping, actionForm, request, response); } public ActionForward resendJobFromViewReports(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { resendJob(request); return viewReports(mapping, actionForm, request, response); } private void resendJob(HttpServletRequest request) { QueueJob job = getDomainObject(request, "id"); job.resend(); } private boolean isRepeatedJob(Person person, HttpServletRequest request, Class aClass) { final DegreeType degreeType = getDegreeType(request); request.setAttribute("degreeType", degreeType); final ExecutionYear executionYear = getExecutionYear(request); request.setAttribute("executionYearID", (executionYear == null) ? null : executionYear.getExternalId()); final String fileType = getFileType(request); for (QueueJob queueJob : getLatestJobs()) { GepReportFile gepReportFile = (GepReportFile) queueJob; if ((gepReportFile.getPerson() == person) && (gepReportFile.getClass() == aClass) && (!gepReportFile.getDone()) && (gepReportFile.getExecutionYear() == executionYear) && (gepReportFile.getDegreeType() == degreeType) && (fileType.equals(gepReportFile.getType()))) { return true; } } return false; } private String getFileType(final HttpServletRequest httpServletRequest) { return httpServletRequest.getParameter("format"); } private DegreeType getDegreeType(final HttpServletRequest httpServletRequest) { final String degreeTypeString = httpServletRequest.getParameter("degreeType"); return StringUtils.isEmpty(degreeTypeString) ? null : DegreeType.valueOf(degreeTypeString); } private ExecutionYear getExecutionYear(final HttpServletRequest httpServletRequest) { final String OIDString = httpServletRequest.getParameter("executionYearID"); return StringUtils.isEmpty(OIDString) ? null : FenixFramework.<ExecutionYear> getDomainObject(OIDString); } private String getFormat(final HttpServletRequest httpServletRequest) { return httpServletRequest.getParameter("format"); } @SuppressWarnings("unused") public ActionForward downloadEurAce(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws IOException { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } final DegreeType degreeType = getDegreeType(request); final ExecutionYear executionYear = getExecutionYear(request); final String format = getFormat(request); prepareNewJobResponse(request, ReportFileFactory.createEurAceReportFile(format, degreeType, executionYear)); return selectDegreeType(mapping, actionForm, request, response); } @SuppressWarnings("unused") public ActionForward downloadEctsLabelForCurricularCourses(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws IOException { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } final DegreeType degreeType = getDegreeType(request); final ExecutionYear executionYear = getExecutionYear(request); final String format = getFormat(request); prepareNewJobResponse(request, ReportFileFactory.createEctsLabelCurricularCourseReportFile(format, degreeType, executionYear)); return selectDegreeType(mapping, actionForm, request, response); } @SuppressWarnings("unused") public ActionForward downloadEctsLabelForDegrees(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws IOException { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } final DegreeType degreeType = getDegreeType(request); final ExecutionYear executionYear = getExecutionYear(request); final String format = getFormat(request); prepareNewJobResponse(request, ReportFileFactory.createEctsLabelDegreeReportFile(format, degreeType, executionYear)); return selectDegreeType(mapping, actionForm, request, response); } @SuppressWarnings("unused") public ActionForward downloadStatusAndAproval(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws IOException { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } final DegreeType degreeType = getDegreeType(request); final ExecutionYear executionYear = getExecutionYear(request); final String format = getFormat(request); prepareNewJobResponse(request, ReportFileFactory.createStatusAndApprovalReportFile(format, degreeType, executionYear)); return selectDegreeType(mapping, actionForm, request, response); } @SuppressWarnings("unused") public ActionForward downloadEti(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws IOException { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } final DegreeType degreeType = getDegreeType(request); final ExecutionYear executionYear = getExecutionYear(request); final String format = getFormat(request); prepareNewJobResponse(request, ReportFileFactory.createEtiReportFile(format, degreeType, executionYear)); return selectDegreeType(mapping, actionForm, request, response); } @SuppressWarnings("unused") public ActionForward downloadCourseLoadAndResponsibles(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws IOException { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } final DegreeType degreeType = getDegreeType(request); final ExecutionYear executionYear = getExecutionYear(request); final String format = getFormat(request); prepareNewJobResponse(request, ReportFileFactory.createCourseLoadAndResponsiblesReportFile(format, degreeType, executionYear)); return selectDegreeType(mapping, actionForm, request, response); } @SuppressWarnings("unused") public ActionForward downloadRegistrations(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws IOException { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } final DegreeType degreeType = getDegreeType(request); final ExecutionYear executionYear = getExecutionYear(request); final String format = getFormat(request); prepareNewJobResponse(request, ReportFileFactory.createRegistrationReportFile(format, degreeType, executionYear)); return selectDegreeType(mapping, actionForm, request, response); } @SuppressWarnings("unused") public ActionForward downloadFlunked(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws IOException { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } final DegreeType degreeType = getDegreeType(request); final ExecutionYear executionYear = getExecutionYear(request); final String format = getFormat(request); prepareNewJobResponse(request, ReportFileFactory.createFlunkedReportFile(format, degreeType, executionYear)); return selectDegreeType(mapping, actionForm, request, response); } @SuppressWarnings("unused") public ActionForward downloadTeachersListFromGiaf(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws IOException { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } final DegreeType degreeType = getDegreeType(request); final ExecutionYear executionYear = getExecutionYear(request); final String format = getFormat(request); prepareNewJobResponse(request, ReportFileFactory.createTeachersListFromGiafReportFile(format, degreeType, executionYear)); return selectDegreeType(mapping, actionForm, request, response); } @SuppressWarnings("unused") public ActionForward downloadTimetables(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws IOException { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } final DegreeType degreeType = getDegreeType(request); final ExecutionYear executionYear = getExecutionYear(request); final String format = getFormat(request); prepareNewJobResponse(request, ReportFileFactory.createTimetablesReportFile(format, degreeType, executionYear)); return selectDegreeType(mapping, actionForm, request, response); } @SuppressWarnings("unused") public ActionForward downloadDissertationsProposals(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws IOException { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } final DegreeType degreeType = getDegreeType(request); final ExecutionYear executionYear = getExecutionYear(request); final String format = getFormat(request); prepareNewJobResponse(request, ReportFileFactory.createDissertationsProposalsReportFile(format, degreeType, executionYear)); return selectDegreeType(mapping, actionForm, request, response); } @SuppressWarnings("unused") public ActionForward downloadSummaries(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws IOException { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } final ExecutionYear executionYear = getExecutionYear(request); final String format = getFormat(request); prepareNewJobResponse(request, ReportFileFactory.createSummaryOccupancyReportFile(format, executionYear)); return selectDegreeType(mapping, actionForm, request, response); } @SuppressWarnings("unused") public ActionForward downloadWrittenEvaluations(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws IOException { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } final ExecutionYear executionYear = getExecutionYear(request); final String format = getFormat(request); prepareNewJobResponse(request, ReportFileFactory.createWrittenEvaluationReportFile(format, executionYear)); return selectDegreeType(mapping, actionForm, request, response); } @SuppressWarnings("unused") public ActionForward downloadDissertationsWithExternalAffiliations(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws IOException { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } final DegreeType degreeType = getDegreeType(request); final ExecutionYear executionYear = getExecutionYear(request); final String format = getFormat(request); prepareNewJobResponse(request, ReportFileFactory.createDissertationsWithExternalAffiliationsReportFile(format, degreeType, executionYear)); return selectDegreeType(mapping, actionForm, request, response); } @SuppressWarnings("unused") public ActionForward downloadGraduations(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws IOException { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } final DegreeType degreeType = getDegreeType(request); final ExecutionYear executionYear = getExecutionYear(request); final String format = getFormat(request); prepareNewJobResponse(request, ReportFileFactory.createGraduationReportFile(format, degreeType, executionYear)); return selectDegreeType(mapping, actionForm, request, response); } @SuppressWarnings("unused") public ActionForward downloadTeachersByShift(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws IOException { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } final DegreeType degreeType = getDegreeType(request); final ExecutionYear executionYear = getExecutionYear(request); final String format = getFormat(request); prepareNewJobResponse(request, ReportFileFactory.createTeachersByShiftReportFile(format, degreeType, executionYear)); return selectDegreeType(mapping, actionForm, request, response); } @SuppressWarnings("unused") public ActionForward downloadCourseLoads(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws IOException { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } final DegreeType degreeType = getDegreeType(request); final ExecutionYear executionYear = getExecutionYear(request); final String format = getFormat(request); prepareNewJobResponse(request, ReportFileFactory.createCourseLoadReportFile(format, degreeType, executionYear)); return selectDegreeType(mapping, actionForm, request, response); } @SuppressWarnings("unused") public ActionForward downloadTutorshipProgram(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws IOException { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } final DegreeType degreeType = getDegreeType(request); final ExecutionYear executionYear = getExecutionYear(request); final String format = getFormat(request); prepareNewJobResponse(request, ReportFileFactory.createTutorshipProgramReportFile(format, degreeType, executionYear)); return selectDegreeType(mapping, actionForm, request, response); } public ActionForward downloadRaidesGraduation(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } prepareNewJobResponse(request, ReportFileFactory.createRaidesGraduationReportFile(getFormat(request), getDegreeType(request), getExecutionYear(request))); return selectDegreeType(mapping, actionForm, request, response); } public ActionForward downloadRaidesDfa(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } prepareNewJobResponse(request, ReportFileFactory.createRaidesDfaReportFile(getFormat(request), getDegreeType(request), getExecutionYear(request))); return selectDegreeType(mapping, actionForm, request, response); } public ActionForward downloadRaidesPhd(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } prepareNewJobResponse(request, ReportFileFactory.createRaidesPhdReportFile(getFormat(request), getDegreeType(request), getExecutionYear(request))); return selectDegreeType(mapping, actionForm, request, response); } public ActionForward downloadRaidesSpecialization(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } prepareNewJobResponse(request, ReportFileFactory.createRaidesSpecializationReportFile(getFormat(request), getDegreeType(request), getExecutionYear(request))); return selectDegreeType(mapping, actionForm, request, response); } public ActionForward downloadTeacherCreditsReportFile(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws IOException { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } final DegreeType degreeType = getDegreeType(request); final ExecutionYear executionYear = getExecutionYear(request); final String format = getFormat(request); prepareNewJobResponse(request, ReportFileFactory.createTeacherCreditsReportFile(format, degreeType, executionYear)); return selectDegreeType(mapping, actionForm, request, response); } public ActionForward downloadEffectiveTeachingLoadReportFile(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws IOException { if (isRepeatedJob(AccessControl.getPerson(), request, getClassForParameter(request.getParameter("type")))) { return selectDegreeType(mapping, actionForm, request, response); } final DegreeType degreeType = getDegreeType(request); final ExecutionYear executionYear = getExecutionYear(request); final String format = getFormat(request); prepareNewJobResponse(request, ReportFileFactory.createEffectiveTeachingLoadReportFile(format, degreeType, executionYear)); return selectDegreeType(mapping, actionForm, request, response); } private void prepareNewJobResponse(HttpServletRequest request, GepReportFile job) { ReportBean reportBean = getRenderedObject(); if (reportBean == null) { reportBean = new ReportBean(); reportBean.setDegreeType(job.getDegreeType()); reportBean.setExecutionYear(job.getExecutionYear()); } RenderUtils.invalidateViewState(); request.setAttribute("job", job); request.setAttribute("reportBean", reportBean); request.setAttribute("queueJobList", getLatestJobs()); } public Class getClassForParameter(String type) { int i = Integer.valueOf(type); switch (i) { case 1: return EurAceReportFile.class; case 2: return EctsLabelDegreeReportFile.class; case 3: return EctsLabelCurricularCourseReportFile.class; case 4: return StatusAndApprovalReportFile.class; case 5: return EtiReportFile.class; case 6: return RegistrationReportFile.class; case 7: return FlunkedReportFile.class; case 8: return TeachersByShiftReportFile.class; case 9: return CourseLoadReportFile.class; case 10: return GraduationReportFile.class; case 11: return DissertationsWithExternalAffiliationsReportFile.class; case 12: return DissertationsProposalsReportFile.class; case 13: return RaidesGraduationReportFile.class; case 14: return RaidesDfaReportFile.class; case 15: return RaidesPhdReportFile.class; case 16: return TutorshipProgramReportFile.class; case 17: return TeachersListFromGiafReportFile.class; case 18: return CourseLoadAndResponsiblesReportFile.class; case 19: return TimetablesReportFile.class; case 20: return RaidesSpecializationReportFile.class; case 21: return SummaryOccupancyReportFile.class; case 22: return WrittenEvaluationReportFile.class; case 23: return TeacherCreditsReportFile.class; case 24: return EffectiveTeachingLoadReportFile.class; default: return null; } } public static class FindSelectedGepReports implements Predicate { ExecutionYear executionYear; DegreeType degreeType; Class reportClass; int elements = 0; public FindSelectedGepReports(ExecutionYear executionYear, DegreeType degreeType, Class reportClass) { this.executionYear = executionYear; this.degreeType = degreeType; this.reportClass = reportClass; } @Override public boolean evaluate(Object object) { QueueJob queueJob = (QueueJob) object; try { GepReportFile gepReportFile = (GepReportFile) queueJob; if (gepReportFile.getClass() == this.reportClass) { if (this.executionYear == gepReportFile.getExecutionYear() && this.degreeType == gepReportFile.getDegreeType() && elements < MAX_AUTHORIZED_REPORT_FILES) { elements++; return true; } else { return false; } } else { return false; } } catch (ClassCastException E) { return false; } } } public ActionForward viewReports(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { final String type = request.getParameter("type"); Class reportClass = getClassForParameter(type); final DegreeType degreeType = getDegreeType(request); final ExecutionYear executionYear = getExecutionYear(request); Predicate predicate = new FindSelectedGepReports(executionYear, degreeType, reportClass); List<GepReportFile> selectedJobs = (List<GepReportFile>) org.apache.commons.collections.CollectionUtils.select(rootDomainObject.getQueueJobSet(), predicate); String reportName = ""; if (selectedJobs.size() > 0) { reportName = selectedJobs.iterator().next().getJobName(); } request.setAttribute("degreeType", degreeType); request.setAttribute("executionYear", executionYear); request.setAttribute("list", reportName); request.setAttribute("queueJobList", selectedJobs); return mapping.findForward("viewReports"); } }