package com.megatim.fdxconsultation.core.ifaces.abtracts; import com.megatim.fdxcommons.model.enumeration.TypeOperation; import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView; import com.megatim.fdxcommons.model.pojo.OrderByDefinition; import com.megatim.fdxconsultation.dao.ifaces.abstracts.CustomDAOWithCriteriaEntityIfaces; import com.megatim.fdxconsultation.model.administration.User; import com.megatim.fdxconsultation.model.base.BaseEntity; import java.util.Date; import java.util.List; /** * * @author ASUS * @param : Entite reelle * @param : Classe de l'identifiant * @param : entité qui représente un utilisateur */ public interface ManagerWithCriteriaEntityIFaces { > R getDao(); default T save(T entity) { return getDao().save(entity); } default T add(T entity, User connectedUser) { beforeAdd(entity, connectedUser); if (entity instanceof BaseEntity) { BaseEntity baseEntity = (BaseEntity) entity; baseEntity.setDateCreation(new Date()); baseEntity.setTypeOperation(TypeOperation.AJOUTER); baseEntity.setUtilisateurCreation(connectedUser != null ? connectedUser.getUserName() : null); } logAfterSave(entity, connectedUser); return getDao().save(entity); } default void delete(ID id, User connectedUser) { T entity = getDao().getById(id); beforeDelete(entity, connectedUser); if (entity instanceof BaseEntity) { BaseEntity baseEntity = (BaseEntity) entity; baseEntity.setDateSuppression(new Date()); baseEntity.setUtilisateurSuppression(connectedUser != null ? connectedUser.getUserName() : null); baseEntity.setTypeOperation(TypeOperation.SUPPRIMER); getDao().save(entity); } else { getDao().delete(entity); } logAfterDelete(entity, connectedUser); } default void delete(User connectedUser, T entity) { beforeDelete(entity, connectedUser); if (entity instanceof BaseEntity) { BaseEntity baseEntity = (BaseEntity) entity; baseEntity.setDateSuppression(new Date()); baseEntity.setUtilisateurSuppression(connectedUser != null ? connectedUser.getUserName() : null); baseEntity.setTypeOperation(TypeOperation.SUPPRIMER); getDao().delete(entity); } else { getDao().delete(entity); } logAfterDelete(entity, connectedUser); } public default T getById(ID id) { return getDao().getById(id); } default T update(ID id, T entity, User connectedUser) { T refreshEntity = getDao().getById(id); beforeUpdate(refreshEntity, entity, connectedUser); if (entity instanceof BaseEntity) { BaseEntity baseEntity = (BaseEntity) refreshEntity; baseEntity.setDateDerniereModification(new Date()); baseEntity.setUtilisateurModification(connectedUser != null ? connectedUser.getUserName() : null); } logAfterUpdate(entity, connectedUser); return getDao().save(refreshEntity); } public default List findWithPagination(CriteriaEntityFromView criterion, List fetchEagerFields, List orderByFields, Integer pageNumber, Integer pageSize) throws Exception { return getDao().findWithPagination(criterion, fetchEagerFields, orderByFields, pageNumber, pageSize); } public default List findAll(CriteriaEntityFromView criterion, List fetchEagerFields, List orderByFields) throws Exception { return (List) getDao().findAll(criterion, fetchEagerFields, orderByFields); } public default Long count(CriteriaEntityFromView criterion) throws Exception { return getDao().count(criterion); } default void beforeAdd(T entity, User connectedUser) { } default void beforeDelete(T entity, User connectedUser) { } default void beforeUpdate(T refreshEntity, T entity, User connectedUser) { } public default void logAfterSave(T entity, User connectedUser){} public default void logAfterUpdate(T entity, User connectedUser){} public default void logAfterDelete(T entity, User connectedUser){} }