package pl.edu.icm.saos.webapp.analysis.csv; import java.io.IOException; import java.io.Writer; import java.util.Locale; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import au.com.bytecode.opencsv.CSVWriter; import pl.edu.icm.saos.common.chart.Chart; import pl.edu.icm.saos.webapp.analysis.request.AnalysisForm; import pl.edu.icm.saos.webapp.analysis.result.ChartCode; /** * A {@link Chart} to csv format exporting service * * @author Ɓukasz Dumiszewski */ @Service("chartCsvExporter") public class ChartCsvExporter { private ChartCsvGenerator chartCsvGenerator; private char fieldSeparator = ';'; private char quoteCharacter = CSVWriter.NO_QUOTE_CHARACTER; //------------------------ LOGIC -------------------------- /** * Converts the given chart to csv and writes the csv to the given writer * @throws IOException in case of I/O Error during writing to the writer */ public void exportChartToCsv(Chart<Object, Number> chart, ChartCode chartCode, AnalysisForm analysisForm, Locale locale, Writer writer) throws IOException { CSVWriter csvWriter = createCsvWriter(writer); try { csvWriter.writeNext(chartCsvGenerator.generateHeader(chartCode, analysisForm, locale)); int rowCount = chart.getSeriesList().get(0).getPoints().size(); for (int i=0; i<rowCount; ++i) { csvWriter.writeNext(chartCsvGenerator.generateRow(chart, i)); } } finally { csvWriter.close(); } } //------------------------ PRIVATE -------------------------- CSVWriter createCsvWriter(Writer writer) { return new CSVWriter(writer, fieldSeparator, quoteCharacter); } //------------------------ SETTERS -------------------------- @Autowired public void setChartCsvGenerator(ChartCsvGenerator chartCsvGenerator) { this.chartCsvGenerator = chartCsvGenerator; } }