package gcom.gui.seguranca.acesso.usuario;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.gui.StatusWizard;
import gcom.cadastro.unidade.FiltroUnidadeOrganizacional;
import gcom.seguranca.acesso.Grupo;
import gcom.cadastro.unidade.UnidadeOrganizacional;
import gcom.seguranca.acesso.usuario.FiltroUsuario;
import gcom.seguranca.acesso.usuario.FiltroUsuarioGrupo;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.seguranca.acesso.usuario.UsuarioGrupo;
import gcom.seguranca.acesso.usuario.UsuarioSituacao;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.util.Collection;
import java.util.Iterator;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* Description of the Class
*
* @author S�vio Luiz
*/
public class ExibirControleAcessoUsuarioAction extends GcomAction {
/**
* Description of the Method
*
* @param actionMapping
* Description of the Parameter
* @param actionForm
* Description of the Parameter
* @param httpServletRequest
* Description of the Parameter
* @param httpServletResponse
* Description of the Parameter
* @return Description of the Return Value
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// localiza o action no objeto actionmapping
ActionForward retorno = actionMapping
.findForward("controlarAcessosUsuario");
// obt�m a inst�ncia da sess�o
HttpSession sessao = httpServletRequest.getSession(false);
// Usuario logado no sistema
Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
// obtem o gerenciador de paginas na sess�o
// gerenciadorPaginas = (GerenciadorPaginas)
// sessao.getAttribute("gerenciadorPaginas");
// limpa a sess�o
ControlarAcessoUsuarioActionForm controlarAcessoUsuarioActionForm = (ControlarAcessoUsuarioActionForm) actionForm;
controlarAcessoUsuarioActionForm.setPermissoesCheckBoxVazias(null);
controlarAcessoUsuarioActionForm.setPermissoesEspeciais(null);
sessao.removeAttribute("grupo");
sessao.removeAttribute("usuarioGrupo");
sessao.removeAttribute("usuarioParaAtualizar");
sessao.removeAttribute("funcionalidadesMap");
sessao.removeAttribute("arvoreFuncionalidades");
sessao.removeAttribute("colecaoPermissaoEspecial");
sessao.removeAttribute("colecaoPermissaoEspecialDesalibitado");
StatusWizard statusWizard = null;
String idUsuario = null;
if (httpServletRequest.getParameter("desfazer") == null) {
idUsuario = (String) httpServletRequest
.getParameter("idRegistroControleAcesso");
// verifica se chegou no atualizar imovel atraves da tela de filtrar
// devido a um unico registro
// ou atraves da lista de imoveis no manter imovel
statusWizard = new StatusWizard(
"controlarAcessosUsuarioWizardAction",
"concluirControlarAcessosUsuarioAction",
"cancelarControlarAcessoUsuarioAction",
"exibirManterUsuarioAction",
"exibirControleAcessoUsuarioAction.do", idUsuario);
statusWizard
.inserirNumeroPaginaCaminho(statusWizard.new StatusWizardItem(
1, "DadosGeraisPrimeiraAbaA.gif",
"DadosGeraisPrimeiraAbaD.gif",
"exibirControlarRestrincoesAcessoUsuarioAction",
"controlarRestrincoesAcessoUsuarioAction"));
statusWizard
.inserirNumeroPaginaCaminho(statusWizard.new StatusWizardItem(
2, "AcessosUsuarioUltimaAbaA.gif",
"AcessosUsuarioUltimaAbaD.gif",
"exibirControlarPermissoesEspeciaisUsuarioAction",
"controlarPremissoesEspeciaisUsuarioAction"));
// manda o statusWizard para a sessao
sessao.setAttribute("statusWizard", statusWizard);
} else {
statusWizard = (StatusWizard) sessao.getAttribute("statusWizard");
idUsuario = statusWizard.getId();
}
// Parte da verifica��o do filtro
FiltroUsuario filtroUsuario = new FiltroUsuario();
// filtroUsuario.setCampoOrderBy(FiltroUsuario.NOME_USUARIO);
filtroUsuario.adicionarParametro(new ParametroSimples(FiltroUsuario.ID,
idUsuario));
filtroUsuario
.adicionarCaminhoParaCarregamentoEntidade("unidadeOrganizacional");
filtroUsuario.adicionarCaminhoParaCarregamentoEntidade("usuarioTipo");
filtroUsuario
.adicionarCaminhoParaCarregamentoEntidade("funcionario.unidadeOrganizacional");
filtroUsuario
.adicionarCaminhoParaCarregamentoEntidade("usuarioAbrangencia");
filtroUsuario
.adicionarCaminhoParaCarregamentoEntidade("usuarioSituacao");
filtroUsuario.adicionarCaminhoParaCarregamentoEntidade("localidadeElo");
filtroUsuario.adicionarCaminhoParaCarregamentoEntidade("localidade");
Collection colecaoUsuario = Fachada.getInstancia().pesquisar(
filtroUsuario, Usuario.class.getName());
Usuario usuarioParaAtualizar = (Usuario) Util
.retonarObjetoDeColecao(colecaoUsuario);
// [FS0008] - Verificar permiss�o para atualiza��o
UnidadeOrganizacional unidadeEmpresa = usuarioParaAtualizar
.getUnidadeOrganizacional();
if (unidadeEmpresa == null) {
if (usuarioParaAtualizar.getFuncionario() != null
&& !usuarioParaAtualizar.getFuncionario().equals("")) {
unidadeEmpresa = usuarioParaAtualizar.getFuncionario()
.getUnidadeOrganizacional();
}
}
// caso o usu�rio que esteja efetuando a inser��o n�o
// seja
// do grupo de administradores
FiltroUsuarioGrupo filtroUsuarioGrupo = new FiltroUsuarioGrupo();
filtroUsuarioGrupo.adicionarParametro(new ParametroSimples(
FiltroUsuarioGrupo.USUARIO_ID, usuario.getId()));
filtroUsuarioGrupo.adicionarParametro(new ParametroSimples(
FiltroUsuarioGrupo.GRUPO_ID, Grupo.ADMINISTRADOR));
Collection colecaoUsuarioGrupo = Fachada.getInstancia().pesquisar(
filtroUsuarioGrupo, UsuarioGrupo.class.getName());
if (colecaoUsuarioGrupo == null || colecaoUsuarioGrupo.isEmpty()) {
// se a unidade de lotacao do usuario que estiver
// efetuando seja diferente da unidade de
// lota��o informada
if (usuario.getUnidadeOrganizacional() != null
&& unidadeEmpresa != null
&& usuario.getUnidadeOrganizacional().getId() != null
&& !usuario.getUnidadeOrganizacional().getId().equals(
unidadeEmpresa.getId())) {
// recupera a unidade do usu�rio
FiltroUnidadeOrganizacional filtroUnidadeEmpresaUsuario = new FiltroUnidadeOrganizacional();
filtroUnidadeEmpresaUsuario
.adicionarParametro(new ParametroSimples(
FiltroUnidadeOrganizacional.ID, usuario
.getUnidadeOrganizacional().getId()));
Collection colecaoUnidadeEmpresa = Fachada.getInstancia()
.pesquisar(filtroUnidadeEmpresaUsuario,
UnidadeOrganizacional.class.getName());
UnidadeOrganizacional unidadeEmpresaUsuario = null;
if (colecaoUnidadeEmpresa != null
&& !colecaoUnidadeEmpresa.isEmpty()) {
unidadeEmpresaUsuario = (UnidadeOrganizacional) Util
.retonarObjetoDeColecao(colecaoUnidadeEmpresa);
}
// se o nivel da unidade de lota��o do usu�rio
// que
// estiver efetuando a inser��o seja maior ou
// igual
// ao nivel de unidade de lota��o informada
if (unidadeEmpresaUsuario != null) {
if (unidadeEmpresaUsuario.getUnidadeTipo().getNivel()
.intValue() >= unidadeEmpresa.getUnidadeTipo()
.getNivel().intValue()) {
throw new ActionServletException(
"atencao.usuario.sem.permissao.atualizacao",
usuario.getLogin(), unidadeEmpresa.getDescricao());
}
}
// ou a unidade superior da unidade de lota��o
// informada seja diferente da unidade de
// lota��o do usu�rio
// enquanto o nivel superior da unidade de
// lota��o n�o esteja no mesmo nivel da unidade
// de lota��o do usu�rio
boolean mesmoNivel = true;
Integer idNivelUsuario = unidadeEmpresaUsuario.getUnidadeTipo()
.getNivel().intValue();
UnidadeOrganizacional unidadeEmpresaSuperior = null;
while (mesmoNivel) {
Integer idUnidadeEmpresaSuperior = null;
if (unidadeEmpresaSuperior == null) {
idUnidadeEmpresaSuperior = unidadeEmpresa
.getUnidadeSuperior().getId();
} else {
idUnidadeEmpresaSuperior = unidadeEmpresaSuperior
.getUnidadeSuperior().getId();
}
// recupera a unidade do usu�rio
FiltroUnidadeOrganizacional filtroUnidadeEmpresaSuperior = new FiltroUnidadeOrganizacional();
filtroUnidadeEmpresaSuperior
.adicionarParametro(new ParametroSimples(
FiltroUnidadeOrganizacional.ID,
idUnidadeEmpresaSuperior));
Collection colecaoUnidadeEmpresaSuperior = Fachada
.getInstancia().pesquisar(
filtroUnidadeEmpresaSuperior,
UnidadeOrganizacional.class.getName());
if (colecaoUnidadeEmpresaSuperior != null
&& !colecaoUnidadeEmpresaSuperior.isEmpty()) {
unidadeEmpresaSuperior = (UnidadeOrganizacional) Util
.retonarObjetoDeColecao(colecaoUnidadeEmpresaSuperior);
}
if (unidadeEmpresaSuperior != null) {
// caso seja o mesmo nivel
if (unidadeEmpresaSuperior.getUnidadeTipo().getNivel()
.equals(idNivelUsuario)) {
mesmoNivel = false;
// caso o id da unidade empresa
// informado for diferente do id da
// unidade empresa do usu�rio no
// mesmo nivel
if (!unidadeEmpresaSuperior.getId().equals(
unidadeEmpresaUsuario.getId())) {
throw new ActionServletException(
"atencao.usuario.sem.permissao.atualizacao",
usuario.getLogin(),
unidadeEmpresa.getDescricao());
}
}
}
}
}
}
// [FS0018] - Verificar situa��o do usu�rio
if (usuarioParaAtualizar.getUsuarioSituacao() != null
&& !usuarioParaAtualizar.getUsuarioSituacao().getId().equals(
UsuarioSituacao.ATIVO)) {
throw new ActionServletException("atencao.usuario.situacao",
usuarioParaAtualizar.getLogin(), usuarioParaAtualizar
.getUsuarioSituacao().getDescricaoAbreviada());
}
// cria um array de string para os ids do grupo
Integer[] idsGrupos = null;
Collection colecaoGruposUsuario = Fachada.getInstancia()
.pesquisarGruposUsuario(new Integer(idUsuario));
if (colecaoGruposUsuario != null && !colecaoGruposUsuario.isEmpty()) {
idsGrupos = new Integer[colecaoGruposUsuario.size()];
Iterator iteratorGrupos = colecaoGruposUsuario.iterator();
int i = 0;
while (iteratorGrupos.hasNext()) {
Grupo grupo = (Grupo) iteratorGrupos.next();
idsGrupos[i] = grupo.getId();
i++;
}
} else {
// [SF0020] - Verificar grupos de acesso para o usu�rio
throw new ActionServletException("atencao.usuario.sem.grupo");
}
Collection gruposFuncionalidadeOperacao = Fachada.getInstancia()
.pesquisarGruposFuncionalidadeOperacoes(idsGrupos);
// [SF0020] - Verificar grupos funcionalidade operacao de acesso para o
// usu�rio
if ( Util.isVazioOrNulo(gruposFuncionalidadeOperacao)) {
throw new ActionServletException(
"atencao.usuario.sem.grupo.funcionalidade.operacao");
}
if (usuarioParaAtualizar.getId() != null
&& !usuarioParaAtualizar.getId().equals("")) {
statusWizard.adicionarItemHint("C�digo:", usuarioParaAtualizar
.getId().toString());
}
if (usuarioParaAtualizar.getNomeUsuario() != null
&& !usuarioParaAtualizar.getNomeUsuario().equals("")) {
statusWizard.adicionarItemHint("Nome:", usuarioParaAtualizar
.getNomeUsuario());
}
if (usuarioParaAtualizar.getUsuarioTipo() != null
&& !usuarioParaAtualizar.getUsuarioTipo().equals("")) {
if (usuarioParaAtualizar.getUsuarioTipo().getId() != null
&& !usuarioParaAtualizar.getUsuarioTipo().equals("")) {
statusWizard.adicionarItemHint("Tipo:", usuarioParaAtualizar
.getUsuarioTipo().getDescricao());
}
}
if (usuarioParaAtualizar.getUsuarioAbrangencia() != null
&& !usuarioParaAtualizar.getUsuarioAbrangencia().equals("")) {
if (usuarioParaAtualizar.getUsuarioAbrangencia().getId() != null
&& !usuarioParaAtualizar.getUsuarioAbrangencia().equals("")) {
statusWizard.adicionarItemHint("Abrang�ncia:",
usuarioParaAtualizar.getUsuarioAbrangencia()
.getDescricao());
}
}
sessao.setAttribute("statusWizard", statusWizard);
sessao.setAttribute("usuarioParaAtualizar", usuarioParaAtualizar);
sessao.setAttribute("usuario", usuario);
sessao.setAttribute("grupo", idsGrupos);
return retorno;
}
}