blob: 1a80b926c88dd9a19b2007b30d2399736b9f747e [file] [log] [blame]
package de.ids_mannheim.korap.dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Join;
import javax.persistence.criteria.Predicate;
import javax.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.entity.Role;
import de.ids_mannheim.korap.entity.UserGroupMember;
import de.ids_mannheim.korap.entity.UserGroupMember_;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.utils.ParameterChecker;
@Transactional
@Repository
public class UserGroupMemberDao {
@PersistenceContext
private EntityManager entityManager;
public void addMember (UserGroupMember member) throws KustvaktException {
ParameterChecker.checkObjectValue(member, "userGroupMember");
entityManager.persist(member);
}
public void addMembers (List<UserGroupMember> members)
throws KustvaktException {
ParameterChecker.checkObjectValue(members, "List<UserGroupMember>");
for (UserGroupMember member : members) {
addMember(member);
}
}
public void approveMember (String userId, int groupId)
throws KustvaktException {
ParameterChecker.checkStringValue(userId, "userId");
ParameterChecker.checkIntegerValue(groupId, "groupId");
UserGroupMember member = retrieveMemberById(userId, groupId);
member.setStatus(GroupMemberStatus.ACTIVE);
entityManager.persist(member);
}
public void deleteMember (String userId, int groupId, boolean isSoftDelete)
throws KustvaktException {
ParameterChecker.checkStringValue(userId, "userId");
ParameterChecker.checkIntegerValue(groupId, "groupId");
UserGroupMember m = retrieveMemberById(userId, groupId);
if (isSoftDelete) {
m.setStatus(GroupMemberStatus.DELETED);
entityManager.persist(m);
}
else {
entityManager.remove(m);
}
}
public UserGroupMember retrieveMemberById (String userId, int groupId)
throws KustvaktException {
ParameterChecker.checkStringValue(userId, "userId");
ParameterChecker.checkIntegerValue(groupId, "groupId");
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<UserGroupMember> query =
criteriaBuilder.createQuery(UserGroupMember.class);
Root<UserGroupMember> root = query.from(UserGroupMember.class);
Predicate predicate = criteriaBuilder.and(
criteriaBuilder.equal(root.get(UserGroupMember_.group),
groupId),
criteriaBuilder.equal(root.get(UserGroupMember_.userId),
userId));
query.select(root);
query.where(predicate);
Query q = entityManager.createQuery(query);
return (UserGroupMember) q.getSingleResult();
}
public List<UserGroupMember> retrieveMemberByRole (int groupId,
int roleId) {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<UserGroupMember> query =
criteriaBuilder.createQuery(UserGroupMember.class);
Root<UserGroupMember> root = query.from(UserGroupMember.class);
Join<UserGroupMember, Role> memberRole = root.join("roles");
Predicate predicate = criteriaBuilder.and(
criteriaBuilder.equal(root.get(UserGroupMember_.group),
groupId),
criteriaBuilder.equal(memberRole.get("role_id"), roleId));
query.select(root);
query.where(predicate);
Query q = entityManager.createQuery(query);
return q.getResultList();
}
public List<UserGroupMember> retrieveMemberByGroupId (int groupId) {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<UserGroupMember> query =
criteriaBuilder.createQuery(UserGroupMember.class);
Root<UserGroupMember> root = query.from(UserGroupMember.class);
Predicate predicate = criteriaBuilder.and(criteriaBuilder
.equal(root.get(UserGroupMember_.group), groupId));
query.select(root);
query.where(predicate);
Query q = entityManager.createQuery(query);
return q.getResultList();
}
}