package gcom.gui.portal; import gcom.cadastro.geografico.FiltroMicrorregiao; import gcom.cadastro.geografico.FiltroRegiao; import gcom.cadastro.geografico.Microrregiao; import gcom.cadastro.geografico.Municipio; import gcom.fachada.Fachada; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import gcom.util.Util; import gcom.util.filtro.ParametroSimples; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.sql.Blob; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; 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; /** * Classe Respons�vel por Exibir as Lojas de Atendimento na Loja Virtual * da Compesa * * @author Magno Gouveia * @date 07/07/2011 */ public class ExibirLojasAtendimentoPresencialPortalCompesaAction extends GcomAction { private static final String ATTRIBUTE_LOCAL = "local"; private static final String ATTRIBUTE_COLECAO_MUNICIPIOS_REGIAO_METROPOLITANA = "colecaoMunicipiosRegiaoMetropolitana"; private static final String ATTRIBUTE_COLECAO_MUNICIPIOS_INTERIOR = "colecaoMunicipiosInterior"; private static final int CODIGO_REGIAO_METROPOLITANA = 192; public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { String retorno = "exibirLojasAtendimentoPresencialPortalCompesaAction"; // HttpSession sessao = httpServletRequest.getSession(false); Fachada fachada = Fachada.getInstancia(); String local = httpServletRequest.getParameter(ATTRIBUTE_LOCAL); // Microrregi�o FiltroMicrorregiao filtroMicrorregiao = new FiltroMicrorregiao(); filtroMicrorregiao.adicionarParametro(new ParametroSimples(FiltroRegiao.ID, CODIGO_REGIAO_METROPOLITANA)); Microrregiao microrregiao = (Microrregiao) Util.retonarObjetoDeColecao(fachada.pesquisar(filtroMicrorregiao, Microrregiao.class.getName())); // Munic�pios e Bairros Collection<Object[]> colecaoMunicipios = fachada.pesquisarMunicipiosLojaVirtualCompesa(); Collection<Municipio> colecaoMunicipiosRegiaoMetropolitana = new ArrayList<Municipio>(); Collection<Municipio> colecaoMunicipiosInterior = new ArrayList<Municipio>(); if (!Util.isVazioOrNulo(colecaoMunicipios)) { for (Object[] object : colecaoMunicipios) { Municipio municipio = new Municipio(); municipio.setId((Integer) object[1]); municipio.setNome((String) object[2]); // Se o munic�pio pertencer a microrregiao "REGIAO // METROPOLITANA" if (((Integer) object[0]).equals(microrregiao.getId())) { colecaoMunicipiosRegiaoMetropolitana.add(municipio); } else { // Interior colecaoMunicipiosInterior.add(municipio); } } } else { httpServletRequest.setAttribute("exception", "Nenhum munic�pio cadastrado!"); return actionMapping.findForward(retorno); // throw new ActionServletException("atencao.entidade_sem_dados_para_selecao", null, "MUNICIPIOS"); } // Munic�pio Vazio Municipio municipioVazio = new Municipio(); municipioVazio.setId(-1); municipioVazio.setNome(" -- NENHUM MUNIC�PIO PARA A REGI�O SELECIONADA -- "); // Munic�pios da Regi�o Metropolitana if (Util.isVazioOrNulo(colecaoMunicipiosRegiaoMetropolitana)) { colecaoMunicipiosRegiaoMetropolitana.add(municipioVazio); } httpServletRequest.setAttribute(ATTRIBUTE_COLECAO_MUNICIPIOS_REGIAO_METROPOLITANA, colecaoMunicipiosRegiaoMetropolitana); // Munic�pios do Interior if (Util.isVazioOrNulo(colecaoMunicipiosInterior)) { colecaoMunicipiosInterior.add(municipioVazio); } httpServletRequest.setAttribute(ATTRIBUTE_COLECAO_MUNICIPIOS_INTERIOR, colecaoMunicipiosInterior); if (local != null) { if (local.equalsIgnoreCase("regiaoMetropolitana") || local.equalsIgnoreCase("interior")) { httpServletRequest.setAttribute(ATTRIBUTE_LOCAL, local); ExibirLojasAtendimentoPresencialPortalCompesaActionForm form = (ExibirLojasAtendimentoPresencialPortalCompesaActionForm) actionForm; if (form.getMunicipio() != null && Util.verificarIdNaoVazio(form.getMunicipio().toString())) { Collection<Object[]> lojas = fachada.pesquisarLojasDeAtendimentoLojaVirtualCompesa(form.getMunicipio()); Collection<LojaAtendimentoCompesaHelper> colecaoLojas = new ArrayList<LojaAtendimentoCompesaHelper>(); for (Object[] object : lojas) { String nomeLoja = (String) object[0]; String logradouro = (String) object[1]; String numero = (String) object[2]; String municipio = (String) object[3]; String bairro = (String) object[4]; String pontoReferencia = (String) object[5]; String ddd = (String) object[6]; String fone = (String) object[7]; String fax = (String) object[8]; String email = (String) object[9]; Blob imagem = (Blob) object[10]; String logradouroTipo = (String) object[11]; String logradouroTitulo = (String) object[12]; if (!Util.verificarNaoVazio(nomeLoja)) { nomeLoja = "Loja sem Nome"; } if (numero == null) { numero = "S/N"; } ddd = (ddd != null) ? "(" + ddd + ")" : ""; fone = (fone != null) ? ddd + " " + fone : ""; fax = (fax != null) ? ddd + " " + fax : ""; String separador = (!fone.equals("") && !fax.equals("")) ? " / " : ""; LojaAtendimentoCompesaHelper loja = new LojaAtendimentoCompesaHelper(); loja.setNomeLoja(nomeLoja); logradouroTitulo = (logradouroTitulo != null)? logradouroTitulo + " " : ""; String enderecoFormatado = logradouroTipo + " " + logradouroTitulo + logradouro + ", " + numero + ", " + bairro + " - " + municipio; loja.setEndereco(enderecoFormatado); loja.setPontoReferencia(pontoReferencia); loja.setFoneFax(fone + separador + fax); loja.setEmail(email); if(imagem != null){ loja.setImagem(this.recuperaImagem(imagem, nomeLoja)); } colecaoLojas.add(loja); } httpServletRequest.setAttribute("colecaoLojas", colecaoLojas); } } else { throw new ActionServletException("Voc� deve selecionar uma das op��es do menu"); } } return actionMapping.findForward(retorno); } /* * Recupera a imagem para ser exibida no jsp */ private String recuperaImagem(Blob imagem, String nomeLoja) { nomeLoja = nomeLoja.replace(" ", "_").toLowerCase(); String imageCompletePath = ""; try { File file = this.createTempDirectory(); imageCompletePath = file.getAbsolutePath() + File.separator + nomeLoja + ".jpg"; File foto = new File(imageCompletePath); if (!foto.exists()) { FileOutputStream fos; fos = new FileOutputStream(imageCompletePath); fos.write(this.toByteArray(imagem)); fos.close(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } String imagePathToImgTag = File.separator + "gsan" + File.separator + imageCompletePath.substring(imageCompletePath.indexOf("imagens")); return imagePathToImgTag.replace(File.separator, "/"); } /* * Chama o m�todo toByteArrayImpl e trata as exceptions */ private byte[] toByteArray(Blob imagem) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { return toByteArrayImpl(imagem, baos); } catch (SQLException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } finally { if (baos != null) { try { baos.close(); } catch (IOException ex) { } } } } /* * M�todo que implementa a funcionalidade de converte o Blob (formato recuperado do banco) em um array de bytes */ private byte[] toByteArrayImpl(Blob fromBlob, ByteArrayOutputStream baos) throws SQLException, IOException { byte[] buf = new byte[4000]; InputStream is = fromBlob.getBinaryStream(); try { for (;;) { int dataSize = is.read(buf); if (dataSize == -1) break; baos.write(buf, 0, dataSize); } } finally { if (is != null) { try { is.close(); } catch (IOException ex) { } } } return baos.toByteArray(); } /* * Cria uma pasta para colocar as imagens das lojas de atendimento */ private File createTempDirectory() throws IOException { File dir = new File(getServlet().getServletContext().getRealPath("imagens" + File.separator + "portal" + File.separator + "lojasatendimento")); if(!dir.exists()) { if (!(dir.mkdir())) { throw new IOException("Could not create temp directory: " + dir.getAbsolutePath()); } } return dir; } }