/* * This file is subject to the terms and conditions defined in file 'LICENSE.txt', which is part of this source code package. */ package won.owner.model; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import javax.persistence.*; import java.net.URI; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Set; /** * 'wonuser' used as table name because 'user' is a Postgres keyword * see http://www.postgresql.org/message-id/Pine.NEB.4.10.10008291649550.4357-100000@scimitar.caravan.com */ @Entity @Table( name = "wonuser", //don't use 'user' - see above uniqueConstraints = @UniqueConstraint(columnNames = {"username"}) ) @JsonIgnoreProperties(ignoreUnknown = true) public class User implements UserDetails{ @Id @GeneratedValue @Column(name = "id") private Long id; @Column(name = "username") private String username; @Column(name = "password") private String password; @OneToMany(fetch = FetchType.EAGER) @OrderBy("creationDate desc") private List<UserNeed> userNeeds; @Column(name = "role") private String role; @Column(name = "email") private String email; //TODO: eager is dangerous here, but we need it as the User object is kept in the http session which outlives the //hibernate session. However, this wastes space and may lead to memory issues during high usage. Fix it. @ElementCollection( fetch = FetchType.EAGER) private Set<URI> draftURIs; @Transient private Collection<SimpleGrantedAuthority> authorities; public User() { } public User(final String username, final String password) { this.username = username; this.password = password; this.role ="ROLE_ACCOUNT"; this.email = this.username; } public User(final String username, final String password, String role) { this.username = username; this.password = password; this.role = role; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", role='" + role + '\'' + '}'; } public Long getId() { return id; } public void setId(final Long id) { this.id = id; } @Override public boolean isAccountNonExpired() { return true; } @Override public boolean isAccountNonLocked() { return true; } @Override public boolean isCredentialsNonExpired() { return true; } @Override public boolean isEnabled() { return true; } @Override public Collection<? extends GrantedAuthority> getAuthorities() { authorities = new ArrayList<SimpleGrantedAuthority>(1); authorities.add(new SimpleGrantedAuthority(role)); return authorities; } @Override public String getPassword() { return password; } @Override public String getUsername() { return username; } public void setUsername(final String username) { this.username = username; } public void setPassword(final String password) { this.password = password; } /* public List<Need> getNeeds() { return needs; } */ public void addNeedUri(UserNeed userNeed){ this.userNeeds.add(userNeed); } public List<UserNeed> getUserNeeds() { return userNeeds; } public void setUserNeeds(final List<UserNeed> userNeeds) { this.userNeeds = userNeeds; } public String getEmail() { return email; } public void setEmail(final String email) { this.email = email; } public String getRole() { return role; } public void setRole(final String role) { this.role = role; } public Set<URI> getDraftURIs(){ return draftURIs; } /*public void setNeeds(final List<Need> needs) { this.needs = needs; } */ public void setDrafts(final Set<URI> draftURIs) { this.draftURIs = draftURIs; } @Override public boolean equals(final Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; final User user = (User) o; if (id != null ? !id.equals(user.id) : user.id != null) return false; if (userNeeds != null ? !userNeeds.equals(user.userNeeds) : user.userNeeds != null) return false; if (password != null ? !password.equals(user.password) : user.password != null) return false; if (username != null ? !username.equals(user.username) : user.username != null) return false; if (role != null ? !role.equals(user.role) : user.role != null) return false; if (email != null ? !email.equals(user.email) : user.email != null) return false; return true; } @Override public int hashCode() { int result = id != null ? id.hashCode() : 0; result = 31 * result + (username != null ? username.hashCode() : 0); result = 31 * result + (password != null ? password.hashCode() : 0); result = 31 * result + (userNeeds != null ? userNeeds.hashCode() : 0); result = 31 * result + (role != null ? role.hashCode() : 0); result = 31 * result + (email != null ? email.hashCode() : 0); return result; } }