private static DiagnosticResultDto MapDiagnosticResult(Dictionary <int, DiagnosticResultDto> resultDictionary, DiagnosticResultDto r, DiagnosticControllerDto c, DiagnosticTroubleCodeDto tc, dynamic ff) { if (!r.ResultId.HasValue) { return(null); } if (!resultDictionary.TryGetValue(r.ResultId.Value, out var result)) { result = r; result.Controllers = new List <IDiagnosticControllerDto>(); resultDictionary.Add(r.ResultId.Value, result); } if (c == null) { return(result); } var controller = result.Controllers.FirstOrDefault(rc => rc.ControllerId == c.ControllerId); if (controller == null) { controller = c; controller.TroubleCodes = new List <IDiagnosticTroubleCodeDto>(); controller.FreezeFrames = new List <IDiagnosticFreezeFrameDto>(); result.Controllers.Add(controller); } if (controller.TroubleCodes.All(ctc => ctc.DiagnosticTroubleCodeId != tc.DiagnosticTroubleCodeId)) { controller.TroubleCodes.Add(tc); } if (string.IsNullOrEmpty(ff?.SensorGroupsJson)) { return(result); } if (controller.FreezeFrames.Any(cff => cff.FreezeFrameDiagnosticTroubleCode == ff.FreezeFrameDiagnosticTroubleCode)) { return(result); } List <DiagnosticFreezeFrameSensorGroupDto> groups = JsonConvert.DeserializeObject <ICollection <DiagnosticFreezeFrameSensorGroupDto> >(ff.SensorGroupsJson); var freezeFrame = new DiagnosticFreezeFrameDto { FreezeFrameDiagnosticTroubleCode = ff.FreezeFrameDiagnosticTroubleCode, FreezeFrameSensorGroups = groups.ToList <IDiagnosticFreezeFrameSensorGroupDto>() }; controller.FreezeFrames.Add(freezeFrame); return(result); }
private static IDiagnosticFreezeFrameDto GetFreezeFrameInfo(string text) { // Check Input. if (text == null) { return(null); } // Create Result. var result = new DiagnosticFreezeFrameDto { FreezeFrameDiagnosticTroubleCode = GetFieldValue(text, "FF_DTC"), FreezeFrameSensorGroups = new List <IDiagnosticFreezeFrameSensorGroupDto>() }; // Split for Sensor Groups. var groups = Regex.Split(text, @"""FF_SENSORS""").Skip(1).ToList(); foreach (var group in groups) { // Create Sensor Group. var sensorGroup = new DiagnosticFreezeFrameSensorGroupDto { FreezeFrameSensors = new List <IDiagnosticFreezeFrameSensorDto>() }; // Load Sensors. var sensors = Regex.Split(group, @"""FF_SENSOR""").Skip(1).ToList(); foreach (var sensor in sensors) { // Add Delimiter. var s = @"""FF_SENSOR""" + sensor; // Load Sensor. sensorGroup.FreezeFrameSensors.Add(new DiagnosticFreezeFrameSensorDto { SensorName = GetFieldValue(s, "FF_SENSOR"), SensorValue = GetFieldValue(s, "FF_VALUE"), SensorUnit = GetFieldValue(s, "FF_UNITS") }); } // Add to Result. result.FreezeFrameSensorGroups.Add(sensorGroup); } return(result); }
private static IDiagnosticFreezeFrameDto GetFreezeFrameInfo(List <string> lines) { // Check Input. if (!lines?.Any() ?? true) { return(null); } // Create Freeze Frame. var result = new DiagnosticFreezeFrameDto { FreezeFrameSensorGroups = new List <IDiagnosticFreezeFrameSensorGroupDto>() }; // Populate Result. for (var i = 0; i < lines.Count - 1; ++i) { // Check Line. if (CheckLine(lines[i], lines[i + 1])) { continue; } // Load Values. var value = GetValue(lines[i + 1]); switch (lines[i]) { case "<FF_DTC>": result.FreezeFrameDiagnosticTroubleCode = value; break; case "<FF_SENSORS>": var endIndex = lines.FindIndex(i + 1, e => e.EndsWith("FF_SENSORS>")) - 1; result.FreezeFrameSensorGroups.Add(GetFreezeFrameSensorGroup(lines.Skip(i + 1).Take(endIndex - i).ToList())); i = endIndex; break; } } // Return. return(result); }