package scrum.server.project;
import ilarkesto.base.time.Date;
import ilarkesto.base.time.DateAndTime;
import ilarkesto.concurrent.ACollectionTask;
import ilarkesto.core.logging.Log;
import ilarkesto.persistence.TransactionService;
import java.util.Collection;
public class DeleteOldProjectsTask extends ACollectionTask<Project> {
private static Log log = Log.get(DeleteOldProjectsTask.class);
// --- dependencies ---
private TransactionService transactionService;
private ProjectDao projectDao;
public void setProjectDao(ProjectDao projectDao) {
this.projectDao = projectDao;
}
public void setTransactionService(TransactionService transactionService) {
this.transactionService = transactionService;
}
// --- ---
@Override
protected Collection<Project> prepare() throws InterruptedException {
return projectDao.getEntities();
}
@Override
protected void perform(Project project) throws InterruptedException {
DateAndTime opened = project.getLastOpenedDateAndTime();
int timeToLiveInDays = project.containsParticipantWithVerifiedEmail() ? 14 : 3;
Date deadline = Date.beforeDays(timeToLiveInDays);
if (opened == null || opened.getDate().isAfter(deadline)) return;
log.info("Deleting old project:", project);
projectDao.deleteEntity(project);
}
@Override
protected void cleanup() throws InterruptedException {
transactionService.commit();
super.cleanup();
}
}