package gcom.gui.cadastro.atualizacaocadastral; import gcom.cadastro.empresa.Empresa; import gcom.cadastro.empresa.FiltroEmpresa; import gcom.cadastro.localidade.FiltroLocalidade; import gcom.cadastro.localidade.FiltroSetorComercial; import gcom.cadastro.localidade.Localidade; import gcom.cadastro.localidade.SetorComercial; import gcom.fachada.Fachada; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import gcom.gui.micromedicao.DadosLeiturista; import gcom.micromedicao.FiltroLeiturista; import gcom.micromedicao.Leiturista; import gcom.seguranca.transacao.FiltroTabelaColuna; import gcom.seguranca.transacao.TabelaColuna; import gcom.util.ConstantesSistema; import gcom.util.Util; import gcom.util.filtro.DescriptorEntity; import gcom.util.filtro.Filtro; import gcom.util.filtro.ParametroSimples; import gcom.util.filtro.ParametroSimplesIn; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.lang.StringUtils; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.jboss.logging.Logger; public class ExibirFiltrarAlteracaoAtualizacaoCadastralAction extends GcomAction { private static Logger logger = Logger.getLogger(ExibirFiltrarAlteracaoAtualizacaoCadastralAction.class); public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { FiltrarAlteracaoAtualizacaoCadastralActionForm form = (FiltrarAlteracaoAtualizacaoCadastralActionForm) actionForm; Fachada fachada = Fachada.getInstancia(); try { if (StringUtils.isNotEmpty(httpServletRequest.getParameter("filterClass"))){ preencherCampoDescricao(form, httpServletRequest); } HttpSession sessao = httpServletRequest.getSession(false); carregarComboEmpresas(fachada, sessao); carregarComboLeiturista(form, fachada, sessao); carregarColunaImoveis(sessao, httpServletRequest, form); } catch (Exception e) { logger.error("Erro ao filtrar Cadastro", e); } return actionMapping.findForward("exibirFiltrarAlteracaoAtualizacaoCadastral"); } @SuppressWarnings({ "unchecked", "rawtypes" }) private Collection carregarImoveisSelecionados(FiltrarAlteracaoAtualizacaoCadastralActionForm form, HttpSession sessao) { Collection colecaoColunaImoveisSelecionados = null; if (form.getColunaImoveisSelecionados() != null) { String[] aux = form.getColunaImoveisSelecionados(); colecaoColunaImoveisSelecionados = Arrays.asList(aux); FiltroTabelaColuna filtroTabelaColuna = new FiltroTabelaColuna(); filtroTabelaColuna.adicionarParametro(new ParametroSimplesIn(FiltroTabelaColuna.ID, colecaoColunaImoveisSelecionados)); filtroTabelaColuna.setCampoOrderBy(FiltroTabelaColuna.DESCRICAO_COLUNA); colecaoColunaImoveisSelecionados = Fachada.getInstancia().pesquisar(filtroTabelaColuna, TabelaColuna.class.getName()); if (colecaoColunaImoveisSelecionados != null && !colecaoColunaImoveisSelecionados.isEmpty()) { sessao.setAttribute("colecaoColunaImoveisSelecionados", colecaoColunaImoveisSelecionados); sessao.setAttribute("existeColecaoColunaImoveisSelecionados", colecaoColunaImoveisSelecionados); } } return colecaoColunaImoveisSelecionados; } @SuppressWarnings({ "rawtypes", "unchecked" }) private void carregarComboLeiturista(FiltrarAlteracaoAtualizacaoCadastralActionForm form, Fachada fachada, HttpSession sessao) { Collection colecaoLeiturista = new ArrayList(); if (form.getIdEmpresa() != null && !form.getIdEmpresa().equals("-1") && !form.getIdEmpresa().equals("")) { FiltroLeiturista filtroLeiturista = new FiltroLeiturista(FiltroLeiturista.ID); filtroLeiturista.adicionarParametro(new ParametroSimples(FiltroLeiturista.EMPRESA_ID, form.getIdEmpresa())); filtroLeiturista.adicionarCaminhoParaCarregamentoEntidade(FiltroLeiturista.CLIENTE); filtroLeiturista.adicionarCaminhoParaCarregamentoEntidade(FiltroLeiturista.FUNCIONARIO); Collection colecao = fachada.pesquisar(filtroLeiturista, Leiturista.class.getName()); if (colecao != null && !colecao.isEmpty()) { Iterator it = colecao.iterator(); while (it.hasNext()) { Leiturista leiturista = (Leiturista) it.next(); DadosLeiturista dadosLeiturista = new DadosLeiturista(leiturista); colecaoLeiturista.add(dadosLeiturista); } } } sessao.setAttribute("colecaoLeiturista", colecaoLeiturista); } @SuppressWarnings("unchecked") private void carregarComboEmpresas(Fachada fachada, HttpSession sessao) { if (sessao.getAttribute("colecaoEmpresa") == null) { Collection<Empresa> colecaoEmpresa = null; FiltroEmpresa filtroEmpresa = new FiltroEmpresa(); filtroEmpresa.adicionarParametro(new ParametroSimples(FiltroEmpresa.INDICADORUSO, ConstantesSistema.INDICADOR_USO_ATIVO)); filtroEmpresa.setCampoOrderBy(FiltroEmpresa.DESCRICAO); colecaoEmpresa = fachada.pesquisar(filtroEmpresa, Empresa.class.getName()); if ((colecaoEmpresa == null) || (colecaoEmpresa.size() == 0)) { throw new ActionServletException("atencao.entidade_sem_dados_para_selecao", null, Empresa.class.getName()); } else { sessao.setAttribute("colecaoEmpresa", colecaoEmpresa); } } } @SuppressWarnings("rawtypes") private void carregarColunaImoveis(HttpSession sessao, HttpServletRequest httpServletRequest, FiltrarAlteracaoAtualizacaoCadastralActionForm form) { Collection colecaoColunaImoveisSelecionados = carregarImoveisSelecionados(form, sessao); FiltroTabelaColuna filtroTabelaColuna = new FiltroTabelaColuna(); filtroTabelaColuna.adicionarParametro(new ParametroSimples(FiltroTabelaColuna.INDICADOR_ATUALIZACAO_CADASRAL, ConstantesSistema.SIM)); filtroTabelaColuna.setConsultaSemLimites(true); filtroTabelaColuna.setCampoOrderBy(FiltroTabelaColuna.DESCRICAO_COLUNA); Collection colecaoColunaImoveis = Fachada.getInstancia().pesquisar(filtroTabelaColuna, TabelaColuna.class.getName()); if (colecaoColunaImoveisSelecionados == null) { sessao.setAttribute("colecaoColunaImoveis", colecaoColunaImoveis); } else { removerImoveisSelecionados(colecaoColunaImoveisSelecionados, colecaoColunaImoveis); sessao.setAttribute("colecaoColunaImoveis", colecaoColunaImoveis); } } @SuppressWarnings("rawtypes") private void removerImoveisSelecionados(Collection colecaoColunaImoveisSelecionados, Collection colecaoColunaImoveis) { for (Iterator iteratorColunaImoveis = colecaoColunaImoveis.iterator(); iteratorColunaImoveis.hasNext();) { TabelaColuna colunaImoveis = (TabelaColuna) iteratorColunaImoveis.next(); for (Iterator iteratorColunaImoveisSelecionados = colecaoColunaImoveisSelecionados.iterator(); iteratorColunaImoveisSelecionados.hasNext();) { TabelaColuna colunaImoveisSelecionado = (TabelaColuna) iteratorColunaImoveisSelecionados.next(); if (colunaImoveis.getId().compareTo(colunaImoveisSelecionado.getId()) == 0) { iteratorColunaImoveis.remove(); } } } } private void preencherCampoDescricao(FiltrarAlteracaoAtualizacaoCadastralActionForm form, HttpServletRequest httpServletRequest) throws Exception { String filterClass = "gcom.cadastro.localidade."+ httpServletRequest.getParameter("filterClass"); FilterClassParameters filter = null; String fieldName = null; String fieldLocalidade = httpServletRequest.getParameter("fieldLocalidade"); if (filterClass.contains("FiltroLocalidade")){ fieldName = fieldLocalidade; filter = buildFiltroLocalidade(form, filterClass, fieldLocalidade); }else if (filterClass.contains("FiltroSetorComercial")){ fieldName = httpServletRequest.getParameter("fieldSetorComercial"); filter = buildFiltroSetorComercial(form, httpServletRequest, filterClass, fieldName, fieldLocalidade); } DescriptorEntity entidade = pesquisarEntidade(filter); Method setNome = FiltrarAlteracaoAtualizacaoCadastralActionForm.class.getMethod("setNome" + fieldName, String.class); if (entidade == null) { setNome.invoke(form, filter.getInvalidMessage()); httpServletRequest.setAttribute("cor" + filter.getFieldName(), "#FF0000"); } else { setNome.invoke(form, entidade.getDescricao()); httpServletRequest.setAttribute("cor" + filter.getFieldName(), "#000000"); } } private FilterClassParameters buildFiltroSetorComercial(FiltrarAlteracaoAtualizacaoCadastralActionForm form, HttpServletRequest httpServletRequest, String filterClass, String fieldName, String fieldLocalidade) throws Exception { Filtro filtro = (Filtro) Class.forName(filterClass).newInstance(); FilterClassParameters filter; filter = new FilterClassParameters(filtro, new SetorComercial(), "Setor comercial inexistente", fieldName); filtro.adicionarParametro(new ParametroSimples(FiltroSetorComercial.CODIGO_SETOR_COMERCIAL, (String) recuperaValorCampo(form, "Cd"+ fieldName))); filtro.adicionarParametro(new ParametroSimples(FiltroSetorComercial.INDICADORUSO, ConstantesSistema.INDICADOR_USO_ATIVO)); filtro.adicionarParametro(new ParametroSimples(FiltroSetorComercial.ID_LOCALIDADE, new Integer(recuperaValorCampo(form, "Id"+ fieldLocalidade)))); httpServletRequest.setAttribute("cor" + fieldLocalidade, "#000000"); return filter; } private FilterClassParameters buildFiltroLocalidade(FiltrarAlteracaoAtualizacaoCadastralActionForm form, String filterClass, String fieldLocalidade) throws Exception { Filtro filtro = (Filtro) Class.forName(filterClass).newInstance(); FilterClassParameters filter; filter = new FilterClassParameters(filtro, new Localidade(), "Localidade inexistente", fieldLocalidade); filtro.adicionarParametro(new ParametroSimples(FiltroLocalidade.ID, recuperaValorCampo(form, "Id" + fieldLocalidade))); filtro.adicionarParametro(new ParametroSimples(FiltroLocalidade.INDICADORUSO, ConstantesSistema.INDICADOR_USO_ATIVO)); return filter; } private DescriptorEntity pesquisarEntidade(FilterClassParameters parameters) { Collection colecaoPesquisa = Fachada.getInstancia().pesquisar(parameters.getFilter(), parameters.getEntity().getClass().getName()); if (colecaoPesquisa == null || colecaoPesquisa.isEmpty()) { return null; } else { return (DescriptorEntity) Util.retonarObjetoDeColecao(colecaoPesquisa); } } private String recuperaValorCampo(FiltrarAlteracaoAtualizacaoCadastralActionForm form, String fieldName) throws Exception{ Method getMethod = FiltrarAlteracaoAtualizacaoCadastralActionForm.class.getMethod("get" + fieldName); return (String) getMethod.invoke(form); } }