package gcom.gui.seguranca.acesso;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.FiltroFuncionalidade;
import gcom.seguranca.acesso.FiltroGrupoFuncionalidadeOperacao;
import gcom.seguranca.acesso.FiltroModulo;
import gcom.seguranca.acesso.FiltroOperacao;
import gcom.seguranca.acesso.Funcionalidade;
import gcom.seguranca.acesso.Grupo;
import gcom.seguranca.acesso.GrupoFuncionalidadeOperacao;
import gcom.seguranca.acesso.GrupoFuncionalidadeOperacaoPK;
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 pelo pr�-processamento da p�gina de definir os acessos do grupo
*
* @author Pedro Alexandre
* @date 03/07/2006
*/
public class ExibirAtualizarGrupoAcessosGrupoAction extends GcomAction {
/**
* <Breve descri��o sobre o caso de uso>
*
* [UC0279] - Manter Grupo
*
* @author Pedro Alexandre
* @date 03/07/2006
*
* @param actionMapping
* @param actionForm
* @param httpServletRequest
* @param httpServletResponse
* @return
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
//Recupera o form de atualizar grupo
DynaValidatorForm atualizarGrupoActionForm = (DynaValidatorForm) actionForm;
//Seta o mapeamento para a tela de definir acessos do grupo
ActionForward retorno = actionMapping.findForward("atualizarGrupoAcessosGrupo");
Usuario usuarioLogado = (Usuario) this.getSessao(httpServletRequest).getAttribute("usuarioLogado");
//Recupera o grupo da sess�o
Grupo grupo = (Grupo) this.getSessao(httpServletRequest).getAttribute("grupo");
// Cria o filtro de modulo
FiltroModulo filtroModulo = new FiltroModulo();
// Seta a ordena��o da pesquisa
filtroModulo.setCampoOrderBy(FiltroModulo.DESCRICAO_MODULO);
// 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);
filtroFuncionalidade.setConsultaSemLimites(true);
// Cria o filtro de opera��o
FiltroOperacao filtroOperacao = new FiltroOperacao();
// Cria a cole��o de funcionalidades
Collection funcionalidades = null;
// Cria a cole��o de opera��es
Collection operacoes = null;
// Cria a cole��o de funcionalidades cadastradas
List funcionalidadesCadastradas = new ArrayList();
// Cria a cole��o de grupo e funcionalidades
Collection grupoFuncionalidades = (Collection) this.getSessao(httpServletRequest).getAttribute("grupoFuncionalidades");
if (grupoFuncionalidades == null) {
FiltroGrupoFuncionalidadeOperacao filtroGrupoFuncionalidadeOperacao = new FiltroGrupoFuncionalidadeOperacao();
filtroGrupoFuncionalidadeOperacao.adicionarParametro(new ParametroSimples(FiltroGrupoFuncionalidadeOperacao.GRUPO_ID, grupo.getId()));
filtroGrupoFuncionalidadeOperacao.adicionarCaminhoParaCarregamentoEntidade(FiltroGrupoFuncionalidadeOperacao.FUNCIONALIDADE);
filtroGrupoFuncionalidadeOperacao.adicionarCaminhoParaCarregamentoEntidade(FiltroGrupoFuncionalidadeOperacao.GRUPO);
filtroGrupoFuncionalidadeOperacao.adicionarCaminhoParaCarregamentoEntidade(FiltroGrupoFuncionalidadeOperacao.OPERACAO);
filtroGrupoFuncionalidadeOperacao.setConsultaSemLimites(true);
grupoFuncionalidades = this.getFachada().pesquisar(filtroGrupoFuncionalidadeOperacao,GrupoFuncionalidadeOperacao.class.getSimpleName());
if (grupoFuncionalidades == null) {
grupoFuncionalidades = new ArrayList();
}
this.getSessao(httpServletRequest).setAttribute("grupoFuncionalidades", grupoFuncionalidades);
}
// Cria a cole��o de opera��es cadastradas
Collection operacoesCadastradas = new ArrayList();
// Pega o c�digo da funcionalidade selecionada na p�gina
String codigoFuncionalidade = httpServletRequest.getParameter("codigoFuncionalidade");
// Cadastrando as operacoes selecionadas
if (codigoFuncionalidade != null && !"".equals(codigoFuncionalidade) && "true".equalsIgnoreCase(httpServletRequest.getParameter("cadastrarOperacao"))) {
Funcionalidade funcionalidade = new Funcionalidade();
funcionalidade.setId(new Integer(codigoFuncionalidade));
grupoFuncionalidades = (Collection) this.getSessao(httpServletRequest).getAttribute("grupoFuncionalidades");
if (grupoFuncionalidades == null) {
grupoFuncionalidades = new ArrayList();
this.getSessao(httpServletRequest).setAttribute("grupoFuncionalidades", grupoFuncionalidades);
}
// Apaga todas as operacoes da funcionalidade
// para ser carregadas um a um novamente
// isso eh no caso de excluir alguma funcionalidade
Iterator iteratorGrupoFuncionalidades = grupoFuncionalidades.iterator();
while (iteratorGrupoFuncionalidades.hasNext()) {
GrupoFuncionalidadeOperacao gfo = (GrupoFuncionalidadeOperacao) iteratorGrupoFuncionalidades.next();
if (gfo.getFuncionalidade().getId().equals(funcionalidade.getId())) {
iteratorGrupoFuncionalidades.remove();
}
}
// Pegando as operacoes escolhidas
String[] operacoesAInserir = (String[]) atualizarGrupoActionForm.get("operacoes");
if (operacoesAInserir != null) {
for (int i = 0; i < operacoesAInserir.length; i++) {
// Para todas as operacoes escolhidas
String id = operacoesAInserir[i];
boolean jaTem = false;
// Verifica se ja tem foi selecionado
iteratorGrupoFuncionalidades = grupoFuncionalidades.iterator();
while (iteratorGrupoFuncionalidades.hasNext()) {
// Verifica se eh a mesma funcionalidade e a mesma
// operacao para ser excluida
GrupoFuncionalidadeOperacao grupoFuncionalidadeOperacao = (GrupoFuncionalidadeOperacao) iteratorGrupoFuncionalidades.next();
if (grupoFuncionalidadeOperacao.getFuncionalidade().getId().equals(funcionalidade.getId()) && grupoFuncionalidadeOperacao.getOperacao().getId().toString().equalsIgnoreCase(id)) {
jaTem = true;
}
}
if (!jaTem) {
// Se nao tem cria o filtro para adicionar a operacao
filtroOperacao = new FiltroOperacao();
filtroOperacao.adicionarCaminhoParaCarregamentoEntidade(FiltroOperacao.FUNCIONALIDADE);
filtroOperacao.adicionarParametro(new ParametroSimples(FiltroOperacao.ID, new Integer(id)));
filtroOperacao.setConsultaSemLimites(true);
Collection colecaoOperacao = this.getFachada().pesquisar(filtroOperacao, Operacao.class.getSimpleName());
if (colecaoOperacao != null && !colecaoOperacao.isEmpty()) {
Operacao operacao = (Operacao) colecaoOperacao.iterator().next();
GrupoFuncionalidadeOperacao grupoFuncionalidadeOperacao = new GrupoFuncionalidadeOperacao();
GrupoFuncionalidadeOperacaoPK grupoFuncionalidadeOperacaoPK = new GrupoFuncionalidadeOperacaoPK();
grupoFuncionalidadeOperacaoPK.setFuncionalidadeId(funcionalidade.getId());
grupoFuncionalidadeOperacaoPK.setOperacaoId(operacao.getId());
grupoFuncionalidadeOperacaoPK.setGrupoId(grupo.getId());
grupoFuncionalidadeOperacao.setOperacao(operacao);
grupoFuncionalidadeOperacao.setFuncionalidade(funcionalidade);
grupoFuncionalidadeOperacao.setGrupo(grupo);
grupoFuncionalidadeOperacao.setComp_id(grupoFuncionalidadeOperacaoPK);
grupoFuncionalidades.add(grupoFuncionalidadeOperacao);
}
}
}
}
}
// Pesquisa a cole��o de funcionalidades cadastradas no sistema
funcionalidades = this.getFachada().pesquisarTabelaAuxiliar(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");
}
// Coloca a cole��o de grupo e funcionalidades no iterator
Iterator iteratorGrupoFuncionalidades = grupoFuncionalidades.iterator();
// La�o para adicionar as funcionalidades do grupo na cole��o
while (iteratorGrupoFuncionalidades.hasNext()) {
// Pega o objeto GrupoFuncionalidadeOperacao da cole��o
GrupoFuncionalidadeOperacao grupoFuncionalidadeOperacao = (GrupoFuncionalidadeOperacao) iteratorGrupoFuncionalidades.next();
// Pega o objeto funcionalidade
Funcionalidade funcionalidadeCadastrada = grupoFuncionalidadeOperacao.getFuncionalidade();
// Se n�o existe o objeto na cole��o
if (!funcionalidadesCadastradas.contains(funcionalidadeCadastrada)) {
// Se a funcionalidade for ponto de entrada
// adiciona o objeto funcionalidade na cole��o
funcionalidadesCadastradas.add(funcionalidadeCadastrada);
}
}
// Chama o met�do para criar a �rvore das funcionalidades
String arvoreFuncionalidades =
this.getFachada().construirMenuAcesso(
usuarioLogado,
"atualizarGrupoWizardAction.do?action=exibirAtualizarGrupoAcessosGrupoAction",
grupo.getId());
// Manda o javascript da �rvore para a p�gina no request
httpServletRequest.setAttribute("arvoreFuncionalidades", arvoreFuncionalidades);
/**
* Com a funcionalidade passada pesquisa todas as funcionalidade Ocultas
* com as funcionalidade Ocultas retira as operacoes
*/
// 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 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 = (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();
// Recupera a cole��o de funcionalidades ocultas
//funcionalidadesOcultas = funcionalidade.getFuncionalidadeDependencias();
// Para a pesquisa
break;
}
}
operacoes =
this.getFachada().recuperarOperacoesFuncionalidadesEDependentes(new Integer(codigoFuncionalidade));
/**
* Pegando todas as FuncionalidadeOperacao e vendo as operacoes que
* o usuario tem acesso da funcionlidade escolhido
*/
if (grupoFuncionalidades != null && !grupoFuncionalidades.isEmpty()) {
Iterator iterator = grupoFuncionalidades.iterator();
while (iterator.hasNext()) {
GrupoFuncionalidadeOperacao grupoFuncionalidadeOperacao = (GrupoFuncionalidadeOperacao) iterator.next();
if (grupoFuncionalidadeOperacao.getFuncionalidade().getId().toString().equalsIgnoreCase(codigoFuncionalidade)) {
operacoesCadastradas.add(grupoFuncionalidadeOperacao.getOperacao());
}
}
}
// Remove a cole��o de opera��es cadastradas da cole��o
operacoes.removeAll(operacoesCadastradas);
// Cria a cole��o de opera��es n�o cadastradas
Collection operacoesNaoCadastradas = new ArrayList(operacoes);
// Manda a descri��o da funcionalidade no request
httpServletRequest.setAttribute("descricaoFuncionalidade", descricaoFuncionalidade);
// Manda a c�digo da funcionalidade no request
httpServletRequest.setAttribute("idFuncionalidade", codigoFuncionalidade);
// Manda a cole��o de opera��es cadastradas no request
httpServletRequest.setAttribute("operacoesCadastradas", operacoesCadastradas);
// Manda a cole��o de opera��es n�o cadastradas no request
httpServletRequest.setAttribute("operacoesNaoCadastradas", operacoesNaoCadastradas);
}
// Retorna o mapeamento contido na vari�vel retorno
return retorno;
}
}