Package org.fenixedu.academic.ui.struts.action.teacher

Source Code of org.fenixedu.academic.ui.struts.action.teacher.ProjectSubmissionsManagementDispatchAction

/**
* 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.struts.action.teacher;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.fenixedu.academic.domain.Attends;
import org.fenixedu.academic.domain.ExecutionCourse;
import org.fenixedu.academic.domain.Person;
import org.fenixedu.academic.domain.Professorship;
import org.fenixedu.academic.domain.Project;
import org.fenixedu.academic.domain.ProjectSubmission;
import org.fenixedu.academic.domain.ProjectSubmissionLog;
import org.fenixedu.academic.domain.StudentGroup;
import org.fenixedu.academic.dto.VariantBean;
import org.fenixedu.academic.service.services.exceptions.FenixServiceException;
import org.fenixedu.academic.service.services.teacher.NotifyStudentGroup;
import org.fenixedu.academic.ui.struts.action.exceptions.FenixActionException;
import org.fenixedu.academic.ui.struts.action.teacher.executionCourse.ExecutionCourseBaseAction;
import org.fenixedu.academic.ui.struts.action.teacher.siteArchive.Archive;
import org.fenixedu.academic.ui.struts.action.teacher.siteArchive.DiskZipArchive;
import org.fenixedu.academic.ui.struts.action.teacher.siteArchive.Fetcher;
import org.fenixedu.academic.ui.struts.action.teacher.siteArchive.Resource;
import org.fenixedu.bennu.struts.annotations.Mapping;

import pt.ist.fenixWebFramework.renderers.components.state.IViewState;
import pt.ist.fenixWebFramework.renderers.utils.RenderUtils;
import pt.ist.fenixframework.FenixFramework;

@Mapping(module = "teacher", path = "/projectSubmissionsManagement", functionality = ManageExecutionCourseDA.class)
public class ProjectSubmissionsManagementDispatchAction extends ExecutionCourseBaseAction {

    protected ActionForward doForward(HttpServletRequest request, String path) {
        request.setAttribute("teacher$actual$page", path);
        return new ActionForward("/evaluation/evaluationFrame.jsp");
    }

    public ActionForward viewLastProjectSubmissionForEachGroup(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws FenixActionException {

        final Project project = getProject(request);
        final List<ProjectSubmission> projectSubmissions =
                new ArrayList<ProjectSubmission>(project.getLastProjectSubmissionForEachStudentGroup());

        final List<ProjectSubmission> deletedGroupsProjectSubmissions =
                new ArrayList<ProjectSubmission>(project.getLastProjectSubmissionForEachDeletedStudentGroup());

        Collections.sort(projectSubmissions, ProjectSubmission.COMPARATOR_BY_GROUP_NUMBER_AND_MOST_RECENT_SUBMISSION_DATE);
        Collections.sort(deletedGroupsProjectSubmissions,
                ProjectSubmission.COMPARATOR_BY_GROUP_NUMBER_AND_MOST_RECENT_SUBMISSION_DATE);

        setRequestParameters(request, project, projectSubmissions, null);
        request.setAttribute("deletedStudentGroupProjectSubmissions", deletedGroupsProjectSubmissions);

        return doForward(request, "/teacher/evaluation/viewLastProjectSubmissionForEachGroup.jsp");

    }

    public ActionForward viewProjectSubmissionsByGroup(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws FenixActionException {

        final Project project = getProject(request);
        final List<ProjectSubmission> projectSubmissions =
                new ArrayList<ProjectSubmission>(project.getProjectSubmissionsByStudentGroup(getStudentGroup(request)));
        Collections.sort(projectSubmissions, ProjectSubmission.COMPARATOR_BY_MOST_RECENT_SUBMISSION_DATE);

        final List<ProjectSubmissionLog> projectSubmissionLogs =
                new ArrayList<ProjectSubmissionLog>(project.getProjectSubmissionLogsByStudentGroup(getStudentGroup(request)));
        Collections.sort(projectSubmissionLogs, ProjectSubmissionLog.COMPARATOR_BY_MOST_RECENT_SUBMISSION_DATE);

        setRequestParameters(request, project, projectSubmissions, projectSubmissionLogs);

        return doForward(request, "/teacher/evaluation/viewProjectSubmissionsByGroup.jsp");

    }

    public ActionForward downloadProjectsInZipFormat(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws FenixActionException, IOException, ServletException {

        final Project project = getProject(request);
        final List<ProjectSubmission> projectSubmissions =
                new ArrayList<ProjectSubmission>(project.getLastProjectSubmissionForEachStudentGroup());

        Archive archive = new DiskZipArchive(response, project.getName());
        Fetcher fetcher = new Fetcher(archive, request, response);

        for (ProjectSubmission submission : projectSubmissions) {
            StudentGroup group = submission.getStudentGroup();

            fetcher.queue(new Resource(group.getGroupNumber() + getStudentsISTID(group) + "/"
                    + submission.getProjectSubmissionFile().getFilename(), submission.getProjectSubmissionFile().getDownloadUrl()));
        }

        fetcher.process();
        archive.finish();

        return null;
    }

    public ActionForward prepareSelectiveDownload(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws FenixActionException, IOException, ServletException {

        IViewState viewState = RenderUtils.getViewState("selectiveDownload");
        Integer value = (viewState != null) ? (Integer) viewState.getMetaObject().getObject() : null;
        VariantBean bean = new VariantBean();
        bean.setInteger(value);
        final Project project = getProject(request);
        if (bean.getInteger() != null) {
            final List<ProjectSubmission> projectSubmissions =
                    new ArrayList<ProjectSubmission>(project.getLastProjectSubmissionForEachStudentGroup());
            Collections.sort(projectSubmissions, ProjectSubmission.COMPARATOR_BY_MOST_RECENT_SUBMISSION_DATE);
            setRequestParameters(request, project, projectSubmissions, null);
        } else {
            setRequestParameters(request, project, null, null);
        }

        request.setAttribute("bean", bean);
        return doForward(request, "/teacher/evaluation/selectiveDownload.jsp");
    }

    public ActionForward selectiveDownload(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws FenixActionException, IOException, ServletException {

        final Project project = getProject(request);
        final Integer startIndex = Integer.valueOf(request.getParameter("startIndex"));
        final Integer pageSize = Integer.valueOf(request.getParameter("size"));
        final List<ProjectSubmission> projectSubmissions =
                new ArrayList<ProjectSubmission>(project.getLastProjectSubmissionForEachStudentGroup());
        Collections.sort(projectSubmissions, ProjectSubmission.COMPARATOR_BY_MOST_RECENT_SUBMISSION_DATE);
        Integer finishIndex = Math.min(projectSubmissions.size(), startIndex + pageSize);

        final List<ProjectSubmission> subList = projectSubmissions.subList(startIndex, finishIndex);

        Archive archive = new DiskZipArchive(response, project.getName() + "-" + (startIndex + 1) + "-" + finishIndex);
        Fetcher fetcher = new Fetcher(archive, request, response);

        for (ProjectSubmission submission : subList) {
            StudentGroup group = submission.getStudentGroup();

            fetcher.queue(new Resource(group.getGroupNumber() + getStudentsISTID(group) + "/"
                    + submission.getProjectSubmissionFile().getFilename(), submission.getProjectSubmissionFile().getDownloadUrl()));
        }

        fetcher.process();
        archive.finish();

        return null;
    }

    public ActionForward prepareGroupComment(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) {

        final Project project = getProject(request);

        request.setAttribute("projectSubmission", project.getLastProjectSubmissionForStudentGroup(getStudentGroup(request)));
        setRequestParameters(request, project, null, null);

        return doForward(request, "/teacher/evaluation/editProjectObservations.jsp");
    }

    public ActionForward sendCommentThroughEmail(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws FenixServiceException {

        final Project project = getProject(request);

        ExecutionCourse course = (ExecutionCourse) FenixFramework.getDomainObject(getExecutionCourseID(request));

        NotifyStudentGroup.run(project.getLastProjectSubmissionForStudentGroup(getStudentGroup(request)), course,
                getLoggedPerson(request));

        return prepareGroupComment(mapping, form, request, response);
    }

    private void setRequestParameters(HttpServletRequest request, Project project, List<ProjectSubmission> projectSubmissions,
            List<ProjectSubmissionLog> projectSubmissionLogs) {

        request.setAttribute("executionCourseID", getExecutionCourseID(request));
        request.setAttribute("project", project);
        request.setAttribute("projectSubmissions", projectSubmissions);
        request.setAttribute("projectSubmissionLogs", projectSubmissionLogs);
    }

    private StudentGroup getStudentGroup(HttpServletRequest request) {
        return getDomainObject(request, "studentGroupID");
    }

    private Project getProject(HttpServletRequest request) {
        final String projectExtId = request.getParameter("projectOID");
        if (projectExtId != null) {
            final Project project = FenixFramework.getDomainObject(projectExtId);
            request.setAttribute("projectID", project.getExternalId().toString());
            return project;
        }
        final Person person = getUserView(request).getPerson();
        final String projectId = request.getParameter("projectID");
        for (final Professorship professorship : person.getProfessorshipsSet()) {
            for (final Project project : professorship.getExecutionCourse().getAssociatedProjects()) {
                if (project.getExternalId().equals(projectId)) {
                    request.setAttribute("projectOID", project.getExternalId());
                    return project;
                }
            }
        }

        return null;
    }

    private String getExecutionCourseID(HttpServletRequest request) {
        return request.getParameter("executionCourseID");
    }

    private String getStudentsISTID(StudentGroup group) {
        ArrayList<Attends> sortedAttends = new ArrayList(group.getAttendsSet());
        Collections.sort(sortedAttends, Attends.COMPARATOR_BY_STUDENT_NUMBER);

        String studentsISTID = "";
        for (Attends attends : sortedAttends) {
            studentsISTID += "-" + attends.getAluno().getStudent().getPerson().getUsername();
        }
        return studentsISTID;
    }

}
TOP

Related Classes of org.fenixedu.academic.ui.struts.action.teacher.ProjectSubmissionsManagementDispatchAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.