From 319a44c2b1010f8141998997cd62f1f6d6064694 Mon Sep 17 00:00:00 2001
From: Michael Krisper <michael.krisper@tugraz.at>
Date: Wed, 11 May 2016 17:43:08 +0200
Subject: [PATCH] added additional field mechanism in ModData

---
 .../VectoCore/OutputData/IModalDataContainer.cs |  2 ++
 .../VectoCore/OutputData/ModalDataContainer.cs  | 17 ++++++++++++++---
 .../Utils/MockModalDataContainer.cs             |  6 +++++-
 3 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/VectoCore/VectoCore/OutputData/IModalDataContainer.cs b/VectoCore/VectoCore/OutputData/IModalDataContainer.cs
index 6163dc235e..612c31c393 100644
--- a/VectoCore/VectoCore/OutputData/IModalDataContainer.cs
+++ b/VectoCore/VectoCore/OutputData/IModalDataContainer.cs
@@ -93,6 +93,8 @@ namespace TUGraz.VectoCore.OutputData
 
 		Dictionary<string, DataColumn> Auxiliaries { get; set; }
 
+		void SetDataValue(string fieldName, object value);
+
 		void AddAuxiliary(string id);
 	}
 
diff --git a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs
index 55d26cee90..c73b01af3d 100644
--- a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs
+++ b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs
@@ -33,6 +33,7 @@ using System;
 using System.Collections.Generic;
 using System.Data;
 using System.Linq;
+using System.Runtime.CompilerServices;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Models.Simulation.Data;
@@ -49,6 +50,7 @@ namespace TUGraz.VectoCore.OutputData
 		//private readonly VectoRunData _runData;
 
 		private readonly IModalDataWriter _writer;
+		private readonly List<string> _additionalColumns = new List<string>();
 		public string RunName { get; private set; }
 		public string CycleName { get; private set; }
 		public string RunSuffix { get; private set; }
@@ -184,11 +186,11 @@ namespace TUGraz.VectoCore.OutputData
 			}
 
 			var strCols = dataColumns.Select(x => x.GetName())
-				.Concat((Auxiliaries.Values.Select(c => c.ColumnName)))
-				.Concat(new[] { ModalResultField.FCMap, ModalResultField.FCAUXc, ModalResultField.FCWHTCc }.Select(x => x.GetName()));
+				.Concat(Auxiliaries.Values.Select(c => c.ColumnName))
+				.Concat(new[] { ModalResultField.FCMap, ModalResultField.FCAUXc, ModalResultField.FCWHTCc }.Select(x => x.GetName()))
+				.Concat(_additionalColumns);
 
 			if (_mode != ExecutionMode.Declaration || WriteModalResults) {
-				//VectoCSVFile.Write(_modWriter, new DataView(Data).ToTable(false, strCols.ToArray()));
 				_writer.WriteModData(RunName, CycleName, RunSuffix,
 					new DataView(Data).ToTable(false, strCols.ToArray()));
 			}
@@ -220,6 +222,15 @@ namespace TUGraz.VectoCore.OutputData
 			set { CurrentRow[Auxiliaries[auxId]] = value; }
 		}
 
+		[MethodImpl(MethodImplOptions.Synchronized)]
+		public void SetDataValue(string fieldName, object value)
+		{
+			if (!Data.Columns.Contains(fieldName)) {
+				_additionalColumns.Add(fieldName);
+				Data.Columns.Add(fieldName);
+			}
+			CurrentRow[fieldName] = value;
+		}
 
 		public Dictionary<string, DataColumn> Auxiliaries { get; set; }
 
diff --git a/VectoCore/VectoCoreTest/Utils/MockModalDataContainer.cs b/VectoCore/VectoCoreTest/Utils/MockModalDataContainer.cs
index c1dfa3eea0..1ff028aaed 100644
--- a/VectoCore/VectoCoreTest/Utils/MockModalDataContainer.cs
+++ b/VectoCore/VectoCoreTest/Utils/MockModalDataContainer.cs
@@ -78,7 +78,6 @@ namespace TUGraz.VectoCore.Tests.Utils
 			get { return VectoRun.Status.Success; }
 		}
 
-
 		public void Finish(VectoRun.Status runStatus) {}
 
 		public bool WriteModalResults { get; set; }
@@ -95,6 +94,11 @@ namespace TUGraz.VectoCore.Tests.Utils
 
 		public Dictionary<string, DataColumn> Auxiliaries { get; set; }
 
+		public void SetDataValue(string fieldName, object value)
+		{
+			throw new System.NotImplementedException();
+		}
+
 		public void AddAuxiliary(string id)
 		{
 			var auxColName = ModalResultField.P_aux_ + id;
-- 
GitLab