package gcom.gui.seguranca.acesso; import gcom.fachada.Fachada; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import gcom.seguranca.acesso.FiltroFuncionalidade; import gcom.seguranca.acesso.FiltroOperacao; import gcom.seguranca.acesso.Funcionalidade; import gcom.seguranca.acesso.GrupoFuncionalidadeOperacao; import gcom.seguranca.acesso.Operacao; import gcom.seguranca.acesso.usuario.Usuario; import gcom.util.filtro.ParametroSimples; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; 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; import org.apache.struts.validator.DynaValidatorForm; /** * Action respons�vel por exibir a p�gina de definir o acesso inicial que o * grupo vai possuir * * @author Pedro Alexandre * @date 28/06/2006 */ public class ExibirInserirGrupoAcessosGrupoAction extends GcomAction { /** * [UC0278] - Inserir Grupo * * @author Pedro Alexandre * @date 29/06/2006 * * @param actionMapping * @param actionForm * @param httpServletRequest * @param httpServletResponse * @return */ public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { //Recupera o from de inserir grupo DynaValidatorForm inserirGrupoActionForm = (DynaValidatorForm) actionForm; //Seta o mapeamento de retorno para a tela de inserir grupo acessos do grupo ActionForward retorno = actionMapping.findForward("inserirGrupoAcessosGrupo"); //Recupera o usu�rio que est� logado no sistema Usuario usuarioLogado = this.getUsuarioLogado(httpServletRequest); //Cria o filtro para pesquisar todas as funcionalidades cadastradas no sistema FiltroFuncionalidade filtroFuncionalidade = new FiltroFuncionalidade(); 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); filtroFuncionalidade.setConsultaSemLimites(true); //Cria o filtro para a pesquisa de opera��es FiltroOperacao filtroOperacao = new FiltroOperacao(); //Cria as vari�veis para armazenar as cole��es de funcionalidade e opera��es Collection funcionalidades = null; Collection operacoes = null; //Cria a vari�vel que vai armazenar as funcionalidades armazenadas para o usu�rio List funcionalidadesCadastradas = new ArrayList(); //Recupera os acessos do usu�rio na sess�o Collection grupoFuncionalidades = (Collection) this.getSessao(httpServletRequest).getAttribute("grupoFuncionalidades"); /* * Caso os acessos do usu�rio n�o esteja na sess�o * inst�ncia a cole��o e coloca na sess�o a cole��o vazia */ if (grupoFuncionalidades == null) { grupoFuncionalidades = new ArrayList(); this.getSessao(httpServletRequest).setAttribute("grupoFuncionalidades", grupoFuncionalidades); } //Cria a vari�vel que vai armazenar as opera��es cadastradas para o usu�rio Collection operacoesCadastradas = new ArrayList(); //Recupera o c�digo da funcionalidade do request String codigoFuncionalidade = httpServletRequest.getParameter("codigoFuncionalidade"); /* * Caso o c�digo da funcionalidade tenha sido informado * pesquisa os acessos ao que o usu�rio queest� logado tem * de acordo com os grupos a que ele pertence */ if (codigoFuncionalidade != null && !"".equals(codigoFuncionalidade) && "true".equalsIgnoreCase(httpServletRequest.getParameter("cadastrarOperacao"))) { //Cria o objeto funcionalidade e seta o id no objeto Funcionalidade funcionalidade = new Funcionalidade(); funcionalidade.setId(new Integer(codigoFuncionalidade)); //Cria o iterator das permiss�es do usu�rio Iterator iteratorGrupoFuncionalidades = grupoFuncionalidades.iterator(); //La�o para remover todas as permiss�es while (iteratorGrupoFuncionalidades.hasNext()) { GrupoFuncionalidadeOperacao grupoFuncionalidadeOperacao = (GrupoFuncionalidadeOperacao) iteratorGrupoFuncionalidades.next(); if (grupoFuncionalidadeOperacao.getFuncionalidade().getId().equals(funcionalidade.getId())) { iteratorGrupoFuncionalidades.remove(); } } //Recupera os ids das opera��es que foram marcadas pelo usu�rio String[] operacoesAInserir = (String[]) inserirGrupoActionForm.get("operacoes"); /* * Caso esxista opera��es marcadas para ser adicionadas as permiss�es * cria o relacionamento entre a funcionalidade principal e as opera��es selecionadas */ if (operacoesAInserir != null) { //La�o para gerar as permiss�es selecionadas for (int i = 0; i < operacoesAInserir.length; i++) { //Recupera o id da opera��o String id = operacoesAInserir[i]; //Flag para indicar que j� existe a permiss�o na cole��o da sess�o boolean jaTem = false; //Cria o iterator das permiss�es iteratorGrupoFuncionalidades = grupoFuncionalidades.iterator(); //La�o para verificar se j� tem a permiss�o while (iteratorGrupoFuncionalidades.hasNext()) { GrupoFuncionalidadeOperacao grupoFuncionalidadeOperacao = (GrupoFuncionalidadeOperacao) iteratorGrupoFuncionalidades.next(); if (grupoFuncionalidadeOperacao.getOperacao().getId().toString().equalsIgnoreCase(id)) { jaTem = true; } } /* * Caso n�o tenha a permiss�o * cria o relacionamento entre a opera��o e a funcionalidade e seta * nas permiss�es do usu�rio */ if (!jaTem) { //Pesquisa as opera��es da funcionalidade filtroOperacao = new FiltroOperacao(); filtroOperacao.adicionarCaminhoParaCarregamentoEntidade(FiltroOperacao.FUNCIONALIDADE); filtroOperacao.adicionarParametro(new ParametroSimples(FiltroOperacao.ID, new Integer(id))); Collection colecaoOperacoes = Fachada.getInstancia().pesquisar(filtroOperacao,Operacao.class.getSimpleName()); /* * Caso a funcionalidade tenha opera��es cadastradas * cria a permiss�o para a opera��o e seta na cole��o */ if (colecaoOperacoes != null && !colecaoOperacoes.isEmpty()) { Operacao operacao = (Operacao) colecaoOperacoes.iterator().next(); GrupoFuncionalidadeOperacao grupoFuncionalidadeOperacao = new GrupoFuncionalidadeOperacao(); grupoFuncionalidadeOperacao.setOperacao(operacao); grupoFuncionalidadeOperacao.setFuncionalidade(funcionalidade); grupoFuncionalidades.add(grupoFuncionalidadeOperacao); } } } } }else if(codigoFuncionalidade != null && !codigoFuncionalidade.equals("") ){ filtroFuncionalidade.adicionarParametro( new ParametroSimples(FiltroFuncionalidade.ID, codigoFuncionalidade)); } //Pesquisa as funcionalidades cadastradas no sistema funcionalidades = this.getFachada().pesquisar(filtroFuncionalidade,Funcionalidade.class.getName()); //Caso n�o tenha nenhuma funcionalidade cadastrada no sistema levanta uma exce��o para o usu�rio if (funcionalidades == null || funcionalidades.isEmpty()) { throw new ActionServletException("atencao.naocadastrado.funcionalidade"); } //Cria o iterator das permiss�es do usu�rio Iterator iteratorGrupoFuncionalidades = grupoFuncionalidades.iterator(); //La�o para adicionar a permiss�o a cole��o caso ainda n�o tenha //a permiss�o para a funcionalidade while (iteratorGrupoFuncionalidades.hasNext()) { GrupoFuncionalidadeOperacao grupoFuncionalidadeOperacao = (GrupoFuncionalidadeOperacao) iteratorGrupoFuncionalidades.next(); Funcionalidade funcionalidadeCadastrada = grupoFuncionalidadeOperacao.getFuncionalidade(); //Se ainda n�o tenha a permiss�o cadastrada adiciona ela a cole��o if (!funcionalidadesCadastradas.contains(funcionalidadeCadastrada)) { funcionalidadesCadastradas.add(funcionalidadeCadastrada); } } //Cria a string que vai conter o link de retorno na constru��o do menu String linkRetorno = "inserirGrupoWizardAction.do?action=exibirInserirGrupoAcessosGrupoAction"; //Cria a arvore contendo as funcionalidades a que o usu�rio tenha acesso //e seta a arvore no request String arvoreFuncionalidades = this.getFachada().construirMenuAcesso(usuarioLogado, linkRetorno,null); httpServletRequest.setAttribute("arvoreFuncionalidades",arvoreFuncionalidades); /* * Recupera a descri�a� da funcionalidade e seta a descri��o no request */ if (codigoFuncionalidade != null && !codigoFuncionalidade.equalsIgnoreCase("")) { String descricaoFuncionalidade = null; Iterator iteratorFuncionalidades = funcionalidades.iterator(); while (iteratorFuncionalidades.hasNext()) { Funcionalidade funcionalidade = (Funcionalidade) iteratorFuncionalidades.next(); if (codigoFuncionalidade.equalsIgnoreCase(funcionalidade.getId().toString())) { descricaoFuncionalidade = funcionalidade.getDescricao(); break; } } //Pesquisa as opera��es registradas para a funcionalidade operacoes = this.getFachada().recuperarOperacoesFuncionalidadesEDependentes(new Integer(codigoFuncionalidade)); /* * Pegando todas as FuncionalidadeOperacao e vendo as operacoes que * o usuario tem acesso da funcionalidade escolhida */ if (grupoFuncionalidades != null && !grupoFuncionalidades.isEmpty()) { Iterator iteratorGrupoFuncionalidadeOperacao = grupoFuncionalidades.iterator(); while (iteratorGrupoFuncionalidadeOperacao.hasNext()) { GrupoFuncionalidadeOperacao grupoFuncionalidadeOperacao = (GrupoFuncionalidadeOperacao) iteratorGrupoFuncionalidadeOperacao.next(); if (grupoFuncionalidadeOperacao.getFuncionalidade().getId().toString().equalsIgnoreCase(codigoFuncionalidade)) { operacoesCadastradas.add(grupoFuncionalidadeOperacao.getOperacao()); } } } //Remove as opera��es j� cadastradas para a funcionalidade para //recuperar as opera��es que ainda n�o foram cadastradas operacoes.removeAll(operacoesCadastradas); Collection operacoesNaoCadastradas = new ArrayList(operacoes); /* * Seta descri��o da funcionalidade selecionada no request * assim como o c�digo da fucnionalidade e as cole��es de opera��es * cadastradas e n�o cadastradas. */ httpServletRequest.setAttribute("descricaoFuncionalidade",descricaoFuncionalidade); httpServletRequest.setAttribute("idFuncionalidade",codigoFuncionalidade); httpServletRequest.setAttribute("operacoesCadastradas",operacoesCadastradas); httpServletRequest.setAttribute("operacoesNaoCadastradas",operacoesNaoCadastradas); } //Retorna o mapeamento contido na vari�vel retorno return retorno; } }