/**
* 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 19, 2005
* by jdnf
*/
package org.fenixedu.academic.ui.faces.bean.coordinator.evaluation;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import javax.faces.component.html.HtmlInputHidden;
import javax.faces.model.SelectItem;
import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.comparators.ComparatorChain;
import org.apache.commons.collections.comparators.ReverseComparator;
import org.fenixedu.academic.domain.DegreeCurricularPlan;
import org.fenixedu.academic.domain.Evaluation;
import org.fenixedu.academic.domain.ExecutionCourse;
import org.fenixedu.academic.domain.ExecutionDegree;
import org.fenixedu.academic.domain.ExecutionSemester;
import org.fenixedu.academic.domain.WrittenEvaluation;
import org.fenixedu.academic.dto.InfoExecutionPeriod;
import org.fenixedu.academic.service.services.commons.ReadCurrentExecutionPeriod;
import org.fenixedu.academic.service.services.commons.ReadExecutionPeriodsByDegreeCurricularPlan;
import org.fenixedu.academic.service.services.coordinator.ReadExecutionCoursesByDegreeCurricularPlanAndExecutionPeriodAndCurricularYear;
import org.fenixedu.academic.service.services.exceptions.FenixServiceException;
import org.fenixedu.academic.service.services.exceptions.NotAuthorizedException;
import org.fenixedu.academic.ui.faces.bean.base.FenixBackingBean;
import pt.ist.fenixframework.FenixFramework;
public class CoordinatorEvaluationManagementBackingBean extends FenixBackingBean {
private String degreeCurricularPlanID;
private HtmlInputHidden degreeCurricularPlanIdHidden;
private String executionPeriodID;
private String curricularYearID;
private HtmlInputHidden executionPeriodIdHidden;
private HtmlInputHidden curricularYearIdHidden;
private ExecutionSemester executionSemester;
private String executionCourseID;
private HtmlInputHidden executionCourseIdHidden;
private List<ExecutionCourse> executionCourses;
private List<SelectItem> executionPeriodsLabels;
private List<SelectItem> curricularYearsLabels;
private String evaluationID;
private HtmlInputHidden evaluationIdHidden;
protected Evaluation evaluation;
private Integer day;
private Integer month;
private Integer year;
private HtmlInputHidden dayHidden;
private HtmlInputHidden monthHidden;
private HtmlInputHidden yearHidden;
private String evaluationType;
private HtmlInputHidden evaluationTypeHidden;
private ExecutionDegree executionDegree;
public HtmlInputHidden getDegreeCurricularPlanIdHidden() {
if (this.degreeCurricularPlanIdHidden == null) {
final String degreeCurricularPlanId = this.getDegreeCurricularPlanID();
this.degreeCurricularPlanIdHidden = new HtmlInputHidden();
this.degreeCurricularPlanIdHidden.setValue(degreeCurricularPlanId);
}
return degreeCurricularPlanIdHidden;
}
public void setDegreeCurricularPlanIdHidden(HtmlInputHidden degreeCurricularPlanIdHidden) {
if (degreeCurricularPlanIdHidden != null) {
setDegreeCurricularPlanID(degreeCurricularPlanIdHidden.getValue().toString());
}
this.degreeCurricularPlanIdHidden = degreeCurricularPlanIdHidden;
}
public String getDegreeCurricularPlanID() {
if (this.degreeCurricularPlanID == null) {
if (this.degreeCurricularPlanIdHidden != null) {
this.degreeCurricularPlanID = this.degreeCurricularPlanIdHidden.getValue().toString();
} else if (this.getRequestParameter("degreeCurricularPlanID") != null) {
this.degreeCurricularPlanID = this.getRequestParameter("degreeCurricularPlanID");
} else if (this.getRequestAttribute("degreeCurricularPlanID") != null) {
this.degreeCurricularPlanID = this.getRequestAttribute("degreeCurricularPlanID").toString();
}
}
return degreeCurricularPlanID;
}
public void setDegreeCurricularPlanID(String degreeCurricularPlanID) {
this.degreeCurricularPlanID = degreeCurricularPlanID;
}
public List<SelectItem> getExecutionPeriodsLabels() {
if (this.executionPeriodsLabels == null) {
this.executionPeriodsLabels = new ArrayList();
final List<InfoExecutionPeriod> infoExecutionPeriods = getExecutionPeriods();
final ComparatorChain comparatorChain = new ComparatorChain();
comparatorChain.addComparator(new ReverseComparator(new BeanComparator("infoExecutionYear.year")));
comparatorChain.addComparator(new ReverseComparator(new BeanComparator("semester")));
Collections.sort(infoExecutionPeriods, comparatorChain);
for (final InfoExecutionPeriod infoExecutionPeriod : infoExecutionPeriods) {
final SelectItem selectItem = new SelectItem();
selectItem.setValue(infoExecutionPeriod.getExternalId());
selectItem.setLabel(infoExecutionPeriod.getName() + " - " + infoExecutionPeriod.getInfoExecutionYear().getYear());
this.executionPeriodsLabels.add(selectItem);
}
}
return this.executionPeriodsLabels;
}
protected List<InfoExecutionPeriod> getExecutionPeriods() {
return ReadExecutionPeriodsByDegreeCurricularPlan.run(getDegreeCurricularPlanID());
}
public List<SelectItem> getCurricularYearsLabels() {
if (this.curricularYearsLabels == null) {
this.curricularYearsLabels = new ArrayList();
this.curricularYearsLabels.add(new SelectItem(0, "Todos"));
for (int i = 1; i <= 5; i++) {
this.curricularYearsLabels.add(new SelectItem(i, i + " º"));
}
}
return this.curricularYearsLabels;
}
public ExecutionCourse getExecutionCourse() throws FenixServiceException {
return FenixFramework.getDomainObject(this.getExecutionCourseID());
}
protected List<ExecutionCourse> getExecutionCourses() {
if (this.executionCourses != null) {
return this.executionCourses;
}
try {
this.executionCourses =
ReadExecutionCoursesByDegreeCurricularPlanAndExecutionPeriodAndCurricularYear
.runReadExecutionCoursesByDegreeCurricularPlanAndExecutionPeriodAndCurricularYear(
getDegreeCurricularPlanID(), getExecutionPeriodID(), getCurricularYearID());
return this.executionCourses;
} catch (NotAuthorizedException e) {
} catch (FenixServiceException e) {
setErrorMessage(e.getMessage());
}
return new ArrayList();
}
public ExecutionSemester getExecutionPeriod() {
return executionSemester == null ? FenixFramework.<ExecutionSemester> getDomainObject(getExecutionCourseID()) : this.executionSemester;
}
protected InfoExecutionPeriod getCurrentExecutionPeriod() {
return ReadCurrentExecutionPeriod.run();
}
public List<SelectItem> getExecutionCoursesLabels() {
final List<SelectItem> result = new ArrayList();
for (final ExecutionCourse executionCourse : getExecutionCourses()) {
result.add(new SelectItem(executionCourse.getExternalId(), executionCourse.getNome()));
}
Collections.sort(result, new BeanComparator("label"));
return result;
}
public Evaluation getEvaluation() {
try {
if (this.evaluation == null && this.getEvaluationID() != null) {
this.evaluation = FenixFramework.getDomainObject(this.getEvaluationID());
}
return this.evaluation;
} catch (Exception e) {
return null;
}
}
public Date getCalendarBeginDate() {
Date beginDate = getExecutionPeriod().getBeginDate();
final ExecutionDegree executionDegree = getExecutionDegree();
if (executionDegree != null) {
if (getExecutionPeriod().getSemester().intValue() == 1
&& executionDegree.getPeriodLessonsFirstSemester().getStart() != null) {
beginDate = executionDegree.getPeriodLessonsFirstSemester().getStart();
} else if (getExecutionPeriod().getSemester().intValue() == 2
&& executionDegree.getPeriodLessonsSecondSemester().getStart() != null) {
beginDate = executionDegree.getPeriodLessonsSecondSemester().getStart();
}
}
return beginDate;
}
public Date getCalendarEndDate() {
Date endDate = getExecutionPeriod().getEndDate();
final ExecutionDegree executionDegree = getExecutionDegree();
if (executionDegree != null) {
if (getExecutionPeriod().getSemester().intValue() == 1
&& executionDegree.getPeriodExamsFirstSemester().getEnd() != null) {
endDate = executionDegree.getPeriodExamsFirstSemester().getEnd();
} else if (getExecutionPeriod().getSemester().intValue() == 2
&& executionDegree.getPeriodExamsSecondSemester().getEnd() != null) {
endDate = executionDegree.getPeriodExamsSecondSemester().getEnd();
}
}
return endDate;
}
private ExecutionDegree getExecutionDegree() {
if (this.executionDegree == null) {
for (final ExecutionDegree executionDegree : getDegreeCurricularPlan().getExecutionDegreesSet()) {
if (executionDegree.getExecutionYear() == getExecutionPeriod().getExecutionYear()) {
return (this.executionDegree = executionDegree);
}
}
}
return this.executionDegree;
}
private DegreeCurricularPlan getDegreeCurricularPlan() {
return FenixFramework.getDomainObject(getDegreeCurricularPlanID());
}
/**
* It's necessary to put these attibutes in request for the next back bean
*/
protected void setRequestCommonAttributes() {
setRequestAttribute("degreeCurricularPlanID", getDegreeCurricularPlanID());
setRequestAttribute("executionPeriodID", getExecutionPeriodID());
setRequestAttribute("curricularYearID", getCurricularYearID());
}
public String selectExecutionCourse() {
setRequestCommonAttributes();
setRequestAttribute("executionCourseID", getExecutionCourseID());
setRequestAttribute("day", getDay());
setRequestAttribute("month", getMonth());
setRequestAttribute("year", getYear());
return getEvaluationType();
}
public String searchExecutionCourses() {
clearAttributes();
return "";
}
protected void clearAttributes() {
this.executionCourses = null;
}
public String getExecutionCourseID() {
if (this.executionCourseID == null) {
if (this.getExecutionCourseIdHidden().getValue() != null) {
this.executionCourseID = this.getExecutionCourseIdHidden().getValue().toString();
} else if (this.getRequestParameter("executionCourseID") != null) {
this.executionCourseID = this.getRequestParameter("executionCourseID");
} else if (this.getRequestAttribute("executionCourseID") != null) {
this.executionCourseID = this.getRequestAttribute("executionCourseID").toString();
}
}
return this.executionCourseID;
}
public void setExecutionCourseID(String executionCourseID) {
if (executionCourseID != null) {
this.getExecutionCourseIdHidden().setValue(executionCourseID);
}
this.executionCourseID = executionCourseID;
}
public HtmlInputHidden getExecutionCourseIdHidden() {
if (this.executionCourseIdHidden == null) {
this.executionCourseIdHidden = new HtmlInputHidden();
this.executionCourseIdHidden.setValue(this.getExecutionCourseID());
}
return executionCourseIdHidden;
}
public void setExecutionCourseIdHidden(HtmlInputHidden executionCourseIdHidden) {
if (executionCourseIdHidden != null) {
this.setExecutionCourseID(executionCourseIdHidden.getValue().toString());
}
this.executionCourseIdHidden = executionCourseIdHidden;
}
public String getExecutionPeriodID() {
if (this.executionPeriodID == null) {
if (this.getExecutionPeriodIdHidden().getValue() != null) {
this.executionPeriodID = this.getExecutionPeriodIdHidden().getValue().toString();
} else if (this.getRequestParameter("executionPeriodID") != null) {
this.executionPeriodID = this.getRequestParameter("executionPeriodID");
} else if (this.getRequestAttribute("executionPeriodID") != null) {
this.executionPeriodID = this.getRequestAttribute("executionPeriodID").toString();
} else {
final InfoExecutionPeriod currentExecutionPeriod = getCurrentExecutionPeriod();
this.executionPeriodID = (currentExecutionPeriod != null) ? currentExecutionPeriod.getExternalId() : null;
}
}
return executionPeriodID;
}
public void setExecutionPeriodID(String executionPeriodID) {
if (executionPeriodID != null) {
getExecutionPeriodIdHidden().setValue(executionPeriodID);
}
this.executionPeriodID = executionPeriodID;
}
public String getCurricularYearID() {
if (this.curricularYearID == null) {
if (getCurricularYearIdHidden().getValue() != null) {
this.curricularYearID = getCurricularYearIdHidden().getValue().toString();
} else if (this.getRequestParameter("curricularYearID") != null) {
this.curricularYearID = this.getRequestParameter("curricularYearID");
} else if (this.getRequestAttribute("curricularYearID") != null) {
this.curricularYearID = this.getRequestAttribute("curricularYearID").toString();
} else {
this.curricularYearID = null;
}
}
return curricularYearID;
}
public void setCurricularYearID(String curricularYearID) {
if (curricularYearID != null) {
getCurricularYearIdHidden().setValue(curricularYearID);
}
this.curricularYearID = curricularYearID;
}
public HtmlInputHidden getExecutionPeriodIdHidden() {
if (this.executionPeriodIdHidden == null) {
this.executionPeriodIdHidden = new HtmlInputHidden();
this.executionPeriodIdHidden.setValue(getExecutionPeriodID());
}
return executionPeriodIdHidden;
}
public void setExecutionPeriodIdHidden(HtmlInputHidden executionPeriodIdHidden) {
if (executionPeriodIdHidden != null) {
setExecutionPeriodID(executionPeriodIdHidden.getValue().toString());
}
this.executionPeriodIdHidden = executionPeriodIdHidden;
}
public HtmlInputHidden getCurricularYearIdHidden() {
if (this.curricularYearIdHidden == null) {
this.curricularYearIdHidden = new HtmlInputHidden();
this.curricularYearIdHidden.setValue(getCurricularYearID());
}
return curricularYearIdHidden;
}
public void setCurricularYearIdHidden(HtmlInputHidden curricularYearIdHidden) {
if (curricularYearIdHidden != null) {
setCurricularYearID(curricularYearIdHidden.getValue().toString());
}
this.curricularYearIdHidden = curricularYearIdHidden;
}
public String getEvaluationID() {
if (this.evaluationID == null) {
if (this.getRequestParameter("evaluationID") != null) {
setEvaluationID(this.getRequestParameter("evaluationID"));
} else if (this.getEvaluationIdHidden().getValue() != null) {
setEvaluationID(this.getEvaluationIdHidden().getValue().toString());
}
}
return this.evaluationID;
}
public void setEvaluationID(String evaluationID) {
this.evaluationID = evaluationID;
}
public HtmlInputHidden getEvaluationIdHidden() {
if (this.evaluationIdHidden == null) {
this.evaluationIdHidden = new HtmlInputHidden();
this.evaluationIdHidden.setValue(getEvaluationID());
}
return evaluationIdHidden;
}
public void setEvaluationIdHidden(HtmlInputHidden evaluationIdHidden) {
if (evaluationIdHidden != null) {
setEvaluationID(evaluationIdHidden.getValue().toString());
}
this.evaluationIdHidden = evaluationIdHidden;
}
public Integer getDay() {
if (this.day == null) {
if (this.getEvaluation() != null) {
setDay(((WrittenEvaluation) this.getEvaluation()).getDay().get(Calendar.DAY_OF_MONTH));
} else if (this.getRequestParameter("day") != null) {
setDay(Integer.valueOf(this.getRequestParameter("day")));
} else if (this.getDayHidden().getValue() != null) {
setDay(Integer.valueOf(this.getDayHidden().getValue().toString()));
} else if (this.getRequestAttribute("day") != null) {
setDay(Integer.valueOf(this.getRequestAttribute("day").toString()));
}
}
return this.day;
}
public void setDay(Integer day) {
this.day = day;
}
public Integer getMonth() {
if (this.month == null) {
if (this.getEvaluation() != null) {
setMonth(((WrittenEvaluation) this.getEvaluation()).getDay().get(Calendar.MONTH) + 1);
} else if (this.getRequestParameter("month") != null) {
setMonth(Integer.valueOf(this.getRequestParameter("month")));
} else if (this.getMonthHidden().getValue() != null) {
setMonth(Integer.valueOf(this.getMonthHidden().getValue().toString()));
} else if (this.getRequestAttribute("month") != null) {
setMonth(Integer.valueOf(this.getRequestAttribute("month").toString()));
}
}
return this.month;
}
public void setMonth(Integer month) {
this.month = month;
}
public Integer getYear() {
if (this.year == null) {
if (this.getEvaluation() != null) {
setYear(((WrittenEvaluation) this.getEvaluation()).getDay().get(Calendar.YEAR));
} else if (this.getRequestParameter("year") != null) {
setYear(Integer.valueOf(this.getRequestParameter("year")));
} else if (this.getYearHidden().getValue() != null) {
setYear(Integer.valueOf(this.getYearHidden().getValue().toString()));
} else if (this.getRequestAttribute("year") != null) {
setYear(Integer.valueOf(this.getRequestAttribute("year").toString()));
}
}
return this.year;
}
public void setYear(Integer year) {
this.year = year;
}
public HtmlInputHidden getDayHidden() {
if (this.dayHidden == null) {
this.dayHidden = new HtmlInputHidden();
this.dayHidden.setValue(this.getDay());
}
return this.dayHidden;
}
public void setDayHidden(HtmlInputHidden dayHidden) {
this.dayHidden = dayHidden;
}
public HtmlInputHidden getMonthHidden() {
if (this.monthHidden == null) {
this.monthHidden = new HtmlInputHidden();
this.monthHidden.setValue(this.getMonth());
}
return this.monthHidden;
}
public void setMonthHidden(HtmlInputHidden monthHidden) {
this.monthHidden = monthHidden;
}
public HtmlInputHidden getYearHidden() {
if (this.yearHidden == null) {
this.yearHidden = new HtmlInputHidden();
this.yearHidden.setValue(this.getYear());
}
return this.yearHidden;
}
public void setYearHidden(HtmlInputHidden yearHidden) {
this.yearHidden = yearHidden;
}
public String getEvaluationType() {
if (this.evaluationType == null) {
if (this.getRequestParameter("evaluationType") != null && !this.getRequestParameter("evaluationType").equals("")) {
this.evaluationType = this.getRequestParameter("evaluationType");
}
}
return this.evaluationType;
}
public void setEvaluationType(String evaluationType) {
this.evaluationType = 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(evaluationTypeHidden.getValue().toString());
}
this.evaluationTypeHidden = evaluationTypeHidden;
}
}