package fr.openwide.core.jpa.more.business.task.service; import java.util.Date; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import com.google.common.collect.Lists; import fr.openwide.core.jpa.business.generic.service.GenericEntityServiceImpl; import fr.openwide.core.jpa.exception.SecurityServiceException; import fr.openwide.core.jpa.exception.ServiceException; import fr.openwide.core.jpa.more.business.task.dao.IQueuedTaskHolderDao; import fr.openwide.core.jpa.more.business.task.model.QueuedTaskHolder; import fr.openwide.core.jpa.more.business.task.util.TaskStatus; public class QueuedTaskHolderServiceImpl extends GenericEntityServiceImpl<Long, QueuedTaskHolder> implements IQueuedTaskHolderService { private IQueuedTaskHolderDao queuedTaskHolderDao; @Autowired public QueuedTaskHolderServiceImpl(IQueuedTaskHolderDao queuedTaskHolderDao) { super(queuedTaskHolderDao); this.queuedTaskHolderDao = queuedTaskHolderDao; } @Override protected void createEntity(QueuedTaskHolder queuedTaskHolder) throws ServiceException, SecurityServiceException { queuedTaskHolder.setCreationDate(new Date()); super.createEntity(queuedTaskHolder); } @Override public Long count(Date since, TaskStatus... statuses) { return queuedTaskHolderDao.count(since, statuses); } @Override public Long count(TaskStatus... statuses) { return queuedTaskHolderDao.count(statuses); } @Override public QueuedTaskHolder getNextTaskForExecution(String taskType) { return queuedTaskHolderDao.getNextTaskForExecution(taskType); } @Override public QueuedTaskHolder getRandomStalledTask(String taskType, int executionTimeLimitInSeconds) { return queuedTaskHolderDao.getStalledTask(taskType, executionTimeLimitInSeconds); } @Override public List<Long> initializeTasksAndListConsumable(String queueId) throws ServiceException, SecurityServiceException { List<QueuedTaskHolder> queuedTaskHolderList = queuedTaskHolderDao.listConsumable(queueId); List<Long> taskIds = Lists.newArrayListWithExpectedSize(queuedTaskHolderList.size()); for (QueuedTaskHolder queuedTaskHolder : queuedTaskHolderList) { queuedTaskHolder.setStatus(TaskStatus.TO_RUN); queuedTaskHolder.resetExecutionInformation(); update(queuedTaskHolder); taskIds.add(queuedTaskHolder.getId()); } return taskIds; } @Override public List<String> listTypes() { return queuedTaskHolderDao.listTypes(); } @Override public boolean isReloadable(QueuedTaskHolder task) { return TaskStatus.RELOADABLE_TASK_STATUS.contains(task.getStatus()); } @Override public boolean isCancellable(QueuedTaskHolder task) { return TaskStatus.CANCELLABLE_TASK_STATUS.contains(task.getStatus()); } }