/**
* 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/>.
*/
/*
* Created on Nov 14, 2005
* by jdnf
*/
package org.fenixedu.academic.ui.faces.bean.student.enrolment;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.component.html.HtmlInputHidden;
import org.apache.commons.beanutils.BeanComparator;
import org.fenixedu.academic.domain.Evaluation;
import org.fenixedu.academic.domain.Exam;
import org.fenixedu.academic.domain.WrittenEvaluation;
import org.fenixedu.academic.domain.exceptions.DomainException;
import org.fenixedu.academic.domain.student.Registration;
import org.fenixedu.academic.domain.student.registrationStates.RegistrationStateType;
import org.fenixedu.academic.service.services.exceptions.FenixServiceException;
import org.fenixedu.academic.service.services.exceptions.NotAuthorizedException;
import org.fenixedu.academic.service.services.student.EnrolStudentInWrittenEvaluation;
import org.fenixedu.academic.service.services.student.UnEnrollStudentInWrittenEvaluation;
import org.fenixedu.spaces.domain.Space;
public class ManageEvaluationsForStudent extends DisplayEvaluationsForStudentToEnrol {
private List<Evaluation> evaluationsWithEnrolmentPeriodOpened;
private List<Evaluation> evaluationsWithEnrolmentPeriodClosed;
private HtmlInputHidden evaluationTypeHidden;
private Map<String, Boolean> enroledEvaluationsForStudent;
private Map<String, String> studentRooms;
public List<Evaluation> getEvaluationsWithEnrolmentPeriodClosed() {
if (this.evaluationsWithEnrolmentPeriodClosed == null) {
processEvaluations();
}
return this.evaluationsWithEnrolmentPeriodClosed;
}
public void setEvaluationsWithEnrolmentPeriodClosed(List<Evaluation> evaluationsWithEnrolmentPeriodClosed) {
this.evaluationsWithEnrolmentPeriodClosed = evaluationsWithEnrolmentPeriodClosed;
}
public List<Evaluation> getEvaluationsWithEnrolmentPeriodOpened() {
if (this.evaluationsWithEnrolmentPeriodOpened == null) {
processEvaluations();
}
return this.evaluationsWithEnrolmentPeriodOpened;
}
public void setEvaluationsWithEnrolmentPeriodOpened(List<Evaluation> evaluationsWithEnrolmentPeriodOpened) {
this.evaluationsWithEnrolmentPeriodOpened = evaluationsWithEnrolmentPeriodOpened;
}
private void processEvaluations() {
this.evaluationsWithEnrolmentPeriodClosed = new ArrayList();
this.evaluationsWithEnrolmentPeriodOpened = new ArrayList();
final String evaluationType = getEvaluationTypeString();
for (final Registration registration : getStudent().getStudent().getRegistrationsSet()) {
if (!registration.hasStateType(getExecutionPeriod(), RegistrationStateType.REGISTERED)) {
continue;
}
for (final WrittenEvaluation writtenEvaluation : registration.getWrittenEvaluations(getExecutionPeriod())) {
if (writtenEvaluation instanceof Exam) {
final Exam exam = (Exam) writtenEvaluation;
if (!exam.isExamsMapPublished()) {
continue;
}
}
if (writtenEvaluation.getClass().getName().equals(evaluationType)) {
try {
if (writtenEvaluation.isInEnrolmentPeriod()) {
this.evaluationsWithEnrolmentPeriodOpened.add(writtenEvaluation);
} else {
this.evaluationsWithEnrolmentPeriodClosed.add(writtenEvaluation);
final Space room = registration.getRoomFor(writtenEvaluation);
String roomName = room != null ? room.getName() : "-";
getStudentRooms().put(writtenEvaluation.getExternalId(), roomName);
}
} catch (final DomainException e) {
getEvaluationsWithoutEnrolmentPeriod().add(writtenEvaluation);
final Space room = registration.getRoomFor(writtenEvaluation);
String value = room != null ? room.getName() : "-";
getStudentRooms().put(writtenEvaluation.getExternalId(), value);
} finally {
getEnroledEvaluationsForStudent().put(writtenEvaluation.getExternalId(),
Boolean.valueOf(registration.isEnroledIn(writtenEvaluation)));
getExecutionCourses().put(writtenEvaluation.getExternalId(),
writtenEvaluation.getAttendingExecutionCoursesFor(registration));
}
}
}
}
Collections.sort(this.evaluationsWithEnrolmentPeriodClosed, new BeanComparator("dayDate"));
Collections.sort(this.evaluationsWithEnrolmentPeriodOpened, new BeanComparator("dayDate"));
Collections.sort(getEvaluationsWithoutEnrolmentPeriod(), new BeanComparator("dayDate"));
}
public String enrolStudent() {
try {
EnrolStudentInWrittenEvaluation.runEnrolStudentInWrittenEvaluation(getUserView().getUsername(), getEvaluationID());
clearAttributes();
} catch (DomainException e) {
setErrorMessage(e.getMessage());
} catch (NotAuthorizedException e) {
setErrorMessage("errors.impossible.operation");
} catch (FenixServiceException e) {
setErrorMessage("errors.impossible.operation");
}
return "";
}
public String unenrolStudent() {
try {
UnEnrollStudentInWrittenEvaluation.runUnEnrollStudentInWrittenEvaluation(getUserView().getUsername(),
getEvaluationID());
clearAttributes();
} catch (DomainException e) {
setErrorMessage(e.getMessage());
} catch (NotAuthorizedException e) {
setErrorMessage("errors.impossible.operation");
} catch (FenixServiceException e) {
setErrorMessage("errors.impossible.operation");
}
return "";
}
public String getEvaluationID() {
return getRequestParameter("evaluationID");
}
@Override
protected void clearAttributes() {
setEvaluationsWithEnrolmentPeriodClosed(null);
setEvaluationsWithEnrolmentPeriodOpened(null);
setEvaluationsWithoutEnrolmentPeriod(null);
setExecutionCourses(null);
}
@Override
public Integer getEvaluationType() {
if (this.evaluationType == null) {
if (this.getRequestParameter("evaluationType") != null) {
this.evaluationType = Integer.valueOf(this.getRequestParameter("evaluationType"));
} else if (this.getEvaluationTypeHidden().getValue() != null) {
this.evaluationType = Integer.valueOf(this.getEvaluationTypeHidden().getValue().toString());
}
}
return this.evaluationType;
}
public HtmlInputHidden getEvaluationTypeHidden() {
if (this.evaluationTypeHidden == null) {
this.evaluationTypeHidden = new HtmlInputHidden();
this.evaluationTypeHidden.setValue(getEvaluationType());
}
return this.evaluationTypeHidden;
}
public void setEvaluationTypeHidden(HtmlInputHidden evaluationTypeHidden) {
if (evaluationTypeHidden != null) {
setEvaluationType(Integer.valueOf(evaluationTypeHidden.getValue().toString()));
}
this.evaluationTypeHidden = evaluationTypeHidden;
}
public Map<String, Boolean> getEnroledEvaluationsForStudent() {
if (this.enroledEvaluationsForStudent == null) {
this.enroledEvaluationsForStudent = new HashMap<String, Boolean>();
}
return this.enroledEvaluationsForStudent;
}
public void setEnroledEvaluationsForStudent(Map<String, Boolean> enroledEvaluationsForStudent) {
this.enroledEvaluationsForStudent = enroledEvaluationsForStudent;
}
public Map<String, String> getStudentRooms() {
if (this.studentRooms == null) {
this.studentRooms = new HashMap<String, String>();
}
return this.studentRooms;
}
public void setStudentRooms(Map<String, String> studentRooms) {
this.studentRooms = studentRooms;
}
}