/** * Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.integration.copier.sheet.writer; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import au.com.bytecode.opencsv.CSVWriter; import com.opengamma.OpenGammaRuntimeException; import com.opengamma.util.ArgumentChecker; /** * This class implements a sheet writer that facilitates writing rows to a csv file. The columns and their order are specified * in the constructor. Subsequently, rows to be written can be supplied as a map from column headings to the actual data. */ public class CsvSheetWriter extends SheetWriter { private static final Logger s_logger = LoggerFactory.getLogger(CsvSheetWriter.class); private CSVWriter _csvWriter; public CsvSheetWriter(String filename, String[] columns) { ArgumentChecker.notEmpty(filename, "filename"); ArgumentChecker.notNull(columns, "columns"); // Open file OutputStream fileOutputStream = openFile(filename); // Set up CSV Writer _csvWriter = new CSVWriter(new OutputStreamWriter(fileOutputStream)); // Set columns setColumns(columns); // Write the column row _csvWriter.writeNext(columns); flush(); } public CsvSheetWriter(OutputStream outputStream, String[] columns) { ArgumentChecker.notNull(outputStream, "outputStream"); ArgumentChecker.notNull(columns, "columns"); // Set up CSV Writer _csvWriter = new CSVWriter(new OutputStreamWriter(outputStream)); // Set columns setColumns(columns); // Write the column row _csvWriter.writeNext(columns); } @Override public void writeNextRow(Map<String, String> row) { ArgumentChecker.notNull(row, "row"); String[] rawRow = new String[getColumns().length]; for (int i = 0; i < getColumns().length; i++) { if ((rawRow[i] = row.get(getColumns()[i])) == null) { //CSIGNORE s_logger.info("Missing data for column '" + getColumns()[i] + "' when writing row to CSV file"); rawRow[i] = ""; } } _csvWriter.writeNext(rawRow); } @Override public void flush() { try { _csvWriter.flush(); } catch (IOException ex) { throw new OpenGammaRuntimeException("Could not flush to CSV file"); } } @Override public void close() { try { _csvWriter.close(); } catch (IOException ex) { throw new OpenGammaRuntimeException("Could not close CSV file"); } } }