package com.salesmanager.core.business.services.common.generic; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import com.salesmanager.core.business.exception.ServiceException; import com.salesmanager.core.model.generic.SalesManagerEntity; /** * @param <T> entity type */ public abstract class SalesManagerEntityServiceImpl<K extends Serializable & Comparable<K>, E extends SalesManagerEntity<K, ?>> implements SalesManagerEntityService<K, E> { /** * Classe de l'entité, déterminé à partir des paramètres generics. */ private Class<E> objectClass; private JpaRepository<E, K> repository; @SuppressWarnings("unchecked") public SalesManagerEntityServiceImpl(JpaRepository<E, K> repository) { ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass(); this.objectClass = (Class<E>) genericSuperclass.getActualTypeArguments()[1]; this.repository = repository; } protected final Class<E> getObjectClass() { return objectClass; } public E getById(K id) { return repository.findOne(id); } public void save(E entity) throws ServiceException { repository.saveAndFlush(entity); } public void create(E entity) throws ServiceException { save(entity); } public void update(E entity) throws ServiceException { save(entity); } public void delete(E entity) throws ServiceException { repository.delete(entity); } public void flush() { repository.flush(); } public List<E> list() { return repository.findAll(); } public Long count() { return repository.count(); } }