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
package com.megatim.fdxconsultation.dao.searchs;
 
import com.megatim.fdxcommons.model.referentiel.TypeFichier;
import com.megatim.fdxconsultation.dao.ifaces.searchs.TypeFichierReferentielSearchDAO;
import com.megatim.fdxconsultation.model.searchentities.TypeFichierReferentielSearch;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
 
/**
 *
 * @author ASUS
 */
@Stateless
public class TypeFichierReferentielSearchDAOImpl implements TypeFichierReferentielSearchDAO {
 
    @PersistenceContext(unitName = "fdxConsultationPersistenceUnit")
    protected EntityManager em;
 
    @Override
    public List<TypeFichier> all(int pageNumber, int pagesize, TypeFichierReferentielSearch searchEntity) {
 
        String queryString = "SELECT t FROM TypeFichier t  " + whereQueryString(searchEntity);
 
        Query query = queryWithParameter(em.createQuery(queryString), searchEntity)
                .setFirstResult((pageNumber - 1) * pagesize)
                .setMaxResults(pagesize);
 
        return query.getResultList();
    }
 
    @Override
    public Long count(TypeFichierReferentielSearch searchEntity) {
        String queryString = "SELECT COUNT(t) FROM TypeFichier t  " + whereQueryString(searchEntity);
        Query query = queryWithParameter(em.createQuery(queryString), searchEntity);
 
        return (Long) query.getSingleResult();
    }
 
    @Override
    public List<TypeFichier> all(String userName, int pageNumber, int pagesize, TypeFichierReferentielSearch searchEntity) {
 
        String queryString = "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) AND " + queryString(searchEntity);
 
        Query query = queryWithParameter(em.createQuery(queryString), searchEntity)
                .setFirstResult((pageNumber - 1) * pagesize)
                .setMaxResults(pagesize)
                .setParameter("username", userName);
 
        return query.getResultList();
 
    }
 
    @Override
    public Long count(String userName, TypeFichierReferentielSearch searchEntity) {
        String queryString
                = "SELECT COALESCE(COUNT(t), 0) FROM TypeFichier t  WHERE ((SELECT COALESCE(COUNT(u), 0) FROM User u JOIN u.typeFichiers tf WHERE u.userName = :username AND tf = t) > 0) AND " + queryString(searchEntity);
        Query query = queryWithParameter(em.createQuery(queryString), searchEntity).setParameter("username", userName);
 
        return (Long) query.getSingleResult();
    }
 
    private Query queryWithParameter(Query query, TypeFichierReferentielSearch searchEntity) {
 
        if (searchEntity.getCode() != null) {
            query.setParameter("code", likeValue(searchEntity.getCode()));
        }
 
        if (searchEntity.getLibelle() != null) {
            query.setParameter("libelle", likeValue(searchEntity.getLibelle()));
        }
 
        if (searchEntity.getDescription() != null) {
            query.setParameter("description", likeValue(searchEntity.getDescription()));
        }
 
        if (searchEntity.getReferentiel() != null) {
            query.setParameter("version", searchEntity.getReferentiel());
        }
 
        return query;
    }
 
    private String whereQueryString(TypeFichierReferentielSearch searchEntity) {
        return " WHERE " + queryString(searchEntity);
    }
 
    private String queryString(TypeFichierReferentielSearch searchEntity) {
 
        StringBuilder query = new StringBuilder("");
        boolean withAnd = false;
 
        if (searchEntity.getCode() != null) {
            query.append("t.code LIKE :code");
            withAnd = true;
        }
 
        if (searchEntity.getLibelle() != null) {
            if (withAnd) {
                query.append(" AND ");
            }
            query.append(" t.libelle LIKE :libelle");
            withAnd = true;
        }
 
        if (searchEntity.getDescription() != null) {
            if (withAnd) {
                query.append(" AND ");
            }
            query.append(" t.description LIKE :description");
            withAnd = true;
        }
 
        if (searchEntity.getReferentiel() != null) {
            if (withAnd) {
                query.append(" AND ");
            }
            query.append(" t.referentiel.version <= :version");
        }
 
        return query.toString();
    }
 
    private String likeValue(String value) {
        return "%" + value + "%";
    }
 
}