VipFacade.java
2.87 KB
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
package fi.codecrew.moya.facade;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute;
import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.facade.callbacks.StringSearchPredicateCreator;
import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.Vip;
import fi.codecrew.moya.model.Vip_;
import fi.codecrew.moya.utilities.SearchQuery;
import fi.codecrew.moya.utilities.SearchResult;
import fi.codecrew.moya.utilities.jpa.FacadeCallback;
@Stateless
@LocalBean
public class VipFacade extends IntegerPkGenericFacade<Vip> {
private static List<SingularAttribute<Vip, String>> SEARCHATTRS;
public static List<SingularAttribute<Vip, String>> getAttrlist() {
if (SEARCHATTRS == null) {
ArrayList<SingularAttribute<Vip, String>> buildAttrs = new ArrayList<>();
buildAttrs.add(Vip_.description);
buildAttrs.add(Vip_.shortdescr);
SEARCHATTRS = Collections.unmodifiableList(buildAttrs);
}
return SEARCHATTRS;
}
public VipFacade() {
super(Vip.class);
}
@EJB
private EventBeanLocal eventBean;
public List<Vip> findForEvent() {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Vip> cq = cb.createQuery(Vip.class);
Root<Vip> root = cq.from(Vip.class);
LanEvent event = eventBean.getCurrentEvent();
cq.where(cb.equal(root.get(Vip_.event), event));
return getEm().createQuery(cq).getResultList();
}
public SearchResult<Vip> search(SearchQuery search) {
List<FacadeCallback<Vip>> callbacks = new ArrayList<>();
// Ascending if null or not descending..
// boolean asc = search.getSortDirection() == null ||
// !QuerySortOrder.DESCENDING.equals(search.getSortDirection());
// SingularAttribute<? super User, ?> sortfield =
// getUserField(search.getSort());
// callbacks.add(new OrderCallback<Vip>(asc, sortfield));
if (search.getSearch() != null && !search.getSearch().isEmpty())
callbacks.add(new StringSearchPredicateCreator<Vip>(search.getSearch(), getAttrlist()));
LanEvent event = eventBean.getCurrentEvent();
callbacks.add(new VipEventLimiter(event));
return super.searcher(search, callbacks);
// return this.search(page, pagesize, query, NAMEFIELDS, sort);
}
private static class VipEventLimiter implements FacadeCallback<Vip> {
private LanEvent ev;
public VipEventLimiter(LanEvent event) {
this.ev = event;
}
@Override
public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Path<Vip> root, List<Predicate> predicates, boolean isFullQuery) {
predicates.add(cb.equal(root.get(Vip_.event), ev));
}
}
}