Пример #1
0
        public void GetDatasetVersionEffectiveDataTuples_CalledOlderVersionWithPaging_ReturnListOfAbstractTuples()
        {
            //Arrange
            DatasetManager datasetManager = null;
            int            pageSize       = 4;
            int            pageNumber     = 2;

            try
            {
                datasetManager = new DatasetManager();

                var latestDatasetVersionId = datasetManager.GetDatasetLatestVersionId(datasetId);

                //get latest datatupleid before create a new dataset and data
                using (var uow = this.GetUnitOfWork())
                {
                    var latestDataTuple = uow.GetReadOnlyRepository <DataTuple>().Get().LastOrDefault();
                    var firstDataTuple  = uow.GetReadOnlyRepository <DataTuple>().Get().Where(dt => dt.DatasetVersion.Id.Equals(latestDatasetVersionId)).FirstOrDefault();
                    if (latestDataTuple != null)
                    {
                        latestDataTupleId = latestDataTuple.Id;
                    }
                    if (firstDataTuple != null)
                    {
                        firstDataTupleId = firstDataTuple.Id;
                    }
                }

                var dataset = datasetManager.GetDataset(datasetId);

                dataset = dsHelper.UpdateOneTupleForDataset(dataset, (StructuredDataStructure)dataset.DataStructure, firstDataTupleId, 1, datasetManager);
                datasetManager.CheckInDataset(dataset.Id, "for testing  datatuples with versions", username, ViewCreationBehavior.None);

                dataset = dsHelper.UpdateOneTupleForDataset(dataset, (StructuredDataStructure)dataset.DataStructure, latestDataTupleId, 2, datasetManager);
                datasetManager.CheckInDataset(dataset.Id, "for testing  datatuples with versions", username, ViewCreationBehavior.None);


                //Act
                List <DatasetVersion> datasetversions = datasetManager.GetDatasetVersions(datasetId).OrderBy(d => d.Timestamp).ToList();
                var         resultAll  = datasetManager.GetDatasetVersionEffectiveTuples(datasetversions.ElementAt(datasetversions.Count - 2));
                List <long> comapreIds = resultAll.OrderBy(dt => dt.OrderNo).Skip(pageNumber * pageSize).Take(pageSize).Select(dt => dt.Id).ToList();


                var result    = datasetManager.GetDatasetVersionEffectiveTuples(datasetversions.ElementAt(datasetversions.Count - 2), pageNumber, pageSize); // get datatuples from the one before the latest
                var resultIds = result.Select(dt => dt.Id).ToList();

                //Assert
                Assert.That(comapreIds, Is.EquivalentTo(resultIds));
            }
            finally
            {
                datasetManager.Dispose();
            }
        }
Пример #2
0
        public void GetDataTuples_CallOlderVersionAfterTwoUpdates_ReturnIQueryable()
        {
            List <long> datatupleIds;

            try
            {
                //Arrange
                using (var datasetManager = new DatasetManager())
                {
                    var dataset        = datasetManager.GetDataset(datasetId);
                    var datasetVersion = datasetManager.GetDatasetLatestVersion(datasetId);

                    Assert.IsNotNull(dataset);
                    Assert.IsNotNull(datasetVersion);

                    //get latest datatupleid before create a new dataset and data
                    using (var uow = this.GetUnitOfWork())
                    {
                        datatupleIds = uow.GetReadOnlyRepository <DataTuple>().Get().Where(dt => dt.DatasetVersion.Id.Equals(datasetVersion.Id)).Select(dt => dt.Id).ToList();
                    }

                    dataset = dsHelper.UpdateOneTupleForDataset(dataset, (StructuredDataStructure)dataset.DataStructure, datatupleIds[0], 1000, datasetManager);
                    datasetManager.CheckInDataset(dataset.Id, "for testing  datatuples with versions", username, ViewCreationBehavior.None);

                    dataset = dsHelper.UpdateOneTupleForDataset(dataset, (StructuredDataStructure)dataset.DataStructure, datatupleIds[1], 2000, datasetManager);
                    datasetManager.CheckInDataset(dataset.Id, "for testing  datatuples with versions", username, ViewCreationBehavior.None);
                }


                //Act
                using (var datasetManager = new DatasetManager())
                {
                    List <DatasetVersion> datasetversions = datasetManager.GetDatasetVersions(datasetId).OrderBy(d => d.Timestamp).ToList();
                    Assert.That(datasetversions.Count, Is.EqualTo(3));

                    foreach (var dsv in datasetversions)
                    {
                        int c = datasetManager.GetDataTuplesCount(dsv.Id);

                        var result = datasetManager.GetDataTuples(dsv.Id); // get datatuples from the one before the latest
                        int cm     = result.Count();
                        Assert.That(c, Is.EqualTo(10));
                        Assert.That(c, Is.EqualTo(result.Count()));
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Пример #3
0
        private List <string> FindDatasetPerformers(DatasetManager dm, long datasetId) //latest version
        {
            var           dsvs = dm.GetDatasetVersions(datasetId);
            string        performer;
            List <string> performerUsernames = new List <string>();

            foreach (var d in dsvs)
            {
                performer = d.ModificationInfo.Performer;
                if (performer != null && !performerUsernames.Contains(performer))
                {
                    performerUsernames.Add(performer);
                }
            }
            return(performerUsernames);
        }
        //copy of BExIS.Modules.Ddm.UI.Controllers.DataController.getVersionsSelectList
        private SelectList getVersionsSelectList(long id, DatasetManager datasetManager)
        {
            List <SelectListItem> tmp = new List <SelectListItem>();

            List <DatasetVersion> dsvs = datasetManager.GetDatasetVersions(id).OrderByDescending(d => d.Timestamp).ToList();

            dsvs.ForEach(d => tmp.Add(
                             new SelectListItem()
            {
                Text  = (dsvs.Count - dsvs.IndexOf(d)) + " " + getVersionInfo(d),
                Value = "" + (dsvs.Count - dsvs.IndexOf(d))
            }
                             ));

            return(new SelectList(tmp, "Value", "Text"));
        }
Пример #5
0
        public void GetDataTuples_WhenCalledOneOlderVersion_ReturnIQueryableOfAbstractTuples()
        {
            //Arrange
            DatasetManager datasetManager = null;

            try
            {
                datasetManager = new DatasetManager();

                //get latest datatupleid before create a new dataset and data
                using (var uow = this.GetUnitOfWork())
                {
                    var latestDataTuple = uow.GetReadOnlyRepository <DataTuple>().Get().LastOrDefault();
                    if (latestDataTuple != null)
                    {
                        latestDataTupleId = latestDataTuple.Id;
                    }
                }

                var dataset = datasetManager.GetDataset(datasetId);

                dataset = dsHelper.UpdateOneTupleForDataset(dataset, (StructuredDataStructure)dataset.DataStructure, latestDataTupleId, 1, datasetManager);
                datasetManager.CheckInDataset(dataset.Id, "for testing  datatuples with versions", username, ViewCreationBehavior.None);

                //Act
                List <DatasetVersion> datasetversions = datasetManager.GetDatasetVersions(datasetId).OrderBy(d => d.Timestamp).ToList();
                var result = datasetManager.GetDataTuples(datasetversions.ElementAt(datasetversions.Count - 2).Id); // get datatuples from the one before the latest

                //Assert
                Assert.That(result.Count(), Is.EqualTo(10));
            }
            finally
            {
                datasetManager.Dispose();
            }
        }
Пример #6
0
        public ActionResult dqSync()
        {
            using (var dm = new DatasetManager())
            {
                List <long>             datasetIds = dm.GetDatasetLatestIds(); //get latest
                EntityPermissionManager entityPermissionManager = new EntityPermissionManager();
                DataStructureManager    dsm = new DataStructureManager();

                try
                {
                    //datasetManager.SyncView(datasetIds, ViewCreationBehavior.Create | ViewCreationBehavior.Refresh);
                    // if the viewData has a model error, the redirect forgets about it.
                    string       pathPerformers         = @"C:\Data\DatasetQualities\Performers.csv";
                    StreamWriter writerPerformers       = new StreamWriter(pathPerformers);
                    string       pathPerformerDataset   = @"C:\Data\DatasetQualities\PerformerDataset.csv";
                    StreamWriter writerPerformerDataset = new StreamWriter(pathPerformerDataset);
                    string       pathComparison         = @"C:\Data\DatasetQualities\Comparison.csv";
                    StreamWriter writerComparison       = new StreamWriter(pathComparison);
                    string       pathDatasets           = @"C:\Data\DatasetQualities\datasetInfo.csv";
                    StreamWriter writerDatasets         = new StreamWriter(pathDatasets);
                    string       pathVariable           = @"C:\Data\DatasetQualities\Variables.csv";
                    StreamWriter writerVariable         = new StreamWriter(pathVariable);
                    string       pathFiles   = @"C:\Data\DatasetQualities\Files.csv";
                    StreamWriter writerFiles = new StreamWriter(pathFiles);

                    string variableHeader = "datasetId,VarLabel,varType,varDescription,varUse,varMissing";
                    writerVariable.WriteLine(variableHeader);

                    string                   performer;
                    List <string>            performerDataset = new List <string>();
                    Dictionary <string, int> performerCount   = new Dictionary <string, int>();
                    List <int>               metadataRates    = new List <int>();
                    int allValidMetadas = 0;
                    //int publicDatasets = 0; //could not get result
                    //int restrictedDatasets = 0; //could not get result
                    List <int>    dsDescLength       = new List <int>();
                    List <int>    dstrDescLength     = new List <int>();
                    List <int>    dstrUsage          = new List <int>();
                    List <int>    datasetSizeTabular = new List <int>();
                    List <int>    datasetRows        = new List <int>();
                    List <int>    datasetCols        = new List <int>();
                    List <double> datasetSizeFiles   = new List <double>(); //all files in all datasets
                    List <int>    datasetFileNumber  = new List <int>();
                    List <int>    sizeTabular        = new List <int>();    //collect size, column number, and row number for one dataset

                    int fileDatasets    = 0;
                    int tabularDatasets = 0;

                    int           fileNumber       = 0;
                    List <double> datasetTotalSize = new List <double>(); //total file size of each dataset
                    List <double> sizeFile         = new List <double>(); ///////////////////////////


                    foreach (long datasetId in datasetIds)
                    {
                        DatasetVersion datasetLatestVersion = dm.GetDatasetLatestVersion(datasetId);                               //get last dataset versions
                        DataStructure  dataStr = dsm.AllTypesDataStructureRepo.Get(datasetLatestVersion.Dataset.DataStructure.Id); //get data structure


                        #region performers
                        List <string> pers = new List <string>();
                        var           dsvs = dm.GetDatasetVersions(datasetId);
                        foreach (var d in dsvs)
                        {
                            performer = d.ModificationInfo.Performer;
                            if (performer != null && !pers.Contains(performer))
                            {
                                pers.Add(performer);  //a list of performers
                            }
                        }
                        foreach (var p in pers)
                        {
                            writerPerformerDataset.WriteLine(p + "," + datasetId); //fill the file PerformerDataset with a list of 'performer,datasetId'
                            if (performerCount.ContainsKey(p))
                            {
                                performerCount[p] += 1;
                            }
                            else
                            {
                                performerCount.Add(p, 1);
                            }
                        }
                        #endregion

                        #region allValidmetadatas
                        long metadataStructureId = dm.DatasetRepo.Get(datasetId).MetadataStructure.Id;
                        int  validMetadata       = 0;
                        if (datasetLatestVersion.StateInfo != null)
                        {
                            validMetadata = DatasetStateInfo.Valid.ToString().Equals(datasetLatestVersion.StateInfo.State) ? 1 : 0; //1:valid; 0:invalid.
                        }
                        else
                        {
                            validMetadata = 0;
                        }
                        if (validMetadata == 1)  //count how many datasets have valid metadata
                        {
                            allValidMetadas += 1;
                        }

                        #endregion

                        #region metadataRates
                        XmlDocument         metadata = datasetLatestVersion.Metadata;
                        string              xmlFrag  = metadata.OuterXml;
                        List <int>          metaInfo = new List <int>();
                        NameTable           nt       = new NameTable();
                        XmlNamespaceManager nsmgr    = new XmlNamespaceManager(nt);
                        // Create the XmlParserContext.
                        XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None);
                        // Create the reader.
                        XmlTextReader reader = new XmlTextReader(xmlFrag, XmlNodeType.Element, context);

                        int countMetaAttr       = 0;
                        int countMetaComplition = 0;

                        // Parse the XML and display each node.
                        while (reader.Read())
                        {
                            //XmlTextReader myReader = reader;
                            if (reader.NodeType == XmlNodeType.Element)
                            {
                                if (reader.HasAttributes && reader.GetAttribute("type") == "MetadataAttribute")
                                {
                                    countMetaAttr += 1;
                                    reader.Read();
                                    if (reader.NodeType == XmlNodeType.Text)
                                    {
                                        string text = reader.Value;
                                        countMetaComplition += 1;
                                    }
                                }
                            }
                        }

                        // Close the reader.
                        reader.Close();
                        int rate = (countMetaComplition * 100) / countMetaAttr; //percentage of all metadata fields contains information

                        metadataRates.Add(rate);
                        #endregion

                        ////find how many public dataset exist
                        //int publicRights = entityPermissionManager.GetRights(null, 1, datasetId); //1:public; 0:restricted
                        //if (publicRights == 1) { publicDatasets += 1; }
                        //if (publicRights == 0) { restrictedDatasets += 1; }

                        ///issue here is that when a dataset has an empty dataset description field, the datasetLatestVersion.Description has the "not available" as value.
                        int datasetLatestVersionDescriptionLength = 0;
                        if (datasetLatestVersion.Description == "not available")
                        {
                            dsDescLength.Add(0);
                        }
                        else
                        {
                            dsDescLength.Add(datasetLatestVersion.Description.Length); //get dataset description length
                            datasetLatestVersionDescriptionLength = datasetLatestVersion.Description.Length;
                        }

                        dstrDescLength.Add(datasetLatestVersion.Dataset.DataStructure.Description.Length); //get data structure description length
                        dstrUsage.Add(dataStr.Datasets.Count() - 1);                                       //data structure is used in how many other datasets (doesn't contain the current one)

                        string type = "file";
                        if (dataStr.Self.GetType() == typeof(StructuredDataStructure))
                        {
                            type = "tabular";
                        }                                                                                    //get dataset type
                        int colNum = 0;
                        int rowNum = 0;
                        #region tabular dataset
                        if (type == "tabular")
                        {
                            tabularDatasets += 1;
                            try
                            {
                                DataTable               table   = dm.GetLatestDatasetVersionTuples(datasetId, true);
                                DataRowCollection       rowss   = table.Rows;
                                DataColumnCollection    columns = table.Columns;
                                StructuredDataStructure sds     = dsm.StructuredDataStructureRepo.Get(datasetLatestVersion.Dataset.DataStructure.Id); //get data structure
                                var variables = sds.Variables;                                                                                        //get variables
                                //sizeTabular[1] = variables.Count; //columns.Count - 4;
                                //if (sizeTabular[1] < 0) //if data structure has not been designed.
                                //{
                                //    sizeTabular[1] = 0;
                                //}
                                //sizeTabular[2] = rowss.Count;
                                //sizeTabular[0] = sizeTabular[1] * sizeTabular[2];
                                colNum = variables.Count;
                                rowNum = rowss.Count;

                                #region variables

                                int columnNumber = -1; //First four columns are added from system.
                                if (variables.Count() > 0)
                                {
                                    foreach (var variable in variables)
                                    {
                                        columnNumber += 1;
                                        //string missingValue = variable.MissingValue; //MISSING VALUE
                                        List <string> missingValues = new List <string>(); //creat a list contains missing values
                                        DataTable     missTable     = new DataTable();
                                        foreach (var missValue in variable.MissingValues)  //if data is equal missing value
                                        {
                                            missingValues.Add(missValue.Placeholder);
                                        }
                                        var    varUse  = variable.DataAttribute.UsagesAsVariable.Count() - 1;
                                        string varType = variable.DataAttribute.DataType.SystemType;

                                        int varMissing = 100; //suppose 100% is completed
                                        try
                                        {
                                            if (rowss.Count > 0)
                                            {
                                                int missing = rowss.Count;
                                                foreach (DataRow row in rowss)
                                                {
                                                    var value = row.ItemArray[columnNumber];                       //.ToString();
                                                    if (value == null || missingValues.Contains(value.ToString())) //check if cell is emty or contains a missing value
                                                    {
                                                        missing -= 1;
                                                    }
                                                }
                                                varMissing = 100 * missing / rowss.Count; //% of existing values
                                            }
                                            else
                                            {
                                                varMissing = 0;
                                            }
                                        }
                                        catch
                                        {
                                            varMissing = 0;
                                        }
                                        string variableLine = datasetId + ","                      //0: dataset Id
                                                              + variable.Label + ","               //1: variable name
                                                              + varType + ","                      //2: data type
                                                              + variable.Description.Count() + "," //3: variable description length
                                                              + varUse + ","                       //4: variable usage
                                                              + varMissing;                        //5: % completed
                                        writerVariable.WriteLine(variableLine);
                                    }
                                }
                                #endregion
                            }
                            catch
                            {
                                colNum = 0;
                                rowNum = 0;
                                //sizeTabular.Add(0);
                                //sizeTabular.Add(0);
                                //sizeTabular.Add(0);
                            }



                            datasetSizeTabular.Add(colNum * rowNum); //sizeTabular[0]);
                            datasetCols.Add(colNum);                 // sizeTabular[1]); //column number
                            datasetRows.Add(rowNum);                 // sizeTabular[2]); //row number
                        }

                        #endregion

                        #region file dataset
                        else if (type == "file")
                        {
                            fileDatasets += 1;
                            List <ContentDescriptor> contentDescriptors = datasetLatestVersion.ContentDescriptors.ToList();
                            fileNumber = contentDescriptors.Count;
                            //datasetFileNumber.Add(fileNumber);
                            //sizeFile.Add(fileNumber);
                            int    fileNum       = 0;
                            double totalSize     = 0;
                            string fileInDataset = "";
                            if (contentDescriptors.Count > 0)
                            {
                                foreach (ContentDescriptor cd in contentDescriptors)
                                {
                                    if (cd.Name.ToLower().Equals("unstructureddata"))
                                    {
                                        fileNum += 1;

                                        string uri  = cd.URI;
                                        String path = Server.UrlDecode(uri);
                                        path = Path.Combine(AppConfiguration.DataPath, path);
                                        try
                                        {
                                            Stream     fileStream = System.IO.File.OpenRead(path);
                                            FileStream fs         = fileStream as FileStream;
                                            if (fs != null)
                                            {
                                                FileInformation fileInfo = new FileInformation(fs.Name.Split('\\').LastOrDefault(), MimeMapping.GetMimeMapping(fs.Name), (uint)fs.Length, uri);
                                                totalSize    += fileInfo.Size;
                                                fileInDataset = datasetId + "," + fileInfo.Name.Split('.')[0] + "," + fileInfo.Name.Split('.')[1].ToLower() + "," + fileInfo.Size; //datasetId,file name,file extension,file size
                                                writerFiles.WriteLine(fileInDataset);
                                            }
                                        }
                                        catch
                                        {
                                            datasetSizeFiles.Add(0); //file size
                                        }
                                    }
                                }

                                datasetFileNumber.Add(fileNum);
                                datasetTotalSize.Add(totalSize);
                            }
                            else
                            {
                                datasetFileNumber.Add(0);
                                datasetTotalSize.Add(0);
                            }
                        }

                        #endregion

                        //[0]datasetId, [1]dataType, [2]IsValid, [3]metadataComplitionRate,
                        //[4]datasetDescLength, [5]dataStrDescrLength, [6]DataStrUsage,
                        //[7]columns, [8]rows, [9]file numbers, [10]file sizes, [11]performers

                        string datasetInfo = datasetId + ";" + type + ";" + validMetadata + ";" + rate + ";"
                                             + datasetLatestVersionDescriptionLength + ";"
                                             + datasetLatestVersion.Dataset.DataStructure.Description.Length + ";"
                                             + (dataStr.Datasets.Count() - 1);
                        if (type == "tabular")
                        {
                            datasetInfo = datasetInfo + ";" + datasetCols.Last()  //column number
                                          + ";" + datasetRows.Last()              //row number
                                          + ";0;0";                               //file number and size
                        }
                        if (type == "file")
                        {
                            datasetInfo = datasetInfo + ";0;0"             //column and row number
                                          + ";" + datasetFileNumber.Last() //sizeFile[0]             //file number
                                          + ";" + datasetTotalSize.Last(); //sizeFile[1];            //total size
                        }
                        string prfmrs = "";
                        foreach (string p in pers)
                        {
                            prfmrs = prfmrs + FindPerformerNameFromUsername(p) + ",";
                        }
                        prfmrs.Remove(prfmrs.Length - 1, 1);
                        datasetInfo = datasetInfo + ";" + prfmrs;
                        writerDatasets.WriteLine(datasetInfo);
                    }
                    writerDatasets.Close();

                    #region performersInFile
                    //write a list of 'performer,activity' in Performers.csv
                    foreach (string p in performerCount.Keys)
                    {
                        string l = p + "," + performerCount[p];
                        writerPerformers.WriteLine(l);
                    }

                    // performer activities
                    int        performerMin        = performerCount.Values.Min();
                    int        performerMax        = performerCount.Values.Max();
                    List <int> performerActivities = new List <int>();
                    foreach (int s in performerCount.Values)
                    {
                        performerActivities.Add(s);
                    }
                    double performerMedian  = medianCalc(performerActivities);
                    string performerCompare = "performersActivity," + performerMin + "," + performerMedian + "," + performerMax;
                    writerComparison.WriteLine(performerCompare); //performersActivity
                    writerPerformers.Close();
                    writerPerformerDataset.Close();
                    #endregion

                    #region datasetInfo in file

                    #endregion //datasetInfo in file

                    #region compare in file
                    string m = "metadataRates," + metadataRates.Min() + "," + medianCalc(metadataRates) + "," + metadataRates.Max();
                    writerComparison.WriteLine(m);
                    string allValids = "allValidMetadas," + allValidMetadas;
                    writerComparison.WriteLine(allValids);
                    //string pd = "publicDatasets," + publicDatasets;
                    //string rd = "restrictedDatasets," + restrictedDatasets;
                    //writerComparison.WriteLine(pd);
                    //writerComparison.WriteLine(rd);
                    string datasetDescriptionLength = "datasetDescriptionLength," + dsDescLength.Min() + "," + medianCalc(dsDescLength) + "," + dsDescLength.Max();
                    string dataStrDescriptionLength = "dataStrDescriptionLength," + dstrDescLength.Min() + "," + medianCalc(dstrDescLength) + "," + dstrDescLength.Max();
                    string dataStrUsage             = "dataStrUsage," + dstrUsage.Min() + "," + medianCalc(dstrUsage) + "," + dstrUsage.Max();
                    writerComparison.WriteLine(datasetDescriptionLength);
                    writerComparison.WriteLine(dataStrDescriptionLength);
                    writerComparison.WriteLine(dataStrUsage);

                    string typeDataset = "type," + (tabularDatasets + fileDatasets) + "," + tabularDatasets + "," + fileDatasets;
                    writerComparison.WriteLine(typeDataset);

                    string cols          = "datasetColNumber," + datasetCols.Min() + "," + medianCalc(datasetCols) + "," + datasetCols.Max();
                    string rows          = "datasetRowNumber," + datasetRows.Min() + "," + medianCalc(datasetRows) + "," + datasetRows.Max();
                    string fileNums      = "";
                    string fileSizes     = "";
                    string totalFileSize = "";
                    //if (datasetFileNumber.Count > 0)
                    //{
                    fileNums = "datasetFileNumber," + datasetFileNumber.Min() + "," + medianCalc(datasetFileNumber) + "," + datasetFileNumber.Max();
                    //fileSizes = "datasetSizeFiles," + datasetSizeFiles.Min() + "," + medianCalc(datasetSizeFiles) + "," + datasetSizeFiles.Max();
                    totalFileSize = "datasetTotalSizeFiles," + datasetTotalSize.Min() + "," + medianCalc(datasetTotalSize) + "," + datasetTotalSize.Max();
                    //}
                    //else
                    //{
                    //    fileNums = "datasetFileNumber," + 0 + "," + 0 + "," + 0;
                    //    //fileSizes = "datasetSizeFiles," + 0 + "," + 0 + "," + 0;
                    //    totalFileSize = "datasetTotalSizeFiles," + 0 + "," + 0 + "," + 0;

                    //}
                    writerComparison.WriteLine(cols);
                    writerComparison.WriteLine(rows);
                    writerComparison.WriteLine(fileNums);
                    writerComparison.WriteLine(fileSizes);
                    writerComparison.WriteLine(totalFileSize);
                    #endregion


                    writerComparison.Close();
                    //writerDatasets.Close();
                    writerVariable.Close();
                    writerFiles.Close();
                    return(View());
                    //return RedirectToAction("Index", new { area = "dqm" });
                }
                catch (Exception ex)
                {
                    ViewData.ModelState.AddModelError("", $@"'{ex.Message}'");
                    return(RedirectToAction("dqError", new { area = "dqm" }));
                }
            }
        }
        //copy of BExIS.Modules.Ddm.UI.Controllers.DataController.ShowData (adapted)
        public ActionResult Index(long id, int version = 0)
        {
            DatasetManager          dm = new DatasetManager();
            EntityPermissionManager entityPermissionManager = new EntityPermissionManager();

            try
            {
                DatasetVersion dsv;
                ShowDataModel  model = new ShowDataModel();

                string title = "";
                long   metadataStructureId = -1;
                long   dataStructureId     = -1;
                long   researchPlanId      = 1;
                long   versionId           = 0;
                string dataStructureType   = DataStructureType.Structured.ToString();
                bool   downloadAccess      = false;
                bool   requestExist        = false;
                bool   requestAble         = false;
                bool   latestVersion       = false;
                string isValid             = "no";

                XmlDocument metadata = new XmlDocument();

                if (dm.IsDatasetCheckedIn(id))
                {
                    //get latest version
                    if (version == 0)
                    {
                        versionId = dm.GetDatasetLatestVersionId(id); // check for zero value
                        //get current version number
                        version = dm.GetDatasetVersions(id).OrderBy(d => d.Timestamp).Count();

                        latestVersion = true;
                    }
                    // get specific version
                    else
                    {
                        versionId     = dm.GetDatasetVersions(id).OrderBy(d => d.Timestamp).Skip(version - 1).Take(1).Select(d => d.Id).FirstOrDefault();
                        latestVersion = versionId == dm.GetDatasetLatestVersionId(id);
                    }

                    dsv = dm.DatasetVersionRepo.Get(versionId); // this is needed to allow dsv to access to an open session that is available via the repo

                    if (dsv.StateInfo != null)
                    {
                        isValid = DatasetStateInfo.Valid.ToString().Equals(dsv.StateInfo.State) ? "yes" : "no";
                    }

                    metadataStructureId = dsv.Dataset.MetadataStructure.Id;

                    //MetadataStructureManager msm = new MetadataStructureManager();
                    //dsv.Dataset.MetadataStructure = msm.Repo.Get(dsv.Dataset.MetadataStructure.Id);

                    title           = dsv.Title;
                    dataStructureId = dsv.Dataset.DataStructure.Id;
                    researchPlanId  = dsv.Dataset.ResearchPlan.Id;
                    metadata        = dsv.Metadata;

                    // check if the user has download rights
                    downloadAccess = entityPermissionManager.HasEffectiveRight(HttpContext.User.Identity.Name, typeof(Dataset), id, RightType.Read);

                    //// check if a reuqest of this dataset exist
                    //if (!downloadAccess)
                    //{
                    //    requestExist = HasOpenRequest(id);

                    //    if (UserExist() && HasRequestMapping(id)) requestAble = true;
                    //}

                    dataStructureType = DataStructureType.Unstructured.ToString();


                    ViewBag.Title = PresentationModel.GetViewTitleForTenant("Show Data : " + title, this.Session.GetTenant());
                }
                else
                {
                    ModelState.AddModelError(string.Empty, "Publication is just in processing.");
                }

                model = new ShowDataModel()
                {
                    Id                  = id,
                    Version             = version,
                    VersionSelect       = version,
                    VersionId           = versionId,
                    LatestVersion       = latestVersion,
                    Title               = title,
                    MetadataStructureId = metadataStructureId,
                    DataStructureId     = dataStructureId,
                    ResearchPlanId      = researchPlanId,
                    ViewAccess          = entityPermissionManager.HasEffectiveRight(HttpContext.User.Identity.Name, typeof(Dataset), id, RightType.Read),
                    GrantAccess         = entityPermissionManager.HasEffectiveRight(HttpContext.User.Identity.Name, typeof(Dataset), id, RightType.Grant),
                    DataStructureType   = dataStructureType,
                    DownloadAccess      = downloadAccess,
                    RequestExist        = requestExist,
                    RequestAble         = requestAble
                };

                //set metadata in session
                Session["ShowDataMetadata"] = metadata;
                ViewData["VersionSelect"]   = getVersionsSelectList(id, dm);
                ViewData["isValid"]         = isValid;

                return(View(model));
            }
            finally
            {
                dm.Dispose();
                entityPermissionManager.Dispose();
            }
        }
Пример #8
0
        private ShowPublishDataModel getShowPublishDataModel(long datasetId, long datasetVersionId = -1)
        {
            PublicationManager      publicationManager      = new PublicationManager();
            DatasetManager          datasetManager          = new DatasetManager();
            EntityPermissionManager entityPermissionManager = new EntityPermissionManager();
            ShowPublishDataModel    model = new ShowPublishDataModel();

            try
            {
                Dataset dataset = datasetManager.GetDataset(datasetId);

                List <Broker> Brokers = GetBrokers(dataset.MetadataStructure.Id, publicationManager);

                model.Brokers   = Brokers.Select(b => b.Name).ToList();
                model.DatasetId = datasetId;

                //Todo Download Rigths -> currently set read rigths for this case
                model.DownloadRights = entityPermissionManager.HasEffectiveRight(HttpContext.User.Identity.Name, "Dataset",
                                                                                 typeof(Dataset), datasetId, RightType.Read);
                model.EditRights = entityPermissionManager.HasEffectiveRight(HttpContext.User.Identity.Name, "Dataset",
                                                                             typeof(Dataset), datasetId, RightType.Write);


                List <long> versions = new List <long>();
                if (datasetVersionId == -1)
                {
                    DatasetVersion datasetVersion = datasetManager.GetDatasetLatestVersion(datasetId);
                    datasetVersionId = datasetVersion.Id;
                    versions         = datasetManager.GetDatasetVersions(datasetId).Select(d => d.Id).ToList();

                    if (datasetVersion.StateInfo != null)
                    {
                        model.MetadataIsValid = DatasetStateInfo.Valid.ToString().Equals(datasetVersion.StateInfo.State) ? true : false;
                    }
                }

                //todo check if datasetversion id is correct
                List <Publication> publications =
                    publicationManager.PublicationRepo.Get().Where(p => versions.Contains(p.DatasetVersion.Id)).ToList();

                foreach (var pub in publications)
                {
                    Broker     broker = publicationManager.BrokerRepo.Get(pub.Broker.Id);
                    Repository repo   = null;

                    if (pub.Repository != null)
                    {
                        repo = publicationManager.RepositoryRepo.Get(pub.Repository.Id);
                    }
                    string dataRepoName = repo == null ? "" : repo.Name;


                    List <string> repos =
                        GetRepos(dataset.MetadataStructure.Id, broker.Id, publicationManager).Select(r => r.Name).ToList();

                    model.Publications.Add(new PublicationModel()
                    {
                        Broker           = new BrokerModel(broker.Name, repos, broker.Link),
                        DataRepo         = dataRepoName,
                        DatasetVersionId = pub.DatasetVersion.Id,
                        CreationDate     = pub.Timestamp,
                        ExternalLink     = pub.ExternalLink,
                        FilePath         = pub.FilePath,
                        Status           = pub.Status,
                    });
                }

                return(model);
            }
            finally
            {
                publicationManager.Dispose();
                datasetManager.Dispose();
                entityPermissionManager.Dispose();
            }
        }