Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
 public int?MapToTemplate(int datasetId, int fileId, [FromBody] DataTemplateMap dataTemplateMap)
 {
     return(_fileService.mapToTemplate(datasetId, fileId, dataTemplateMap));
 }