|
|
@@ -1,28 +1,55 @@
|
|
|
package ua.ansymo.hintco
|
|
|
|
|
|
+import com.opencsv.CSVWriter
|
|
|
import java.io.File
|
|
|
+import java.io.FileWriter
|
|
|
import java.util.Map
|
|
|
+import org.apache.commons.io.FileUtils
|
|
|
+import org.eclipse.core.runtime.Assert
|
|
|
|
|
|
class OutputProcessor implements IOutputProcessor {
|
|
|
|
|
|
+ var String outDirPrefix;
|
|
|
+ val Map<CosimUnitInstance, CSVWriter> fmuFileMap = newHashMap()
|
|
|
var String outDirPath;
|
|
|
- var File outDir
|
|
|
|
|
|
new (String d){
|
|
|
- outDirPath = d
|
|
|
+ outDirPrefix = d
|
|
|
}
|
|
|
|
|
|
override initialize(CandidateScenario scenario, double stepSize, double stopTime) {
|
|
|
- // Prepare output directory
|
|
|
+ // Prepare output directories
|
|
|
+ var outDir = new File(outDirPrefix)
|
|
|
+ if (outDir.exists){
|
|
|
+ FileUtils.deleteDirectory(outDir)
|
|
|
+ }
|
|
|
+ Assert.isTrue(outDir.mkdirs())
|
|
|
+ Assert.isTrue(outDir.isDirectory)
|
|
|
+ outDirPath = outDir + "/" + String.format("%s_%g_%g",scenario.identifier, stepSize, stopTime)
|
|
|
+ outDir = new File(outDirPath)
|
|
|
+ Assert.isTrue(outDir.mkdirs())
|
|
|
|
|
|
+ // Open csv files
|
|
|
+ for (u : scenario.cosimunits){
|
|
|
+ val f = new CSVWriter(new FileWriter(new File(outDirPath + "/" + u.identifier + ".csv")), ";", CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.DEFAULT_ESCAPE_CHARACTER, CSVWriter.DEFAULT_LINE_END)
|
|
|
+ // Write header
|
|
|
+ f.writeNext(#["step","time"] + u.ports.filter(OutputPortInstance).map[p | p.identifier])
|
|
|
+
|
|
|
+ // Record file handler
|
|
|
+ fmuFileMap.put(u, f)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- override setOutputs(int i, double d, Map<OutputPortInstance, Double> map) {
|
|
|
-
|
|
|
+ override setOutputs(int step, double time, Map<OutputPortInstance, Double> values) {
|
|
|
+ for (u : fmuFileMap.keySet){
|
|
|
+ fmuFileMap.get(u).writeNext(#[String.format("%d",step),String.format("%g",time)] + u.ports.filter(OutputPortInstance).map[p | String.format("%g", values.get(p))])
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
override terminate() {
|
|
|
-
|
|
|
+ for (u : fmuFileMap.keySet){
|
|
|
+ fmuFileMap.get(u).close()
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
}
|