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.util.ConstantesSistema;
import gcom.util.filtro.ComparacaoTexto;
import gcom.util.filtro.ComparacaoTextoCompleto;
import gcom.util.filtro.ParametroSimples;
import java.util.Collection;
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;
/**
* Action respons�vel por gerar um filtro de opera��o para pesquisa de acordo
* com os par�metros informados pelo usu�rio
*
* @author Pedro Alexandre
* @date 12/05/2006
*/
public class FiltrarOperacaoAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
//Cria a variavel de retorno e seta o mapeamento para o exibirManterOperacaoAction
ActionForward retorno = actionMapping.findForward("retornarFiltroOperacao");
//Recupera o form de filtrar opera��o
FiltrarOperacaoActionForm filtrarOperacaoActionForm = (FiltrarOperacaoActionForm) actionForm;
//Cria uma inst�ncia da sess�o
HttpSession sessao = httpServletRequest.getSession(false);
//Cria uma inst�ncia da fachada
Fachada fachada = Fachada.getInstancia();
//Cria uma flag que vai indicar se o usu�rio informou ao menos um campo para a filtragem
Boolean peloMenosUmParametroInformado = false;
//Recupera os campos informados pelo usu�rio na p�gina para filtrar as opera��es
String idOperacao = filtrarOperacaoActionForm.getIdOperacao();
String descricaoOperacao = filtrarOperacaoActionForm.getDescricaoOperacao();
Integer idTipoOperacao = new Integer(filtrarOperacaoActionForm.getIdTipoOperacao());
String idFuncionalidade = filtrarOperacaoActionForm.getIdFuncionalidade();
String tipoPesquisa = filtrarOperacaoActionForm.getTipoPesquisa();
//Recupera o indicador de atualiza��o do request
// 1 check --- null uncheck
String indicadorAtualizar = httpServletRequest.getParameter("indicadorAtualizar");
//Cria o filtro e carrega os objetos necess�rios no filtro para o exibirManterOperacaoAction
FiltroOperacao filtroOperacao = new FiltroOperacao();
filtroOperacao.adicionarCaminhoParaCarregamentoEntidade("funcionalidade");
filtroOperacao.adicionarCaminhoParaCarregamentoEntidade("operacaoTipo");
filtroOperacao.adicionarCaminhoParaCarregamentoEntidade("idOperacaoPesquisa");
filtroOperacao.adicionarCaminhoParaCarregamentoEntidade("tabelaColuna");
filtroOperacao.adicionarCaminhoParaCarregamentoEntidade(FiltroOperacao.ARGUMENTO_PESQUISA);
//Caso o us�rio tenha informado o c�digo da opera��o
//seta o c�digo da opera��o no filtro e indica que o usu�rio
//selecionou um par�metro para a filtragem
if (idOperacao != null && !idOperacao.equals("")){
filtroOperacao.adicionarParametro(new ParametroSimples(FiltroOperacao.ID,idOperacao));
peloMenosUmParametroInformado = true;
}
//Caso o us�rio tenha informado descri��o da opera��o
//seta a descri��o da opera��o no filtro e indica que o usu�rio
//selecionou um par�metro para a filtragem
if ((descricaoOperacao != null)&& (!descricaoOperacao.trim().equals(""))) {
if (tipoPesquisa != null && tipoPesquisa.equals(ConstantesSistema.TIPO_PESQUISA_COMPLETA.toString())) {
filtroOperacao.adicionarParametro(new ComparacaoTextoCompleto(FiltroOperacao.DESCRICAO, descricaoOperacao));
} else {
filtroOperacao.adicionarParametro(new ComparacaoTexto(FiltroOperacao.DESCRICAO,descricaoOperacao));
}
peloMenosUmParametroInformado = true;
}
//Caso o us�rio tenha informado o tipo da opera��o
//seta o c�digo do tipo da opera��o no filtro e indica que o usu�rio
//selecionou um par�metro para a filtragem
if (idTipoOperacao != null && idTipoOperacao.intValue() != ConstantesSistema.NUMERO_NAO_INFORMADO) {
filtroOperacao.adicionarParametro(new ParametroSimples(FiltroOperacao.OPERACAO_TIPO_ID,idTipoOperacao.toString()));
peloMenosUmParametroInformado = true;
}
//Caso o us�rio tenha informado o c�digo da funcionalidade
//seta o c�digo da funcionalidade no filtro e indica que o usu�rio
//selecionou um par�metro para a filtragem
if (idFuncionalidade != null && !idFuncionalidade.trim().equals("")) {
//[FS0002] - Verificar exist�ncia da funcionalidade
//Pesquisa a funcionalidade informada pelo usu�rio no sistema
FiltroFuncionalidade filtroFuncionalidade = new FiltroFuncionalidade();
filtroFuncionalidade.adicionarParametro(new ParametroSimples(FiltroFuncionalidade.ID,idFuncionalidade));
Collection colecaoFuncionalidade = fachada.pesquisar(filtroFuncionalidade,Funcionalidade.class.getName());
//Caso a funcionalidade informada n�o exista no sistema
//levanta uma exece��o indicanf]do que a funcionalidade n�o existe
//Caso contr�rio seta oc�digo da funcionalidade no filtro
if(colecaoFuncionalidade == null || colecaoFuncionalidade.isEmpty()){
throw new ActionServletException("atencao.funcionalidade.inexistente");
}else{
filtroOperacao.adicionarParametro(new ParametroSimples(FiltroOperacao.FUNCIONALIDADE_ID,idFuncionalidade));
peloMenosUmParametroInformado = true;
}
}
//[FS0003] - Verificar preenchimento dos campos
if (!peloMenosUmParametroInformado){
throw new ActionServletException("atencao.filtro.nenhum_parametro_informado");
}
//Seta na sess�o o filtro criado para pesquisa de opera��o e a flag
//indicando que o usu�rio que ir diretopara a p�gina de atualizar
sessao.setAttribute("filtroOperacao",filtroOperacao);
sessao.setAttribute("indicadorAtualizar",indicadorAtualizar );
//Retorna o mapeamento contido na vari�vel retorno
return retorno;
}
}