/**
* 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.wikilegis.exporter.csv;
import java.io.IOException;
import java.io.Writer;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;
import au.com.bytecode.opencsv.CSVWriter;
import br.gov.camara.edemocracia.portlets.wikilegis.exporter.wrapper.ComentarioWrapper;
import br.gov.camara.edemocracia.portlets.wikilegis.exporter.wrapper.ContribuicaoWrapper;
import br.gov.camara.edemocracia.portlets.wikilegis.service.WikiLegisServiceUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
public class ExportacaoCSV {
private static final Log LOG = LogFactoryUtil.getLog(ExportacaoCSV.class);
public static void getContribuicoesCSV(final Long groupId, final Writer writer) throws SystemException, SQLException, IOException, PortalException {
final CSVWriter csvWriter = new CSVWriter(writer,';');
final List<ContribuicaoWrapper> dados = WikiLegisServiceUtil.exportaContribuicoes(groupId);
exportar(ContribuicaoWrapper.class, dados, csvWriter);
csvWriter.close();
writer.close();
}
public static void getComentariosCSV(final Long groupId, final Writer writer) throws SystemException, SQLException, IOException, PortalException {
final CSVWriter csvWriter = new CSVWriter(writer,';');
final List<ComentarioWrapper> dados = WikiLegisServiceUtil.exportaComentarios(groupId);
exportar(ComentarioWrapper.class, dados, csvWriter);
csvWriter.close();
writer.close();
}
private static <T> void exportar(final Class<?> classe, final List<T> dados, final CSVWriter csvWriter) {
final Field[] campos = classe.getDeclaredFields();
final String[] colunas = new String[campos.length];
final Method[] metodosDeAcesso = new Method[campos.length];
// Coletando nome das colunas para impressão
// Coletando metodos de acesso get
for(int i = 0 ; i < campos.length ; i++) {
final String nomeCampo = campos[i].getName();
colunas[i] = nomeCampo;
final String metodoDeAcesso = "get" + nomeCampo.substring(0, 1).toUpperCase() + nomeCampo.substring(1);
try {
metodosDeAcesso[i] = classe.getMethod(metodoDeAcesso,null);
} catch (SecurityException e) {
LOG.error("Erro ao exportar arquivo csv",e);
} catch (NoSuchMethodException e) {
LOG.error("Erro ao exportar arquivo csv. Método não encontrado.",e);
}
}
csvWriter.writeNext(colunas);
// Impressão dos dados
final Iterator<T> iteratorDados = dados.iterator();
final int columnCount = colunas.length;
while (iteratorDados.hasNext()){
final T dadosForum = iteratorDados.next();
String[] nextLine = new String[columnCount];
for (int i = 0; i < columnCount; i++) {
try {
nextLine[i] = metodosDeAcesso[i].invoke(dadosForum, null) + "";
} catch (SecurityException e) {
LOG.error("Erro ao exportar arquivo csv",e);
} catch (IllegalArgumentException e) {
LOG.error("Erro ao exportar arquivo csv",e);
} catch (IllegalAccessException e) {
LOG.error("Erro ao exportar arquivo csv",e);
} catch (InvocationTargetException e) {
LOG.error("Erro ao exportar arquivo csv",e);
}
}
csvWriter.writeNext(nextLine);
}
}
}