/** * 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 7, 2005 * by jdnf */ package org.fenixedu.academic.ui.faces.bean.teacher.evaluation; import java.text.ParseException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import javax.faces.model.SelectItem; import org.fenixedu.academic.domain.Department; import org.fenixedu.academic.domain.ExecutionCourse; import org.fenixedu.academic.domain.GradeScale; import org.fenixedu.academic.domain.Grouping; import org.fenixedu.academic.domain.Project; import org.fenixedu.academic.domain.exceptions.DomainException; import org.fenixedu.academic.service.services.exceptions.FenixServiceException; import org.fenixedu.academic.service.services.exceptions.NotAuthorizedException; import org.fenixedu.academic.service.services.teacher.CreateProject; import org.fenixedu.academic.service.services.teacher.DeleteEvaluation; import org.fenixedu.academic.service.services.teacher.EditProject; import org.fenixedu.academic.util.DateFormatUtil; import org.fenixedu.bennu.core.domain.Bennu; import pt.ist.fenixframework.FenixFramework; public class ProjectManagementBackingBean extends EvaluationManagementBackingBean { protected String name; protected String beginProjectDate; protected String beginProjectHour; protected String endProjectDate; protected String endProjectHour; protected Project project; protected String projectID; protected List<Project> associatedProjects; protected Boolean onlineSubmissionsAllowed; protected Integer maxSubmissionsToKeep; protected String groupingID; protected List<SelectItem> executionCourseGroupings; protected List<String> selectedDepartments; public ProjectManagementBackingBean() { super(); initSelectedDepartments(); } private void initSelectedDepartments() { final Project project = getProject(); selectedDepartments = new ArrayList<String>(); if (project != null) { for (Department department : project.getDeparmentsSet()) { selectedDepartments.add(department.getExternalId()); } } } private String getBeginString() { return getBeginProjectDate() + " " + getBeginProjectHour(); } private String getEndString() { return getEndProjectDate() + " " + getEndProjectHour(); } public String createProject() { try { CreateProject.runCreateProject(getExecutionCourseID(), getName(), DateFormatUtil.parse("dd/MM/yyyy HH:mm", getBeginString()), DateFormatUtil.parse("dd/MM/yyyy HH:mm", getEndString()), getDescription(), getOnlineSubmissionsAllowed(), getMaxSubmissionsToKeep(), getGroupingID(), getGradeScale(), getSelectDepartments()); } catch (final FenixServiceException e) { setErrorMessage(e.getMessage()); return ""; } catch (final ParseException e) { setErrorMessage("error.invalidDate"); return ""; } catch (final DomainException e) { setErrorMessage(e.getKey()); return ""; } return "projectsIndex"; } public String editProject() { try { EditProject.runEditProject(getExecutionCourseID(), getProjectID(), getName(), DateFormatUtil.parse("dd/MM/yyyy HH:mm", getBeginString()), DateFormatUtil.parse("dd/MM/yyyy HH:mm", getEndString()), getDescription(), getOnlineSubmissionsAllowed(), getMaxSubmissionsToKeep(), getGroupingID(), getGradeScale(), getSelectDepartments()); setAssociatedProjects(null); } catch (final NotAuthorizedException e) { } catch (final FenixServiceException e) { setErrorMessage(e.getMessage()); return ""; } catch (ParseException e) { setErrorMessage("error.invalidDate"); return ""; } catch (DomainException e) { setErrorMessage(e.getKey()); return ""; } return "projectsIndex"; } public String deleteProject() { try { DeleteEvaluation.runDeleteEvaluation(getExecutionCourseID(), getProjectID()); setAssociatedProjects(null); } catch (NotAuthorizedException e) { } catch (FenixServiceException e) { setErrorMessage(e.getMessage()); } catch (DomainException e) { setErrorMessage(e.getKey()); } return "projectsIndex"; } private Project getProject() { if (this.project == null && this.getProjectID() != null) { this.project = (Project) FenixFramework.getDomainObject(getProjectID()); } return this.project; } public List<Project> getAssociatedProjects() throws FenixServiceException { if (this.associatedProjects == null) { final ExecutionCourse executionCourse = FenixFramework.getDomainObject(getExecutionCourseID()); this.associatedProjects = executionCourse.getAssociatedProjects(); Comparator<Project> comparator = Comparator.comparing(Project::getProjectBeginDateTime).thenComparing(Project::getProjectEndDateTime) .thenComparing(Project::getName); Collections.sort(this.associatedProjects, comparator); } return associatedProjects; } public void setAssociatedProjects(List<Project> associatedProjects) { this.associatedProjects = associatedProjects; } public String getBeginProjectDate() { if (this.beginProjectDate == null && this.getProject() != null) { this.beginProjectDate = DateFormatUtil.format("dd/MM/yyyy", getProject().getBegin()); } return this.beginProjectDate; } public void setBeginProjectDate(String beginProjectDate) { this.beginProjectDate = beginProjectDate; } public String getEndProjectDate() { if (this.endProjectDate == null && this.getProject() != null) { this.endProjectDate = DateFormatUtil.format("dd/MM/yyyy", getProject().getEnd()); } return this.endProjectDate; } public void setEndProjectDate(String endProjectDate) { this.endProjectDate = endProjectDate; } public String getName() { if (this.name == null && this.getProject() != null) { this.name = this.getProject().getName(); } return this.name; } public void setName(String name) { this.name = name; } @Override public String getDescription() { if (this.description == null && this.getProject() != null) { this.description = this.getProject().getDescription(); } return this.description; } public String getProjectID() { if (this.projectID == null) { if (this.getRequestParameter("projectID") != null && !this.getRequestParameter("projectID").equals("")) { this.projectID = this.getRequestParameter("projectID"); } } return this.projectID; } public void setProjectID(String projectID) { this.projectID = projectID; } public String getBeginProjectHour() { if (this.beginProjectHour == null && this.getProject() != null) { this.beginProjectHour = DateFormatUtil.format("HH:mm", getProject().getBegin()); } return this.beginProjectHour; } public void setBeginProjectHour(String beginProjectHour) { this.beginProjectHour = beginProjectHour; } public String getEndProjectHour() { if (this.endProjectHour == null && this.getProject() != null) { this.endProjectHour = DateFormatUtil.format("HH:mm", getProject().getEnd()); } return this.endProjectHour; } public void setEndProjectHour(String endProjectHour) { this.endProjectHour = endProjectHour; } public String getGroupingID() { if (this.groupingID == null && this.getProject() != null) { Grouping grouping = this.getProject().getGrouping(); this.groupingID = (grouping != null) ? grouping.getExternalId() : null; } return groupingID; } public void setGroupingID(String groupingID) { this.groupingID = groupingID; } public Integer getMaxSubmissionsToKeep() { if (this.maxSubmissionsToKeep == null && this.getProject() != null) { this.maxSubmissionsToKeep = this.getProject().getMaxSubmissionsToKeep(); } return maxSubmissionsToKeep; } public void setMaxSubmissionsToKeep(Integer maxSubmissionsToKeep) { this.maxSubmissionsToKeep = maxSubmissionsToKeep; } public Boolean getOnlineSubmissionsAllowed() { if (this.onlineSubmissionsAllowed == null && this.getProject() != null) { this.onlineSubmissionsAllowed = this.getProject().getOnlineSubmissionsAllowed(); } return onlineSubmissionsAllowed; } public void setOnlineSubmissionsAllowed(Boolean onlineSubmissionsAllowed) { this.onlineSubmissionsAllowed = onlineSubmissionsAllowed; } public List<SelectItem> getExecutionCourseGroupings() throws FenixServiceException { if (this.executionCourseGroupings == null) { this.executionCourseGroupings = new ArrayList<SelectItem>(); for (Grouping grouping : getExecutionCourse().getGroupings()) { this.executionCourseGroupings.add(new SelectItem(grouping.getExternalId(), grouping.getName())); } } return this.executionCourseGroupings; } @Override public GradeScale getGradeScale() { if (gradeScale == null && this.getProject() != null) { this.gradeScale = getProject().getGradeScale(); } return this.gradeScale; } public List<SelectItem> getDepartments() { List<SelectItem> departments = new ArrayList<SelectItem>(); for (Department department : Bennu.getInstance().getDepartmentsSet()) { final SelectItem e = new SelectItem(department.getExternalId(), department.getName()); departments.add(e); } return departments; } public void setSelectedDepartments(List<String> departments) { selectedDepartments = departments; } public List<Department> getSelectDepartments() { List<Department> departments = new ArrayList<Department>(); for (String departmentExtId : selectedDepartments) { departments.add((Department) FenixFramework.getDomainObject(departmentExtId)); } return departments; } public List<String> getSelectedDepartments() { return selectedDepartments; } }