/** * Copyright (c) 2009-2014 Câmara dos Deputados. Todos os direitos reservados. * * e-Democracia é um software livre; você pode redistribuí-lo e/ou modificá-lo dentro * dos termos da Licença Pública Geral Menor GNU como publicada pela Fundação do * Software Livre (FSF); na versão 2.1 da Licença, ou (na sua opinião) qualquer versão. * * Este programa é distribuído na esperança de que possa ser útil, mas SEM NENHUMA GARANTIA; * sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. * Veja a Licença Pública Geral Menor GNU para maiores detalhes. */ package br.gov.camara.edemocracia.portlets.participacao.resource; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.faces.application.Resource; import javax.faces.application.ResourceHandler; import javax.faces.context.FacesContext; import org.apache.commons.io.input.CharSequenceInputStream; import br.gov.camara.edemocracia.portlets.graficos.DadosComunidadeDTO; import br.gov.camara.edemocracia.portlets.participacao.ParticipacaoResourceHandler; import br.gov.camara.edemocracia.portlets.participacao.exporter.CSVParticipacaoExporter; public class ParticipacaoResource extends Resource { /** * Lista de Dados das Comunidades */ private final List<DadosComunidadeDTO> listaDadosComunidade; private final Date dataInicial; private final Date dataFinal; /** * URL para o recurso */ private String requestPath; public ParticipacaoResource( List<DadosComunidadeDTO> listaDadosComunidade, String key) { this.listaDadosComunidade = listaDadosComunidade; this.dataInicial = null; this.dataFinal = null; setLibraryName(ParticipacaoResourceHandler.LIBRARY_NAME); setResourceName(ParticipacaoResourceHandler.PARTICIPACAO_RESOURCE_PREFIX + key); setContentType("text/csv"); } public ParticipacaoResource( List<DadosComunidadeDTO> listaDadosComunidade, String key, Date dataInicial, Date dataFinal) { this.listaDadosComunidade = listaDadosComunidade; this.dataInicial = dataInicial; this.dataFinal = dataFinal; setLibraryName(ParticipacaoResourceHandler.LIBRARY_NAME); setResourceName(ParticipacaoResourceHandler.PARTICIPACAO_RESOURCE_PREFIX + key); setContentType("text/csv"); } /** * @see javax.faces.application.Resource#getInputStream() */ @Override public InputStream getInputStream() throws IOException { String csv = CSVParticipacaoExporter.export(listaDadosComunidade); return new CharSequenceInputStream(csv, "ISO-8859-1"); } /** * @see javax.faces.application.Resource#getResponseHeaders() */ @Override public Map<String, String> getResponseHeaders() { HashMap<String, String> retorno = new HashMap<String, String>(); String nomeDoArquivo = ""; if(dataInicial == null) { nomeDoArquivo = "participacoes.csv"; }else { SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy"); nomeDoArquivo = "participacoes - "+ formatador.format(dataInicial).toString() + " - " + formatador.format(dataFinal).toString() + ".csv"; } retorno.put("Content-Disposition", "attachment;filename=\""+ nomeDoArquivo +"\""); return retorno; } /** * @see javax.faces.application.Resource#getRequestPath() */ @Override public String getRequestPath() { if (requestPath == null) { StringBuilder buf = new StringBuilder(); buf.append(ResourceHandler.RESOURCE_IDENTIFIER); buf.append("/"); buf.append(getResourceName()); buf.append("?ln="); buf.append(getLibraryName()); requestPath = buf.toString(); requestPath = FacesContext.getCurrentInstance() .getExternalContext().encodeResourceURL(requestPath); } return requestPath; } /** * @see javax.faces.application.Resource#getURL() */ @Override public URL getURL() { // TODO Auto-generated method stub return null; } /** * @see javax.faces.application.Resource#userAgentNeedsUpdate(javax.faces.context.FacesContext) */ @Override public boolean userAgentNeedsUpdate(FacesContext context) { return true; } }