package LinGUIne.extensions; import java.io.BufferedWriter; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Files; import java.util.Collection; import java.util.HashMap; import java.util.LinkedList; import LinGUIne.model.IProjectData; import LinGUIne.model.KeyValueResult; import LinGUIne.model.KeyValueResultContents; import LinGUIne.model.Result; import LinGUIne.model.ResultData; /** * Exporter to create a CSV file from a KeyValueResult. * Keys are columns and each entry is a row of Values. * * @author Kyle Mullins */ public class CSVExporter implements IFileExporter { @Override public String getFileType() { return "Comma Separated Values (CSV)"; } @Override public String getFileMask(){ return "*.csv"; } @Override public Collection<Class<? extends Result>> getSupportedSourceDataTypes() { LinkedList<Class<? extends Result>> supportedTypes = new LinkedList<Class<? extends Result>>(); supportedTypes.add(KeyValueResult.class); return supportedTypes; } @Override public void exportResult(Result sourceResult, Collection<IProjectData> associatedData, File destFile) throws IOException { if(sourceResult instanceof KeyValueResult){ KeyValueResult keyValueSource = (KeyValueResult)sourceResult; KeyValueResultContents sourceContents = (KeyValueResultContents)keyValueSource.getContents(); String csvContent = ""; //Set up header for(String key: sourceContents.getKeys()){ csvContent += key + ","; } csvContent.substring(0, csvContent.length() - 2); csvContent += "\n"; //Write out each entry's value for each key for(HashMap<String, ResultData> pairs: sourceContents){ for(String key: sourceContents.getKeys()){ csvContent += pairs.get(key).getAsString() + ","; } csvContent.substring(0, csvContent.length() - 2); csvContent += "\n"; } try(BufferedWriter writer = Files.newBufferedWriter( destFile.toPath(), Charset.defaultCharset())){ writer.write(csvContent); } catch(IOException ioe){ //Catch and rethrow the exception so the twr can close the stream throw ioe; } } else{ throw new IllegalArgumentException("Parameter sourceResult must be" + " of type KeyValueResult"); } } }