/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE file at the root of the source
* tree and available online at
*
* https://github.com/keeps/roda
*/
package org.roda.core.data.v2.user;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.xml.bind.annotation.XmlRootElement;
import org.roda.core.data.common.RodaConstants;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
/**
* This is a user of RODA.
*
* @author Rui Castro
* @author Luis Faria <lfaria@keep.pt>
*/
@XmlRootElement(name = RodaConstants.RODA_OBJECT_USER)
@JsonInclude(JsonInclude.Include.ALWAYS)
public class User extends RodaPrincipal {
private static final long serialVersionUID = 6514790636010895870L;
/** Groups this user belongs to. */
private Set<String> groups = new HashSet<>();
/** Email address. */
private String email;
/** Is a guest user? */
private boolean guest;
/** IP address. */
private String ipAddress = "";
/** LDAP info. */
private String resetPasswordToken = null;
/** LDAP info. */
private String resetPasswordTokenExpirationDate = null;
/** LDAP info. */
private String emailConfirmationToken = null;
/** LDAP info. */
private String emailConfirmationTokenExpirationDate = null;
/** LDAP description. */
private String extra = null;
/**
* Constructor.
*/
public User() {
this((String) null);
}
/**
* Constructs a new user with the given name.
*
* @param name
* the name of the new user.
*/
public User(final String name) {
this(name, name, false);
}
public User(final User user) {
this(user.getId(), user.getName(), user.getFullName(), user.isActive(), user.getAllRoles(), user.getDirectRoles(),
user.getGroups(), user.getEmail(), user.isGuest(), user.getIpAddress(), user.getExtra(),
user.getResetPasswordToken(), user.getResetPasswordTokenExpirationDate(), user.getEmailConfirmationToken(),
user.getEmailConfirmationTokenExpirationDate());
}
public User(final String id, final String name, final boolean guest) {
this(id, name, null, guest);
}
public User(final String id, final String name, final String email, final boolean guest) {
this(id, name, email, guest, "", new HashSet<String>(), new HashSet<String>(), new HashSet<String>());
}
public User(final String id, final String name, final String email, final boolean guest, final String ipAddress,
final Set<String> allRoles, final Set<String> directRoles, final Set<String> groups) {
this(id, name, email, guest, ipAddress, allRoles, directRoles, groups, null, null, null, null);
}
public User(final String id, final String name, final String email, final boolean guest, final String ipAddress,
final Set<String> allRoles, final Set<String> directRoles, final Set<String> groups,
final String resetPasswordToken, final String resetPasswordTokenExpirationDate, final String emailConfirmationToken,
final String emailConfirmationTokenExpirationDate) {
this(id, name, name, true, allRoles, directRoles, groups, email, guest, ipAddress, null, resetPasswordToken,
resetPasswordTokenExpirationDate, emailConfirmationToken, emailConfirmationTokenExpirationDate);
}
public User(final String id, final String name, final String fullName, final boolean active,
final Set<String> allRoles, final Set<String> directRoles, final Set<String> groups, final String email,
final boolean guest, final String ipAddress, final String extra, final String resetPasswordToken,
final String resetPasswordTokenExpirationDate, final String emailConfirmationToken,
final String emailConfirmationTokenExpirationDate) {
super(id, name, fullName, active, allRoles, directRoles);
this.groups = groups;
this.email = email;
this.guest = guest;
this.ipAddress = ipAddress;
this.extra = extra;
this.resetPasswordToken = resetPasswordToken;
this.resetPasswordTokenExpirationDate = resetPasswordTokenExpirationDate;
this.emailConfirmationToken = emailConfirmationToken;
this.emailConfirmationTokenExpirationDate = emailConfirmationTokenExpirationDate;
}
public String getEmail() {
return email;
}
public void setEmail(final String email) {
this.email = email;
}
public boolean isGuest() {
return guest;
}
public void setGuest(final boolean guest) {
this.guest = guest;
}
public String getIpAddress() {
return ipAddress;
}
public void setIpAddress(final String ipAddress) {
this.ipAddress = ipAddress;
}
/**
* Get {@link User}'s extra information.
*
* @return a {@link String} with user's extra information.
*/
public String getExtra() {
return extra;
}
/**
* Set {@link User}'s extra information.
*
* @param extra
* a {@link String} with user's extra information.
*/
public void setExtra(final String extra) {
this.extra = extra;
}
/**
* @return the resetPasswordToken
*/
public String getResetPasswordToken() {
return resetPasswordToken;
}
/**
* @param resetPasswordToken
* the resetPasswordToken to set
*/
public void setResetPasswordToken(final String resetPasswordToken) {
this.resetPasswordToken = resetPasswordToken;
}
/**
* @return the resetPasswordTokenExpirationDate
*/
public String getResetPasswordTokenExpirationDate() {
return resetPasswordTokenExpirationDate;
}
/**
* @param resetPasswordTokenExpirationDate
* the resetPasswordTokenExpirationDate to set
*/
public void setResetPasswordTokenExpirationDate(final String resetPasswordTokenExpirationDate) {
this.resetPasswordTokenExpirationDate = resetPasswordTokenExpirationDate;
}
/**
* @return the emailConfirmationToken
*/
public String getEmailConfirmationToken() {
return emailConfirmationToken;
}
/**
* @param emailConfirmationToken
* the emailConfirmationToken to set
*/
public void setEmailConfirmationToken(final String emailConfirmationToken) {
this.emailConfirmationToken = emailConfirmationToken;
}
/**
* @return the emailConfirmationTokenExpirationDate
*/
public String getEmailConfirmationTokenExpirationDate() {
return emailConfirmationTokenExpirationDate;
}
/**
* @param emailConfirmationTokenExpirationDate
* the emailConfirmationTokenExpirationDate to set
*/
public void setEmailConfirmationTokenExpirationDate(final String emailConfirmationTokenExpirationDate) {
this.emailConfirmationTokenExpirationDate = emailConfirmationTokenExpirationDate;
}
public Set<String> getGroups() {
return groups;
}
public void setGroups(final Set<String> groups) {
this.groups = groups;
}
@Override
public boolean isUser() {
return true;
}
public void addGroup(final String group) {
if (groups == null) {
groups = new HashSet<>();
}
groups.add(group);
}
public void removeGroup(final String group) {
if (groups.contains(group)) {
groups.remove(group);
}
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((email == null) ? 0 : email.hashCode());
result = prime * result + ((emailConfirmationToken == null) ? 0 : emailConfirmationToken.hashCode());
result = prime * result
+ ((emailConfirmationTokenExpirationDate == null) ? 0 : emailConfirmationTokenExpirationDate.hashCode());
result = prime * result + ((extra == null) ? 0 : extra.hashCode());
result = prime * result + ((groups == null) ? 0 : groups.hashCode());
result = prime * result + (guest ? 1231 : 1237);
result = prime * result + ((ipAddress == null) ? 0 : ipAddress.hashCode());
result = prime * result + ((resetPasswordToken == null) ? 0 : resetPasswordToken.hashCode());
result = prime * result
+ ((resetPasswordTokenExpirationDate == null) ? 0 : resetPasswordTokenExpirationDate.hashCode());
return result;
}
@Override
public boolean equals(final Object obj) {
if (this == obj)
return true;
if (obj == null || !super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
final User other = (User) obj;
if (email == null) {
if (other.email != null)
return false;
} else if (!email.equals(other.email))
return false;
if (emailConfirmationToken == null) {
if (other.emailConfirmationToken != null)
return false;
} else if (!emailConfirmationToken.equals(other.emailConfirmationToken))
return false;
if (emailConfirmationTokenExpirationDate == null) {
if (other.emailConfirmationTokenExpirationDate != null)
return false;
} else if (!emailConfirmationTokenExpirationDate.equals(other.emailConfirmationTokenExpirationDate))
return false;
if (extra == null) {
if (other.extra != null)
return false;
} else if (!extra.equals(other.extra))
return false;
if (groups == null) {
if (other.groups != null)
return false;
} else if (!groups.equals(other.groups))
return false;
if (guest != other.guest)
return false;
if (ipAddress == null) {
if (other.ipAddress != null)
return false;
} else if (!ipAddress.equals(other.ipAddress))
return false;
if (resetPasswordToken == null) {
if (other.resetPasswordToken != null)
return false;
} else if (!resetPasswordToken.equals(other.resetPasswordToken))
return false;
if (resetPasswordTokenExpirationDate == null) {
if (other.resetPasswordTokenExpirationDate != null)
return false;
} else if (!resetPasswordTokenExpirationDate.equals(other.resetPasswordTokenExpirationDate))
return false;
return true;
}
@Override
public String toString() {
final StringBuilder builder = new StringBuilder();
builder.append("User [");
if (groups != null) {
builder.append("groups=");
builder.append(groups);
builder.append(", ");
}
if (email != null) {
builder.append("email=");
builder.append(email);
builder.append(", ");
}
builder.append("guest=");
builder.append(guest);
builder.append(", ");
if (ipAddress != null) {
builder.append("ipAddress=");
builder.append(ipAddress);
builder.append(", ");
}
if (resetPasswordToken != null) {
builder.append("resetPasswordToken=");
builder.append(resetPasswordToken);
builder.append(", ");
}
if (resetPasswordTokenExpirationDate != null) {
builder.append("resetPasswordTokenExpirationDate=");
builder.append(resetPasswordTokenExpirationDate);
builder.append(", ");
}
if (emailConfirmationToken != null) {
builder.append("emailConfirmationToken=");
builder.append(emailConfirmationToken);
builder.append(", ");
}
if (emailConfirmationTokenExpirationDate != null) {
builder.append("emailConfirmationTokenExpirationDate=");
builder.append(emailConfirmationTokenExpirationDate);
builder.append(", ");
}
if (extra != null) {
builder.append("extra=");
builder.append(extra);
}
builder.append("]");
return builder.toString();
}
@Override
public List<String> liteFields() {
return Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.MEMBERS_NAME);
}
@JsonIgnore
@Override
public int getClassVersion() {
return 1;
}
}