package gcom.gui.seguranca.acesso;
import java.util.ArrayList;
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;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.transacao.FiltroTabela;
import gcom.seguranca.transacao.Tabela;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
/**
* Descri��o da classe
*
* @author Pedro Alexandre
* @date 05/05/2006
*/
public class AdicionarOperacaoTabelaAction extends GcomAction{
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
//Seta o mapeamento para a p�gina de adicionar tabela
ActionForward retorno = actionMapping.findForward("adicionarOperacaoTabela");
//Recupera o form de adicionar tabela
AdicionarOperacaoTabelaActionForm adicionarOperacaoTabelaActionForm = (AdicionarOperacaoTabelaActionForm) actionForm;
//Cria uma inst�ncia da fachada
Fachada fachada = Fachada.getInstancia();
//Cria uma inst�ncia da sess�o
HttpSession sessao = httpServletRequest.getSession(false);
//Recupera o c�digo da tabela
String idTabela = adicionarOperacaoTabelaActionForm.getIdTabela();
//Cria a vari�vel que vai armazenar a tabela
Tabela tabela = null;
//Cria o filtro para pesquisar a tabela e seta o c�digo da tabela informada no filtro
FiltroTabela filtroTabela = new FiltroTabela();
filtroTabela.adicionarParametro(new ParametroSimples(FiltroTabela.ID, idTabela));
//Pesquisa a tabela de acordo com o c�digo informado
Collection colecaoTabela = fachada.pesquisar(filtroTabela,Tabela.class.getName());
//Caso a tabela n�o esteja cadastrada levanta uma exce��o para o usu�rio
//caso contr�rio recupera a tabela pesquisada
if(colecaoTabela==null || colecaoTabela.isEmpty()){
throw new ActionServletException("atencao.tabela.inexistente");
}
tabela = (Tabela) Util.retonarObjetoDeColecao(colecaoTabela);
//Cria a vari�vel que vai armazenar as tabelas adicionadas
Collection<Tabela> colecaoOperacaoTabela = null;
//Caso j� exista a cole��o na sess�o recupera a cole��o
//caso contr�rio cria uma inst�ncia nova
if (sessao.getAttribute("colecaoOperacaoTabela") != null) {
colecaoOperacaoTabela = (Collection<Tabela>) sessao.getAttribute("colecaoOperacaoTabela");
} else {
colecaoOperacaoTabela = new ArrayList();
}
//Caso a cole��o n�o contenha ainda a tabela informada
//adiciona a tabela a cole��o
//caso contr�rio levanta uma exce��o para o usu�rio
if(!colecaoOperacaoTabela.contains(tabela)){
colecaoOperacaoTabela.add(tabela);
}else{
throw new ActionServletException("atencao.tabela.ja.informada");
}
//Seta a cole��o de tabelas na sess�o
sessao.setAttribute("colecaoOperacaoTabela",colecaoOperacaoTabela);
//Seta a flag que indica para fechar o popup
httpServletRequest.setAttribute("fechaPopup", "true");
//Retorna o mapeamento contido na vari�vel retorno
return retorno;
}
}