package fr.openwide.core.jpa.more.business.execution.service; import java.util.Date; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.springframework.beans.factory.annotation.Autowired; 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.execution.dao.IAbstractExecutionDao; import fr.openwide.core.jpa.more.business.execution.model.AbstractExecution; import fr.openwide.core.jpa.more.business.execution.model.ExecutionStatus; import fr.openwide.core.jpa.more.business.execution.model.IExecutionType; public abstract class AbstractExecutionServiceImpl<E extends AbstractExecution<E, ET>, ET extends IExecutionType> extends GenericEntityServiceImpl<Long, E> implements IAbstractExecutionService<E, ET> { @PersistenceContext private EntityManager entityManager; @Autowired private IAbstractExecutionDao<E> abstractExecutionDao; @Autowired public AbstractExecutionServiceImpl(IAbstractExecutionDao<E> abstractExecutionDao) { super(abstractExecutionDao); this.abstractExecutionDao = abstractExecutionDao; } @Override public E start(E execution, ET type) throws ServiceException, SecurityServiceException { execution.setExecutionStatus(ExecutionStatus.RUNNING); execution.setExecutionType(type); execution.setStartDate(new Date()); create(execution); return execution; } @Override public void close(E execution, ExecutionStatus executionStatus) throws ServiceException, SecurityServiceException { execution = entityManager.merge(execution); execution.setEndDate(new Date()); execution.setExecutionStatus(executionStatus); update(execution); } @Override public List<E> listOrdered(Integer limit, Integer offset) { return abstractExecutionDao.listOrderedByDateTypeStatus(null, null, null, null, limit, offset); } @Override public List<E> listOrderedByDateTypeStatus(Date dateStart, Date dateEnd, IExecutionType executionType, ExecutionStatus executionStatus, Integer limit, Integer offset) { return abstractExecutionDao.listOrderedByDateTypeStatus(dateStart, dateEnd, executionType, executionStatus, limit, offset); } }