package br.edu.utfpr.spring.mvc.model;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import org.apache.commons.lang3.StringUtils;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
@Entity
@Getter
@Setter
@EqualsAndHashCode(of="username")
public class Usuario implements UserDetails {
private static final long serialVersionUID = -6814600362790849624L;
private static final BCryptPasswordEncoder bcry = new BCryptPasswordEncoder();
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
private String username;
private String password;
@ManyToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
private Set<Permissao> permissoes;
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
List<GrantedAuthority> auto = new ArrayList<GrantedAuthority>();
auto.addAll(getPermissoes());
return auto;
}
public void addPermissao(Permissao permissao){
if(permissoes == null){
permissoes = new HashSet<Permissao>();
}
permissoes.add(permissao);
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
public String getEncodePassword(String pass){
if(StringUtils.isNotEmpty(pass)){
return bcry.encode(pass);
}
return pass;
}
}