SitePageFacade.java
3.84 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
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
package fi.insomnia.bortal.facade;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.ListJoin;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.PageContent;
import fi.insomnia.bortal.model.PageContent_;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.Role_;
import fi.insomnia.bortal.model.SitePage;
import fi.insomnia.bortal.model.SitePage_;
@Stateless
public class SitePageFacade extends IntegerPkGenericFacade<SitePage> {
@EJB
private EventBeanLocal eventbean;
public SitePageFacade() {
super(SitePage.class);
}
// public SitePage find(String siteName) {
// CriteriaBuilder cb = getEm().getCriteriaBuilder();
// CriteriaQuery<SitePage> cq = cb.createQuery(SitePage.class);
// Root<SitePage> root = cq.from(SitePage.class);
//
// cq.where(cb.equal(root.get(SitePage_.name), siteName),
// cb.equal(root.get(SitePage_.event), eventbean.getCurrentEvent())
//
// );
// return getSingleNullableResult(getEm().createQuery(cq));
// }
public List<SitePage> findForUser(EventUser user, SitePage siteroot) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<SitePage> cq = cb.createQuery(SitePage.class);
Root<SitePage> root = cq.from(SitePage.class);
ListJoin<Role, EventUser> usrpath = root.join(SitePage_.allowedRoles).join(Role_.users);
Path<SitePage> parentpath = root.get(SitePage_.parent);
Predicate rootpred = null;
if (siteroot == null)
{
rootpred = cb.isNull(parentpath);
}
else
{
rootpred = cb.equal(parentpath, siteroot);
}
cq.where(
cb.equal(usrpath, user),
rootpred,
cb.equal(root.get(SitePage_.event), eventbean.getCurrentEvent())
);
return getEm().createQuery(cq).getResultList();
}
public List<SitePage> findAll()
{
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<SitePage> cq = cb.createQuery(SitePage.class);
Root<SitePage> root = cq.from(SitePage.class);
cq.where(
cb.isNull(root.get(SitePage_.parent)),
cb.equal(root.get(SitePage_.event), eventbean.getCurrentEvent())
);
return getEm().createQuery(cq).getResultList();
}
public SitePage find(Integer id, List<Role> require) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<SitePage> cq = cb.createQuery(SitePage.class);
Root<SitePage> root = cq.from(SitePage.class);
cq.where(
cb.equal(root.get(SitePage_.id), id),
root.get(SitePage_.allowedRoles).in(require)
);
return getSingleNullableResult(getEm().createQuery(cq));
}
public List<PageContent> findContents(SitePage page, Date now) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<PageContent> cq = cb.createQuery(PageContent.class);
Root<PageContent> root = cq.from(PageContent.class);
Path<SitePage> sitepath = root.get(PageContent_.sitepage);
Path<Date> expirepath = root.get(PageContent_.expire);
Path<Date> publishpath = root.get(PageContent_.publish);
cq.where(
cb.equal(sitepath, page),
cb.or(cb.isNull(publishpath), cb.greaterThan(publishpath, now)),
cb.or(cb.isNull(expirepath), cb.lessThan(expirepath, now))
);
return getEm().createQuery(cq).getResultList();
}
public SitePage find(String name) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<SitePage> cq = cb.createQuery(SitePage.class);
Root<SitePage> root = cq.from(SitePage.class);
cq.where(cb.equal(root.get(SitePage_.event), eventbean.getCurrentEvent()),
cb.equal(root.get(SitePage_.name), name)
);
return super.getSingleNullableResult(getEm().createQuery(cq));
}
}