Subversion Repositories bacoAlunos

Rev

Rev 1306 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.services.courseunits;

import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.services.data.RepositoryService;
import pt.estgp.estgweb.services.data.IRepositoryFile;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.estgp.estgweb.Globals;
import org.apache.log4j.Logger;
import jomm.utils.BytesUtils;
import jomm.utils.StringsUtils;
import jomm.utils.FilesUtils;
import jomm.utils.TemplateUtils;
import jomm.dao.impl.AbstractDao;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;
import java.text.MessageFormat;

/*
 * @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
 *
 *
 * Created at 17/Out/2003 , 23:45:24
 *
 */

/**
 * @author Jorge Machado
 *         <p/>
 *         <p/>
 *         Created at 17/Out/2003 , 23:45:24
 */

public class CreateCourseUnitWorksBackupService implements IService
{

    private RepositoryService repositoryService = new RepositoryService();

    private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger = 1.5.0/docs/api/java/util/logging/Logger.html">Logger.getLogger(CreateCourseUnitWorksBackupService.class);

    public 1.5.0/docs/api/java/lang/String.html">String createSystemActualYearBackup(1.5.0/docs/api/java/lang/String.html">String importYear, UserSession userSession) throws ServiceException
    {
        return createSystemImportYearBackup(DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear(),userSession);
    }

    public 1.5.0/docs/api/java/lang/String.html">String createSystemImportYearBackup(1.5.0/docs/api/java/lang/String.html">String importYear, UserSession userSession) throws ServiceException
    {
        if (importYear == null || importYear.trim().length() == 0)
            importYear = DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear();
        1.5.0/docs/api/java/lang/String.html">String tmpName = BytesUtils.generateHexKey();
        1.5.0/docs/api/java/lang/String.html">String tmpDir = Globals.TMP_DIR + "/" + tmpName;
        new 1.5.0/docs/api/java/io/File.html">File(tmpDir).mkdirs();
        List<Course> courses = DaoFactory.getCourseDaoImpl().findAll(importYear);
        try
        {
            for (Course c : courses)
            {
                createCourseBackup(tmpDir,c,userSession);
            }
            FilesUtils.zipFolder(tmpDir, tmpDir + ".zip");
            FilesUtils.delete(tmpDir);
            return tmpName + ".zip";
        }
        catch (1.5.0/docs/api/java/io/IOException.html">IOException e)
        {
            logger.error(e, e);
        }
        return null;
    }

    public 1.5.0/docs/api/java/lang/String.html">String createSystemBackup(1.5.0/docs/api/java/lang/String.html">String importYear, UserSession userSession) throws ServiceException
    {
        1.5.0/docs/api/java/lang/String.html">String tmpName = BytesUtils.generateHexKey();
        1.5.0/docs/api/java/lang/String.html">String tmpDir = Globals.TMP_DIR + "/" + tmpName;
        new 1.5.0/docs/api/java/io/File.html">File(tmpDir).mkdirs();
        List<Course> courses = DaoFactory.getCourseDaoImpl().findAll();
        try
        {
            for (Course c : courses)
            {
                createCourseBackup(tmpDir,c,userSession);
            }
            FilesUtils.zipFolder(tmpDir, tmpDir + ".zip");
            FilesUtils.delete(tmpDir);
            return tmpName + ".zip";
        }
        catch (1.5.0/docs/api/java/io/IOException.html">IOException e)
        {
            logger.error(e, e);
        }
        return null;
    }

    private void createCourseBackup(1.5.0/docs/api/java/lang/String.html">String tmpDir, Course c, UserSession userSession)
    {
        1.5.0/docs/api/java/lang/String.html">String couseDirPath = tmpDir + "/" + StringsUtils.normalizeResourceName(c.getName()) + '.' + c.getCode();
        try
        {
            1.5.0/docs/api/java/lang/String.html">String importYearIntranet = DatesUtils.getImportYearIntranet(c.getImportYear());
            1.5.0/docs/api/java/lang/String.html">String courseImportYearPath = couseDirPath + "/" + importYearIntranet;
            1.5.0/docs/api/java/io/File.html">File courseImportYearDir = new 1.5.0/docs/api/java/io/File.html">File(courseImportYearPath);
            courseImportYearDir.mkdirs();
            List<CourseUnit> courseUnits = DaoFactory.getCourseUnitDaoImpl().loadByCourse(c.getId(), c.getImportYear());
            for (CourseUnit courseUnit : courseUnits)
            {
                1.5.0/docs/api/java/lang/String.html">String semestre;
                if (courseUnit.getSemestre().equals("S1"))
                {
                    semestre = Globals.INTRANET_SEMESTRE_S1;
                }
                else if(courseUnit.getSemestre().equals("S2"))
                {
                    semestre = Globals.INTRANET_SEMESTRE_S2;
                }
                else
                {
                    semestre = Globals.INTRANET_SEMESTRE_A;
                }

                1.5.0/docs/api/java/lang/String.html">String normalizedName = StringsUtils.normalizeResourceName(courseUnit.getName());
                1.5.0/docs/api/java/lang/String.html">String unitPath = courseImportYearPath + "/" + semestre + "/" + normalizedName;
                copyProgram(courseUnit,unitPath,userSession);
                new CreateCourseUnitXML().run(unitPath+"/desc.xml",courseUnit,userSession);
                for (CourseUnitAssignement assignement : courseUnit.getAssignements())
                {
                    1.5.0/docs/api/java/lang/String.html">String assignementDir = unitPath + "/assignement" + assignement.getId();
                    createAssignementCopy(assignement, assignementDir, userSession);
                    if (!assignement.getDeliverType().equals(Globals.COURSEUNIT_ASSIGNEMENT_TYPE_NO_FILE) && assignement.getDeliverables() != null && assignement.getDeliverables().size() > 0)
                    {
                        for (CourseUnitDeliverable deliverable : assignement.getDeliverables())
                        {
                            copyDeliverableVersions(deliverable, assignementDir, userSession);
                        }
                    }
                }
            }
        }
        catch (1.5.0/docs/api/java/io/IOException.html">IOException e)
        {
            logger.error(e, e);
        }
    }

    /**
     * In case of student create a backup with student deliverables in actual year subscribed units, in case of teacher create a backup of all deliverables in actual year teached units
     *
     * @param userSession
     * @return
     * @throws ServiceException
     */

    public 1.5.0/docs/api/java/lang/String.html">String createImportYearBackup(1.5.0/docs/api/java/lang/String.html">String importYear, UserSession userSession) throws ServiceException
    {
        if(importYear == null)
            importYear = DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear();
        if (userSession.getUser() instanceof Teacher)
            return createLoginTeacherActualYearBackup(importYear,userSession);
        else if (userSession.getUser() instanceof Student)
            return createLoginStudentActualYearBackup(importYear,userSession);
        return null;
    }
    /**
     * In case of student create a backup with student deliverables in actual year subscribed units, in case of teacher create a backup of all deliverables in actual year teached units
     *
     * @param userSession
     * @return
     * @throws ServiceException
     */

    public 1.5.0/docs/api/java/lang/String.html">String createActualYearBackup(UserSession userSession) throws ServiceException
    {
        if (userSession.getUser() instanceof Teacher)
            return createLoginTeacherActualYearBackup(DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear(),userSession);
        else if (userSession.getUser() instanceof Student)
            return createLoginStudentActualYearBackup(DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear(), userSession);
        return null;
    }


    /**
     * In case of student create a backup with student deliverables subscribed units, in case of teacher create a backup of all deliverables of teached units
     *
     * @param userSession
     * @return
     * @throws ServiceException
     */

    public 1.5.0/docs/api/java/lang/String.html">String createBackup(UserSession userSession) throws ServiceException
    {
        if (userSession.getUser() instanceof Teacher)
            return createLoginTeacherBackup(userSession);
        else if (userSession.getUser() instanceof Student)
            return createLoginStudentBackup(userSession);
        return null;
    }

    public 1.5.0/docs/api/java/lang/String.html">String createProgramsBackup(UserSession userSession) throws ServiceException
    {
        if (userSession.getUser() instanceof Teacher)
            return createLoginTeacherProgramsBackup(userSession);
        return null;
    }

    public 1.5.0/docs/api/java/lang/String.html">String createLoginStudentBackup(UserSession userSession) throws ServiceException
    {
        Student s = (Student) userSession.getUser();
        return createStudentBackup(s, userSession);
    }


    public 1.5.0/docs/api/java/lang/String.html">String createLoginTeacherBackup(UserSession userSession) throws ServiceException
    {
        Teacher t = (Teacher) userSession.getUser();
        return createTeacherBackup(t, userSession);
    }


    public 1.5.0/docs/api/java/lang/String.html">String createLoginTeacherProgramsBackup(UserSession userSession) throws ServiceException
    {
        Teacher t = (Teacher) userSession.getUser();
        return createTeacherProgramsBackup(t, userSession);
    }


    public 1.5.0/docs/api/java/lang/String.html">String createLoginStudentActualYearBackup(1.5.0/docs/api/java/lang/String.html">String importYear,UserSession userSession) throws ServiceException
    {
        Student s = (Student) userSession.getUser();
        return createStudentActualYearBackup(s,importYear, userSession);
    }


    public 1.5.0/docs/api/java/lang/String.html">String createLoginTeacherActualYearBackup(1.5.0/docs/api/java/lang/String.html">String importYear,UserSession userSession) throws ServiceException
    {
        Teacher t = (Teacher) userSession.getUser();
        return createTeacherActualYearBackup(t,importYear, userSession);
    }

    public 1.5.0/docs/api/java/lang/String.html">String createStudentActualYearBackup(long studentId,1.5.0/docs/api/java/lang/String.html">String importYear, UserSession userSession) throws ServiceException
    {
        Student s = DaoFactory.getStudentDaoImpl().get(studentId);
        return createStudentActualYearBackup(s,importYear, userSession);
    }

    public 1.5.0/docs/api/java/lang/String.html">String createTeacherActualYearBackup(long teacherId,1.5.0/docs/api/java/lang/String.html">String importYear, UserSession userSession) throws ServiceException
    {
        Teacher t = DaoFactory.getTeacherDaoImpl().get(teacherId);
        return createTeacherActualYearBackup(t,importYear, userSession);
    }


    public 1.5.0/docs/api/java/lang/String.html">String createStudentBackup(long studentId, UserSession userSession) throws ServiceException
    {
        Student s = DaoFactory.getStudentDaoImpl().get(studentId);
        return createStudentBackup(s, userSession);
    }

    public 1.5.0/docs/api/java/lang/String.html">String createTeacherBackup(long teacherId, UserSession userSession) throws ServiceException
    {
        Teacher t = DaoFactory.getTeacherDaoImpl().get(teacherId);
        return createTeacherBackup(t, userSession);
    }




    public 1.5.0/docs/api/java/lang/String.html">String createTeacherProgramsBackup(long teacherId, UserSession userSession) throws ServiceException
    {
        Teacher t = DaoFactory.getTeacherDaoImpl().get(teacherId);
        return createTeacherProgramsBackup(t, userSession);
    }


    private 1.5.0/docs/api/java/lang/String.html">String createStudentActualYearBackup(Student s,1.5.0/docs/api/java/lang/String.html">String importYear, UserSession userSession) throws ServiceException
    {
        List<CourseUnit> units = DaoFactory.getCourseUnitDaoImpl().loadSubscribedImportYearUnits(s.getId(), importYear);
        if (units == null || units.size() == 0)
            return null;
        return createStudentBackup(units, s, userSession);
    }

    private 1.5.0/docs/api/java/lang/String.html">String createTeacherActualYearBackup(Teacher t,1.5.0/docs/api/java/lang/String.html">String importYear, UserSession userSession) throws ServiceException
    {
        5+0%2Fdocs%2Fapi+List">List units = DaoFactory.getCourseUnitDaoImpl().loadTeachedImportYearUnits(t.getId(), DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear());
        if (units == null || units.size() == 0)
            return null;
        return createTeacherBackup(units, t, userSession);
    }


    private 1.5.0/docs/api/java/lang/String.html">String createStudentBackup(Student s, UserSession userSession) throws ServiceException
    {
        List<CourseUnit> units = new ArrayList<CourseUnit>(s.getSubscribedUnits());
        if (units == null || units.size() == 0)
            return null;
        return createStudentBackup(units, s, userSession);
    }

    private 1.5.0/docs/api/java/lang/String.html">String createTeacherBackup(Teacher t, UserSession userSession) throws ServiceException
    {
        List<CourseUnit> units = new ArrayList<CourseUnit>(t.getTeachedUnits());
        if (units == null || units.size() == 0)
            return null;
        return createTeacherBackup(units, t, userSession);
    }

    private 1.5.0/docs/api/java/lang/String.html">String createTeacherProgramsBackup(Teacher t, UserSession userSession) throws ServiceException
    {
        List<CourseUnit> units = new ArrayList<CourseUnit>(t.getTeachedUnits());
        if (units == null || units.size() == 0)
            return null;
        return createTeacherProgramsBackup(units, t, userSession);
    }


    private 1.5.0/docs/api/java/lang/String.html">String createStudentBackup(List<CourseUnit> courseUnits, Student s, UserSession userSession) throws ServiceException
    {
        1.5.0/docs/api/java/lang/String.html">String tmpName = BytesUtils.generateHexKey();
        1.5.0/docs/api/java/lang/String.html">String tmpDir = Globals.TMP_DIR + "/" + tmpName;
        new 1.5.0/docs/api/java/io/File.html">File(tmpDir).mkdirs();

        try
        {
            try
            {
                for (CourseUnit courseUnit : courseUnits)
                {
                    1.5.0/docs/api/java/lang/String.html">String courseDirPath = tmpDir + "/" + StringsUtils.normalizeResourceName(courseUnit.getCourse().getName()) + '.' + courseUnit.getCourse().getCode();
                    1.5.0/docs/api/java/lang/String.html">String courseImportYearPath = courseDirPath + "/" + courseUnit.getImportYear();
                    1.5.0/docs/api/java/lang/String.html">String semestre;
                    if (courseUnit.getSemestre().equals("S1"))
                    {
                        semestre = Globals.INTRANET_SEMESTRE_S1;
                    }
                    else if(courseUnit.getSemestre().equals("S2"))
                    {
                        semestre = Globals.INTRANET_SEMESTRE_S2;
                    }
                    else
                    {
                        semestre = Globals.INTRANET_SEMESTRE_A;
                    }
                    1.5.0/docs/api/java/lang/String.html">String normalizedName = StringsUtils.normalizeResourceName(courseUnit.getName());
                    1.5.0/docs/api/java/lang/String.html">String unitPath = courseImportYearPath + "/" + semestre + "/" + normalizedName;
                    copyProgram(courseUnit,unitPath,userSession);
                    new CreateCourseUnitXML().run(unitPath+"/desc.xml",courseUnit,userSession);
                    for (CourseUnitAssignement assignement : courseUnit.getAssignements())
                    {
                        1.5.0/docs/api/java/lang/String.html">String assignementDir = unitPath + "/assignement" + assignement.getId();
                        createAssignementCopy(assignement, assignementDir, userSession);
                        if (!assignement.getDeliverType().equals(Globals.COURSEUNIT_ASSIGNEMENT_TYPE_NO_FILE) && assignement.getDeliverables() != null && assignement.getDeliverables().size() > 0)
                        {
                            CourseUnitDeliverable deliverable = DaoFactory.getCourseUnitDeliverableDaoImpl().loadDeliverable(s.getId(), assignement.getId());
                            if(deliverable != null)
                                copyDeliverableVersions(deliverable, assignementDir, userSession);
                        }
                    }
                }
            }
            catch (1.5.0/docs/api/java/io/IOException.html">IOException e)
            {
                logger.error(e, e);
            }
            FilesUtils.zipFolder(tmpDir, tmpDir + ".zip");
            FilesUtils.delete(tmpDir);
            return tmpName + ".zip";
        }
        catch (1.5.0/docs/api/java/io/IOException.html">IOException e)
        {
            logger.error(e, e);
        }
        return null;
    }

    private 1.5.0/docs/api/java/lang/String.html">String createTeacherBackup(List<CourseUnit> courseUnits, Teacher t, UserSession userSession) throws ServiceException
    {
        1.5.0/docs/api/java/lang/String.html">String tmpName = BytesUtils.generateHexKey();
        1.5.0/docs/api/java/lang/String.html">String tmpDir = Globals.TMP_DIR + "/" + tmpName;
        new 1.5.0/docs/api/java/io/File.html">File(tmpDir).mkdirs();

        try
        {
            try
            {
                for (CourseUnit courseUnit : courseUnits)
                {
                    1.5.0/docs/api/java/lang/String.html">String courseDirPath = tmpDir + "/" + StringsUtils.normalizeResourceName(courseUnit.getCourse().getName()) + '.' + courseUnit.getCourse().getCode();
                    1.5.0/docs/api/java/lang/String.html">String courseImportYearPath = courseDirPath + "/" + courseUnit.getImportYear();
                    1.5.0/docs/api/java/lang/String.html">String semestre;
                    if (courseUnit.getSemestre().equals("S1"))
                    {
                        semestre = Globals.INTRANET_SEMESTRE_S1;
                    }
                    else if (courseUnit.getSemestre().equals("S2"))
                    {
                        semestre = Globals.INTRANET_SEMESTRE_S2;
                    }
                    else
                    {
                        semestre = Globals.INTRANET_SEMESTRE_A;
                    }
                    1.5.0/docs/api/java/lang/String.html">String normalizedName = StringsUtils.normalizeResourceName(courseUnit.getName());
                    1.5.0/docs/api/java/lang/String.html">String unitPath = courseImportYearPath + "/" + semestre + "/" + normalizedName;
                    copyProgram(courseUnit,unitPath,userSession);
                    new CreateCourseUnitXML().run(unitPath+"/desc.xml",courseUnit,userSession);
                    for (CourseUnitAssignement assignement : courseUnit.getAssignements())
                    {
                        1.5.0/docs/api/java/lang/String.html">String assignementDir = unitPath + "/assignement" + assignement.getId();
                        createAssignementCopy(assignement, assignementDir, userSession);
                        if (!assignement.getDeliverType().equals(Globals.COURSEUNIT_ASSIGNEMENT_TYPE_NO_FILE) && assignement.getDeliverables() != null && assignement.getDeliverables().size() > 0)
                        {
                            for (CourseUnitDeliverable deliverable : assignement.getDeliverables())
                            {
                                copyDeliverableVersions(deliverable, assignementDir, userSession);
                            }
                        }
                    }
                }
            }
            catch (1.5.0/docs/api/java/io/IOException.html">IOException e)
            {
                logger.error(e, e);
            }
            FilesUtils.zipFolder(tmpDir, tmpDir + ".zip");
            FilesUtils.delete(tmpDir);
            return tmpName + ".zip";
        }
        catch (1.5.0/docs/api/java/io/IOException.html">IOException e)
        {
            logger.error(e, e);
        }
        return null;
    }

    private 1.5.0/docs/api/java/lang/String.html">String createTeacherProgramsBackup(List<CourseUnit> courseUnits, Teacher t, UserSession userSession) throws ServiceException
    {
        1.5.0/docs/api/java/lang/String.html">String tmpName = BytesUtils.generateHexKey();
        1.5.0/docs/api/java/lang/String.html">String tmpDir = Globals.TMP_DIR + "/" + tmpName;
        new 1.5.0/docs/api/java/io/File.html">File(tmpDir).mkdirs();

        try
        {
            for (CourseUnit courseUnit : courseUnits)
            {
                1.5.0/docs/api/java/lang/String.html">String courseDirPath = tmpDir + "/" + StringsUtils.normalizeResourceName(courseUnit.getCourse().getName()) + '.' + courseUnit.getCourse().getCode();
                1.5.0/docs/api/java/lang/String.html">String courseImportYearPath = courseDirPath + "/" + courseUnit.getImportYear();
                1.5.0/docs/api/java/lang/String.html">String semestre;
                if (courseUnit.getSemestre().equals("S1"))
                {
                    semestre = Globals.INTRANET_SEMESTRE_S1;
                }
                else if (courseUnit.getSemestre().equals("S2"))
                {
                    semestre = Globals.INTRANET_SEMESTRE_S2;
                }
                else
                {
                    semestre = Globals.INTRANET_SEMESTRE_A;
                }
                1.5.0/docs/api/java/lang/String.html">String normalizedName = StringsUtils.normalizeResourceName(courseUnit.getName());
                1.5.0/docs/api/java/lang/String.html">String unitPath = courseImportYearPath + "/" + semestre + "/" + normalizedName;
                copyProgram(courseUnit,unitPath,userSession);
                new CreateCourseUnitXML().run(unitPath+"/desc.xml",courseUnit,userSession);
                /*for (CourseUnitAssignement assignement : courseUnit.getAssignements())
                {
                    String assignementDir = unitPath + "/assignement" + assignement.getId();
                    createAssignementCopy(assignement, assignementDir, userSession);
                    if (!assignement.getDeliverType().equals(Globals.COURSEUNIT_ASSIGNEMENT_TYPE_NO_FILE) && assignement.getDeliverables() != null && assignement.getDeliverables().size() > 0)
                    {
                        for (CourseUnitDeliverable deliverable : assignement.getDeliverables())
                        {
                            copyDeliverableVersions(deliverable, assignementDir, userSession);
                        }
                    }
                }*/

            }
            FilesUtils.zipFolder(tmpDir, tmpDir + ".zip");
            FilesUtils.delete(tmpDir);
            return tmpName + ".zip";
        }
        catch (1.5.0/docs/api/java/io/IOException.html">IOException e)
        {
            logger.error(e, e);
        }
        return null;
    }


    private void copyProgram(CourseUnit courseUnit, 1.5.0/docs/api/java/lang/String.html">String toDir, UserSession userSession)
    {
        if (courseUnit.getProgramStreamId() != null && courseUnit.getProgramStreamId().length() > 0)
        {
            1.5.0/docs/api/java/lang/String.html">String deliverDir = toDir + "/program.zip";
            new 1.5.0/docs/api/java/io/File.html">File(deliverDir).mkdirs();
            List<IRepositoryFile> iRepositoryFiles = repositoryService.loadVersions(courseUnit.getProgramStreamId(), userSession);
            for (IRepositoryFile iRepositoryFile : iRepositoryFiles)
            {
                try
                {
                    if(iRepositoryFile.getInput() != null)
                        FilesUtils.copy(iRepositoryFile.getInput(), toDir + "/program." + iRepositoryFile.getName());
                    else
                        logger.error("Repository File have no candidate file version, coming null inputStream:" + iRepositoryFile.getIdentifier());

                }
                catch (1.5.0/docs/api/java/io/IOException.html">IOException e)
                {
                    logger.error(e, e);
                }
            }
        }
    }

    private void copyDeliverableVersions(CourseUnitDeliverable deliverable, 1.5.0/docs/api/java/lang/String.html">String toDir, UserSession userSession)
    {
        if (deliverable.getDeliverableRepositoryStream() != null && deliverable.getDeliverableRepositoryStream().length() > 0)
        {
            BytesUtils.generateHexKey();
            1.5.0/docs/api/java/lang/String.html">String studentId;
                        1.5.0/docs/api/java/lang/String.html">String sigesCode;
                        if(deliverable.getStudent() != null)
                        {
                                studentId = "" + deliverable.getStudent().getId();
                                sigesCode = "" + deliverable.getStudent().getSigesCode();
                        }
                        else if(deliverable.getStudentId() > 0)
                        {
                                studentId = "" + deliverable.getStudentId();
                sigesCode = "desconhecido" + BytesUtils.generateHexKey();
            }
            else
            {
                sigesCode = "desconhecido" + BytesUtils.generateHexKey();
                studentId = "desconhecido" + BytesUtils.generateHexKey();
            }
            1.5.0/docs/api/java/lang/String.html">String deliverDir = toDir + "/deliverable" + deliverable.getId() + "-" + studentId + "-numero" + sigesCode;
            new 1.5.0/docs/api/java/io/File.html">File(deliverDir).mkdirs();
            List<IRepositoryFile> iRepositoryFiles = repositoryService.loadVersions(deliverable.getDeliverableRepositoryStream(), userSession);
            for (IRepositoryFile iRepositoryFile : iRepositoryFiles)
            {
                try
                {
                    if(iRepositoryFile.getInput() != null)
                        FilesUtils.copy(iRepositoryFile.getInput(), deliverDir + "/version" + getResourceFileName(iRepositoryFile.getName()));
                    else
                        logger.error("Repository File have no candidate file version, coming null inputStream:" + iRepositoryFile.getIdentifier());
                }
                catch (1.5.0/docs/api/java/io/IOException.html">IOException e)
                {
                    logger.error(e, e);
                }
            }
        }
    }

    public 1.5.0/docs/api/java/lang/String.html">String getResourceFileName(1.5.0/docs/api/java/lang/String.html">String resourceName)
    {
        1.5.0/docs/api/java/lang/String.html">String extension = FilesUtils.getExtension(resourceName);
        if (extension != null)
        {
            resourceName = resourceName.substring(0, resourceName.length() - extension.length());
        }
        if (extension == null)
            extension = ".unknown";
        return resourceName + extension;
    }

    private void createAssignementCopy(CourseUnitAssignement assignement, 1.5.0/docs/api/java/lang/String.html">String assignementDir, UserSession userSession) throws 1.5.0/docs/api/java/io/IOException.html">IOException
    {
        1.5.0/docs/api/java/lang/String.html">String fileContent = buildAssignementTemplate(assignement);
        new 1.5.0/docs/api/java/io/File.html">File(assignementDir).mkdirs();
        1.5.0/docs/api/java/io/FileWriter.html">FileWriter assignementDesc = new 1.5.0/docs/api/java/io/FileWriter.html">FileWriter(assignementDir + "/description.txt");
        assignementDesc.write(fileContent);
        assignementDesc.close();
        if (assignement.getRepositoryStream() != null && assignement.getRepositoryStream().length() > 0)
        {
            IRepositoryFile iRepositoryFile = repositoryService.load(assignement.getRepositoryStream(), userSession);

            if(iRepositoryFile.getInput() != null)
                FilesUtils.copy(iRepositoryFile.getInput(), assignementDir + "/" + getResourceFileName(iRepositoryFile.getName()));
            else
                logger.error("Repository File have no candidate file version, coming null inputStream:" + iRepositoryFile.getIdentifier());

        }
    }

    public 1.5.0/docs/api/java/lang/String.html">String buildAssignementTemplate(CourseUnitAssignement assignement)
    {
        1.5.0/docs/api/java/lang/String.html">String[] args = new 1.5.0/docs/api/java/lang/String.html">String[]
                {
                        assignement.getCourseUnit().getName(),
                        assignement.getTitle(),
                        pt.estgp.estgweb.web.utils.DatesUtils.getStringFromDate(assignement.getDeliverDate()),
                        assignement.getDescription()
                };
        1.5.0/docs/api/java/lang/String.html">String content = TemplateUtils.getOrLoadTemplate(Globals.TEMPLATE_ASSIGNEMENT_PATH + "/Assignement.txt");
        // Format the mail message
        return 1.5.0/docs/api/java/text/MessageFormat.html">MessageFormat.format(content, args);
    }


    public static void main(1.5.0/docs/api/java/lang/String.html">String[] args) throws ServiceException
    {
        AbstractDao.getCurrentSession().beginTransaction();
        new CreateCourseUnitWorksBackupService().createSystemActualYearBackup(null, null);
        AbstractDao.getCurrentSession().getTransaction().commit();
    }


}