public int?mapToTemplate(int datasetId, int fileId, DataTemplateMap map) { //var dataset = GetActivityDataset(datasetId); //var projectId = dataset.Activity.ProjectId; var dataFile = _fileRepository.Get(fileId); var filePath = Path.Combine(dataFile.Path, dataFile.FileName); //FileService fileService = new FileService(_dataServiceUnit); DataTable inputDataTable = ReadOriginalFile(filePath); DataTable sdtmTable = new DataTable(); //var varMaps = new List<DataTemplateMap.VariableMap>(); foreach ( var varMap in map.VarTypes.SelectMany(variableType => variableType.vars.Where(varMap => varMap.DataType != null))) { sdtmTable.Columns.Add(varMap.ShortName); //,Type.GetType(varMap.DataType) // varMaps.Add(varMap); } for (int i = 0; i < map.TopicColumns.Count; i++) { foreach (DataRow inputRow in inputDataTable.Rows) // Loop over the rows. { DataRow sdtmRow = sdtmTable.NewRow(); //Identifiers foreach (var varMap in map.VarTypes.Find(vt => vt.name.Equals("Identifiers")).vars) { if (varMap.MapToStringValueList.Count == 0 && varMap.MapToColList.Count == 0) { continue; } if (varMap.MapToStringValueList[0] != null && varMap.MapToStringValueList[0] != string.Empty) { sdtmRow[varMap.ShortName] = varMap.MapToStringValueList[0]; } else if (varMap.MapToColList[0] != null) { var colName = varMap.MapToColList[0].colName; sdtmRow[varMap.ShortName] = inputRow[colName]; } //if (varMap.ShortName.Equals("STUDYID")) // studyId = sdtmRow[varMap.ShortName].ToString(); } //Observation Topic & Qualifiers if (map.VarTypes.Exists(vt => vt.name.Equals("Observation Descriptors"))) { foreach (var varMap in map.VarTypes.Find(vt => vt.name.Equals("Observation Descriptors")).vars) { if (varMap.MapToStringValueList.Count == 0 && varMap.MapToColList.Count == 0) { continue; } if (varMap.MapToStringValueList[i] != null && varMap.MapToStringValueList[i] != string.Empty) { sdtmRow[varMap.ShortName] = varMap.MapToStringValueList[i]; } else if (varMap.MapToColList[i] != null) { var colName = varMap.MapToColList[i].colName; sdtmRow[varMap.ShortName] = inputRow[colName]; } else { sdtmRow[varMap.ShortName] = null; } } } //Timings if (map.VarTypes.Exists(vt => vt.name.Equals("Timing Descriptors"))) { foreach (var varMap in map.VarTypes.Find(vt => vt.name.Equals("Timing Descriptors")).vars) { if (varMap.MapToStringValueList.Count == 0 && varMap.MapToColList.Count == 0) { continue; } if (varMap.MapToStringValueList[0] != null && varMap.MapToStringValueList[0] != string.Empty) { sdtmRow[varMap.ShortName] = varMap.MapToStringValueList[0]; } else if (varMap.MapToColList[0] != null) { var colName = varMap.MapToColList[0].colName; sdtmRow[varMap.ShortName] = inputRow[colName]; } } } sdtmTable.Rows.Add(sdtmRow); } } DataFile standardFile = null; var dataset = _datasetRepository.FindSingle(d => d.Id == datasetId, new List <string>() { "Activity", "DataFiles" }); if (sdtmTable.Rows.Count != 0) { string dsName = dataset.Activity.Name + "_" + dataset.TemplateId; sdtmTable.TableName = dsName; //Write new transformed to file var fileInfo = WriteDataFile(dataFile.Path, sdtmTable); standardFile = AddOrUpdateFile(dataFile.ProjectId, fileInfo); //Update dataset //STUPID EF 1.1 //dataset.DataFiles.Add(standardFile); dataset.DataFiles.Add(new DatasetDatafile() { DatasetId = datasetId, DatafileId = dataFile.Id }); ///////////////////////////////////// _datasetRepository.Update(dataset); _dataServiceUnit.Save(); } dataset.State = "mapped"; return(standardFile?.Id); }
public DataTemplateMap GetTemplateMaps(int datasetId) { var map = new DataTemplateMap(); var ds = _datasetRepository.FindSingle( d => d.Id.Equals(datasetId), new List <string>() { "Variables.VariableDefinition.Role", "Domain", "Activity" }); //when querying for variables exclude synonym and variable qualifiers as these will be retrieved from their associated main variables //CL-Role-4 & CL-Role 5 //Add a property in vardef and templatevar to reference a list of synonyms and a list of qualifier variables map.Domain = ds.Template.Domain; map.TopicColumns = new List <string>(); map.ObservationName = ds.Template.Domain.Substring(0, ds.Template.Domain.Length - 1); //map.VarTypes = new List<Dictionary<string, List<DataTemplateMap.VariableMap>>>(); map.VarTypes = new List <DataTemplateMap.VariableType>(); var ignoredRoles = new List <string>() { "SynonymQualifier", "GroupingQualifier", "Rule" }; var observationRoles = new List <string>() { "Topic", "RecordQualifier", "ResultQualifier", "VariableQualifier" }; foreach (var vtg in ds.Variables .OrderBy(o => o.VariableDefinition.RoleId) //should be variable.order .GroupBy(v => v.VariableDefinition.Role.Name)) { //if (vtg.Key.Equals("SynonymQualifier") || vtg.Key.Equals("GroupingQualifier")) continue; if (ignoredRoles.Any(s => s.Equals(vtg.Key))) { continue; } DataTemplateMap.VariableType varType = null; if (vtg.Key.Equals("Identifier")) { //map.VarTypes.Add("Identifiers", varList = new List<DataTemplateMap.VariableMap>()); map.VarTypes.Add(varType = new DataTemplateMap.VariableType() { name = "Identifiers", vars = new List <DataTemplateMap.VariableMap>() }); } if (vtg.Key.Equals("Timing")) { //map.VarTypes.Add("Timing Descriptors", varList = new List<DataTemplateMap.VariableMap>()); map.VarTypes.Add(varType = new DataTemplateMap.VariableType() { name = "Timing Descriptors", vars = new List <DataTemplateMap.VariableMap>() }); } if (observationRoles.Any(s => s.Equals(vtg.Key))) { if (!map.VarTypes.Exists(v => v.name.Equals("Observation Descriptors"))) { map.VarTypes.Add(varType = new DataTemplateMap.VariableType() { name = "Observation Descriptors", vars = new List <DataTemplateMap.VariableMap>() }); } else { varType = map.VarTypes.Find(vt => vt.name.Equals("Observation Descriptors")); } } foreach (var var in vtg.OrderBy(o => o.VariableDefinition.Id)) //orderby orderNo { var vgmap = new DataTemplateMap.VariableMap { Label = var.VariableDefinition.Label, ShortName = var.VariableDefinition.Name, Description = var.VariableDefinition.Description, DataType = var.VariableDefinition.DataType, MapToStringValueList = new List <string>(), MapToColList = new List <ColHeaderDTO>() }; varType.vars.Add(vgmap); } } return(map); }
public int?MapToTemplate(int datasetId, int fileId, [FromBody] DataTemplateMap dataTemplateMap) { return(_fileService.mapToTemplate(datasetId, fileId, dataTemplateMap)); }