Fix sharing published vc and retrieve group vc
Change-Id: Ib3b937c8fc25117d79fb5b89f53b45e3c7bbad9b
diff --git a/src/main/java/de/ids_mannheim/korap/dao/QueryDao.java b/src/main/java/de/ids_mannheim/korap/dao/QueryDao.java
index e17582a..4026284 100644
--- a/src/main/java/de/ids_mannheim/korap/dao/QueryDao.java
+++ b/src/main/java/de/ids_mannheim/korap/dao/QueryDao.java
@@ -6,6 +6,26 @@
import java.util.List;
import java.util.Set;
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+
+import de.ids_mannheim.korap.constant.GroupMemberStatus;
+import de.ids_mannheim.korap.constant.QueryType;
+import de.ids_mannheim.korap.constant.ResourceType;
+import de.ids_mannheim.korap.entity.QueryAccess;
+import de.ids_mannheim.korap.entity.QueryAccess_;
+import de.ids_mannheim.korap.entity.QueryDO;
+import de.ids_mannheim.korap.entity.QueryDO_;
+import de.ids_mannheim.korap.entity.Role;
+import de.ids_mannheim.korap.entity.Role_;
+import de.ids_mannheim.korap.entity.UserGroup;
+import de.ids_mannheim.korap.entity.UserGroupMember;
+import de.ids_mannheim.korap.entity.UserGroupMember_;
+import de.ids_mannheim.korap.entity.UserGroup_;
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.exceptions.StatusCodes;
+import de.ids_mannheim.korap.user.User.CorpusAccess;
+import de.ids_mannheim.korap.utils.ParameterChecker;
import jakarta.persistence.EntityManager;
import jakarta.persistence.NoResultException;
import jakarta.persistence.NonUniqueResultException;
@@ -18,27 +38,6 @@
import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;
-import org.springframework.stereotype.Repository;
-import org.springframework.transaction.annotation.Transactional;
-
-import de.ids_mannheim.korap.constant.GroupMemberStatus;
-import de.ids_mannheim.korap.constant.QueryAccessStatus;
-import de.ids_mannheim.korap.constant.QueryType;
-import de.ids_mannheim.korap.constant.ResourceType;
-import de.ids_mannheim.korap.constant.UserGroupStatus;
-import de.ids_mannheim.korap.entity.QueryAccess;
-import de.ids_mannheim.korap.entity.QueryAccess_;
-import de.ids_mannheim.korap.entity.QueryDO;
-import de.ids_mannheim.korap.entity.QueryDO_;
-import de.ids_mannheim.korap.entity.UserGroup;
-import de.ids_mannheim.korap.entity.UserGroupMember;
-import de.ids_mannheim.korap.entity.UserGroupMember_;
-import de.ids_mannheim.korap.entity.UserGroup_;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.user.User.CorpusAccess;
-import de.ids_mannheim.korap.utils.ParameterChecker;
-
/**
* QueryDao manages database queries and transactions
* regarding virtual corpus and KorAP queries.
@@ -273,35 +272,19 @@
CriteriaQuery<QueryDO> cq = builder.createQuery(QueryDO.class);
Root<QueryDO> query = cq.from(QueryDO.class);
- Join<QueryDO, QueryAccess> access = query.join(QueryDO_.queryAccess);
-
- // Predicate corpusStatus = builder.and(
- // builder.notEqual(access.get(QueryAccess_.status),
- // VirtualCorpusAccessStatus.HIDDEN),
- // builder.notEqual(access.get(QueryAccess_.status),
- // VirtualCorpusAccessStatus.DELETED));
-
+ Join<QueryDO, Role> roles = query.join(QueryDO_.roles);
+ Join<Role, UserGroupMember> members = roles
+ .join(Role_.userGroupMembers);
+
Predicate type = builder.equal(query.get(QueryDO_.queryType),
queryType);
-
- Predicate accessStatus = builder.notEqual(
- access.get(QueryAccess_.status), QueryAccessStatus.DELETED);
-
- Predicate userGroupStatus = builder.notEqual(
- access.get(QueryAccess_.userGroup).get(UserGroup_.status),
- UserGroupStatus.DELETED);
- Join<UserGroup, UserGroupMember> members = access
- .join(QueryAccess_.userGroup).join(UserGroup_.members);
-
Predicate memberStatus = builder.equal(
members.get(UserGroupMember_.status), GroupMemberStatus.ACTIVE);
-
Predicate user = builder.equal(members.get(UserGroupMember_.userId),
userId);
cq.select(query);
- cq.where(builder.and(type, accessStatus, userGroupStatus, memberStatus,
- user));
+ cq.where(builder.and(type, memberStatus, user));
Query q = entityManager.createQuery(cq);
return q.getResultList();
@@ -352,14 +335,12 @@
.createQuery(QueryDO.class);
Root<QueryDO> query = criteriaQuery.from(QueryDO.class);
- Join<QueryDO, QueryAccess> queryAccess = query
- .join(QueryDO_.queryAccess);
- Join<QueryAccess, UserGroup> accessGroup = queryAccess
- .join(QueryAccess_.userGroup);
+ Join<QueryDO, Role> query_role = query
+ .join(QueryDO_.roles);
criteriaQuery.select(query);
- criteriaQuery
- .where(builder.equal(accessGroup.get(UserGroup_.id), groupId));
+ criteriaQuery.where(builder.equal(
+ query_role.get(Role_.userGroup).get(UserGroup_.id), groupId));
Query q = entityManager.createQuery(criteriaQuery);
return q.getResultList();
}
diff --git a/src/main/java/de/ids_mannheim/korap/dao/RoleDao.java b/src/main/java/de/ids_mannheim/korap/dao/RoleDao.java
index 72fdb69..4fcba47 100644
--- a/src/main/java/de/ids_mannheim/korap/dao/RoleDao.java
+++ b/src/main/java/de/ids_mannheim/korap/dao/RoleDao.java
@@ -14,6 +14,7 @@
import de.ids_mannheim.korap.entity.Role_;
import de.ids_mannheim.korap.entity.UserGroupMember;
import de.ids_mannheim.korap.entity.UserGroupMember_;
+import de.ids_mannheim.korap.entity.UserGroup_;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.exceptions.StatusCodes;
import jakarta.persistence.EntityManager;
@@ -44,17 +45,6 @@
@PersistenceContext
private EntityManager entityManager;
- // public void deleteRole (Role role) {
- // entityManager.remove(role);
- // entityManager.flush();
- // }
- //
- // public void editRoleName (int roleId, PredefinedRole name) {
- // Role r = retrieveRoleById(roleId);
- // r.setName(name);
- // entityManager.persist(r);
- // }
-
public void addRole (Role newRole) {
entityManager.persist(newRole);
entityManager.flush();
@@ -191,19 +181,20 @@
}
- public Role retrieveRoleByPrivilegeAndQuery (PrivilegeType p,
- int queryId) throws KustvaktException {
+ public Role retrieveRoleByGroupIdQueryIdPrivilege (int groupId, int queryId,
+ PrivilegeType p) throws KustvaktException {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Role> query = cb.createQuery(Role.class);
Root<Role> role = query.from(Role.class);
+ role.fetch("userGroup", JoinType.INNER);
role.fetch(Role_.query, JoinType.INNER);
query.select(role);
- query.where(
- cb.equal(role.get(Role_.query).get(QueryDO_.id), queryId),
- cb.equal(role.get(Role_.privilege), p));
+ query.where(cb.equal(role.get(Role_.query).get(QueryDO_.id), queryId),
+ cb.equal(role.get(Role_.privilege), p), cb.equal(
+ role.get(Role_.userGroup).get(UserGroup_.id), groupId));
TypedQuery<Role> q = entityManager.createQuery(query);
return (Role) q.getSingleResult();
diff --git a/src/main/java/de/ids_mannheim/korap/dao/UserGroupDao.java b/src/main/java/de/ids_mannheim/korap/dao/UserGroupDao.java
index a79e13f..85b35e8 100644
--- a/src/main/java/de/ids_mannheim/korap/dao/UserGroupDao.java
+++ b/src/main/java/de/ids_mannheim/korap/dao/UserGroupDao.java
@@ -375,24 +375,6 @@
}
- public void addQueryToGroup (QueryDO query, String createdBy,
- QueryAccessStatus status, UserGroup group) {
- QueryAccess accessGroup = new QueryAccess();
- accessGroup.setCreatedBy(createdBy);
- accessGroup.setStatus(status);
- accessGroup.setUserGroup(group);
- accessGroup.setQuery(query);;
- entityManager.persist(accessGroup);
- }
-
- public void addQueryToGroup (List<QueryDO> queries, String createdBy,
- UserGroup group, QueryAccessStatus status) {
-
- for (QueryDO q : queries) {
- addQueryToGroup(q, createdBy, status, group);
- }
- }
-
public void deleteQueryFromGroup (int queryId, int groupId)
throws KustvaktException {
ParameterChecker.checkIntegerValue(queryId, "queryId");