package edu.ualberta.med.biobank.export; import java.io.FileWriter; import java.io.IOException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.viewers.ITableLabelProvider; import org.supercsv.io.CsvListWriter; import org.supercsv.prefs.CsvPreference; import edu.ualberta.med.biobank.SessionManager; public class CsvDataExporter extends GuiDataExporter { private static final String[] VALID_EXTS = { "*.csv" }; public CsvDataExporter() { super("Export CSV"); } @Override protected void export(Data data, ITableLabelProvider labelProvider, IProgressMonitor monitor) throws DataExportException { canExport(data); String path = getPath(data, VALID_EXTS); CsvListWriter writer = null; try { writer = new CsvListWriter(new FileWriter(path), CsvPreference.STANDARD_PREFERENCE); // can only write column names to a CSV, no comments, title, etc. // are allowed b/c cannot have comments in the file, only headers // (column names) and data writer.writeHeader(data.getColumnNames().toArray(new String[0])); int numHeaders = data.getColumnNames().size(); Object[] labels = new Object[numHeaders]; for (Object row : data.getRows()) { if (monitor.isCanceled()) { return; } for (int i = 0; i < numHeaders; i++) { labels[i] = labelProvider.getColumnText(row, i); } writer.write(labels); } writer.close(); SessionManager.log("exportCSV", data.getTitle(), LOG_TYPE); } catch (IOException e) { throw new DataExportException(e.getMessage()); } catch (Exception e) { return; } } }