package br.gov.mj.sislegis.app.service.ejbs; import java.util.Collection; import java.util.Iterator; import java.util.List; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.TypedQuery; import br.gov.mj.sislegis.app.model.Notificacao; import br.gov.mj.sislegis.app.model.Usuario; import br.gov.mj.sislegis.app.service.AbstractPersistence; import br.gov.mj.sislegis.app.service.NotificacaoService; @Stateless public class NotificacaoServiceEjb extends AbstractPersistence<Notificacao, Long> implements NotificacaoService { @PersistenceContext private EntityManager em; public NotificacaoServiceEjb() { super(Notificacao.class); } @Override protected EntityManager getEntityManager() { return em; } @Override public List<Notificacao> listaNotificacoesParaUsuario(Usuario usuario) { return listaNotificacoesParaUsuario(usuario.getId()); } @Override public List<Notificacao> listaNotificacoesParaUsuario(Long idUsuario) { return listaNotificacoesParaUsuario(idUsuario, null); } @Override public List<Notificacao> listaNotificacoesParaUsuario(Usuario usuario, String categoria) { return listaNotificacoesParaUsuario(usuario.getId(), categoria); } @Override public List<Notificacao> listaNotificacoesParaUsuario(Long idUsuario, String categoria) { TypedQuery<Notificacao> findByIdQuery = null; if (categoria == null) { findByIdQuery = em.createNamedQuery("getAllNotificacaoByUsuario", Notificacao.class); } else { findByIdQuery = em.createNamedQuery("getCategoriaNotificacaoByUsuario", Notificacao.class); findByIdQuery.setParameter("categoria", categoria); } findByIdQuery.setParameter("idUsuario", idUsuario); return findByIdQuery.getResultList(); } @Override public void marcarComoVisualizada(Collection<Long> ids) { for (Iterator<Long> iterator = ids.iterator(); iterator.hasNext();) { Long id = (Long) iterator.next(); Notificacao notificacao = findById(id); notificacao.setVisualizada(); save(notificacao); } } @Override public Notificacao buscarPorCategoriaEntidade(String categoria, String entidadeId) { List<Notificacao> l = (em.createNamedQuery("getByCategoriaEntidade", Notificacao.class) .setParameter("categoria", categoria).setParameter("identificacaoEntidade", entidadeId).getResultList()); if (l.isEmpty()) { return null; } else { return l.get(0); } } }