package fr.openwide.core.jpa.business.generic.listener; import java.io.Serializable; import java.util.HashSet; import java.util.Set; import fr.openwide.core.jpa.business.generic.model.GenericEntity; import fr.openwide.core.jpa.exception.SecurityServiceException; import fr.openwide.core.jpa.exception.ServiceException; public class GenericEntityNotifier<K extends Serializable & Comparable<K>, E extends GenericEntity<K, E>, L extends GenericEntityListener<K, E>> { protected Set<L> listeners = new HashSet<L>(); public void subscribe(L listener) { this.listeners.add(listener); } public void unsubscribe(L listener) { if (this.listeners.contains(listener)) { this.listeners.remove(listener); } } public void onCreate(E entity) throws ServiceException, SecurityServiceException { for (L listener : listeners) { listener.onCreate(entity); } } public void onUpdate(E entity) throws ServiceException, SecurityServiceException { for (L listener : listeners) { listener.onUpdate(entity); } } public void onDelete(E entity) throws ServiceException, SecurityServiceException { for (L listener : listeners) { listener.onDelete(entity); } } }