/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.components.doe.common;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* Utils class for the DOE component.
*
* @author Sascha Zur
*/
public final class DOEUtils {
protected static final Log LOGGER = LogFactory.getLog(DOEUtils.class);
private DOEUtils() {
}
/**
* Writes the given table into a .csv file in the given Path.
*
* @param tableValues to write
* @param path to save
* @param header for the header
* @return true, if writing was successful
*/
public static boolean writeTableToCSVFile(Object[][] tableValues, String path, List<String> header) {
if (path != null && !path.endsWith(DOEConstants.TABLE_FILE_EXTENTION)) {
path += DOEConstants.TABLE_FILE_EXTENTION;
}
try {
if (path != null) {
FileWriter fw = new FileWriter(new File(path));
CSVPrinter printer = CSVFormat.newFormat(';')
.withIgnoreSurroundingSpaces().withAllowMissingColumnNames().withRecordSeparator("\n").print(fw);
for (String head : header) {
printer.print(head);
}
printer.println();
for (int i = 0; i < tableValues.length; i++) {
printer.printRecord(tableValues[i]);
printer.flush();
}
printer.close();
}
} catch (IOException e) {
LOGGER.error(e);
return false;
}
return true;
}
/**
* Writes the given table into a .csv file in the given Path.
*
* @param tableValues to write
* @param results map with the returned values in every iteration
* @param path to save
* @param currentRun for indexing
* @param outputs name of all outputs for the header
* @return true, if writing was successful
*/
public static boolean writeResultToCSVFile(Object[][] tableValues, Map<Integer, Map<String, Double>> results, String path,
int currentRun, List<String> outputs) {
if (path != null && !path.endsWith(DOEConstants.TABLE_FILE_EXTENTION)) {
path += DOEConstants.TABLE_FILE_EXTENTION;
}
try {
if (path != null && !results.isEmpty() && results.get(0) != null && !results.get(0).isEmpty()) {
List<String> orderedInputs = new LinkedList<>(results.get(0).keySet());
Collections.sort(orderedInputs);
FileWriter fw = new FileWriter(new File(path));
CSVPrinter printer = CSVFormat.newFormat(';')
.withIgnoreSurroundingSpaces().withAllowMissingColumnNames().withRecordSeparator("\n").print(fw);
for (String outputName : outputs) {
printer.print(outputName);
}
for (String input : orderedInputs) {
printer.print(input);
}
printer.println();
for (int i = 0; i < currentRun; i++) {
if (results.get(i) != null) {
for (int j = 0; j < tableValues[i].length; j++) {
printer.print(tableValues[i][j]);
}
for (String input : orderedInputs) {
printer.print(results.get(i).get(input));
}
}
printer.println();
printer.flush();
}
printer.close();
}
} catch (IOException e) {
LOGGER.error(e);
return false;
}
return true;
}
}