/// <summary> /// Runs the transformers. /// </summary> /// <returns><c>true</c>, if transformers was run, <c>false</c> otherwise.</returns> public bool RunTransformers() { if (!Transformers.Any()) { LogManager.Info("No transformation operations configured.", this); return(true); } bool success = false; var transformers = TransformerManager.GetTransformers(Transformers); if (transformers?.Any() ?? false && InputData?.Keys?.Count >= 1) { // iterate through the list of transformers and run on each input data set var transformedData = new Dictionary <string, IEnumerable <SensorReading> >(); foreach (var transformer in transformers) { // Sanity checking ... LogManager.Info($"Running transformation operation:\n\t{transformer}", this); // Run the operation ... foreach (var key in InputData.Keys) { bool dataAlreadyProcessedForKey = transformedData.ContainsKey(key); var inputData = (dataAlreadyProcessedForKey ? transformedData[key] : InputData[key]); var transformedValues = transformer.Transform(inputData); if (dataAlreadyProcessedForKey) { transformedData[key] = transformedValues; } else { transformedData.Add(key, transformedValues); } if (WriteOutputFile) { CsvFileWriter.WriteResultsToFile (new[] { OutputDirs.Transformers, transformer.GetType().Name }, key, transformer.GetHeaderCsv(), transformedValues); } } } InputData = transformedData; success = true; } else { LogManager.Error("No input data to run transformations on.", this); } return(success); }