net.sf.jasperreports.engine.export.JRAbstractCsvExporter Maven / Gradle / Ivy
/*
* JasperReports - Free Java Reporting Library.
* Copyright (C) 2001 - 2011 Jaspersoft Corporation. All rights reserved.
* http://www.jaspersoft.com
*
* Unless you have purchased a commercial license agreement from Jaspersoft,
* the following license terms apply:
*
* This program is part of JasperReports.
*
* JasperReports is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* JasperReports is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with JasperReports. If not, see .
*/
/*
* Contributors:
* Mirko Wawrowsky - [email protected]
*/
package net.sf.jasperreports.engine.export;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.util.List;
import java.util.StringTokenizer;
import net.sf.jasperreports.engine.DefaultJasperReportsContext;
import net.sf.jasperreports.engine.JRAbstractExporter;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JRPrintPage;
import net.sf.jasperreports.engine.JRPrintText;
import net.sf.jasperreports.engine.JRPropertiesUtil;
import net.sf.jasperreports.engine.JasperReportsContext;
import net.sf.jasperreports.engine.util.JRStyledText;
/**
* Exports a JasperReports document to CSV format.
* @author Teodor Danciu ([email protected])
* @version $Id: JRAbstractCsvExporter.java 5521 2012-07-30 13:25:30Z teodord $
*/
public abstract class JRAbstractCsvExporter extends JRAbstractExporter
{
private static final String CSV_EXPORTER_PROPERTIES_PREFIX = JRPropertiesUtil.PROPERTY_PREFIX + "export.csv.";
/**
*
*/
protected String delimiter;
/**
*
*/
protected String recordDelimiter;
/**
*
*/
protected String encoding;
/**
*
*/
protected Writer writer;
protected JRExportProgressMonitor progressMonitor;
protected ExporterNature nature;
/**
* @see #JRAbstractCsvExporter(JasperReportsContext)
*/
public JRAbstractCsvExporter()
{
this(DefaultJasperReportsContext.getInstance());
}
/**
*
*/
public JRAbstractCsvExporter(JasperReportsContext jasperReportsContext)
{
super(jasperReportsContext);
}
/**
*
*/
public void exportReport() throws JRException
{
progressMonitor = (JRExportProgressMonitor)parameters.get(JRExporterParameter.PROGRESS_MONITOR);
/* */
setOffset();
/* */
setInput();
if (!parameters.containsKey(JRExporterParameter.FILTER))
{
filter = createFilter(CSV_EXPORTER_PROPERTIES_PREFIX);
}
/* */
if (!isModeBatch)
{
setPageRange();
}
setParameters();
StringBuffer sb = (StringBuffer)parameters.get(JRExporterParameter.OUTPUT_STRING_BUFFER);
if (sb != null)
{
try
{
writer = new StringWriter();
exportReportToWriter();
sb.append(writer.toString());
}
catch (IOException e)
{
throw new JRException("Error writing to StringBuffer writer : " + jasperPrint.getName(), e);
}
finally
{
if (writer != null)
{
try
{
writer.close();
}
catch(IOException e)
{
}
}
}
}
else
{
writer = (Writer)parameters.get(JRExporterParameter.OUTPUT_WRITER);
if (writer != null)
{
try
{
exportReportToWriter();
}
catch (IOException e)
{
throw new JRException("Error writing to writer : " + jasperPrint.getName(), e);
}
}
else
{
OutputStream os = (OutputStream)parameters.get(JRExporterParameter.OUTPUT_STREAM);
if (os != null)
{
try
{
writer = new OutputStreamWriter(os, encoding);
exportReportToWriter();
}
catch (IOException e)
{
throw new JRException("Error writing to OutputStream writer : " + jasperPrint.getName(), e);
}
}
else
{
File destFile = (File)parameters.get(JRExporterParameter.OUTPUT_FILE);
if (destFile == null)
{
String fileName = (String)parameters.get(JRExporterParameter.OUTPUT_FILE_NAME);
if (fileName != null)
{
destFile = new File(fileName);
}
else
{
throw new JRException("No output specified for the exporter.");
}
}
try
{
os = new FileOutputStream(destFile);
writer = new OutputStreamWriter(os, encoding);
exportReportToWriter();
}
catch (IOException e)
{
throw new JRException("Error writing to file writer : " + jasperPrint.getName(), e);
}
finally
{
if (writer != null)
{
try
{
writer.close();
}
catch(IOException e)
{
}
}
}
}
}
}
}
/**
*
*/
protected void exportReportToWriter() throws JRException, IOException
{
for(int reportIndex = 0; reportIndex < jasperPrintList.size(); reportIndex++)
{
setJasperPrint(jasperPrintList.get(reportIndex));
List pages = jasperPrint.getPages();
if (pages != null && pages.size() > 0)
{
if (isModeBatch)
{
startPageIndex = 0;
endPageIndex = pages.size() - 1;
}
for(int i = startPageIndex; i <= endPageIndex; i++)
{
if (Thread.interrupted())
{
throw new JRException("Current thread interrupted.");
}
JRPrintPage page = pages.get(i);
/* */
exportPage(page);
}
}
}
writer.flush();
}
/**
*
*/
protected abstract void exportPage(JRPrintPage page) throws IOException;
/**
*
*/
protected JRStyledText getStyledText(JRPrintText textElement)
{
return textElement.getFullStyledText(noneSelector);
}
/**
*
*/
protected String prepareText(String source)
{
String str = null;
if (source != null)
{
boolean putQuotes = false;
if (
source.indexOf(delimiter) >= 0
|| source.indexOf(recordDelimiter) >= 0
)
{
putQuotes = true;
}
StringBuffer sbuffer = new StringBuffer();
StringTokenizer tkzer = new StringTokenizer(source, "\"\n", true);
String token = null;
while(tkzer.hasMoreTokens())
{
token = tkzer.nextToken();
if ("\"".equals(token))
{
putQuotes = true;
sbuffer.append("\"\"");
}
else if ("\n".equals(token))
{
//sbuffer.append(" ");
putQuotes = true;
sbuffer.append("\n");
}
else
{
sbuffer.append(token);
}
}
str = sbuffer.toString();
if (putQuotes)
{
str = "\"" + str + "\"";
}
}
return str;
}
protected void setParameters()
{
nature = getExporterNature();
encoding =
getStringParameterOrDefault(
JRExporterParameter.CHARACTER_ENCODING,
JRExporterParameter.PROPERTY_CHARACTER_ENCODING
);
delimiter =
getStringParameterOrDefault(
JRCsvExporterParameter.FIELD_DELIMITER,
JRCsvExporterParameter.PROPERTY_FIELD_DELIMITER
);
recordDelimiter =
getStringParameterOrDefault(
JRCsvExporterParameter.RECORD_DELIMITER,
JRCsvExporterParameter.PROPERTY_RECORD_DELIMITER
);
}
protected ExporterNature getExporterNature()
{
if (nature == null)
{
nature = new JRCsvExporterNature(jasperReportsContext, filter);
}
return nature;
}
protected String getExporterKey()
{
return null;
}
}