Subversion Repositories bacoAlunos

Rev

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.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
 *
 *
 * Created at 17/Out/2003 , 23:45:24
 *
 */

public class CreateCourseUnitWorksBackupService implements IService
{

    private RepositoryService repositoryService = new RepositoryService();

    public static 1.5.0/docs/api/java/lang/String.html">String ASSIGNEMENT_TEMPLATES_PATH = "/template/assignement";

    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 run(1.5.0/docs/api/java/lang/String.html">String importYear , UserSession userSession) throws ServiceException
    {
        if(importYear == null || importYear.trim().length() == 0)
            importYear = DatesUtils.getImportYear();
        1.5.0/docs/api/java/lang/String.html">String importYearIntranet = DatesUtils.getImportYearIntranet();
        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)
            {
                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 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(),importYear);
                    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
                        {
                            semestre = Globals.INTRANET_SEMESTRE_S2;
                        }
                        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;

                        for(CourseUnitAssignement assignement : courseUnit.getAssignements())
                        {
                            1.5.0/docs/api/java/lang/String.html">String fileContent = buildAssignementTemplate(assignement);
                            1.5.0/docs/api/java/lang/String.html">String assignementDir = unitPath + "/assignement" + assignement.getId();
                            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);
                                FilesUtils.copy(iRepositoryFile.getInput(),assignementDir + "/" + StringsUtils.normalizeResourceName(iRepositoryFile.getName()));
                            }
                            if(!assignement.getDeliverType().equals(Globals.COURSEUNIT_ASSIGNEMENT_TYPE_NO_FILE) && assignement.getDeliverables() != null && assignement.getDeliverables().size() > 0)
                            {
                                for(CourseUnitDeliverable deliverable: assignement.getDeliverables())
                                {
                                    1.5.0/docs/api/java/lang/String.html">String deliverDir = assignementDir + "/deliverable" + deliverable.getId() + "-" + deliverable.getStudent().getId() + "numero" + deliverable.getStudent().getSigesCode();
                                    new 1.5.0/docs/api/java/io/File.html">File(deliverDir).mkdirs();

                                    if(deliverable.getDeliverableRepositoryStream() != null && deliverable.getDeliverableRepositoryStream().length() > 0)
                                    {
                                        IRepositoryFile iRepositoryFile = repositoryService.load(deliverable.getDeliverableRepositoryStream(),userSession);
                                        FilesUtils.copy(iRepositoryFile.getInput(),deliverDir + "/" + StringsUtils.normalizeResourceName(iRepositoryFile.getName()));
                                    }
                                }
                            }
                        }
                    }
                }
                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;
    }

    public 1.5.0/docs/api/java/lang/String.html">String buildAssignementTemplate(CourseUnitAssignement assignement)
    {
        1.5.0/docs/api/java/lang/String.html">String assignementDir = StringsUtils.normalizeResourceName(assignement.getTitle()) +  assignement.getId();
        new 1.5.0/docs/api/java/io/File.html">File(assignementDir).mkdirs();
        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(ASSIGNEMENT_TEMPLATES_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().run(null,null);
        AbstractDao.getCurrentSession().getTransaction().commit();
    }


}