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
{
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 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;
}
/**
* 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
(userSession
);
else if (userSession.
getUser() instanceof Student
)
return createLoginStudentActualYearBackup
(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 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 createLoginStudentActualYearBackup
(UserSession userSession
) throws ServiceException
{
Student s =
(Student
) userSession.
getUser();
return createStudentActualYearBackup
(s, userSession
);
}
public 1.5.0/docs/api/java/lang/String.html">String createLoginTeacherActualYearBackup
(UserSession userSession
) throws ServiceException
{
Teacher t =
(Teacher
) userSession.
getUser();
return createTeacherActualYearBackup
(t, userSession
);
}
public 1.5.0/docs/api/java/lang/String.html">String createStudentActualYearBackup
(long studentId, UserSession userSession
) throws ServiceException
{
Student s = DaoFactory.
getStudentDaoImpl().
get(studentId
);
return createStudentActualYearBackup
(s, userSession
);
}
public 1.5.0/docs/api/java/lang/String.html">String createTeacherActualYearBackup
(long teacherId, UserSession userSession
) throws ServiceException
{
Teacher t = DaoFactory.
getTeacherDaoImpl().
get(teacherId
);
return createTeacherActualYearBackup
(t, 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
);
}
private 1.5.0/docs/api/java/lang/String.html">String createStudentActualYearBackup
(Student s, UserSession userSession
) throws ServiceException
{
List
<CourseUnit
> units = DaoFactory.
getCourseUnitDaoImpl().
loadSubscribedImportYearUnits(s.
getId(), DatesUtils.
getImportYear());
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, UserSession userSession
) throws ServiceException
{
5+0%2Fdocs%2Fapi+List">List units = DaoFactory.
getCourseUnitDaoImpl().
loadTeachedImportYearUnits(t.
getId(), DatesUtils.
getImportYear());
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 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
{
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 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());
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
{
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 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 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
)
{
1.5.0/docs/api/java/lang/String.html">String deliverDir = toDir +
"/deliverable" + deliverable.
getId() +
"-" + deliverable.
getStudent().
getId() +
"numero" + deliverable.
getStudent().
getSigesCode();
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
{
FilesUtils.
copy(iRepositoryFile.
getInput(), deliverDir +
"/version" + getResourceFileName
(iRepositoryFile.
getName()));
}
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
);
FilesUtils.
copy(iRepositoryFile.
getInput(), assignementDir +
"/" + getResourceFileName
(iRepositoryFile.
getName()));
}
}
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();
}
}