From 8d0b20fbdf32dbdbf84d463748fdbd338e9caf4f Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Wed, 10 Jul 2019 17:33:48 +0200
Subject: [PATCH] adding configuration option for output folder to gui and for
 initializing filewriters  when running simulation

---
 VECTO/Configuration.vb         |  5 +++++
 VECTO/GUI/MainForm.Designer.vb | 38 +++++++++++++++++++++++++++++++++-
 VECTO/GUI/MainForm.vb          | 29 +++++++++++++++++++++++---
 3 files changed, 68 insertions(+), 4 deletions(-)

diff --git a/VECTO/Configuration.vb b/VECTO/Configuration.vb
index 0af42028db..685d15b68f 100644
--- a/VECTO/Configuration.vb
+++ b/VECTO/Configuration.vb
@@ -32,6 +32,8 @@ Public Class Configuration
 
     Public ValidateRunData As Boolean
 
+    public OutputFolder As String
+
 	Public Const DefaultFuelType As FuelType = FuelType.DieselCI
 
 	Private Const FormatVersion As Short = 2
@@ -58,6 +60,7 @@ Public Class Configuration
 		FirstRun = True
 		DeclMode = True
         ValidateRunData = True
+        OutputFolder = ""
 	End Sub
 
 	Public Sub Load()
@@ -86,6 +89,7 @@ Public Class Configuration
 				FirstRun = body.GetEx(Of Boolean)("FirstRun")
 				DeclMode = body.GetEx(Of Boolean)("DeclMode")
                 ValidateRunData = IsNothing(body("ValidateRunData")) OrElse body.GetEx(Of Boolean)("ValidateRunData")
+                OutputFolder = If(body("OutputFolder") Is Nothing, "", body("OutputFolder").Value(of string)())
 			End Using
 		Catch ex As Exception
 			GUIMsg(MessageType.Err, "Error while loading settings!")
@@ -111,6 +115,7 @@ Public Class Configuration
 		body.Add("FirstRun", FirstRun)
 		body.Add("DeclMode", DeclMode)
         body.Add("ValidateRunData", ValidateRunData)
+        body.Add("OutputFolder", OutputFolder)
 
 		JSONFileWriter.WriteFile(New Dictionary(Of String, Object) From {{"Header", header}, {"Body", body}}, FilePath)
 	End Sub
diff --git a/VECTO/GUI/MainForm.Designer.vb b/VECTO/GUI/MainForm.Designer.vb
index 6308e8eb09..d6703a1de4 100644
--- a/VECTO/GUI/MainForm.Designer.vb
+++ b/VECTO/GUI/MainForm.Designer.vb
@@ -116,6 +116,9 @@ Partial Class MainForm
         Me.OpenInGraphWindowToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
         Me.ShowInFolderToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
         Me.ToolTip1 = New System.Windows.Forms.ToolTip(Me.components)
+        Me.GroupBox4 = New System.Windows.Forms.GroupBox()
+        Me.tbOutputFolder = New System.Windows.Forms.TextBox()
+        Me.Label2 = New System.Windows.Forms.Label()
         Me.StatusBAR.SuspendLayout
         Me.TabControl1.SuspendLayout
         Me.TabPageGEN.SuspendLayout
@@ -133,6 +136,7 @@ Partial Class MainForm
         Me.SplitContainer1.SuspendLayout
         Me.ToolStrip1.SuspendLayout
         Me.CmOpenFile.SuspendLayout
+        Me.GroupBox4.SuspendLayout
         Me.SuspendLayout
         '
         'StatusBAR
@@ -375,6 +379,7 @@ Partial Class MainForm
         '
         'PanelOptAllg
         '
+        Me.PanelOptAllg.Controls.Add(Me.GroupBox4)
         Me.PanelOptAllg.Controls.Add(Me.GroupBox3)
         Me.PanelOptAllg.Controls.Add(Me.GroupBox2)
         Me.PanelOptAllg.Controls.Add(Me.GroupBox1)
@@ -820,6 +825,33 @@ Partial Class MainForm
         Me.ShowInFolderToolStripMenuItem.Size = New System.Drawing.Size(173, 22)
         Me.ShowInFolderToolStripMenuItem.Text = "Show in Folder"
         '
+        'GroupBox4
+        '
+        Me.GroupBox4.Controls.Add(Me.Label2)
+        Me.GroupBox4.Controls.Add(Me.tbOutputFolder)
+        Me.GroupBox4.Location = New System.Drawing.Point(183, 4)
+        Me.GroupBox4.Name = "GroupBox4"
+        Me.GroupBox4.Size = New System.Drawing.Size(344, 71)
+        Me.GroupBox4.TabIndex = 19
+        Me.GroupBox4.TabStop = false
+        Me.GroupBox4.Text = "Results Output"
+        '
+        'tbOutputFolder
+        '
+        Me.tbOutputFolder.Location = New System.Drawing.Point(6, 38)
+        Me.tbOutputFolder.Name = "tbOutputFolder"
+        Me.tbOutputFolder.Size = New System.Drawing.Size(215, 20)
+        Me.tbOutputFolder.TabIndex = 0
+        '
+        'Label2
+        '
+        Me.Label2.AutoSize = true
+        Me.Label2.Location = New System.Drawing.Point(7, 19)
+        Me.Label2.Name = "Label2"
+        Me.Label2.Size = New System.Drawing.Size(84, 13)
+        Me.Label2.TabIndex = 1
+        Me.Label2.Text = "Output Directory"
+        '
         'MainForm
         '
         Me.AcceptButton = Me.btStartV3
@@ -858,6 +890,8 @@ Partial Class MainForm
         Me.ToolStrip1.ResumeLayout(false)
         Me.ToolStrip1.PerformLayout
         Me.CmOpenFile.ResumeLayout(false)
+        Me.GroupBox4.ResumeLayout(false)
+        Me.GroupBox4.PerformLayout
         Me.ResumeLayout(false)
         Me.PerformLayout
 
@@ -951,5 +985,7 @@ End Sub
 	Friend WithEvents cbValidateRunData As System.Windows.Forms.CheckBox
 	Friend WithEvents cbActVmod As System.Windows.Forms.CheckBox
 	Friend WithEvents EPTPJobEditorToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
-
+    Friend WithEvents GroupBox4 As GroupBox
+    Friend WithEvents Label2 As Label
+    Friend WithEvents tbOutputFolder As TextBox
 End Class
diff --git a/VECTO/GUI/MainForm.vb b/VECTO/GUI/MainForm.vb
index 0e69f888b7..de084af857 100644
--- a/VECTO/GUI/MainForm.vb
+++ b/VECTO/GUI/MainForm.vb
@@ -51,6 +51,7 @@ Imports TUGraz.VectoCore
 Imports TUGraz.VectoCore.InputData.FileIO.XML
 Imports TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 Imports TUGraz.VectoCore.InputData.FileIO.XML.Engineering
+Imports TUGraz.VectoCore.Models.Simulation
 Imports TUGraz.VectoCore.OutputData
 Imports TUGraz.VectoCore.OutputData.FileIO
 Imports TUGraz.VectoCore.Utils
@@ -937,7 +938,7 @@ Imports TUGraz.VectoCore.Utils
 
         AllowSleepOff()
 
-        Dim sumFileWriter As FileOutputWriter = New FileOutputWriter(JobFileList(0))
+        Dim sumFileWriter As FileOutputWriter = New FileOutputWriter(GetOutputDirectory(JobFileList(0)))
         Dim sumWriter As SummaryDataContainer = New SummaryDataContainer(sumFileWriter)
         Dim jobContainer As JobContainer = New JobContainer(sumWriter)
 
@@ -987,7 +988,8 @@ Imports TUGraz.VectoCore.Utils
                     Continue For
                 End If
 
-                Dim fileWriter As FileOutputWriter = New FileOutputWriter(jobFile)
+                Dim outFile As String = GetOutputDirectory(jobFile)
+                Dim fileWriter As FileOutputWriter = New FileOutputWriter(outFile)
 
                 Dim runsFactory As SimulatorFactory = New SimulatorFactory(mode, input, fileWriter)
                 runsFactory.WriteModalResults = Cfg.ModOut
@@ -1087,7 +1089,7 @@ Imports TUGraz.VectoCore.Utils
         Next
 
         For Each job As String In JobFileList
-            dim w as FileOutputWriter = new FileOutputWriter(job)
+            dim w as FileOutputWriter = new FileOutputWriter(GetOutputDirectory(job))
             For Each entry as KeyValuePair(Of string, string) In _
                 new Dictionary(Of string, string) _
                     from {{w.XMLFullReportName, "XML Manufacturer Report"}, {w.XMLCustomerReportName, "XML Customer Report"},
@@ -1127,6 +1129,23 @@ Imports TUGraz.VectoCore.Utils
         End If
     End Sub
 
+    Private Function GetOutputDirectory(jobFile As String) As String
+
+        dim outFile as String = jobfile
+        If (Not string.IsNullOrWhiteSpace(tbOutputFolder.Text)) Then
+            Dim outPath as string = tbOutputFolder.Text
+            if (path.IsPathRooted(outPath)) Then
+                outFile = Path.Combine(outPath, Path.GetFileName(jobFile))
+            Else 
+                outFile = Path.Combine(path.GetDirectoryName(jobFile), outPath, path.GetFileName(jobFile))
+            End If
+            If (Not directory.Exists(path.GetDirectoryName(outFile))) then
+                Directory.CreateDirectory(path.GetDirectoryName(outFile))
+            End If
+        End If
+        Return outFile
+    End Function
+
 
     Private Shared Sub PrintRuns(progress As Dictionary(Of Integer, JobContainer.ProgressEntry),
                                  fileWriters As Dictionary(Of Integer, FileOutputWriter))
@@ -1435,6 +1454,9 @@ Imports TUGraz.VectoCore.Utils
 
         RbDecl.Checked = Cfg.DeclMode
         cbValidateRunData.Checked = cfg.ValidateRunData
+
+        tbOutputFolder.Text = Cfg.OutputFolder
+
     End Sub
 
     'Update config class from options in GUI, e.g. before running calculations 
@@ -1442,6 +1464,7 @@ Imports TUGraz.VectoCore.Utils
         Cfg.ModOut = ChBoxModOut.Checked
         Cfg.Mod1Hz = ChBoxMod1Hz.Checked
         Cfg.ValidateRunData = cbValidateRunData.Checked
+        Cfg.OutputFolder = tbOutputFolder.Text
     End Sub
 
 #End Region
-- 
GitLab