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<TypeFichier> 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<TypeFichier>) query.getResultList();
|
}
|
|
@Override
|
public List<TypeFichier> findUserTypeFichiers(String userName) {
|
return (List<TypeFichier>) 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<TypeFichier> 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<TypeFichier>) 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() + "%");
|
}
|
|
}
|
|
}
|