package br.com.ec.controller.managedbean;
import java.io.Serializable;
import java.util.HashSet;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.http.HttpSession;
import org.springframework.context.annotation.Scope;
import br.com.ec.core.consulta.ParametrosConsulta;
import br.com.ec.core.exception.NegocioException;
import br.com.ec.core.generic.GenericService;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.model.Perfil;
import br.com.ec.domain.model.Pessoa;
import br.com.ec.domain.model.Usuario;
import br.com.ec.domain.model.UsuarioPerfil;
import br.com.ec.domain.service.perfil.PerfilService;
import br.com.ec.domain.service.usuario.UsuarioService;
import br.com.ec.web.exception.VerificadorLancamentoException;
import br.com.ec.web.exception.VerificadorLancamentoException.CommandBean;
import br.com.ec.web.generic.AbstractBean;
import br.com.ec.web.message.LancadorMensagem;
import br.com.ec.web.util.TipoOperacao;
@Named
@Scope
("view")
public class UsuarioBean
extends AbstractBean
<Usuario
> implements Serializable {
private static final long serialVersionUID = 1L
;
private UsuarioService usuarioService
;
private PerfilService perfilService
;
private Usuario usuarioSelecionado
;
private Perfil perfilSelecionado
;
private List<Perfil
> perfis
;
private List<Perfil
> perfisSetores
;
@Inject
public UsuarioBean
(UsuarioService usuarioService, PerfilService perfilService
) {
this.
usuarioService = usuarioService
;
this.
perfilService = perfilService
;
}
@
Override
public void limparEntidade
() {
setEntidade
(new Usuario
());
}
@
Override
public GenericService
<Usuario
> getService
() {
return usuarioService
;
}
@
Override
public Usuario getEntidade
() {
return entidade
;
}
@
Override
public Usuario getId
() {
return getEntidade
();
}
public Usuario getUsuarioSelecionado
() {
return usuarioSelecionado
;
}
public void setUsuarioSelecionado
(Usuario usuarioSelecionado
) {
this.
usuarioSelecionado = usuarioSelecionado
;
}
public Perfil getPerfilSelecionado
() {
return perfilSelecionado
;
}
public void setPerfilSelecionado
(Perfil perfilSelecionado
) {
this.
perfilSelecionado = perfilSelecionado
;
}
public List<Perfil
> getPerfis
() {
if (VerificadorUtil.
estaNulo(perfis
)) {
setPerfis
(perfilService.
consultarTodos(new Perfil
()));
}
return perfis
;
}
public void setPerfis
(List<Perfil
> perfis
) {
this.
perfis = perfis
;
}
public List<Perfil
> getPerfisSetores
() {
if (VerificadorUtil.
estaNulo(perfisSetores
)) {
setPerfisSetores
(perfilService.
consultarPerfisComSetoresAtivos());
}
return perfisSetores
;
}
public void setPerfisSetores
(List<Perfil
> perfisSetores
) {
this.
perfisSetores = perfisSetores
;
}
@
Override
public void preCarregamento
() {
parametrosConsulta =
new ParametrosConsulta
<Usuario
>();
parametrosConsulta.
setEntidade(new Usuario
());
}
/***************************************************************/
@
Override
public void preDetalhar
(Usuario usuario
) {
detalhar
(usuario
);
setTipoOperacao
(TipoOperacao.
DETALHAR);
}
@
Override
public void preAlterar
(Usuario usuario
) {
detalhar
(usuario
);
setTipoOperacao
(TipoOperacao.
ALTERAR);
}
public void detalhar
(Usuario usuario
) {
setEntidade
(usuarioService.
detalhar(usuario
));
}
public void detalhar
(final Pessoa pessoa
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
Usuario usuarioConsultado = usuarioService.
consultarUsuarioPorPessoa(pessoa
);
if (VerificadorUtil.
estaNulo(usuarioConsultado
)) {
throw new NegocioException
("Usuário não existe para esta pessoa");
}
setEntidade
(usuarioService.
detalhar(usuarioConsultado
));
adicionandoParametroArgsConfirmandoAcao
(true);
}
});
}
public void selecionarPessoa
(Pessoa pessoa
) {
getEntidade
().
setPessoa(pessoa
);
}
public void retirarPessoa
() {
getEntidade
().
setPessoa(null);
}
public void limparPerfil
() {
setPerfilSelecionado
(null);
}
public void adicionarPerfil
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
if (VerificadorUtil.
estaNulo(getPerfilSelecionado
())) {
throw new NegocioException
("Selecione o perfil");
}
UsuarioPerfil usuarioPerfil =
new UsuarioPerfil
();
usuarioPerfil.
setPerfil(getPerfilSelecionado
());
usuarioPerfil.
setUsuario(getEntidade
());
if (VerificadorUtil.
estaNulo(getEntidade
().
getPerfis())) {
getEntidade
().
setPerfis(new HashSet<UsuarioPerfil
>());
}
getEntidade
().
getPerfis().
add(usuarioPerfil
);
adicionandoParametroArgsConfirmandoAcao
(true);
}
});
}
public void removerPerfil
(UsuarioPerfil usuarioPerfil
) {
getEntidade
().
getPerfis().
remove(usuarioPerfil
);
}
public void alterarSenhaUsuario
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
usuarioService.
alterarSenhaUsuario(getEntidade
());
LancadorMensagem.
lancarSucesso("SENHA ALTERADA COM SUCESSO");
}
});
}
public int sessoesAtivas
() {
try {
HttpSession sessao =
(HttpSession
) getContext
().
getExternalContext().
getSession(false);
int qnt =
(int) sessao.
getAttribute("SessionCount");
return qnt
;
} catch (Exception e
) {
}
return (Integer) null;
}
}