| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 1 | package de.ids_mannheim.korap.dao; |
| 2 | |
| margaretha | 18533fd | 2018-03-28 16:01:06 +0200 | [diff] [blame] | 3 | import java.util.HashSet; |
| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 4 | import java.util.List; |
| margaretha | 18533fd | 2018-03-28 16:01:06 +0200 | [diff] [blame] | 5 | import java.util.Set; |
| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 6 | |
| 7 | import javax.persistence.EntityManager; |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 8 | import javax.persistence.NoResultException; |
| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 9 | import javax.persistence.PersistenceContext; |
| 10 | import javax.persistence.Query; |
| 11 | import javax.persistence.criteria.CriteriaBuilder; |
| 12 | import javax.persistence.criteria.CriteriaQuery; |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 13 | import javax.persistence.criteria.Join; |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 14 | import javax.persistence.criteria.ListJoin; |
| 15 | import javax.persistence.criteria.Predicate; |
| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 16 | import javax.persistence.criteria.Root; |
| 17 | |
| margaretha | b42b963 | 2017-10-25 18:34:12 +0200 | [diff] [blame] | 18 | import org.springframework.beans.factory.annotation.Autowired; |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 19 | import org.springframework.stereotype.Repository; |
| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 20 | import org.springframework.transaction.annotation.Transactional; |
| 21 | |
| margaretha | f438c59 | 2017-10-25 15:23:50 +0200 | [diff] [blame] | 22 | import de.ids_mannheim.korap.constant.GroupMemberStatus; |
| margaretha | b42b963 | 2017-10-25 18:34:12 +0200 | [diff] [blame] | 23 | import de.ids_mannheim.korap.constant.PredefinedRole; |
| margaretha | f438c59 | 2017-10-25 15:23:50 +0200 | [diff] [blame] | 24 | import de.ids_mannheim.korap.constant.UserGroupStatus; |
| 25 | import de.ids_mannheim.korap.constant.VirtualCorpusAccessStatus; |
| margaretha | b42b963 | 2017-10-25 18:34:12 +0200 | [diff] [blame] | 26 | import de.ids_mannheim.korap.entity.Role; |
| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 27 | import de.ids_mannheim.korap.entity.UserGroup; |
| 28 | import de.ids_mannheim.korap.entity.UserGroupMember; |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 29 | import de.ids_mannheim.korap.entity.UserGroupMember_; |
| 30 | import de.ids_mannheim.korap.entity.UserGroup_; |
| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 31 | import de.ids_mannheim.korap.entity.VirtualCorpus; |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 32 | import de.ids_mannheim.korap.entity.VirtualCorpusAccess; |
| 33 | import de.ids_mannheim.korap.entity.VirtualCorpusAccess_; |
| 34 | import de.ids_mannheim.korap.entity.VirtualCorpus_; |
| 35 | import de.ids_mannheim.korap.exceptions.KustvaktException; |
| 36 | import de.ids_mannheim.korap.exceptions.StatusCodes; |
| 37 | import de.ids_mannheim.korap.utils.ParameterChecker; |
| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 38 | |
| margaretha | 398f472 | 2019-01-09 19:07:20 +0100 | [diff] [blame] | 39 | /** |
| 40 | * Manages database queries and transactions regarding |
| 41 | * {@link UserGroup} entity and database table. |
| margaretha | 69e8adc | 2018-03-15 15:14:22 +0100 | [diff] [blame] | 42 | * |
| 43 | * @author margaretha |
| 44 | * |
| 45 | * @see UserGroup |
| 46 | * |
| 47 | */ |
| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 48 | @Transactional |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 49 | @Repository |
| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 50 | public class UserGroupDao { |
| 51 | |
| 52 | @PersistenceContext |
| 53 | private EntityManager entityManager; |
| 54 | |
| margaretha | b42b963 | 2017-10-25 18:34:12 +0200 | [diff] [blame] | 55 | @Autowired |
| 56 | private RoleDao roleDao; |
| 57 | |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 58 | public int createGroup (String name, String createdBy, |
| 59 | UserGroupStatus status) throws KustvaktException { |
| 60 | ParameterChecker.checkStringValue(name, "name"); |
| 61 | ParameterChecker.checkStringValue(createdBy, "createdBy"); |
| 62 | ParameterChecker.checkObjectValue(status, "UserGroupStatus"); |
| 63 | |
| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 64 | UserGroup group = new UserGroup(); |
| 65 | group.setName(name); |
| 66 | group.setStatus(status); |
| 67 | group.setCreatedBy(createdBy); |
| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 68 | entityManager.persist(group); |
| margaretha | b42b963 | 2017-10-25 18:34:12 +0200 | [diff] [blame] | 69 | |
| margaretha | 18533fd | 2018-03-28 16:01:06 +0200 | [diff] [blame] | 70 | Set<Role> roles = new HashSet<Role>(); |
| margaretha | 9d3eb04 | 2017-12-22 11:02:30 +0100 | [diff] [blame] | 71 | roles.add(roleDao |
| 72 | .retrieveRoleById(PredefinedRole.USER_GROUP_ADMIN.getId())); |
| 73 | roles.add(roleDao |
| 74 | .retrieveRoleById(PredefinedRole.VC_ACCESS_ADMIN.getId())); |
| margaretha | b42b963 | 2017-10-25 18:34:12 +0200 | [diff] [blame] | 75 | |
| 76 | UserGroupMember owner = new UserGroupMember(); |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 77 | owner.setUserId(createdBy); |
| margaretha | b42b963 | 2017-10-25 18:34:12 +0200 | [diff] [blame] | 78 | owner.setCreatedBy(createdBy); |
| 79 | owner.setStatus(GroupMemberStatus.ACTIVE); |
| 80 | owner.setGroup(group); |
| 81 | owner.setRoles(roles); |
| 82 | entityManager.persist(owner); |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 83 | |
| 84 | return group.getId(); |
| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 85 | } |
| 86 | |
| 87 | public void deleteGroup (int groupId, String deletedBy, |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 88 | boolean isSoftDelete) throws KustvaktException { |
| 89 | ParameterChecker.checkIntegerValue(groupId, "groupId"); |
| 90 | ParameterChecker.checkStringValue(deletedBy, "deletedBy"); |
| 91 | |
| margaretha | 9d3eb04 | 2017-12-22 11:02:30 +0100 | [diff] [blame] | 92 | UserGroup group = null; |
| 93 | try { |
| 94 | group = retrieveGroupById(groupId); |
| 95 | } |
| 96 | catch (NoResultException e) { |
| 97 | throw new KustvaktException(StatusCodes.NO_RESULT_FOUND, |
| 98 | "groupId: " + groupId); |
| 99 | } |
| 100 | |
| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 101 | if (isSoftDelete) { |
| 102 | group.setStatus(UserGroupStatus.DELETED); |
| 103 | group.setDeletedBy(deletedBy); |
| margaretha | b874ef5 | 2018-01-23 20:26:31 +0100 | [diff] [blame] | 104 | entityManager.merge(group); |
| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 105 | } |
| 106 | else { |
| margaretha | c9f1dfa | 2018-02-07 17:50:33 +0100 | [diff] [blame] | 107 | if (!entityManager.contains(group)) { |
| margaretha | b874ef5 | 2018-01-23 20:26:31 +0100 | [diff] [blame] | 108 | group = entityManager.merge(group); |
| 109 | } |
| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 110 | entityManager.remove(group); |
| 111 | } |
| 112 | } |
| 113 | |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 114 | public void editGroupName (int groupId, String name) |
| 115 | throws KustvaktException { |
| 116 | UserGroup group = retrieveGroupById(groupId); |
| 117 | group.setName(name); |
| margaretha | 541b8cc | 2018-01-10 13:02:46 +0100 | [diff] [blame] | 118 | entityManager.merge(group); |
| 119 | } |
| 120 | |
| margaretha | 398f472 | 2019-01-09 19:07:20 +0100 | [diff] [blame] | 121 | /** |
| 122 | * Retrieves the UserGroup by the given group id. This methods |
| 123 | * does not |
| 124 | * fetch group members because only group admin is allowed to see |
| 125 | * them. |
| 126 | * Group members have to be retrieved separately. |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 127 | * |
| 128 | * @see UserGroupMember |
| margaretha | 398f472 | 2019-01-09 19:07:20 +0100 | [diff] [blame] | 129 | * @param groupId |
| 130 | * group id |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 131 | * @return UserGroup |
| margaretha | 398f472 | 2019-01-09 19:07:20 +0100 | [diff] [blame] | 132 | * @throws KustvaktException |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 133 | */ |
| 134 | public UserGroup retrieveGroupById (int groupId) throws KustvaktException { |
| margaretha | 71e6fca | 2018-01-18 18:11:48 +0100 | [diff] [blame] | 135 | return retrieveGroupById(groupId, false); |
| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 136 | } |
| 137 | |
| margaretha | 71e6fca | 2018-01-18 18:11:48 +0100 | [diff] [blame] | 138 | public UserGroup retrieveGroupById (int groupId, boolean fetchMembers) |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 139 | throws KustvaktException { |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 140 | ParameterChecker.checkIntegerValue(groupId, "groupId"); |
| 141 | |
| 142 | CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); |
| 143 | CriteriaQuery<UserGroup> query = |
| 144 | criteriaBuilder.createQuery(UserGroup.class); |
| 145 | |
| 146 | Root<UserGroup> root = query.from(UserGroup.class); |
| margaretha | 71e6fca | 2018-01-18 18:11:48 +0100 | [diff] [blame] | 147 | if (fetchMembers) { |
| 148 | root.fetch(UserGroup_.members); |
| 149 | } |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 150 | query.select(root); |
| 151 | query.where(criteriaBuilder.equal(root.get(UserGroup_.id), groupId)); |
| 152 | Query q = entityManager.createQuery(query); |
| 153 | |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 154 | try { |
| margaretha | 541b8cc | 2018-01-10 13:02:46 +0100 | [diff] [blame] | 155 | return (UserGroup) q.getSingleResult(); |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 156 | } |
| 157 | catch (NoResultException e) { |
| margaretha | c9f1dfa | 2018-02-07 17:50:33 +0100 | [diff] [blame] | 158 | throw new KustvaktException(StatusCodes.GROUP_NOT_FOUND, |
| 159 | "Group with id " + groupId + " is not found", |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 160 | String.valueOf(groupId), e); |
| 161 | } |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 162 | } |
| 163 | |
| margaretha | 398f472 | 2019-01-09 19:07:20 +0100 | [diff] [blame] | 164 | /** |
| 165 | * Retrieves only user-groups that are active (not hidden or |
| 166 | * deleted). |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 167 | * |
| margaretha | 398f472 | 2019-01-09 19:07:20 +0100 | [diff] [blame] | 168 | * @param userId |
| 169 | * user id |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 170 | * @return a list of UserGroup |
| 171 | * @throws KustvaktException |
| 172 | */ |
| margaretha | dc51507 | 2018-08-03 17:01:19 +0200 | [diff] [blame] | 173 | @SuppressWarnings("unchecked") |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 174 | public List<UserGroup> retrieveGroupByUserId (String userId) |
| 175 | throws KustvaktException { |
| 176 | ParameterChecker.checkStringValue(userId, "userId"); |
| 177 | |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 178 | CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); |
| 179 | CriteriaQuery<UserGroup> query = |
| 180 | criteriaBuilder.createQuery(UserGroup.class); |
| 181 | |
| 182 | Root<UserGroup> root = query.from(UserGroup.class); |
| 183 | |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 184 | ListJoin<UserGroup, UserGroupMember> members = |
| 185 | root.join(UserGroup_.members); |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 186 | Predicate restrictions = criteriaBuilder.and( |
| 187 | criteriaBuilder.equal(root.get(UserGroup_.status), |
| 188 | UserGroupStatus.ACTIVE), |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 189 | criteriaBuilder.equal(members.get(UserGroupMember_.userId), |
| 190 | userId), |
| margaretha | 4566792 | 2018-01-25 21:23:03 +0100 | [diff] [blame] | 191 | criteriaBuilder.notEqual(members.get(UserGroupMember_.status), |
| 192 | GroupMemberStatus.DELETED)); |
| margaretha | 398f472 | 2019-01-09 19:07:20 +0100 | [diff] [blame] | 193 | // criteriaBuilder.equal(members.get(UserGroupMember_.status), |
| 194 | // GroupMemberStatus.ACTIVE)); |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 195 | |
| 196 | query.select(root); |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 197 | query.where(restrictions); |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 198 | Query q = entityManager.createQuery(query); |
| margaretha | 541b8cc | 2018-01-10 13:02:46 +0100 | [diff] [blame] | 199 | |
| 200 | try { |
| 201 | return q.getResultList(); |
| 202 | } |
| 203 | catch (NoResultException e) { |
| 204 | throw new KustvaktException(StatusCodes.NO_RESULT_FOUND, |
| 205 | "No result found for query: retrieve group by used id " |
| 206 | + userId, |
| 207 | userId, e); |
| 208 | } |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 209 | } |
| 210 | |
| margaretha | 45dde68 | 2018-01-04 21:33:46 +0100 | [diff] [blame] | 211 | public UserGroup retrieveGroupByName (String groupName) |
| 212 | throws KustvaktException { |
| 213 | ParameterChecker.checkStringValue(groupName, "groupName"); |
| 214 | |
| margaretha | 0b63de4 | 2017-12-20 18:48:09 +0100 | [diff] [blame] | 215 | CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); |
| margaretha | 45dde68 | 2018-01-04 21:33:46 +0100 | [diff] [blame] | 216 | CriteriaQuery<UserGroup> query = |
| 217 | criteriaBuilder.createQuery(UserGroup.class); |
| margaretha | 0b63de4 | 2017-12-20 18:48:09 +0100 | [diff] [blame] | 218 | |
| margaretha | 45dde68 | 2018-01-04 21:33:46 +0100 | [diff] [blame] | 219 | Root<UserGroup> root = query.from(UserGroup.class); |
| 220 | query.select(root); |
| 221 | query.where( |
| 222 | criteriaBuilder.equal(root.get(UserGroup_.name), groupName)); |
| 223 | Query q = entityManager.createQuery(query); |
| margaretha | 0b63de4 | 2017-12-20 18:48:09 +0100 | [diff] [blame] | 224 | |
| margaretha | 45dde68 | 2018-01-04 21:33:46 +0100 | [diff] [blame] | 225 | try { |
| margaretha | 541b8cc | 2018-01-10 13:02:46 +0100 | [diff] [blame] | 226 | return (UserGroup) q.getSingleResult(); |
| margaretha | 45dde68 | 2018-01-04 21:33:46 +0100 | [diff] [blame] | 227 | } |
| 228 | catch (NoResultException e) { |
| 229 | throw new KustvaktException(StatusCodes.NO_RESULT_FOUND, |
| 230 | "No result found for query: retrieve group by name " |
| 231 | + groupName, |
| 232 | groupName, e); |
| 233 | } |
| margaretha | 0b63de4 | 2017-12-20 18:48:09 +0100 | [diff] [blame] | 234 | } |
| margaretha | 9d3eb04 | 2017-12-22 11:02:30 +0100 | [diff] [blame] | 235 | |
| margaretha | c9f1dfa | 2018-02-07 17:50:33 +0100 | [diff] [blame] | 236 | public UserGroup retrieveHiddenGroupByVC (int vcId) |
| 237 | throws KustvaktException { |
| margaretha | 71e6fca | 2018-01-18 18:11:48 +0100 | [diff] [blame] | 238 | ParameterChecker.checkIntegerValue(vcId, "vcId"); |
| 239 | |
| 240 | CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); |
| 241 | CriteriaQuery<UserGroup> query = |
| 242 | criteriaBuilder.createQuery(UserGroup.class); |
| 243 | |
| 244 | Root<UserGroup> root = query.from(UserGroup.class); |
| 245 | Join<UserGroup, VirtualCorpusAccess> access = |
| 246 | root.join(UserGroup_.virtualCorpusAccess); |
| 247 | Join<VirtualCorpusAccess, VirtualCorpus> vc = |
| 248 | access.join(VirtualCorpusAccess_.virtualCorpus); |
| 249 | |
| 250 | Predicate p = criteriaBuilder.and( |
| 251 | criteriaBuilder.equal(root.get(UserGroup_.status), |
| 252 | UserGroupStatus.HIDDEN), |
| 253 | criteriaBuilder.equal(vc.get(VirtualCorpus_.id), vcId)); |
| margaretha | c9f1dfa | 2018-02-07 17:50:33 +0100 | [diff] [blame] | 254 | |
| margaretha | 71e6fca | 2018-01-18 18:11:48 +0100 | [diff] [blame] | 255 | query.select(root); |
| 256 | query.where(p); |
| 257 | Query q = entityManager.createQuery(query); |
| 258 | |
| 259 | try { |
| 260 | return (UserGroup) q.getSingleResult(); |
| 261 | } |
| 262 | catch (NoResultException e) { |
| 263 | throw new KustvaktException(StatusCodes.NO_RESULT_FOUND, |
| 264 | "No hidden group found for virtual corpus with id " + vcId, |
| 265 | String.valueOf(vcId), e); |
| 266 | } |
| 267 | |
| 268 | } |
| margaretha | 45dde68 | 2018-01-04 21:33:46 +0100 | [diff] [blame] | 269 | |
| margaretha | 398f472 | 2019-01-09 19:07:20 +0100 | [diff] [blame] | 270 | /** |
| 271 | * This is an admin function. It retrieves all groups given the |
| 272 | * userId |
| margaretha | 293ee03 | 2018-03-20 20:11:52 +0100 | [diff] [blame] | 273 | * and status. |
| 274 | * |
| 275 | * @param userId |
| 276 | * @param status |
| 277 | * @return a list of {@link UserGroup}s |
| 278 | * @throws KustvaktException |
| 279 | */ |
| margaretha | dc51507 | 2018-08-03 17:01:19 +0200 | [diff] [blame] | 280 | @SuppressWarnings("unchecked") |
| margaretha | 293ee03 | 2018-03-20 20:11:52 +0100 | [diff] [blame] | 281 | public List<UserGroup> retrieveGroupByStatus (String userId, |
| 282 | UserGroupStatus status) throws KustvaktException { |
| 283 | |
| 284 | CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); |
| 285 | CriteriaQuery<UserGroup> query = |
| 286 | criteriaBuilder.createQuery(UserGroup.class); |
| 287 | |
| 288 | Root<UserGroup> root = query.from(UserGroup.class); |
| 289 | |
| 290 | Predicate restrictions = null; |
| 291 | |
| 292 | if (userId != null && !userId.isEmpty()) { |
| 293 | |
| 294 | ListJoin<UserGroup, UserGroupMember> members = |
| 295 | root.join(UserGroup_.members); |
| margaretha | 18533fd | 2018-03-28 16:01:06 +0200 | [diff] [blame] | 296 | restrictions = criteriaBuilder.and(criteriaBuilder |
| 297 | .equal(members.get(UserGroupMember_.userId), userId)); |
| 298 | |
| 299 | if (status != null) { |
| margaretha | 293ee03 | 2018-03-20 20:11:52 +0100 | [diff] [blame] | 300 | restrictions = criteriaBuilder.and(restrictions, criteriaBuilder |
| 301 | .equal(root.get(UserGroup_.status), status)); |
| 302 | } |
| 303 | } |
| 304 | else if (status != null) { |
| margaretha | 18533fd | 2018-03-28 16:01:06 +0200 | [diff] [blame] | 305 | restrictions = |
| 306 | criteriaBuilder.equal(root.get(UserGroup_.status), status); |
| 307 | |
| margaretha | 293ee03 | 2018-03-20 20:11:52 +0100 | [diff] [blame] | 308 | } |
| 309 | |
| 310 | query.select(root); |
| margaretha | 18533fd | 2018-03-28 16:01:06 +0200 | [diff] [blame] | 311 | if (restrictions != null) { |
| margaretha | 293ee03 | 2018-03-20 20:11:52 +0100 | [diff] [blame] | 312 | query.where(restrictions); |
| 313 | } |
| 314 | Query q = entityManager.createQuery(query); |
| 315 | |
| 316 | try { |
| 317 | return q.getResultList(); |
| 318 | } |
| 319 | catch (NoResultException e) { |
| 320 | throw new KustvaktException(StatusCodes.NO_RESULT_FOUND, |
| 321 | "No group found for status " + status, status.toString()); |
| 322 | } |
| 323 | |
| 324 | } |
| 325 | |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 326 | public void addVCToGroup (VirtualCorpus virtualCorpus, String createdBy, |
| 327 | VirtualCorpusAccessStatus status, UserGroup group) { |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 328 | VirtualCorpusAccess accessGroup = new VirtualCorpusAccess(); |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 329 | accessGroup.setCreatedBy(createdBy); |
| 330 | accessGroup.setStatus(status); |
| 331 | accessGroup.setUserGroup(group); |
| 332 | accessGroup.setVirtualCorpus(virtualCorpus); |
| 333 | entityManager.persist(accessGroup); |
| 334 | } |
| 335 | |
| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 336 | public void addVCToGroup (List<VirtualCorpus> virtualCorpora, |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 337 | String createdBy, UserGroup group, |
| 338 | VirtualCorpusAccessStatus status) { |
| 339 | |
| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 340 | for (VirtualCorpus vc : virtualCorpora) { |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 341 | addVCToGroup(vc, createdBy, status, group); |
| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 342 | } |
| 343 | } |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 344 | |
| margaretha | 9d3eb04 | 2017-12-22 11:02:30 +0100 | [diff] [blame] | 345 | public void deleteVCFromGroup (int virtualCorpusId, int groupId) |
| 346 | throws KustvaktException { |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 347 | ParameterChecker.checkIntegerValue(virtualCorpusId, "virtualCorpusId"); |
| 348 | ParameterChecker.checkIntegerValue(groupId, "groupId"); |
| 349 | |
| 350 | CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); |
| 351 | CriteriaQuery<VirtualCorpusAccess> query = |
| 352 | criteriaBuilder.createQuery(VirtualCorpusAccess.class); |
| 353 | |
| 354 | Root<VirtualCorpusAccess> root = query.from(VirtualCorpusAccess.class); |
| margaretha | 9d3eb04 | 2017-12-22 11:02:30 +0100 | [diff] [blame] | 355 | Join<VirtualCorpusAccess, VirtualCorpus> vc = |
| 356 | root.join(VirtualCorpusAccess_.virtualCorpus); |
| 357 | Join<VirtualCorpusAccess, UserGroup> group = |
| 358 | root.join(VirtualCorpusAccess_.userGroup); |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 359 | |
| margaretha | 9d3eb04 | 2017-12-22 11:02:30 +0100 | [diff] [blame] | 360 | Predicate virtualCorpus = criteriaBuilder |
| 361 | .equal(vc.get(VirtualCorpus_.id), virtualCorpusId); |
| 362 | Predicate userGroup = |
| 363 | criteriaBuilder.equal(group.get(UserGroup_.id), groupId); |
| 364 | |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 365 | query.select(root); |
| 366 | query.where(criteriaBuilder.and(virtualCorpus, userGroup)); |
| 367 | Query q = entityManager.createQuery(query); |
| margaretha | 9d3eb04 | 2017-12-22 11:02:30 +0100 | [diff] [blame] | 368 | VirtualCorpusAccess vcAccess = |
| 369 | (VirtualCorpusAccess) q.getSingleResult(); |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 370 | entityManager.remove(vcAccess); |
| 371 | } |
| 372 | |
| margaretha | bf11d8d | 2017-10-24 19:31:44 +0200 | [diff] [blame] | 373 | } |