package com.megatim.fdxconsultation.dao.searchs; import com.megatim.fdxcommons.model.referentiel.TypeFichier; import com.megatim.fdxconsultation.dao.ifaces.searchs.UserTypeFichierDAO; import com.megatim.fdxconsultation.model.searchentities.TypeFichierSearch; import java.util.List; import javax.enterprise.context.Dependent; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; /** * * @author Gabuntu */ @Dependent public class UserTypeFichierDAOIml implements UserTypeFichierDAO { @PersistenceContext(unitName = "fdxConsultationPersistenceUnit") protected EntityManager em; @Override public List findUserTypeFichiersWithPagination(String userName, TypeFichierSearch typeFichierSearch, int pageNumber, int pageSize) { StringBuilder queryString = new StringBuilder("SELECT t from TypeFichier t ") .append(" WHERE ((SELECT COALESCE(COUNT(u), 0) FROM User u JOIN u.typeFichiers tf WHERE u.userName = :username AND tf = t) > 0)"); extendsQuery(queryString, typeFichierSearch); Query query = em.createQuery(queryString.toString()) .setParameter("username", userName); extendsParameter(query, typeFichierSearch); query.setFirstResult((pageNumber - 1) * pageSize).setMaxResults(pageSize); return (List) query.getResultList(); } @Override public List findUserTypeFichiers(String userName) { return (List) em.createQuery("SELECT t from TypeFichier t " + " WHERE ((SELECT COALESCE(COUNT(u), 0) FROM User u JOIN u.typeFichiers tf WHERE u.userName = :username AND tf = t) > 0)") .setParameter("username", userName) .getResultList(); } @Override public Long countUserTypeFichiers(String userName, TypeFichierSearch typeFichierSearch) { StringBuilder queryString = new StringBuilder("SELECT COALESCE(COUNT(t), 0) from TypeFichier t ") .append(" WHERE ((SELECT COALESCE(COUNT(u), 0) FROM User u JOIN u.typeFichiers tf WHERE u.userName = :username AND tf = t) > 0)"); extendsQuery(queryString, typeFichierSearch); Query query = em.createQuery(queryString.toString()) .setParameter("username", userName); extendsParameter(query, typeFichierSearch); return (long) query.getResultList().size(); } @Override public List findUserTypeFichiersInReferentielWithPagination(String userName, String referentiel, TypeFichierSearch typeFichierSearch, int pageNumber, int pageSize) { StringBuilder queryString = new StringBuilder("SELECT t from TypeFichier t ") .append(" WHERE t.referentiel.version <= :referentiel AND ((SELECT COALESCE(COUNT(u), 0) FROM User u JOIN u.typeFichiers tf WHERE u.userName = :username AND tf = t) > 0)"); extendsQuery(queryString, typeFichierSearch); Query query = em.createQuery(queryString.toString()) .setParameter("username", userName) .setParameter("referentiel", referentiel); extendsParameter(query, typeFichierSearch); query.setFirstResult((pageNumber - 1) * pageSize).setMaxResults(pageSize); return (List) query.getResultList(); } @Override public Long countUserTypeFichiersInReferentiel(String userName, String referentiel, TypeFichierSearch typeFichierSearch) { StringBuilder queryString = new StringBuilder("SELECT COALESCE(COUNT(t), 0) from TypeFichier t ") .append(" WHERE t.referentiel.version <= :referentiel AND ((SELECT COALESCE(COUNT(u), 0) FROM User u JOIN u.typeFichiers tf WHERE u.userName = :username AND tf = t) > 0)"); extendsQuery(queryString, typeFichierSearch); Query query = em.createQuery(queryString.toString()) .setParameter("username", userName) .setParameter("referentiel", referentiel); extendsParameter(query, typeFichierSearch); return (long) query.getSingleResult(); } private void extendsQuery(StringBuilder queryString, TypeFichierSearch typeFichierSearch) { if (typeFichierSearch.getCode() != null) { queryString.append(" AND t.code LIKE :code"); } if (typeFichierSearch.getLibelle() != null) { queryString.append(" AND t.libelle LIKE :libelle"); } if (typeFichierSearch.getDescription() != null) { queryString.append(" AND t.description LIKE :description"); } } private void extendsParameter(Query query, TypeFichierSearch typeFichierSearch) { if (typeFichierSearch.getCode() != null) { //System.out.println("typeFichierSearch.getCode() " + "%" + typeFichierSearch.getCode() + "%"); query.setParameter("code", "%" + typeFichierSearch.getCode() + "%"); } if (typeFichierSearch.getLibelle() != null) { //System.out.println("typeFichierSearch.getLibelle() " + "%" + typeFichierSearch.getLibelle() + "%"); query.setParameter("libelle", "%" + typeFichierSearch.getLibelle() + "%"); } if (typeFichierSearch.getDescription() != null) { //System.out.println("typeFichierSearch.getDescription() " + "%" + typeFichierSearch.getDescription() + "%"); query.setParameter("description", "%" + typeFichierSearch.getDescription() + "%"); } } }