/**
* 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/>.
*/
package org.fenixedu.academic.ui.struts.action.coordinator.thesis;
import java.util.ArrayList;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.collections.comparators.ReverseComparator;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.fenixedu.academic.domain.CurricularCourse;
import org.fenixedu.academic.domain.Degree;
import org.fenixedu.academic.domain.DegreeCurricularPlan;
import org.fenixedu.academic.domain.Enrolment;
import org.fenixedu.academic.domain.ExecutionDegree;
import org.fenixedu.academic.domain.ExecutionYear;
import org.fenixedu.academic.domain.StudentCurricularPlan;
import org.fenixedu.academic.domain.exceptions.DomainException;
import org.fenixedu.academic.domain.student.Student;
import org.fenixedu.academic.domain.thesis.Thesis;
import org.fenixedu.academic.domain.thesis.ThesisEvaluationParticipant;
import org.fenixedu.academic.domain.thesis.ThesisParticipationType;
import org.fenixedu.academic.report.thesis.ApproveJuryDocument;
import org.fenixedu.academic.report.thesis.StudentThesisIdentificationDocument;
import org.fenixedu.academic.report.thesis.ThesisJuryReportDocument;
import org.fenixedu.academic.service.services.scientificCouncil.thesis.ApproveThesisProposal;
import org.fenixedu.academic.service.services.thesis.CancelSubmitThesis;
import org.fenixedu.academic.service.services.thesis.ChangeThesisPerson;
import org.fenixedu.academic.service.services.thesis.ChangeThesisPerson.PersonChange;
import org.fenixedu.academic.service.services.thesis.ChangeThesisPerson.PersonTarget;
import org.fenixedu.academic.service.services.thesis.CreateThesisProposal;
import org.fenixedu.academic.service.services.thesis.DeleteThesis;
import org.fenixedu.academic.service.services.thesis.ReviseThesis;
import org.fenixedu.academic.service.services.thesis.SubmitThesis;
import org.fenixedu.academic.ui.struts.action.commons.AbstractManageThesisDA;
import org.fenixedu.academic.ui.struts.action.coordinator.DegreeCoordinatorIndex;
import org.fenixedu.academic.ui.struts.action.coordinator.ThesisSummaryBean;
import org.fenixedu.academic.util.report.ReportsUtils;
import org.fenixedu.bennu.struts.annotations.Forward;
import org.fenixedu.bennu.struts.annotations.Forwards;
import org.fenixedu.bennu.struts.annotations.Mapping;
import pt.ist.fenixWebFramework.renderers.utils.RenderUtils;
import pt.ist.fenixframework.FenixFramework;
@Mapping(module = "coordinator", path = "/manageThesis", functionality = DegreeCoordinatorIndex.class)
@Forwards({ @Forward(name = "search-student", path = "/coordinator/thesis/searchStudent.jsp"),
@Forward(name = "review-proposal", path = "/coordinator/thesis/reviewProposal.jsp"),
@Forward(name = "change-information", path = "/coordinator/thesis/changeInformation.jsp"),
@Forward(name = "editParticipant", path = "/coordinator/thesis/editParticipant.jsp"),
@Forward(name = "view-submitted", path = "/coordinator/thesis/viewSubmitted.jsp"),
@Forward(name = "change-information-with-docs", path = "/coordinator/thesis/changeInformationWithDocs.jsp"),
@Forward(name = "viewOperationsThesis", path = "/coordinator/thesis/viewOperationsThesis.jsp"),
@Forward(name = "select-unit", path = "/coordinator/thesis/selectUnit.jsp"),
@Forward(name = "view-confirmed", path = "/coordinator/thesis/viewConfirmed.jsp"),
@Forward(name = "list-thesis", path = "/coordinator/thesis/listThesis.jsp"),
@Forward(name = "select-person", path = "/coordinator/thesis/selectPerson.jsp"),
@Forward(name = "select-externalPerson", path = "/coordinator/thesis/selectExternalPerson.jsp"),
@Forward(name = "view-approved", path = "/coordinator/thesis/viewApproved.jsp"),
@Forward(name = "view-evaluated", path = "/coordinator/thesis/viewEvaluated.jsp"),
@Forward(name = "collect-basic-information", path = "/coordinator/thesis/collectBasicInformation.jsp"),
@Forward(name = "edit-thesis", path = "/coordinator/thesis/editThesis.jsp") })
public class ManageThesisDA extends AbstractManageThesisDA {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
DegreeCoordinatorIndex.setCoordinatorContext(request);
request.setAttribute("degreeCurricularPlan", getDegreeCurricularPlan(request));
request.setAttribute("thesis", getThesis(request));
request.setAttribute("student", getStudent(request));
final ExecutionYear executionYear;
final ThesisContextBean bean = getRenderedObject("contextBean");
if (bean == null) {
executionYear = getExecutionYear(request);
} else {
executionYear = bean.getExecutionYear();
}
setFilterContext(request, executionYear);
return super.execute(mapping, actionForm, request, response);
}
private void setFilterContext(HttpServletRequest request, ExecutionYear executionYear) {
request.setAttribute("executionYear", executionYear);
request.setAttribute("executionYearId", executionYear == null ? "" : executionYear.getExternalId());
}
@Override
protected Thesis getThesis(HttpServletRequest request) {
Thesis thesis = (Thesis) request.getAttribute("thesis");
if (thesis != null) {
return thesis;
} else {
return FenixFramework.getDomainObject(request.getParameter("thesisID"));
}
}
private Enrolment getEnrolment(HttpServletRequest request) {
return FenixFramework.getDomainObject(request.getParameter("enrolmentOID"));
}
private Student getStudent(HttpServletRequest request) {
Student student = (Student) request.getAttribute("student");
if (student != null) {
return student;
} else {
return FenixFramework.getDomainObject(request.getParameter("studentID"));
}
}
private ExecutionYear getExecutionYear(HttpServletRequest request) {
String id = request.getParameter("executionYearId");
if (id == null) {
id = request.getParameter("executionYear");
}
if (id == null) {
TreeSet<ExecutionYear> executionYears = new TreeSet<ExecutionYear>(new ReverseComparator());
executionYears.addAll(getDegreeCurricularPlan(request).getExecutionYears());
if (executionYears.isEmpty()) {
return ExecutionYear.readCurrentExecutionYear();
} else {
return executionYears.first();
}
} else {
return FenixFramework.getDomainObject(id);
}
}
private ThesisContextBean getContextBean(HttpServletRequest request) {
ThesisContextBean bean = getRenderedObject("contextBean");
RenderUtils.invalidateViewState("contextBean");
if (bean != null) {
return bean;
} else {
ExecutionYear executionYear = getExecutionYear(request);
if (executionYear == null) {
executionYear = ExecutionYear.readCurrentExecutionYear();
}
TreeSet<ExecutionYear> executionYears = new TreeSet<ExecutionYear>(new ReverseComparator());
executionYears.addAll(getDegreeCurricularPlan(request).getExecutionYears());
return new ThesisContextBean(executionYears, executionYear);
}
}
public ActionForward selectStudent(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
ThesisBean bean = getRenderedObject("student");
if (bean == null) {
return searchStudent(mapping, actionForm, request, response);
} else {
request.setAttribute("bean", bean);
}
Student student = bean.getStudent();
if (student == null) {
addActionMessage(request, "thesis.selectStudent.notFound");
return mapping.findForward("search-student");
} else {
DegreeCurricularPlan degreeCurricularPlan = getDegreeCurricularPlan(request);
if (student.isCurrentlyEnroled(degreeCurricularPlan)) {
Enrolment enrolment = student.getDissertationEnrolment(degreeCurricularPlan);
if (enrolment != null) {
Thesis thesis = enrolment.getThesis();
if (thesis == null) {
request.setAttribute("proposeStartProcess", true);
return mapping.findForward("search-student");
} else {
request.setAttribute("hasThesis", true);
request.setAttribute("thesis", thesis);
return mapping.findForward("search-student");
}
} else {
addActionMessage(request, "thesis.selectStudent.dissertation.notEnroled");
return mapping.findForward("search-student");
}
} else {
addActionMessage(request, "thesis.selectStudent.degreeCurricularPlan.notEnroled", degreeCurricularPlan.getName());
return mapping.findForward("search-student");
}
}
}
public ActionForward viewThesis(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
Thesis thesis = getThesis(request);
if (thesis.isDraft()) {
return editProposal(mapping, actionForm, request, response);
}
if (thesis.isSubmitted()) {
return viewSubmitted(mapping, actionForm, request, response);
}
if (thesis.isWaitingConfirmation()) {
return viewApproved(mapping, actionForm, request, response);
}
if (thesis.isConfirmed()) {
return viewConfirmed(mapping, actionForm, request, response);
}
if (thesis.isEvaluated()) {
return viewEvaluated(mapping, actionForm, request, response);
}
return searchStudent(mapping, actionForm, request, response);
}
public ThesisPresentationState getFilterFromRequest(HttpServletRequest request) {
String filter = request.getParameter("filter");
return filter != null && !filter.isEmpty() && !filter.equals("null") ? ThesisPresentationState.valueOf(filter) : null;
}
public ActionForward listThesis(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
DegreeCurricularPlan degreeCurricularPlan = getDegreeCurricularPlan(request);
ThesisContextBean bean = getContextBean(request);
ThesisPresentationState filter = bean.getPresentationState();
if (filter == null) {
filter = getFilterFromRequest(request);
bean.setPresentationState(filter);
}
request.setAttribute("filter", (filter != null) ? filter : "null");
List<StudentThesisInfo> result = new ArrayList<StudentThesisInfo>();
for (CurricularCourse curricularCourse : degreeCurricularPlan.getDissertationCurricularCourses(bean.getExecutionYear())) {
for (Enrolment enrolment : curricularCourse.getEnrolmentsByExecutionYear(bean.getExecutionYear())) {
StudentCurricularPlan studentCurricularPlan = enrolment.getStudentCurricularPlan();
if (studentCurricularPlan.getDegreeCurricularPlan() != degreeCurricularPlan) {
continue;
}
final Thesis thesis = enrolment.getThesis();
if (filter != null) {
final ThesisPresentationState state = ThesisPresentationState.getThesisPresentationState(thesis);
if (!state.equals(filter)) {
continue;
}
}
result.add(new StudentThesisInfo(enrolment));
}
}
request.setAttribute("theses", result);
request.setAttribute("contextBean", bean);
ExecutionDegree executionDegree =
degreeCurricularPlan.getExecutionDegreeByYear(bean.getExecutionYear().getPreviousExecutionYear());
if (executionDegree != null) {
request.setAttribute("summary", new ThesisSummaryBean(executionDegree, degreeCurricularPlan));
}
return mapping.findForward("list-thesis");
}
public ActionForward prepareCreateProposal(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
Student student = getStudent(request);
if (student == null) {
return listThesis(mapping, actionForm, request, response);
}
// Enrolment enrolment = student.getDissertationEnrolment();
Enrolment enrolment = getEnrolment(request);
Thesis thesis = getThesis(request);
if (thesis == null) {
thesis = enrolment.getPossibleThesis();
}
ThesisBean bean = new ThesisBean();
bean.setStudent(student);
fillLastThesisInfo(bean, student, enrolment);
request.setAttribute("bean", bean);
return mapping.findForward("collect-basic-information");
}
private void fillLastThesisInfo(final ThesisBean bean, final Student student, final Enrolment enrolment) {
final SortedSet<Enrolment> dissertationEnrolments = student.getDissertationEnrolments(null);
dissertationEnrolments.remove(enrolment);
if (!dissertationEnrolments.isEmpty()) {
final Thesis previous = findPreviousThesis(dissertationEnrolments);
if (previous != null) {
bean.setTitle(previous.getTitle());
return;
}
}
}
private Thesis findPreviousThesis(final SortedSet<Enrolment> dissertationEnrolments) {
if (dissertationEnrolments.isEmpty()) {
return null;
}
final Enrolment previous = dissertationEnrolments.last();
if (previous != null) {
if (!previous.getThesesSet().isEmpty()) {
return previous.getThesis();
} else {
dissertationEnrolments.remove(previous);
return findPreviousThesis(dissertationEnrolments);
}
}
return null;
}
public ActionForward createProposal(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
DegreeCurricularPlan degreeCurricularPlan = getDegreeCurricularPlan(request);
ThesisBean bean = getRenderedObject("bean");
RenderUtils.invalidateViewState("bean");
if (bean == null) {
return selectStudent(mapping, actionForm, request, response);
}
try {
Thesis thesis = CreateThesisProposal.run(degreeCurricularPlan, bean.getStudent(), bean.getTitle(), bean.getComment());
request.setAttribute("thesis", thesis);
} catch (DomainException e) {
addActionMessage("error", request, e.getKey(), e.getArgs());
return listThesis(mapping, actionForm, request, response);
}
return editProposal(mapping, actionForm, request, response);
}
// Draft
@Override
public ActionForward editProposal(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
Thesis thesis = getThesis(request);
if (thesis == null) {
return listThesis(mapping, actionForm, request, response);
}
request.setAttribute("conditions", thesis.getConditions());
return mapping.findForward("edit-thesis");
}
public ActionForward editProposalWithDocs(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
Thesis thesis = getThesis(request);
if (thesis == null) {
return listThesis(mapping, actionForm, request, response);
}
return viewApproved(mapping, actionForm, request, response);
}
public ActionForward editProposalDiscussion(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
request.setAttribute("changeDiscussion", true);
return editProposal(mapping, actionForm, request, response);
}
public ActionForward changeInformation(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
return mapping.findForward("change-information");
}
public ActionForward changeInformationWithDocs(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
return mapping.findForward("change-information-with-docs");
}
public ActionForward changeCredits(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
String target = request.getParameter("target");
if (target == null) {
return editProposal(mapping, actionForm, request, response);
}
request.setAttribute("editOrientatorCreditsDistribution", target);
return editProposal(mapping, actionForm, request, response);
}
public ActionForward changeParticipationInfo(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
String target = request.getParameter("target");
if (target == null) {
return editProposal(mapping, actionForm, request, response);
}
ThesisEvaluationParticipant participant = FenixFramework.getDomainObject(target);
PersonTarget targetType = getPersonTarget(participant.getType());
request.setAttribute("targetType", targetType);
request.setAttribute("participant", participant);
return mapping.findForward("editParticipant");
}
private PersonTarget getPersonTarget(ThesisParticipationType type) {
if (type.equals(ThesisParticipationType.ORIENTATOR)) {
return PersonTarget.orientator;
}
if (type.equals(ThesisParticipationType.COORIENTATOR)) {
return PersonTarget.coorientator;
}
if (type.equals(ThesisParticipationType.PRESIDENT)) {
return PersonTarget.president;
}
if (type.equals(ThesisParticipationType.VOWEL)) {
return PersonTarget.vowel;
}
return null;
}
public ActionForward changePerson(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
String target = request.getParameter("target");
boolean remove = request.getParameter("remove") != null;
if (target == null) {
return editProposal(mapping, actionForm, request, response);
}
Thesis thesis = getThesis(request);
ThesisBean bean = new ThesisBean(thesis);
Degree degree = getDegreeCurricularPlan(request).getDegree();
bean.setDegree(degree);
PersonTarget targetType = PersonTarget.valueOf(target);
bean.setTargetType(targetType);
if (targetType.equals(PersonTarget.vowel)) {
ThesisEvaluationParticipant targetVowel = getVowel(request);
if (targetVowel != null) {
bean.setTarget(targetVowel);
} else {
bean.setTarget(null);
}
}
if (remove) {
DegreeCurricularPlan degreeCurricularPlan = getDegreeCurricularPlan(request);
ChangeThesisPerson.run(degreeCurricularPlan, thesis, new PersonChange(bean.getTargetType(), null, bean.getTarget()));
return editProposal(mapping, actionForm, request, response);
} else {
request.setAttribute("bean", bean);
return mapping.findForward("select-person");
}
}
public ActionForward addExternal(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
String target = request.getParameter("target");
boolean remove = request.getParameter("remove") != null;
if (target == null) {
return editProposal(mapping, actionForm, request, response);
}
Thesis thesis = getThesis(request);
ThesisBean bean = new ThesisBean(thesis);
Degree degree = getDegreeCurricularPlan(request).getDegree();
bean.setDegree(degree);
PersonTarget targetType = PersonTarget.valueOf(target);
bean.setTargetType(targetType);
if (targetType.equals(PersonTarget.vowel)) {
ThesisEvaluationParticipant targetVowel = getVowel(request);
if (targetVowel != null) {
bean.setTarget(targetVowel);
} else {
bean.setTarget(null);
}
}
if (remove) {
DegreeCurricularPlan degreeCurricularPlan = getDegreeCurricularPlan(request);
ChangeThesisPerson.run(degreeCurricularPlan, thesis, new PersonChange(bean.getTargetType(), null, bean.getTarget()));
return editProposal(mapping, actionForm, request, response);
} else {
request.setAttribute("bean", bean);
return mapping.findForward("select-externalPerson");
}
}
public ActionForward deleteParticipant(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
String target = request.getParameter("target");
ThesisEvaluationParticipant participant = FenixFramework.getDomainObject(target);
ChangeThesisPerson.remove(participant);
return editProposal(mapping, actionForm, request, response);
}
private ThesisEvaluationParticipant getVowel(HttpServletRequest request) {
String parameter = request.getParameter("vowelID");
if (parameter == null) {
return null;
}
String id = parameter;
Thesis thesis = getThesis(request);
for (ThesisEvaluationParticipant participant : thesis.getVowels()) {
if (participant.getExternalId().equals(id)) {
return participant;
}
}
return null;
}
public ActionForward changePersonInvalid(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
ThesisBean bean = getRenderedObject("bean");
if (bean == null) {
return editProposal(mapping, actionForm, request, response);
}
request.setAttribute("bean", bean);
return mapping.findForward("select-person");
}
public ActionForward submitProposal(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
Thesis thesis = getThesis(request);
if (thesis == null) {
return listThesis(mapping, actionForm, request, response);
}
try {
DegreeCurricularPlan degreeCurricularPlan = getDegreeCurricularPlan(request);
SubmitThesis.run(degreeCurricularPlan, thesis);
} catch (DomainException e) {
addActionMessage("error", request, e.getKey(), e.getArgs());
return editProposal(mapping, actionForm, request, response);
}
return listThesis(mapping, actionForm, request, response);
}
public ActionForward confirmDeleteProposal(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
request.setAttribute("confirmDelete", true);
return editProposal(mapping, actionForm, request, response);
}
public ActionForward deleteProposal(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
Thesis thesis = getThesis(request);
if (thesis == null) {
return listThesis(mapping, actionForm, request, response);
}
try {
DegreeCurricularPlan degreeCurricularPlan = getDegreeCurricularPlan(request);
DeleteThesis.run(degreeCurricularPlan, thesis);
} catch (DomainException e) {
addActionMessage("error", request, e.getKey(), e.getArgs());
}
return listThesis(mapping, actionForm, request, response);
}
// Submitted
public ActionForward viewSubmitted(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
Thesis thesis = getThesis(request);
if (thesis == null) {
return listThesis(mapping, actionForm, request, response);
}
return mapping.findForward("view-submitted");
}
public ActionForward cancelApprovalRequest(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
Thesis thesis = getThesis(request);
if (thesis == null) {
return listThesis(mapping, actionForm, request, response);
}
try {
DegreeCurricularPlan degreeCurricularPlan = getDegreeCurricularPlan(request);
CancelSubmitThesis.run(degreeCurricularPlan, thesis);
} catch (DomainException e) {
addActionMessage("error", request, e.getKey(), e.getArgs());
return viewSubmitted(mapping, actionForm, request, response);
}
return listThesis(mapping, actionForm, request, response);
}
// Approved
public ActionForward viewApproved(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
return mapping.findForward("view-approved");
}
public ActionForward printApprovalDocument(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
Thesis thesis = getThesis(request);
try {
ApproveJuryDocument document = new ApproveJuryDocument(thesis);
byte[] data = ReportsUtils.generateReport(document).getData();
response.setContentLength(data.length);
response.setContentType("application/pdf");
response.addHeader("Content-Disposition", String.format("attachment; filename=%s.pdf", document.getReportFileName()));
response.getOutputStream().write(data);
return null;
} catch (Exception e) {
addActionMessage("error", request, "coordinator.thesis.approved.print.failed");
return viewSubmitted(mapping, actionForm, request, response);
}
}
// Confirmed
public ActionForward viewConfirmed(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
return mapping.findForward("view-confirmed");
}
public ActionForward confirmRevision(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
request.setAttribute("confirmRevision", true);
return viewConfirmed(mapping, actionForm, request, response);
}
public ActionForward enterRevision(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
Thesis thesis = getThesis(request);
if (thesis == null) {
return listThesis(mapping, actionForm, request, response);
}
try {
ReviseThesis.run(thesis);
} catch (DomainException e) {
addActionMessage("error", request, e.getKey(), e.getArgs());
}
return listThesis(mapping, actionForm, request, response);
}
// Evaluated
public ActionForward viewEvaluated(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
return mapping.findForward("view-evaluated");
}
public ActionForward approveProposal(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
Thesis thesis = getThesis(request);
if (thesis != null) {
ApproveThesisProposal.runApproveThesisProposal(thesis);
addActionMessage("mail", request, "thesis.approved.mail.sent");
addActionMessage("nextAction", request, "thesis.approved.next.action");
}
return listThesis(mapping, actionForm, request, response);
}
public ActionForward confirmRejectProposal(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
request.setAttribute("confirmReject", true);
return reviewProposal(mapping, actionForm, request, response);
}
public ActionForward reviewProposal(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
return mapping.findForward("review-proposal");
}
public ActionForward downloadIdentificationSheet(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
Thesis thesis = getThesis(request);
try {
StudentThesisIdentificationDocument document = new StudentThesisIdentificationDocument(thesis);
byte[] data = ReportsUtils.generateReport(document).getData();
response.setContentLength(data.length);
response.setContentType("application/pdf");
response.addHeader("Content-Disposition", String.format("attachment; filename=%s.pdf", document.getReportFileName()));
response.getOutputStream().write(data);
return null;
} catch (Exception e) {
addActionMessage("error", request, "student.thesis.generate.identification.failed");
e.printStackTrace();//FIXME remove
return listThesis(mapping, actionForm, request, response);
}
}
public ActionForward downloadJuryReportSheet(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
Thesis thesis = getThesis(request);
try {
ThesisJuryReportDocument document = new ThesisJuryReportDocument(thesis);
byte[] data = ReportsUtils.generateReport(document).getData();
response.setContentLength(data.length);
response.setContentType("application/pdf");
response.addHeader("Content-Disposition", String.format("attachment; filename=%s.pdf", document.getReportFileName()));
response.getOutputStream().write(data);
return null;
} catch (Exception e) {
addActionMessage("error", request, "student.thesis.generate.juryreport.failed");
return listThesis(mapping, actionForm, request, response);
}
}
}