blob: d5d54ae829b71e11c3865929791ec0fe0fa1a9db [file] [log] [blame]
margaretha1a683512017-10-16 20:25:26 +02001package de.ids_mannheim.korap.entity;
2
margaretha18533fd2018-03-28 16:01:06 +02003import java.util.Set;
margaretha08bdabe2017-10-17 14:38:49 +02004
margarethaeb328d72024-08-16 11:11:44 +02005import de.ids_mannheim.korap.constant.PredefinedRole;
margaretha6e796842023-08-17 15:10:45 +02006import jakarta.persistence.Column;
7import jakarta.persistence.Entity;
margaretha6e796842023-08-17 15:10:45 +02008import jakarta.persistence.FetchType;
9import jakarta.persistence.GeneratedValue;
10import jakarta.persistence.GenerationType;
11import jakarta.persistence.Id;
12import jakarta.persistence.Index;
13import jakarta.persistence.JoinColumn;
14import jakarta.persistence.JoinTable;
15import jakarta.persistence.ManyToMany;
16import jakarta.persistence.ManyToOne;
17import jakarta.persistence.Table;
18import jakarta.persistence.UniqueConstraint;
margaretha1a683512017-10-16 20:25:26 +020019import lombok.Getter;
20import lombok.Setter;
21
margaretha35e1ca22023-11-16 22:00:01 +010022/**
23 * Describes members of user groups. Only member of predefined role
24 * group admin can see the rest of members.
margaretha08bdabe2017-10-17 14:38:49 +020025 *
margaretha35e1ca22023-11-16 22:00:01 +010026 * @author margaretha
27 * @see UserGroup
28 * @see Role
29 * @see PredefinedRole
margaretha08bdabe2017-10-17 14:38:49 +020030 */
margaretha1a683512017-10-16 20:25:26 +020031@Setter
32@Getter
33@Entity
margaretha35e1ca22023-11-16 22:00:01 +010034@Table(name = "user_group_member", indexes = {
35 @Index(unique = true, columnList = "user_id, group_id") })
margaretha1a683512017-10-16 20:25:26 +020036public class UserGroupMember {
37
38 @Id
39 @GeneratedValue(strategy = GenerationType.IDENTITY)
40 private int id;
margaretha1a683512017-10-16 20:25:26 +020041 @Column(name = "user_id")
margaretha1f106f62017-10-18 22:27:30 +020042 private String userId;
margaretha08bdabe2017-10-17 14:38:49 +020043
margarethafc7d7772018-01-16 17:48:17 +010044 @ManyToOne(fetch = FetchType.EAGER)
margaretha08bdabe2017-10-17 14:38:49 +020045 @JoinColumn(name = "group_id")
46 private UserGroup group;
47
margaretha35e1ca22023-11-16 22:00:01 +010048 /**
49 * Information about roles is deemed to be always necessary to
50 * describe a member.
margaretha61966dd2017-10-26 19:32:21 +020051 *
52 */
53 @ManyToMany(fetch = FetchType.EAGER)
margaretha35e1ca22023-11-16 22:00:01 +010054 @JoinTable(name = "group_member_role", joinColumns = @JoinColumn(name = "group_member_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"), uniqueConstraints = @UniqueConstraint(columnNames = {
55 "group_member_id", "role_id" }))
margaretha18533fd2018-03-28 16:01:06 +020056 private Set<Role> roles;
margaretha08bdabe2017-10-17 14:38:49 +020057
margaretha1a683512017-10-16 20:25:26 +020058 @Override
59 public String toString () {
margaretha08bdabe2017-10-17 14:38:49 +020060 return "id=" + id + ", group= " + group + ", userId= " + userId
margaretha08bdabe2017-10-17 14:38:49 +020061 + ", roles=" + roles;
margaretha1a683512017-10-16 20:25:26 +020062 }
63}