Kenmegne
7 days ago 23a46b4be35277e06ec89f48730eeb694e686be8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
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() + "%");
        }
 
    }
 
}