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.FiltroOperacaoTipo;
import gcom.seguranca.acesso.Funcionalidade;
import gcom.seguranca.acesso.OperacaoTipo;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
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 pelo processamento da exibi��o da p�gina de filtrar opera��o
*
* @author Pedro Alexandre
* @date 12/05/2006
*/
public class ExibirFiltrarOperacaoAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
//Seta o mapeamento de retorno para a p�gina de filtrar
ActionForward retorno = actionMapping.findForward("filtrarOperacao");
//Cria uma inst�ncia da fachada
Fachada fachada = Fachada.getInstancia();
//Recuperao form de filtrar opera��o
FiltrarOperacaoActionForm filtrarOperacaoActionForm = (FiltrarOperacaoActionForm) actionForm;
//Cria uma inst�ncia da sess�o
HttpSession sessao = httpServletRequest.getSession(false);
//[FS0001] - Verificar exist�ncia de dados
//Pesquisa os tipos de opera��es cadastradas no sistema
//Caso n�o exista nenhum tipo de opera��o cadastrado levanta uma exce��o indicando que
//n�o existem tipos de opera��es para sele��o
FiltroOperacaoTipo filtroOperacaoTipo = new FiltroOperacaoTipo();
Collection<OperacaoTipo> colecaoOperacaoTipo = fachada.pesquisar(filtroOperacaoTipo,OperacaoTipo.class.getName());
if (colecaoOperacaoTipo == null || colecaoOperacaoTipo.isEmpty()) {
throw new ActionServletException("atencao.entidade_sem_dados_para_selecao", null,"Opera��o Tipo");
}
//Caso exista tipo de opera��o cadastrada
//manda a cole��o de tipo de opera��o para a p�gina pela sess�o
sessao.setAttribute("colecaoOperacaoTipo", colecaoOperacaoTipo);
//Recupera o c�digo da funcionalidade se ela for digitada
String idFuncionalidadeDigitada = filtrarOperacaoActionForm.getIdFuncionalidade();
//Caso o c�digo da funcionalidade tenha sido informado
if (idFuncionalidadeDigitada != null && !idFuncionalidadeDigitada.trim().equalsIgnoreCase("")) {
//Pesquisa a funcionalidade digitada na base de dados
Funcionalidade funcionalidade = this.pesquisarFuncionalidade(idFuncionalidadeDigitada);
//[FS0002] - Verificar exist�ncia da funcionalidade
//Caso exista a funcionalidade digitada na base de dados
//seta as informa��es da funcionalidade no form
//Caso contr�rio indica que a funcionalidade digitada n�o existe
if(funcionalidade != null){
filtrarOperacaoActionForm.setIdFuncionalidade(String.valueOf(funcionalidade.getId()));
filtrarOperacaoActionForm.setDescricaoFuncionalidade(funcionalidade.getDescricao());
httpServletRequest.setAttribute("funcionalidadeEncontrada", "true");
} else {
filtrarOperacaoActionForm.setIdFuncionalidade("");
filtrarOperacaoActionForm.setDescricaoFuncionalidade("FUNCIONALIDADE INEXISTENTE");
httpServletRequest.setAttribute("funcionalidadeNaoEncontrada","exception");
}
}
String primeiraVez = httpServletRequest.getParameter("menu");
if (primeiraVez != null && !primeiraVez.equals("")) {
sessao.setAttribute("indicadorAtualizar", "1");
}
//SETA O TIPO DE PESQUISA DA DESCRICAO
if (filtrarOperacaoActionForm.getTipoPesquisa() == null || filtrarOperacaoActionForm.getTipoPesquisa().equalsIgnoreCase("")) {
filtrarOperacaoActionForm.setTipoPesquisa(""+ConstantesSistema.TIPO_PESQUISA_INICIAL);
}
/*
* ESQUEMA DO LIMPAR FORM
*/
if (httpServletRequest.getParameter("desfazer") != null && httpServletRequest.getParameter("desfazer").equalsIgnoreCase("S")) {
filtrarOperacaoActionForm.setIdOperacao("");
filtrarOperacaoActionForm.setDescricaoOperacao("");
filtrarOperacaoActionForm.setIdTipoOperacao(""+ ConstantesSistema.NUMERO_NAO_INFORMADO);
filtrarOperacaoActionForm.setIdFuncionalidade("");
filtrarOperacaoActionForm.setDescricaoFuncionalidade("");
sessao.setAttribute("indicadorAtualizar", "1");
}
//Retorna o mapeamento contido na vari�vel retorno
return retorno;
}
/**
* Pesquisa a funcionalidade digitada na base de dados de acordo com o c�digo passado
*
* [FS0002 - Pesquisar Funcionalidade]
*
* @author Pedro Alexandre
* @date 11/05/2006
*
* @param idFuncionalidade
* @return
*/
private Funcionalidade pesquisarFuncionalidade(String idFuncionalidade){
//Cria a vari�vel que vai armazenar a funcionalidade pesquisada
Funcionalidade funcionalidade = null;
//Cria o filtro para pesquisa e seta o c�digo da funcionalidade informada no filtro
FiltroFuncionalidade filtroFuncionalidade = new FiltroFuncionalidade();
filtroFuncionalidade.adicionarParametro(new ParametroSimples(FiltroFuncionalidade.ID, idFuncionalidade));
//Pesquisa a funcionalidade na base de dados
Collection colecaoFuncionalidade = Fachada.getInstancia().pesquisar(filtroFuncionalidade,Funcionalidade.class.getName());
//Caso exista a funcionalidade cadastrada na base de dados
//recupera a funcionalidade da cole��o
if(colecaoFuncionalidade != null && !colecaoFuncionalidade.isEmpty()){
funcionalidade = (Funcionalidade) Util.retonarObjetoDeColecao(colecaoFuncionalidade);
}
//Retorna a funcionalidade pesquisa ou nulo se a funcionalidade n�o for encontrada
return funcionalidade;
}
}