package org.gbif.ipt.model; import java.io.Serializable; import java.util.Date; import javax.validation.constraints.NotNull; import com.google.common.base.Objects; import org.apache.commons.lang3.StringUtils; import static com.google.common.base.Objects.equal; public class User implements Serializable, Cloneable { public enum Role { User, Manager, Publisher, Admin } private static final long serialVersionUID = 3832626162173359411L; private String email; // unique private Password password = new Password(); private String firstname; private String lastname; private Role role = Role.User; private Date lastLogin; @Override public Object clone() throws CloneNotSupportedException { User clone = (User) super.clone(); if (clone != null && getLastLogin() != null) { clone.setLastLogin((Date) getLastLogin().clone()); } return clone; } @Override public boolean equals(Object other) { if (this == other) { return true; } if (!(other instanceof User)) { return false; } User o = (User) other; return equal(email, o.email); } @NotNull public String getEmail() { return email; } public String getFirstname() { return firstname; } public Date getLastLogin() { return lastLogin; } public String getLastname() { return lastname; } public String getName() { return StringUtils.trimToNull(StringUtils.trimToEmpty(firstname) + " " + StringUtils.trimToEmpty(lastname)); } /** * Called in login page, redirected to on failed logins. */ public String getNameWithEmail() { return StringUtils.trimToNull(getName() + " <" + email + ">"); } public String getPassword() { if (password != null) { return password.password; } return null; } public Role getRole() { return role; } /** * @return true if user has admin rights */ public boolean hasAdminRights() { return Role.Admin == this.role; } @Override public int hashCode() { return Objects.hashCode(email); } /** * @return true if user has manager rights, ie is a manager or admin */ public boolean hasManagerRights() { return !(Role.User == this.role); } /** * @return true if a user has rights to register resources with gbif */ public boolean hasRegistrationRights() { return Role.Publisher == this.role || Role.Admin == this.role; } public void setEmail(String email) { if (email != null) { email = email.toLowerCase().trim(); } this.email = email; } public void setFirstname(String firstname) { this.firstname = firstname; } public void setLastLogin(Date lastLogin) { this.lastLogin = lastLogin; } public void setLastLoginToNow() { this.lastLogin = new Date(); } public void setLastname(String lastname) { this.lastname = lastname; } public void setPassword(String password) { if (password == null) { this.password = new Password(); } this.password.password = password; } public void setRole(Role role) { this.role = role == null ? Role.User : role; } @Override public String toString() { return "User " + email; } }