PmdbUser.java

package org.xandercat.pmdb.dto;

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.xandercat.pmdb.config.PmdbGrantedAuthority;

/**
 * User class that also doubles as UserDetails for Spring security.
 * 
 * Password should always be the encrypted form.
 * 
 * @author Scott Arnold
 */
public class PmdbUser implements UserDetails {

	private static final long serialVersionUID = 563446069682826416L;
	
	private String username;
	private String password;
	private String firstName;
	private String lastName;
	private String email;
	private boolean enabled;
	private Date createdDate;
	private Date updatedDate;
	private Date lastAccessDate;
	private Set<PmdbGrantedAuthority> grantedAuthorities = new HashSet<PmdbGrantedAuthority>();
	
	public PmdbUser() {
	}
	public PmdbUser(String username) {
		this.username = username;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getFirstName() {
		return firstName;
	}
	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}
	public String getLastName() {
		return lastName;
	}
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public Date getCreatedDate() {
		return createdDate;
	}
	public void setCreatedDate(Date createdDate) {
		this.createdDate = createdDate;
	}
	public Date getUpdatedDate() {
		return updatedDate;
	}
	public void setUpdatedDate(Date updatedDate) {
		this.updatedDate = updatedDate;
	}
	public Date getLastAccessDate() {
		return lastAccessDate;
	}
	public void setLastAccessDate(Date lastAccessDate) {
		this.lastAccessDate = lastAccessDate;
	}
	public boolean isEnabled() {
		return enabled;
	}
	public void setEnabled(boolean enabled) {
		this.enabled = enabled;
	}
	public Set<PmdbGrantedAuthority> getGrantedAuthorities() {
		return grantedAuthorities;
	}
	public void setGrantedAuthorities(Collection<PmdbGrantedAuthority> grantedAuthorities) {
		this.grantedAuthorities.clear();
		this.grantedAuthorities.addAll(grantedAuthorities);
	}
	public void setGrantedAuthorities(PmdbGrantedAuthority... grantedAuthorities) {
		setGrantedAuthorities(Arrays.asList(grantedAuthorities));
	}
	public void addGrantedAuthority(PmdbGrantedAuthority grantedAuthority) {
		grantedAuthorities.add(grantedAuthority);
	}
	@Override
	public Collection<? extends GrantedAuthority> getAuthorities() {
		return Collections.unmodifiableCollection(grantedAuthorities);
	}
	@Override
	public boolean isAccountNonExpired() {
		return true;
	}
	@Override
	public boolean isAccountNonLocked() {
		return true;
	}
	@Override
	public boolean isCredentialsNonExpired() {
		return true;
	}
}