/** * 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.priorizacao.ui.resources; import java.io.ByteArrayInputStream; import java.io.CharArrayWriter; import java.io.IOException; import java.io.InputStream; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; import org.apache.wicket.markup.html.WebResource; import org.apache.wicket.protocol.http.WebResponse; import org.apache.wicket.util.resource.AbstractResourceStream; import org.apache.wicket.util.resource.IResourceStream; import org.apache.wicket.util.resource.ResourceStreamNotFoundException; import au.com.bytecode.opencsv.CSVWriter; import br.gov.camara.edemocracia.portlets.priorizacao.OrdemProposta; import br.gov.camara.edemocracia.portlets.priorizacao.PriorizacaoSumario; import br.gov.camara.edemocracia.portlets.priorizacao.PropostaSumario; import br.gov.camara.edemocracia.portlets.priorizacao.VotoSumario; import br.gov.camara.edemocracia.portlets.priorizacao.service.PriorizacaoServiceUtil; import br.gov.camara.edemocracia.portlets.priorizacao.ui.util.UIUtils; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.nio.charset.CharsetEncoderUtil; /** * Download de arquivo CSV * * @author robson * */ public class CsvVotacaoResource extends WebResource { private final long groupId; public CsvVotacaoResource() { groupId = UIUtils.getScopeGroupId(); setCacheable(false); } @Override protected void setHeaders(WebResponse response) { response.setContentType("text/csv; charset=ISO-8859-1"); response.setCharacterEncoding("ISO-8859-1"); response.setAttachmentHeader("priorizacao-propostas-" + groupId + ".csv"); super.setHeaders(response); } @Override public IResourceStream getResourceStream() { AbstractResourceStream stream = new AbstractResourceStream() { private ByteArrayInputStream bais; @Override public InputStream getInputStream() throws ResourceStreamNotFoundException { if (bais == null) { PriorizacaoSumario sumario; try { sumario = PriorizacaoServiceUtil.getSumarioPriorizacao(groupId, new OrdemProposta[] { OrdemProposta.EIXO, OrdemProposta.IDENTIFICADOR }); } catch (SystemException e) { throw new ResourceStreamNotFoundException(); } CharArrayWriter writer = new CharArrayWriter(1000); CSVWriter csvwriter = new CSVWriter(writer,';'); try { csvwriter.writeNext(new String[] { "eixo", "id_proposta", "proposta","usuário","uf","votos","dataUltimaRevisao"}); for (PropostaSumario proposta : sumario.getPropostas()) { for(VotoSumario voto: proposta.getVotos()){ String dataVoto = (voto.getData() != null) ? voto.getData().toString(): ""; csvwriter.writeNext(new String[] { proposta.getEixo().getNome(), proposta.getIdentificador(), proposta.getNome(), voto.getUsername(), voto.getUserUF(),Integer.toString(voto.getNumeroVotos()) ,dataVoto}); } // csvwriter.writeNext(new String[] { proposta.getEixo().getNome(), proposta.getIdentificador(), proposta.getNome(), // Integer.toString(proposta.getNumeroVotos()) }); } } finally { try { csvwriter.close(); } catch (IOException e) { throw new ResourceStreamNotFoundException(); } } CharBuffer cb = CharBuffer.wrap(writer.toCharArray()); final ByteBuffer bb = CharsetEncoderUtil.encode("ISO-8859-1", cb); bais = new ByteArrayInputStream(bb.array()); } return bais; } @Override public void close() throws IOException { if (bais != null) bais.close(); bais = null; } }; stream.setCharset(Charset.forName("ISO-8859-1")); return stream; } }