/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.rjconsultores.ventaboletos.entidad; import java.io.Serializable; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.Date; import java.util.List; import javax.persistence.Basic; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.SequenceGenerator; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; import org.apache.commons.lang.StringUtils; import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import com.rjconsultores.ventaboletos.service.ConstanteService; import com.rjconsultores.ventaboletos.utilerias.ApplicationProperties; import com.rjconsultores.ventaboletos.utilerias.DateUtil; import com.rjconsultores.ventaboletos.web.utilerias.spring.AppContext; /** * * @author rodrigo */ @Entity @SequenceGenerator(name = "USUARIO_SEQ", sequenceName = "USUARIO_SEQ", allocationSize = 1) @Table(name = "USUARIO") public class Usuario implements Serializable, Authentication, UserDetails { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO, generator = "USUARIO_SEQ") @Basic(optional = false) @Column(name = "USUARIO_ID") private Integer usuarioId; @Column(name = "NOMBUSUARIO") private String nombusuario; @Column(name = "NOMBPATERNO") private String nombpaterno; @Column(name = "NOMBMATERNO") private String nombmaterno; @Column(name = "ACTIVO") private Boolean activo; @Column(name = "FECMODIF") @Temporal(TemporalType.TIMESTAMP) private Date fecmodif; @Column(name = "USUARIOMODIF_ID") private Integer usuariomodifId; @Column(name = "DESCCONTRASENA") private String senha; @Column(name = "CVEUSUARIO") private String claveUsuario; @Column(name = "DESCCORREO") private String descCorreo; @OneToMany(mappedBy = "usuario", cascade = CascadeType.ALL, fetch = FetchType.EAGER) @Fetch(FetchMode.SELECT) private List usuarioPerfilList; @Column(name = "INDCORTEAUTOMATICO") private Boolean indCorteAutomatico; @OneToOne @JoinColumn(name = "EMPLEADO_ID") private Empleado empleado; @OneToMany(mappedBy = "usuarioLog", cascade = CascadeType.ALL, fetch = FetchType.EAGER) @Fetch(FetchMode.SELECT) private List usuarioEmpresaList; @OneToMany(mappedBy = "usuario", cascade = CascadeType.ALL, fetch = FetchType.EAGER) @Fetch(FetchMode.SELECT) private List usuarioUbicacionList; @Column(name = "FECCONTRASENA") @Temporal(TemporalType.TIMESTAMP) private Date fecContrasena; @Column(name = "DESCMAC") private String descMac; @Column(name = "TEMPODEVOLUCAOPASSAGEM") private Integer tempoDevolucaoPassagem; @Column(name = "INDEXPIRASENHA") private Boolean indExpiraSenha; /* Lista de permissoes do usuario */ @Transient private List listClavesPermisos; public String getClaveUsuario() { return claveUsuario; } public void setClaveUsuario(String claveUsuario) { this.claveUsuario = claveUsuario; } public Usuario() { tempoDevolucaoPassagem = 0; indExpiraSenha = false; } public Usuario(Integer usuarioId) { this.usuarioId = usuarioId; tempoDevolucaoPassagem = 0; indExpiraSenha = false; } public Integer getUsuarioId() { return usuarioId; } public void setUsuarioId(Integer usuarioId) { this.usuarioId = usuarioId; } public String getNombusuario() { return nombusuario; } public void setNombusuario(String nombusuario) { this.nombusuario = nombusuario; } public String getNombpaterno() { return nombpaterno; } public void setNombpaterno(String nombpaterno) { this.nombpaterno = nombpaterno; } public String getNombmaterno() { return nombmaterno; } public void setNombmaterno(String nombmaterno) { this.nombmaterno = nombmaterno; } public Boolean getActivo() { return activo; } public void setActivo(Boolean activo) { this.activo = activo; } public Date getFecmodif() { return fecmodif; } public void setFecmodif(Date fecmodif) { this.fecmodif = fecmodif; } public Integer getUsuariomodifId() { return usuariomodifId; } public void setUsuariomodifId(Integer usuariomodifId) { this.usuariomodifId = usuariomodifId; } public String getSenha() { return senha; } public void setSenha(String senha) { this.senha = senha; } public List getUsuarioEmpresaList() { List tmp = new ArrayList(); if (usuarioEmpresaList != null) { for (UsuarioEmpresa ce : this.usuarioEmpresaList) { if (ce.getActivo()) { tmp.add(ce); } } } return tmp; } public void setUsuarioEmpresaList(List usuarioEmpresaList) { this.usuarioEmpresaList = usuarioEmpresaList; } public List getUsuarioPerfilList() { List tmp = new ArrayList(); if (usuarioPerfilList != null) { for (UsuarioPerfil cp : this.usuarioPerfilList) { if (cp.getActivo()) { tmp.add(cp); } } } return tmp; } public List getEmpresa() { List tmp = new ArrayList(); if (usuarioEmpresaList != null) { for (UsuarioEmpresa cp : this.usuarioEmpresaList) { if ((cp.getActivo())) { tmp.add(cp.getEmpresa()); } } } return tmp; } public void setUsuarioPerfilList(List usuarioPerfilList) { this.usuarioPerfilList = usuarioPerfilList; } public Empleado getEmpleado() { return empleado; } public void setEmpleado(Empleado empleado) { this.empleado = empleado; } public void updateUsuarioUbicacionForClonedUser(){ for (UsuarioUbicacion ub : usuarioUbicacionList){ ub.setUsuarioubicacionId(null); } } public void updateUsuarioEmpresaForClonedUser(){ for (UsuarioEmpresa ue : usuarioEmpresaList){ ue.setUsuarioEmpresaId(null); } } public void updateUsuarioPerfilForClonedUser(){ for (UsuarioPerfil ub : usuarioPerfilList){ ub.setUsuarioperfilId(null); } } @Override public int hashCode() { int hash = 0; hash += (usuarioId != null ? usuarioId.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { if (!(object instanceof Usuario)) { return false; } Usuario other = (Usuario) object; if ((this.usuarioId == null && other.usuarioId != null) || (this.usuarioId != null && !this.usuarioId.equals(other.usuarioId))) { return false; } return true; } @Override public String toString() { return getNombUsuarioCompleto(); } public Collection getAuthorities() { return new ArrayList(); } public String getPassword() { return this.senha; } public String getUsername() { return this.nombusuario; } public boolean isAccountNonExpired() { return true; } public boolean isAccountNonLocked() { return true; } public boolean isCredentialsNonExpired() { if (ApplicationProperties.getInstance().contrasenaValidaComplejidad()) { if (getFecContrasena() != null) { ConstanteService constanteService = (ConstanteService) AppContext.getApplicationContext().getBean("constanteService"); Constante contante = constanteService.buscarPorNomeConstante("CANT_DIAS_CONTRASENA"); Integer maxPrazoCambioContrasena = Integer.valueOf(contante.getValorconstante()); Date maxFechaContrasena = DateUtil.somarDias(getFecContrasena(), maxPrazoCambioContrasena); if (Calendar.getInstance().getTime().after(maxFechaContrasena)) { return false; } } else { return false; } } return true; } public boolean isEnabled() { return true; } public Object getCredentials() { return new Object(); } public Object getDetails() { return new Object(); } public Object getPrincipal() { return this; } public boolean isAuthenticated() { return Boolean.TRUE; } public void setAuthenticated(boolean bln) throws IllegalArgumentException { } public String getName() { return this.getNombusuario(); } public String getDescCorreo() { return descCorreo; } public void setDescCorreo(String descCorreo) { this.descCorreo = descCorreo; } public Boolean getIndCorteAutomatico() { return indCorteAutomatico; } public void setIndCorteAutomatico(Boolean indCorteAutomatico) { this.indCorteAutomatico = indCorteAutomatico; } public List getUsuarioUbicacionList() { List ubicacionActivos = new ArrayList(); if (usuarioUbicacionList != null) for (UsuarioUbicacion ubicacion : usuarioUbicacionList) if (ubicacion.getActivo()) ubicacionActivos.add(ubicacion); return ubicacionActivos; } public void setUsuarioUbicacionList(List usuarioUbicacionList) { this.usuarioUbicacionList = usuarioUbicacionList; } public Date getFecContrasena() { return fecContrasena; } public void setFecContrasena(Date fecContrasena) { this.fecContrasena = fecContrasena; } public String getNombUsuarioCompleto() { StringBuilder sNome = new StringBuilder(getNombusuario()); if(StringUtils.isNotBlank(getNombpaterno())) { sNome.append(" ") .append(getNombpaterno()); } if(StringUtils.isNotBlank(getNombmaterno())) { sNome.append(" ") .append(getNombmaterno()); } return sNome.toString(); } public List getListClavesPermisos() { return listClavesPermisos; } public void setListClavesPermisos(List listClavesPermisos) { this.listClavesPermisos = listClavesPermisos; } @Transient public boolean isPermisoClave(String clave) { return listClavesPermisos != null && listClavesPermisos.contains(clave); } public String getDescMac() { return descMac; } public void setDescMac(String descMac) { this.descMac = descMac; } public Integer getTempoDevolucaoPassagem() { return tempoDevolucaoPassagem; } public void setTempoDevolucaoPassagem(Integer tempoDevolucaoPassagem) { if(tempoDevolucaoPassagem == null){ tempoDevolucaoPassagem = 0; } this.tempoDevolucaoPassagem = tempoDevolucaoPassagem; } public Boolean getIndExpiraSenha() { return indExpiraSenha; } public void setIndExpiraSenha(Boolean indExpiraSenha) { this.indExpiraSenha = indExpiraSenha; } }