package gcom.gui.seguranca.acesso.usuario;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.FiltroFuncionalidade;
import gcom.seguranca.acesso.Funcionalidade;
import gcom.seguranca.acesso.Operacao;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.filtro.ParametroSimples;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* Action respons�vel por exibir a p�gina de definir o acesso inicial que o
* usuario vai possuir
*
* @author S�vio Luiz
* @date 28/06/2006
*/
public class ExibirControlarRestrincoesAcessoUsuarioAction extends GcomAction {
/**
* < <Descri��o do m�todo>>
*
* @param actionMapping
* Descri��o do par�metro
* @param actionForm
* Descri��o do par�metro
* @param httpServletRequest
* Descri��o do par�metro
* @param httpServletResponse
* Descri��o do par�metro
* @return Descri��o do retorno
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ControlarAcessoUsuarioActionForm controlarAcessoUsuarioActionForm = (ControlarAcessoUsuarioActionForm) actionForm;
// cria a vari�vel de retorno e seta o mapeamento para a p�gina de
// controlar
ActionForward retorno = actionMapping.findForward("controlarRestrincoesAcessoUsuario");
// verifica se foi clicado no bot�o para salvar as opera��es alteradas
String botaoSalvar = httpServletRequest.getParameter("botaoSalvar");
Usuario usuarioAtualizar = (Usuario) this.getSessao(httpServletRequest).getAttribute("usuarioParaAtualizar");
Integer[] idsGrupos = (Integer[]) this.getSessao(httpServletRequest).getAttribute("grupo");
controlarAcessoUsuarioActionForm.setNomeUsuario(usuarioAtualizar.getNomeUsuario());
controlarAcessoUsuarioActionForm.setLoginUsuario(usuarioAtualizar.getLogin());
// cria o filtro de funcionalidade
FiltroFuncionalidade filtroFuncionalidade = new FiltroFuncionalidade();
// seta o filtro para retornar todas as funcionalidades que s�o ponto de
// entrada
filtroFuncionalidade.adicionarParametro(new ParametroSimples(
FiltroFuncionalidade.INDICADOR_PONTO_ENTRADA,
new Integer(1)));
filtroFuncionalidade.adicionarCaminhoParaCarregamentoEntidade(FiltroFuncionalidade.OPERACOES);
filtroFuncionalidade.adicionarCaminhoParaCarregamentoEntidade(FiltroFuncionalidade.FUNCIONALIDADE_DEPENDENCIAS_BY_ID_INDEPENDENCIA);
filtroFuncionalidade.adicionarCaminhoParaCarregamentoEntidade(FiltroFuncionalidade.FUNCIONALIDADE_DEPENDENCIAS);
// cria a cole��o de funcionalidades
Collection<Funcionalidade> funcionalidades = null;
Map<Integer, Map<Integer, Collection<Operacao>>> funcionalidadesMap =
(Map<Integer, Map<Integer, Collection<Operacao>>>) this.getSessao(httpServletRequest).getAttribute("funcionalidadesMap");
if (funcionalidadesMap == null) {
funcionalidadesMap = new HashMap<Integer, Map<Integer, Collection<Operacao>>>();
}
// pega o c�digo da funcionalidade selecionada na p�gina
String codigoFuncionalidade = httpServletRequest.getParameter("codigoFuncionalidade");
// cadastrando as operacoes selecionadas
// String codigoFuncionalidade = form.getFuncionalidade();
if (codigoFuncionalidade != null && !"".equals(codigoFuncionalidade) && botaoSalvar != null) {
// pegando as operacoes escolhidas
String[] operacoesAInserir = controlarAcessoUsuarioActionForm.getOperacoes();
funcionalidadesMap =
this.getFachada().recuperaFuncionalidadeOperacaoRestrincao(
new Integer(codigoFuncionalidade),
operacoesAInserir,
funcionalidadesMap);
// manda o map de opera��es para a sess�o
Map<Integer, Collection<Operacao>> operacoesMap =
funcionalidadesMap.get(new Integer(codigoFuncionalidade));
httpServletRequest.setAttribute("operacoesMap", operacoesMap);
Collection<Operacao> operacoesMarcadas = operacoesMap.get(1);
Collection<Operacao> operacoesDesmarcadas = operacoesMap.get(2);
Collection<Operacao> operacoesDesabilitadas = operacoesMap.get(3);
httpServletRequest.setAttribute("operacoesMarcadas",operacoesMarcadas);
httpServletRequest.setAttribute("operacoesDesmarcadas",operacoesDesmarcadas);
httpServletRequest.setAttribute("operacoesDesabilitadas",operacoesDesabilitadas);
} else {
if (codigoFuncionalidade != null && !codigoFuncionalidade.equals("")) {
funcionalidadesMap =
this.getFachada().organizarOperacoesComValor(
new Integer(codigoFuncionalidade),
funcionalidadesMap,
idsGrupos,
usuarioAtualizar);
// manda o map de opera��es para a sess�o
Map<Integer, Collection<Operacao>> operacoesMap =
funcionalidadesMap.get(new Integer(codigoFuncionalidade));
httpServletRequest.setAttribute("operacoesMap", operacoesMap);
Collection<Operacao> operacoesMarcadas = operacoesMap.get(1);
Collection<Operacao> operacoesDesmarcadas = operacoesMap.get(2);
Collection<Operacao> operacoesDesabilitadas = operacoesMap.get(3);
httpServletRequest.setAttribute("operacoesMarcadas",operacoesMarcadas);
httpServletRequest.setAttribute("operacoesDesmarcadas",operacoesDesmarcadas);
httpServletRequest.setAttribute("operacoesDesabilitadas",operacoesDesabilitadas);
} else {
String linkRetorno =
"controlarAcessosUsuarioWizardAction.do?action=exibirControlarRestrincoesAcessoUsuarioAction";
// chama o met�do para criar a �rvore das funcionalidades
String arvoreFuncionalidades =
this.getFachada().construirMenuAcesso(
usuarioAtualizar,
linkRetorno,
null);
// manda o javascript da �rvore para a p�gina no request
this.getSessao(httpServletRequest).setAttribute("arvoreFuncionalidades",arvoreFuncionalidades);
}
}
/**
* Com a funcionalidade passada pesquisa todas as funcionalidade Ocultas
* com as funcionalidade Ocultas retira as operacoes
*/
// pesquisa a cole��o de funcionalidades cadastradas no sistema
funcionalidades =
this.getFachada().pesquisar(filtroFuncionalidade,Funcionalidade.class.getName());
// se nenhuma funcionalidade cadastrada no sistema
if (funcionalidades == null || funcionalidades.isEmpty()) {
// manda o erro no request atual
throw new ActionServletException("atencao.naocadastrado.funcionalidade");
}
// se for informado o c�digo da funcionalidade no request
if (codigoFuncionalidade != null && !codigoFuncionalidade.equalsIgnoreCase("")) {
// cria a vari�vel que vai conter a descri��o da funcionalidade
String descricaoFuncionalidade = null;
// coloca a cole��o de funcionalidades no iterator
Iterator<Funcionalidade> iteratorFuncionalidades = funcionalidades.iterator();
// cria a cole��o de funcionalidades ocultas(dependentes)
// Collection funcionalidadesOcultas = new ArrayList();
// la�o para encontrar a funcionalidade informada
while (iteratorFuncionalidades.hasNext()) {
// recupera a funcionalidade do iterator
Funcionalidade funcionalidade = iteratorFuncionalidades.next();
// se o c�digo da funcionalidade for igual ao c�digo da
// funcionalidade informada
if (codigoFuncionalidade.equalsIgnoreCase(funcionalidade.getId().toString())) {
// recupera a descri��o da funcionalidade
descricaoFuncionalidade = funcionalidade.getDescricao();
break;
}
}
// manda a descri��o da funcionalidade no request
httpServletRequest.setAttribute("descricaoFuncionalidade",
descricaoFuncionalidade);
// manda a c�digo da funcionalidade no request
httpServletRequest.setAttribute("idFuncionalidade",
codigoFuncionalidade);
}
this.getSessao(httpServletRequest).setAttribute("funcionalidadesMap", funcionalidadesMap);
// retorna o mapeamento contido na vari�vel retorno
return retorno;
}
}