package pt.utl.ist.scripts.runOnce.teacher; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import net.sourceforge.fenixedu.domain.ExecutionCourse; import net.sourceforge.fenixedu.domain.Project; import net.sourceforge.fenixedu.domain.ProjectSubmission; import net.sourceforge.fenixedu.domain.StudentGroup; import pt.ist.fenixframework.FenixFramework; import pt.utl.ist.scripts.commons.AtomicScript; public class ExtractAllExecutionCourseProjectVersions extends AtomicScript { public static void main(String[] args) { process(new ExtractAllExecutionCourseProjectVersions()); System.exit(0); } @Override protected void run() throws Exception { ExecutionCourse course = FenixFramework.getDomainObject("1610612905827"); FileOutputStream fileOStream = new FileOutputStream("Projectos-MecSol1213-1Sem.zip"); ZipOutputStream zip = new ZipOutputStream(fileOStream); for (Project project : course.getProjectsWithOnlineSubmission()) { final Map> projectSubmissionsByStudentGroup = new HashMap>(); for (ProjectSubmission projectSubmission : project.getProjectSubmissions()) { final StudentGroup studentGroup = projectSubmission.getStudentGroup(); if (studentGroup.wasDeleted()) { continue; } if (projectSubmissionsByStudentGroup.get(studentGroup) == null) { final List projectSubmissions = new ArrayList(); projectSubmissionsByStudentGroup.put(studentGroup, projectSubmissions); } projectSubmissionsByStudentGroup.get(studentGroup).add(projectSubmission); } logger.info("\tPROJECTO: " + project.getName()); zip.putNextEntry(new ZipEntry(project.getName() + "/")); for (Entry> submissionSet : projectSubmissionsByStudentGroup.entrySet()) { logger.info("\t\tGRUPO: " + submissionSet.getKey().getGroupNumber()); zip.putNextEntry(new ZipEntry(project.getName() + "/Grupo" + submissionSet.getKey().getGroupNumber() + "/")); for (ProjectSubmission submission : submissionSet.getValue()) { logger.info("\t\t\tSUBMISSAO: " + submission.getProjectSubmissionFile().getDisplayName()); zip.putNextEntry(new ZipEntry(project.getName() + "/Grupo" + submissionSet.getKey().getGroupNumber() + "/" + submission.getSubmissionDateTime().toString("yyyy-MM-dd_HH:mm:ss") + "/")); zip.putNextEntry(new ZipEntry(project.getName() + "/Grupo" + submissionSet.getKey().getGroupNumber() + "/" + submission.getSubmissionDateTime().toString("yyyy-MM-dd_HH:mm:ss") + "/" + submission.getProjectSubmissionFile().getDisplayName())); zip.write(submission.getProjectSubmissionFile().getContents()); zip.closeEntry(); } } } zip.close(); fileOStream.flush(); fileOStream.close(); } }