blob: 98e79908ab7106b9cad31c168ee166fb6796716a [file] [log] [blame]
margaretha541b8cc2018-01-10 13:02:46 +01001package de.ids_mannheim.korap.dao;
2
3import java.util.List;
4
5import javax.persistence.EntityManager;
6import javax.persistence.NoResultException;
7import javax.persistence.PersistenceContext;
8import javax.persistence.Query;
9import javax.persistence.criteria.CriteriaBuilder;
10import javax.persistence.criteria.CriteriaQuery;
11import javax.persistence.criteria.Join;
12import javax.persistence.criteria.Predicate;
13import javax.persistence.criteria.Root;
14
15import org.springframework.stereotype.Repository;
16import org.springframework.transaction.annotation.Transactional;
17
18import de.ids_mannheim.korap.constant.VirtualCorpusAccessStatus;
19import de.ids_mannheim.korap.entity.UserGroup;
20import de.ids_mannheim.korap.entity.VirtualCorpus;
21import de.ids_mannheim.korap.entity.VirtualCorpusAccess;
22import de.ids_mannheim.korap.entity.VirtualCorpusAccess_;
23import de.ids_mannheim.korap.entity.VirtualCorpus_;
24import de.ids_mannheim.korap.exceptions.KustvaktException;
25import de.ids_mannheim.korap.utils.ParameterChecker;
26
27@Transactional
28@Repository
29public class VirtualCorpusAccessDao {
30
31 @PersistenceContext
32 private EntityManager entityManager;
33
34 public List<VirtualCorpusAccess> retrieveAccessByVC (int vcId)
35 throws KustvaktException {
36 ParameterChecker.checkIntegerValue(vcId, "vcId");
37
38 CriteriaBuilder builder = entityManager.getCriteriaBuilder();
39 CriteriaQuery<VirtualCorpusAccess> query =
40 builder.createQuery(VirtualCorpusAccess.class);
41
42 Root<VirtualCorpusAccess> access =
43 query.from(VirtualCorpusAccess.class);
44 Join<VirtualCorpusAccess, VirtualCorpus> accessVC =
45 access.join(VirtualCorpusAccess_.virtualCorpus);
46
47 query.select(access);
48 query.where(builder.equal(accessVC.get(VirtualCorpus_.id), vcId));
49 Query q = entityManager.createQuery(query);
50 return q.getResultList();
51 }
52
53 /** Hidden accesses are only created for published or system VC.
54 *
55 * Warn: The actual hidden accesses are not checked.
56 *
57 * @param vcId vcId
58 * @return true if there is a hidden access, false otherwise
59 * @throws KustvaktException
60 */
61 public boolean hasHiddenAccess (int vcId) throws KustvaktException {
62 ParameterChecker.checkIntegerValue(vcId, "vcId");
63
64 CriteriaBuilder builder = entityManager.getCriteriaBuilder();
65 CriteriaQuery<VirtualCorpusAccess> query =
66 builder.createQuery(VirtualCorpusAccess.class);
67
68 Root<VirtualCorpusAccess> access =
69 query.from(VirtualCorpusAccess.class);
70 Join<VirtualCorpusAccess, VirtualCorpus> accessVC =
71 access.join(VirtualCorpusAccess_.virtualCorpus);
72
73 Predicate p = builder.and(
74 builder.equal(accessVC.get(VirtualCorpus_.id), vcId),
75 builder.equal(access.get(VirtualCorpusAccess_.status),
76 VirtualCorpusAccessStatus.HIDDEN),
77 builder.notEqual(access.get(VirtualCorpusAccess_.deletedBy),
78 "NULL"));
79
80 query.select(access);
81 query.where(p);
82 try {
83 Query q = entityManager.createQuery(query);
84 List<VirtualCorpusAccess> resultList = q.getResultList();
85 if (resultList.isEmpty()) {
86 return false;
87 }
88 else {
89 return true;
90 }
91 }
92 catch (NoResultException e) {
93 return false;
94 }
95 }
96
97 public void addAccessToVC (VirtualCorpus virtualCorpus, UserGroup userGroup,
98 String createdBy, VirtualCorpusAccessStatus status) {
99 VirtualCorpusAccess vca = new VirtualCorpusAccess();
100 vca.setVirtualCorpus(virtualCorpus);
101 vca.setUserGroup(userGroup);
102 vca.setCreatedBy(createdBy);
103 vca.setStatus(status);
104 entityManager.persist(vca);
105 }
106}