package com.aperture_software.glados_wiki.entities;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.mongodb.morphia.annotations.Entity;
import org.mongodb.morphia.annotations.Id;
import org.mongodb.morphia.annotations.Reference;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
/**
* User: jhyun
* Date: 13. 11. 26
* Time: 오후 3:49
*/
@Entity
public class User implements Serializable, Cloneable, UserAuthentication {
private static final long serialVersionUID = 5699885838424429756L;
@Id
private String username;
@NotNull
private String email;
private byte[] passwordSalt;
private String password;
private boolean enabled = true;
private String description;
private String timezone = TimeZone.getDefault().getID();
@Reference
private List<Group> groups = new ArrayList<Group>();
private Date ctime = new Date();
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 byte[] getPasswordSalt() {
return passwordSalt;
}
public void setPasswordSalt(byte[] passwordSalt) {
this.passwordSalt = passwordSalt;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public List<Group> getGroups() {
return groups;
}
public void setGroups(List<Group> groups) {
this.groups = groups;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Date getCtime() {
return ctime;
}
public void setCtime(Date ctime) {
this.ctime = ctime;
}
public String getTimezone() {
return timezone;
}
public void setTimezone(String timezone) {
this.timezone = timezone;
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
@Override
public String getAuthenticationName() {
return this.getUsername();
}
@Override
public String getAuthenticationType() {
return "user";
}
}