User.java
/*
* +====================================================================+
* | Copyright (C) 2015 Rochester Institute of Technology, |
* | 103 Lomb Memorial Drive, Rochester, NY - 14623 |
* | All Rights Reserved. |
* +====================================================================+
* FILENAME
* User.java
*
* AUTHOR
* @author Khanh Ho (kchisd at rit.edu)
*
* =====================================================================
*/
package edu.rit.coopeval.model;
import javax.persistence.*;
import java.util.*;
import com.fasterxml.jackson.annotation.*;
import edu.rit.coopeval.authentication.beans.UserType;
import edu.rit.coopeval.viewmodel.JsonViewer;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import org.springframework.util.StringUtils;
@Entity
@EntityListeners(AuditingEntityListener.class)
@Table(name = "\"USER\"")
@NamedEntityGraph(name = "userDetails", includeAllAttributes = true)
public class User extends AuditableEntity {
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_USER_ID")
@SequenceGenerator(name = "SEQ_USER_ID", sequenceName = "SEQ_USER_ID", allocationSize = 1)
@JsonView(JsonViewer.Summary.class)
private Long id;
@Column(name = "USERNAME")
@JsonView(JsonViewer.Summary.class)
private String username;
@Column(name = "PASSWORD")
private String password;
@Column(name = "EMAIL")
@JsonView(JsonViewer.Summary.class)
private String email;
@Column(name = "\"UID\"")
@JsonView(JsonViewer.Summary.class)
private String uid;
@Column(name = "NAME")
@JsonView(JsonViewer.Summary.class)
private String name;
@Column(name = "FIRSTNAME")
@JsonView(JsonViewer.UserDetails.class)
private String firstname;
@Column(name = "LASTNAME")
@JsonView(JsonViewer.UserDetails.class)
private String lastname;
@Column(name = "COMPANY_NAME")
@JsonView(JsonViewer.UserDetails.class)
private String companyName;
@OneToMany(mappedBy = "user", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JsonView(JsonViewer.UserDetails.class)
private Set<UserRole> roles;
@ManyToMany(mappedBy = "evaluators")
@JsonView(JsonViewer.UserDetails.class)
private Collection<Department> departments;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@JsonIgnore
public String getPassword() {
return password;
}
@JsonProperty
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public Set<UserRole> getRoles() {
return roles;
}
public void setRoles(Set<UserRole> roles) {
this.roles = roles;
}
public void addRole(UserRole role) {
if (roles == null) {
roles = new HashSet<>();
}
roles.add(role);
role.setUser(this);
}
public void addRole(UserType enumType) {
addRole(new UserRole(enumType.toString()));
}
public String getName() {
if (StringUtils.hasText(name)) {
return name;
}
// else return first + last
return getFirstname() + " " + getLastname();
}
public void setName(String name) {
this.name = name;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public Collection<Department> getDepartments() {
return departments;
}
public void setDepartments(Collection<Department> departments) {
this.departments = departments;
}
}