/**
* 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 Oct 26, 2005
* by jdnf
*/
package org.fenixedu.academic.ui.faces.bean.coordinator.evaluation;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import org.fenixedu.academic.domain.CurricularCourse;
import org.fenixedu.academic.domain.DegreeModuleScope;
import org.fenixedu.academic.domain.ExecutionCourse;
import org.fenixedu.academic.domain.WrittenEvaluation;
import org.fenixedu.academic.domain.WrittenTest;
import org.fenixedu.academic.service.services.exceptions.NotAuthorizedException;
import org.fenixedu.academic.service.services.resourceAllocationManager.exams.CreateWrittenEvaluation;
import org.fenixedu.academic.service.services.resourceAllocationManager.exams.DeleteWrittenEvaluation;
import org.fenixedu.academic.service.services.resourceAllocationManager.exams.EditWrittenEvaluation;
public class CoordinatorWrittenTestsManagementBackingBean extends CoordinatorWrittenTestsInformationBackingBean {
private Integer beginHour;
private Integer beginMinute;
private Integer endHour;
private Integer endMinute;
private String description;
public String createWrittenTest() {
try {
final ExecutionCourse executionCourse = getExecutionCourse();
if (executionCourse == null) {
this.setErrorMessage("error.noExecutionCourse");
return "";
}
final List<String> executionCourseIDs = new ArrayList<String>(1);
executionCourseIDs.add(this.getExecutionCourseID().toString());
final List<String> degreeModuleScopeIDs = getDegreeModuleScopeIDs(executionCourse);
CreateWrittenEvaluation.runCreateWrittenEvaluation(this.getExecutionCourseID(), this.getBegin().getTime(), this
.getBegin().getTime(), this.getEnd().getTime(), executionCourseIDs, degreeModuleScopeIDs, null, null, null,
this.getDescription());
} catch (Exception e) {
String errorMessage = e.getMessage();
if (e instanceof NotAuthorizedException) {
errorMessage = "message.error.notAuthorized";
}
this.setErrorMessage(errorMessage);
return "";
}
return this.showWrittenTestsForExecutionCourses();
}
public String editWrittenTest() {
try {
final ExecutionCourse executionCourse = getExecutionCourse();
if (executionCourse == null) {
this.setErrorMessage("error.noExecutionCourse");
return "";
}
final List<String> executionCourseIDs = new ArrayList<String>(1);
executionCourseIDs.add(this.getExecutionCourseID().toString());
final List<String> degreeModuleScopeIDs = getDegreeModuleScopeIDs(executionCourse);
EditWrittenEvaluation.runEditWrittenEvaluation(executionCourse.getExternalId(), this.getBegin().getTime(), this
.getBegin().getTime(), this.getEnd().getTime(), executionCourseIDs, degreeModuleScopeIDs, null, this
.getEvaluationID(), null, this.getDescription(), null);
} catch (Exception e) {
String errorMessage = e.getMessage();
if (e instanceof NotAuthorizedException) {
errorMessage = "message.error.notAuthorized";
}
this.setErrorMessage(errorMessage);
return "";
}
return this.showWrittenTestsForExecutionCourses();
}
public String deleteWrittenTest() {
try {
DeleteWrittenEvaluation.runDeleteWrittenEvaluation(this.getExecutionCourseID(), this.getEvaluationID());
} catch (Exception e) {
String errorMessage = e.getMessage();
if (e instanceof NotAuthorizedException) {
errorMessage = "message.error.notAuthorized";
}
this.setErrorMessage(errorMessage);
return "";
}
return this.showWrittenTestsForExecutionCourses();
}
public String showWrittenTestsForExecutionCourses() {
setRequestCommonAttributes();
return "showWrittenTestsForExecutionCourses";
}
private List<String> getDegreeModuleScopeIDs(final ExecutionCourse executionCourse) {
final List<String> degreeModuleScopeIDs = new ArrayList<String>();
for (final CurricularCourse curricularCourse : executionCourse.getAssociatedCurricularCoursesSet()) {
List<DegreeModuleScope> degreeModuleScopes = curricularCourse.getDegreeModuleScopes();
for (DegreeModuleScope degreeModuleScope : degreeModuleScopes) {
if (degreeModuleScope.getCurricularSemester().equals(executionCourse.getExecutionPeriod().getSemester())) {
degreeModuleScopeIDs.add(degreeModuleScope.getKey());
}
}
}
return degreeModuleScopeIDs;
}
private Calendar getBegin() {
final Calendar result = Calendar.getInstance();
result.set(this.getYear(), this.getMonth() - 1, this.getDay(), this.getBeginHour(), this.getBeginMinute());
return result;
}
private Calendar getEnd() {
final Calendar result = Calendar.getInstance();
result.set(this.getYear(), this.getMonth() - 1, this.getDay(), this.getEndHour(), this.getEndMinute());
return result;
}
public Integer getBeginHour() {
if (this.beginHour == null && this.getEvaluation() != null) {
this.beginHour = ((WrittenEvaluation) getEvaluation()).getBeginning().get(Calendar.HOUR_OF_DAY);
}
return this.beginHour;
}
public void setBeginHour(Integer beginHour) {
this.beginHour = beginHour;
}
public Integer getBeginMinute() {
if (this.beginMinute == null && this.getEvaluation() != null) {
this.beginMinute = ((WrittenEvaluation) getEvaluation()).getBeginning().get(Calendar.MINUTE);
}
return this.beginMinute;
}
public void setBeginMinute(Integer beginMinute) {
this.beginMinute = beginMinute;
}
public String getDescription() {
if (this.description == null && this.getEvaluation() != null) {
final WrittenEvaluation writtenEvaluation = (WrittenEvaluation) getEvaluation();
if (writtenEvaluation instanceof WrittenTest) {
this.description = ((WrittenTest) writtenEvaluation).getDescription();
}
}
return this.description;
}
public void setDescription(String description) {
this.description = description;
}
public Integer getEndHour() {
if (this.endHour == null && this.getEvaluation() != null) {
this.endHour = ((WrittenEvaluation) getEvaluation()).getEnd().get(Calendar.HOUR_OF_DAY);
}
return this.endHour;
}
public void setEndHour(Integer endHour) {
this.endHour = endHour;
}
public Integer getEndMinute() {
if (this.endMinute == null && this.getEvaluation() != null) {
this.endMinute = ((WrittenEvaluation) getEvaluation()).getEnd().get(Calendar.MINUTE);
}
return this.endMinute;
}
public void setEndMinute(Integer endMinute) {
this.endMinute = endMinute;
}
}