package org.freezo.domain; import java.util.Collection; import java.util.Date; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToOne; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Version; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @Entity @JsonIgnoreProperties({ "version", "username", "password", "accountNonExpired", "accountNonLocked", "credentialsNonExpired", "enabled", "authorities" }) public class User implements UserDetails { private static final long serialVersionUID = -194182420823397720L; @Id @GeneratedValue private long id; private String firstName; private String lastName; private String email; private String location; private String website; private String picture; private String bio; @Temporal(TemporalType.TIMESTAMP) private Date modifiedAt; @Temporal(TemporalType.TIMESTAMP) private final Date createdAt = new Date(); @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user") private final Account account; @Version private long version; public User() { account = new Account(); getAccount().setUser(this); } @Override public String toString() { final ToStringBuilder builder = new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE); return builder.append("id", id).append("username", account.getUsername()).toString(); } public long getId() { return id; } public String getFirstName() { return firstName; } public void setFirstName(final String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(final String lastName) { this.lastName = lastName; } public String getEmail() { return email; } public void setEmail(final String email) { this.email = email; } public String getLocation() { return location; } public void setLocation(final String location) { this.location = location; } public String getWebsite() { return website; } public void setWebsite(final String website) { this.website = website; } public String getPicture() { return picture; } public void setPicture(final String picture) { this.picture = picture; } public String getBio() { return bio; } public void setBio(final String bio) { this.bio = bio; } public Account getAccount() { return account; } @Override public Collection<? extends GrantedAuthority> getAuthorities() { return getAccount().getAuthorities(); } @Override public String getPassword() { return getAccount().getPassword(); } @Override public String getUsername() { return getAccount().getUsername(); } @Override public boolean isAccountNonExpired() { return getAccount().isAccountNonExpired(); } @Override public boolean isAccountNonLocked() { return getAccount().isAccountNonLocked(); } @Override public boolean isCredentialsNonExpired() { return getAccount().isCredentialsNonExpired(); } @Override public boolean isEnabled() { return getAccount().isEnabled(); } public Date getModifiedAt() { return modifiedAt; } public void setModifiedAt(Date modifiedAt) { this.modifiedAt = modifiedAt; } public Date getCreatedAt() { return createdAt; } }