package edu.harvard.iq.dataverse.authorization.providers.builtin; import edu.harvard.iq.dataverse.ValidateEmail; import edu.harvard.iq.dataverse.authorization.AuthenticatedUserDisplayInfo; import java.io.Serializable; 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.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; import org.hibernate.validator.constraints.NotBlank; /** * * @author xyang * @author mbarsinai */ @NamedQueries({ @NamedQuery( name="BuiltinUser.findAll", query = "SELECT u FROM BuiltinUser u ORDER BY u.lastName"), @NamedQuery( name="BuiltinUser.findByUserName", query = "SELECT u FROM BuiltinUser u WHERE u.userName=:userName"), @NamedQuery( name="BuiltinUser.findByEmail", query = "SELECT o FROM BuiltinUser o WHERE LOWER(o.email) = LOWER(:email)"), @NamedQuery( name="BuiltinUser.listByUserNameLike", query = "SELECT u FROM BuiltinUser u WHERE u.userName LIKE :userNameLike") }) @Entity @Table(indexes = {@Index(columnList="lastName")}) // for sorting the NamedQuery BuiltinUser.findAll public class BuiltinUser implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @NotBlank(message = "Please enter a username.") @Size(min=2, max=60, message ="Username must be between 2 and 60 characters.") @Pattern(regexp = "[a-zA-Z0-9\\_\\-\\.]*", message = "Found an illegal character(s). Valid characters are a-Z, 0-9, '_', '-', and '.'.") @Column(nullable = false, unique=true) private String userName; @NotBlank(message = "Please enter a valid email address.") @ValidateEmail(message = "Please enter a valid email address.") @Column(nullable = false, unique=true) private String email; @NotBlank(message = "Please enter your first name.") private String firstName; @NotBlank(message = "Please enter your last name.") private String lastName; private int passwordEncryptionVersion; private String encryptedPassword; private String affiliation; private String position; public void updateEncryptedPassword( String encryptedPassword, int algorithmVersion ) { setEncryptedPassword(encryptedPassword); setPasswordEncryptionVersion(algorithmVersion); } 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; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } 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 getEncryptedPassword() { return encryptedPassword; } /** * JPA-use only. Humans should call {@link #updateEncryptedPassword(java.lang.String, int)} * and update the password and the algorithm at the same time. * * @param encryptedPassword * @deprecated */ @Deprecated() public void setEncryptedPassword(String encryptedPassword) { this.encryptedPassword = encryptedPassword; } public String getAffiliation() { return affiliation; } public void setAffiliation(String affiliation) { this.affiliation = affiliation; } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } public String getDisplayName(){ return this.getFirstName() + " " + this.getLastName(); } public AuthenticatedUserDisplayInfo getDisplayInfo() { return new AuthenticatedUserDisplayInfo(getFirstName(), getLastName(), getEmail(), getAffiliation(), getPosition() ); } @Override public int hashCode() { int hash = 0; hash += (id != null ? id.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { if (!(object instanceof BuiltinUser)) { return false; } BuiltinUser other = (BuiltinUser) object; return !((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))); } @Override public String toString() { return "BuiltinUser{" + "id=" + id + ", userName=" + userName + ", email=" + email + '}'; } public int getPasswordEncryptionVersion() { return passwordEncryptionVersion; } public void setPasswordEncryptionVersion(int passwordEncryptionVersion) { this.passwordEncryptionVersion = passwordEncryptionVersion; } }