/**
* 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.faces.bean.manager.curricularPlans;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.faces.model.SelectItem;
import org.apache.commons.collections.comparators.ReverseComparator;
import org.fenixedu.academic.domain.ExecutionDegree;
import org.fenixedu.academic.domain.ExecutionSemester;
import org.fenixedu.academic.domain.ExecutionYear;
import org.fenixedu.academic.domain.GradeScale;
import org.fenixedu.academic.domain.exceptions.DomainException;
import org.fenixedu.academic.dto.commons.CurricularCourseByExecutionSemesterBean;
import org.fenixedu.academic.predicate.IllegalDataAccessException;
import org.fenixedu.academic.service.services.exceptions.FenixServiceException;
import org.fenixedu.academic.service.services.manager.CreateOldCurricularCourse;
import org.fenixedu.academic.service.services.manager.EditOldCurricularCourse;
import org.fenixedu.academic.ui.faces.bean.bolonhaManager.curricularPlans.CurricularCourseManagementBackingBean;
import org.fenixedu.academic.ui.struts.action.exceptions.FenixActionException;
import org.fenixedu.academic.util.Bundle;
import org.fenixedu.bennu.core.i18n.BundleUtil;
public class ManagerCurricularCourseManagementBackingBean extends CurricularCourseManagementBackingBean {
private String code;
private String acronym;
private Integer minimumValueForAcumulatedEnrollments;
private Integer maximumValueForAcumulatedEnrollments;
private Integer enrollmentWeigth;
private Double credits;
private Double ectsCredits;
private Double theoreticalHours;
private Double labHours;
private Double praticalHours;
private Double theoPratHours;
private String gradeScaleString;
private GradeScale gradeScale;
private CurricularCourseByExecutionSemesterBean curricularCourseSemesterBean = null;
public ManagerCurricularCourseManagementBackingBean() {
if (getCurricularCourse() != null && getExecutionYear() != null) {
curricularCourseSemesterBean =
new CurricularCourseByExecutionSemesterBean(getCurricularCourse(),
ExecutionSemester.readBySemesterAndExecutionYear(2, getExecutionYear().getYear()));
}
}
@Override
public CurricularCourseByExecutionSemesterBean getCurricularCourseSemesterBean() {
return curricularCourseSemesterBean;
}
@Override
public void setCurricularCourseSemesterBean(CurricularCourseByExecutionSemesterBean curricularCourseSemesterBean) {
this.curricularCourseSemesterBean = curricularCourseSemesterBean;
}
public String getAcronym() {
if (getCurricularCourse() != null) {
acronym = getCurricularCourse().getAcronym();
}
return acronym;
}
public void setAcronym(String acronym) {
this.acronym = acronym;
}
public String getCode() {
if (code == null) {
code = (getCurricularCourse() != null) ? getCurricularCourse().getCode() : "";
}
return code;
}
public void setCode(String code) {
this.code = code;
}
public Double getCredits() {
if (credits == null) {
credits = (getCurricularCourse() != null) ? getCurricularCourse().getCredits() : Double.valueOf(0);
}
return credits;
}
public void setCredits(Double credits) {
this.credits = credits;
}
public Double getEctsCredits() {
if (ectsCredits == null) {
ectsCredits = (getCurricularCourse() != null) ? getCurricularCourse().getEctsCredits() : Double.valueOf(0);
}
return ectsCredits;
}
public void setEctsCredits(Double ectsCredits) {
this.ectsCredits = ectsCredits;
}
public Double getTheoreticalHours() {
if (theoreticalHours == null) {
theoreticalHours = (getCurricularCourse() != null) ? getCurricularCourse().getTheoreticalHours() : Double.valueOf(0);
}
return theoreticalHours;
}
public void setTheoreticalHours(final Double theoreticalHours) {
this.theoreticalHours = theoreticalHours;
}
public Double getLabHours() {
if (labHours == null) {
labHours = (getCurricularCourse() != null) ? getCurricularCourse().getLabHours() : Double.valueOf(0);
}
return labHours;
}
public void setLabHours(Double labHours) {
this.labHours = labHours;
}
public Double getPraticalHours() {
if (praticalHours == null) {
praticalHours = (getCurricularCourse() != null) ? getCurricularCourse().getPraticalHours() : Double.valueOf(0);
}
return praticalHours;
}
public void setPraticalHours(Double praticalHours) {
this.praticalHours = praticalHours;
}
public Double getTheoPratHours() {
if (theoPratHours == null) {
theoPratHours = (getCurricularCourse() != null) ? getCurricularCourse().getTheoPratHours() : Double.valueOf(0);
}
return theoPratHours;
}
public void setTheoPratHours(Double theoPratHours) {
this.theoPratHours = theoPratHours;
}
public Integer getEnrollmentWeigth() {
if (enrollmentWeigth == null) {
enrollmentWeigth = (getCurricularCourse() != null) ? getCurricularCourse().getEnrollmentWeigth() : Integer.valueOf(0);
}
return enrollmentWeigth;
}
public void setEnrollmentWeigth(Integer enrollmentWeigth) {
this.enrollmentWeigth = enrollmentWeigth;
}
public Integer getMaximumValueForAcumulatedEnrollments() {
if (maximumValueForAcumulatedEnrollments == null) {
maximumValueForAcumulatedEnrollments =
(getCurricularCourse() != null) ? getCurricularCourse().getMaximumValueForAcumulatedEnrollments() : Integer
.valueOf(0);
}
return maximumValueForAcumulatedEnrollments;
}
public void setMaximumValueForAcumulatedEnrollments(Integer maximumValueForAcumulatedEnrollments) {
this.maximumValueForAcumulatedEnrollments = maximumValueForAcumulatedEnrollments;
}
public Integer getMinimumValueForAcumulatedEnrollments() {
if (minimumValueForAcumulatedEnrollments == null) {
minimumValueForAcumulatedEnrollments =
(getCurricularCourse() != null) ? getCurricularCourse().getMinimumValueForAcumulatedEnrollments() : Integer
.valueOf(0);
}
return minimumValueForAcumulatedEnrollments;
}
public void setMinimumValueForAcumulatedEnrollments(Integer minimumValueForAcumulatedEnrollments) {
this.minimumValueForAcumulatedEnrollments = minimumValueForAcumulatedEnrollments;
}
@Deprecated
public String createOldCurricularCourse() {
try {
checkCourseGroup();
checkCurricularSemesterAndYear();
CreateOldCurricularCourse.run(getDegreeCurricularPlanID(), getCourseGroupID(), getName(), getNameEn(), getCode(),
getAcronym(), getMinimumValueForAcumulatedEnrollments(), getMaximumValueForAcumulatedEnrollments(),
getWeight(), getEnrollmentWeigth(), getCredits(), getEctsCredits(), getCurricularYearID(),
getCurricularSemesterID(), getBeginExecutionPeriodID(), getEndExecutionPeriodID(), getGradeScale());
} catch (FenixActionException e) {
this.addErrorMessage(BundleUtil.getString(Bundle.BOLONHA, e.getMessage()));
return "";
} catch (IllegalDataAccessException e) {
this.addErrorMessage(BundleUtil.getString(Bundle.BOLONHA, "error.notAuthorized"));
return "buildCurricularPlan";
} catch (FenixServiceException e) {
this.addErrorMessage(BundleUtil.getString(Bundle.BOLONHA, e.getMessage()));
return "";
} catch (DomainException e) {
this.addErrorMessage(BundleUtil.getString(Bundle.DOMAIN_EXCEPTION, e.getMessage()));
return "";
} catch (Exception e) {
this.addErrorMessage(BundleUtil.getString(Bundle.BOLONHA, "general.error"));
return "buildCurricularPlan";
}
addInfoMessage(BundleUtil.getString(Bundle.BOLONHA, "curricularCourseCreated"));
return "buildCurricularPlan";
}
@Deprecated
public String editOldCurricularCourse() {
try {
EditOldCurricularCourse.run(getCurricularCourseID(), getName(), getNameEn(), getCode(), getAcronym(),
getMinimumValueForAcumulatedEnrollments(), getMaximumValueForAcumulatedEnrollments(), getWeight(),
getEnrollmentWeigth(), getCredits(), getEctsCredits(), getTheoreticalHours(), getLabHours(),
getPraticalHours(), getTheoPratHours(), getGradeScale());
setContextID(null); // resetContextID
} catch (FenixServiceException e) {
addErrorMessage(BundleUtil.getString(Bundle.BOLONHA, e.getMessage()));
}
addInfoMessage(BundleUtil.getString(Bundle.BOLONHA, "curricularCourseEdited"));
return "";
}
@Override
protected List<SelectItem> readExecutionYearItems() {
final List<SelectItem> result = new ArrayList<SelectItem>();
if (isBolonha()) {
readBolonhaExecutionYears(result);
} else {
readPreBolonhaExecutionYears(result);
}
Collections.sort(result, new Comparator<SelectItem>() {
@Override
public int compare(SelectItem o1, SelectItem o2) {
return -o1.getLabel().compareTo(o2.getLabel());
}
});
return result;
}
private void readBolonhaExecutionYears(final List<SelectItem> result) {
final Collection<ExecutionDegree> executionDegrees = getDegreeCurricularPlan().getExecutionDegreesSet();
if (executionDegrees.isEmpty()) {
for (final ExecutionYear executionYear : ExecutionYear.readNotClosedExecutionYears()) {
result.add(new SelectItem(executionYear.getExternalId(), executionYear.getYear()));
}
if (getExecutionYearID() == null) {
setExecutionYearID(ExecutionYear.readCurrentExecutionYear().getExternalId());
}
} else {
for (final ExecutionDegree executionDegree : executionDegrees) {
result.add(new SelectItem(executionDegree.getExecutionYear().getExternalId(), executionDegree.getExecutionYear()
.getYear()));
}
if (getExecutionYearID() == null) {
setExecutionYearID(getDegreeCurricularPlan().getMostRecentExecutionDegree().getExecutionYear().getExternalId());
}
}
}
private void readPreBolonhaExecutionYears(final List<SelectItem> result) {
for (final ExecutionYear executionYear : rootDomainObject.getExecutionYearsSet()) {
result.add(new SelectItem(executionYear.getExternalId(), executionYear.getYear()));
}
if (getExecutionYearID() == null) {
setExecutionYearID(ExecutionYear.readCurrentExecutionYear().getExternalId());
}
}
@Override
protected List<SelectItem> readExecutionPeriodItems() {
return isBolonha() ? super.readExecutionPeriodItems() : readPreBolonhaExecutionPeriodItems();
}
private List<SelectItem> readPreBolonhaExecutionPeriodItems() {
final List<ExecutionSemester> semesters = new ArrayList<ExecutionSemester>(rootDomainObject.getExecutionPeriodsSet());
Collections.sort(semesters, new ReverseComparator(ExecutionSemester.COMPARATOR_BY_SEMESTER_AND_YEAR));
final List<SelectItem> result = new ArrayList<SelectItem>();
for (final ExecutionSemester semester : semesters) {
result.add(new SelectItem(semester.getExternalId(), semester.getQualifiedName()));
}
return result;
}
public List<SelectItem> getGradeScales() {
List<SelectItem> res = new ArrayList<SelectItem>();
res.add(new SelectItem(this.NO_SELECTION_STRING, BundleUtil.getString(Bundle.BOLONHA, "choose")));
for (GradeScale gradeScale : GradeScale.values()) {
res.add(new SelectItem(gradeScale.getName(), BundleUtil.getString(Bundle.ENUMERATION, gradeScale.getName())));
}
return res;
}
public String getGradeScaleString() {
if (this.gradeScaleString == null && getCurricularCourse() != null) {
this.gradeScaleString =
getCurricularCourse().getGradeScale() != null ? getCurricularCourse().getGradeScale().name() : null;
}
return this.gradeScaleString;
}
public void setGradeScaleString(final String value) {
this.gradeScaleString = value;
}
private GradeScale getGradeScale() {
if (this.gradeScale == null && this.getGradeScaleString() != null
&& !this.NO_SELECTION_STRING.equals(this.getGradeScaleString())) {
this.gradeScale = GradeScale.valueOf(getGradeScaleString());
} else if (this.gradeScale == null && this.getGradeScaleString() != null
&& this.NO_SELECTION_STRING.equals(this.getGradeScaleString())) {
this.gradeScale = null;
}
return this.gradeScale;
}
}