package edu.harvard.iq.dataverse; import edu.harvard.iq.dataverse.authorization.DataverseRole; import edu.harvard.iq.dataverse.authorization.RoleAssignee; import java.util.Objects; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Index; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.persistence.UniqueConstraint; /** * A role of a user in a Dataverse. A User may have many roles in a given Dataverse. * This is a realization of a Many-to-Many relationship * between users and dataverses, with roles as an extra column. * @author michael */ @Entity @Table( uniqueConstraints = @UniqueConstraint(columnNames={"assigneeIdentifier","role_id","definitionPoint_id"}) , indexes = {@Index(columnList="assigneeidentifier") , @Index(columnList="definitionpoint_id") , @Index(columnList="role_id")} ) @NamedQueries({ @NamedQuery( name = "RoleAssignment.listByAssigneeIdentifier_DefinitionPointId", query = "SELECT r FROM RoleAssignment r WHERE r.assigneeIdentifier=:assigneeIdentifier AND r.definitionPoint.id=:definitionPointId" ), @NamedQuery( name = "RoleAssignment.listByAssigneeIdentifier", query = "SELECT r FROM RoleAssignment r WHERE r.assigneeIdentifier=:assigneeIdentifier" ), @NamedQuery( name = "RoleAssignment.listByDefinitionPointId", query = "SELECT r FROM RoleAssignment r WHERE r.definitionPoint.id=:definitionPointId" ), @NamedQuery( name = "RoleAssignment.listByRoleId", query = "SELECT r FROM RoleAssignment r WHERE r.role=:roleId" ), @NamedQuery( name = "RoleAssignment.listByPrivateUrlToken", query = "SELECT r FROM RoleAssignment r WHERE r.privateUrlToken=:privateUrlToken" ), @NamedQuery( name = "RoleAssignment.deleteByAssigneeIdentifier_RoleIdDefinition_PointId", query = "DELETE FROM RoleAssignment r WHERE r.assigneeIdentifier=:userId AND r.role.id=:roleId AND r.definitionPoint.id=:definitionPointId"), }) public class RoleAssignment implements java.io.Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column( nullable=false ) private String assigneeIdentifier; @ManyToOne( cascade = CascadeType.MERGE ) @JoinColumn( nullable=false ) private DataverseRole role; @ManyToOne( cascade = CascadeType.MERGE ) @JoinColumn( nullable=false ) private DvObject definitionPoint; @Column(nullable = true) private String privateUrlToken; public RoleAssignment() {} public RoleAssignment(DataverseRole aRole, RoleAssignee anAssignee, DvObject aDefinitionPoint, String privateUrlToken) { role = aRole; assigneeIdentifier = anAssignee.getIdentifier(); definitionPoint = aDefinitionPoint; this.privateUrlToken = privateUrlToken; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getAssigneeIdentifier() { return assigneeIdentifier; } public void setAssigneeIdentifier(String assigneeIdentifier) { this.assigneeIdentifier = assigneeIdentifier; } public DataverseRole getRole() { return role; } public void setRole(DataverseRole role) { this.role = role; } public DvObject getDefinitionPoint() { return definitionPoint; } public void setDefinitionPoint(DvObject definitionPoint) { this.definitionPoint = definitionPoint; } public String getPrivateUrlToken() { return privateUrlToken; } @Override public int hashCode() { int hash = 7; hash = 97 * hash + Objects.hashCode(role); hash = 97 * hash + Objects.hashCode(assigneeIdentifier); return hash; } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if ( ! (obj instanceof RoleAssignment) ) { return false; } final RoleAssignment other = (RoleAssignment) obj; return ( Objects.equals(getRole(), other.getRole() ) && Objects.equals(getAssigneeIdentifier(), other.getAssigneeIdentifier()) && Objects.equals(getDefinitionPoint(), other.getDefinitionPoint())); } @Override public String toString() { return "RoleAssignment{" + "id=" + id + ", assignee=" + assigneeIdentifier + ", role=" + role + ", definitionPoint=" + definitionPoint + '}'; } }