private static void testeInterface() { IServicoMensageria servicoMensageria = Ativador.Get <IServicoMensageria>(); AutenticarUsuarioResponse responseAutenticacao = (AutenticarUsuarioResponse) servicoMensageria.ProcessarMensagem( new AutenticarUsuarioRequest() { CodigoUsuario = "Admin", Senha = "123" }); ReceberArvoreComandosInterfaceResponse respostaArvore = (ReceberArvoreComandosInterfaceResponse) servicoMensageria.ProcessarMensagem( new ReceberArvoreComandosInterfaceRequest() { CodigoSessao = responseAutenticacao.Sessao.CodigoSessao, CodigoGrupoComandoInterface = "default" }); ReceberGrupoComandoInterfaceResponse respostaReceber = (ReceberGrupoComandoInterfaceResponse) servicoMensageria.ProcessarMensagem( new ReceberGrupoComandoInterfaceRequest() { CodigoSessao = responseAutenticacao.Sessao.CodigoSessao, CodigoGrupoComandoInterface = "default" }); }
/// <summary> /// Solicita o processamento dos comandos de interface. Verifica os comandos permitidos e retorna /// a árvore. /// </summary> /// <param name="parametros"></param> /// <returns></returns> public ReceberArvoreComandosInterfaceResponse ReceberArvoreComandosInterface(ReceberArvoreComandosInterfaceRequest parametros) { // Referencia para o servico de seguranca IServicoSeguranca servicoSeguranca = Ativador.Get <IServicoSeguranca>(); // Prepara a resposta ReceberArvoreComandosInterfaceResponse resposta = new ReceberArvoreComandosInterfaceResponse() { CodigoMensagemRequest = parametros.CodigoMensagem, CodigoGrupoComandoInterface = parametros.CodigoGrupoComandoInterface }; // Pega grupo de comandos ReceberGrupoComandoInterfaceResponse respostaReceber = this.ReceberGrupoComandoInterface( new ReceberGrupoComandoInterfaceRequest() { CodigoSessao = parametros.CodigoSessao, CodigoGrupoComandoInterface = parametros.CodigoGrupoComandoInterface }); // Transforma a árvore de comandos em lista List <ComandoInterfaceInfo> listaComandos = respostaReceber.GrupoComandoInterface.ListarComandos(); // Cria lista indicando quais comandos são grupo List <string> listaGrupos = (from c in listaComandos where c.Filhos.Count > 0 select c.CodigoComandoInterface).ToList(); // Salva o código do item na tag da segurança para enviar para validação foreach (ComandoInterfaceInfo item in listaComandos) { item.Seguranca.Tag = item.CodigoComandoInterface; } // Cria lista de itens de seguranca a validar List <ItemSegurancaInfo> itensSeguranca = (from c in listaComandos select c.Seguranca).ToList(); // Solicita validação dos itens ValidarItemSegurancaResponse respostaValidacao = servicoSeguranca.ValidarItemSeguranca( new ValidarItemSegurancaRequest() { CodigoSessao = parametros.CodigoSessao, ItensSeguranca = itensSeguranca }); // Cria dicionario com os itens validados para reassociar aos comandos Dictionary <string, ItemSegurancaInfo> dicionarioItens = new Dictionary <string, ItemSegurancaInfo>(); foreach (ItemSegurancaInfo item in respostaValidacao.ItensSeguranca) { dicionarioItens.Add(item.Tag, item); } // Reassocia itens de segurança validado aos comandos foreach (ComandoInterfaceInfo comando in listaComandos) { if (dicionarioItens.ContainsKey(comando.CodigoComandoInterface)) { comando.Seguranca = dicionarioItens[comando.CodigoComandoInterface]; } } // Cria dicionário de pais e filhos // O dicionário está montado como codigoFilho, codigoPai Dictionary <string, ComandoInterfaceInfo> dicionarioPaisFilhos = new Dictionary <string, ComandoInterfaceInfo>(); foreach (ComandoInterfaceInfo comandoPai in listaComandos) { foreach (ComandoInterfaceInfo comandoFilho in comandoPai.Filhos) { dicionarioPaisFilhos.Add(comandoFilho.CodigoComandoInterface, comandoPai); } } // Remove os não válidados pela segurança List <ComandoInterfaceInfo> comandosRemover = (from c in listaComandos where !c.Seguranca.Valido.HasValue || c.Seguranca.Valido.Value == false select c).ToList(); foreach (ComandoInterfaceInfo comandoRemover in comandosRemover) { if (dicionarioPaisFilhos.ContainsKey(comandoRemover.CodigoComandoInterface)) { dicionarioPaisFilhos[comandoRemover.CodigoComandoInterface].Filhos.Remove(comandoRemover); } else { respostaReceber.GrupoComandoInterface.ComandosInterfaceRaiz.Remove(comandoRemover); } } // Remover os menus de grupo que não tem filhos List <ComandoInterfaceInfo> comandosRemover2 = (from c in listaComandos where listaGrupos.Contains(c.CodigoComandoInterface) && c.Filhos.Count == 0 select c).ToList(); foreach (ComandoInterfaceInfo comandoRemover in comandosRemover2) { if (dicionarioPaisFilhos.ContainsKey(comandoRemover.CodigoComandoInterface)) { dicionarioPaisFilhos[comandoRemover.CodigoComandoInterface].Filhos.Remove(comandoRemover); } else { respostaReceber.GrupoComandoInterface.ComandosInterfaceRaiz.Remove(comandoRemover); } } // Retorna a arvore resposta.ComandosInterfaceRaiz = respostaReceber.GrupoComandoInterface.ComandosInterfaceRaiz; // Retorna return(resposta); }