Exemplo n.º 1
0
        private void CreateFiles(ClaimsPrincipal user,
                                 DataWriterExtensionLogicBase dataWriter,
                                 ExportParameters exportParameters,
                                 SparseProjectInfo sparseProject,
                                 CancellationToken cancellationToken)
        {
            var datasets = sparseProject.Channels.SelectMany(channel => channel.Datasets);
            var registrationToDatasetsMap = new Dictionary <DataReaderRegistration, List <DatasetInfo> >();

            foreach (var dataset in datasets)
            {
                if (!registrationToDatasetsMap.ContainsKey(dataset.Registration))
                {
                    registrationToDatasetsMap[dataset.Registration] = new List <DatasetInfo>();
                }

                registrationToDatasetsMap[dataset.Registration].Add(dataset);
            }

            var progressHandler = (EventHandler <double>)((sender, e) =>
            {
                this.OnProgress(new ProgressUpdatedEventArgs(e, $"Loading data ..."));
            });

            foreach (var entry in registrationToDatasetsMap)
            {
                if (entry.Value.Any())
                {
                    var registration = entry.Key;
                    var dataReader   = _databaseManager.GetDataReader(user, registration);
                    dataReader.Progress.ProgressChanged += progressHandler;

                    try
                    {
                        var isAggregation = dataReader.Registration.Equals(_databaseManager.State.AggregationRegistration);

                        foreach (var progressRecord in dataReader.Read(entry.Value, exportParameters.Begin, exportParameters.End, _blockSizeLimit, cancellationToken))
                        {
                            this.ProcessData(dataWriter, progressRecord, applyStatus: !isAggregation);
                        }
                    }
                    finally
                    {
                        dataReader.Progress.ProgressChanged -= progressHandler;
                    }
                }
            }

            cancellationToken.ThrowIfCancellationRequested();
        }
Exemplo n.º 2
0
        private void CreateFiles(ClaimsPrincipal user,
                                 ExportParameters exportParameters,
                                 SparseProjectInfo sparseProject,
                                 string directoryPath,
                                 CancellationToken cancellationToken)
        {
            var channelDescriptionSet = sparseProject.ToChannelDescriptions();
            var singleFile            = exportParameters.FileGranularity == FileGranularity.SingleFile;

            TimeSpan filePeriod;

            if (singleFile)
            {
                filePeriod = exportParameters.End - exportParameters.Begin;
            }
            else
            {
                filePeriod = TimeSpan.FromSeconds((int)exportParameters.FileGranularity);
            }

            DataWriterExtensionSettingsBase settings;
            DataWriterExtensionLogicBase    dataWriter;

            switch (exportParameters.FileFormat)
            {
            case FileFormat.CSV:

                settings = new CsvSettings()
                {
                    FilePeriod         = filePeriod,
                    SingleFile         = singleFile,
                    RowIndexFormat     = exportParameters.CsvRowIndexFormat,
                    SignificantFigures = exportParameters.CsvSignificantFigures,
                };

                dataWriter = new CsvWriter((CsvSettings)settings, NullLogger.Instance);

                break;

            case FileFormat.FAMOS:

                settings = new FamosSettings()
                {
                    FilePeriod = filePeriod,
                    SingleFile = singleFile,
                };

                dataWriter = new FamosWriter((FamosSettings)settings, NullLogger.Instance);

                break;

            case FileFormat.MAT73:

                settings = new Mat73Settings()
                {
                    FilePeriod = filePeriod,
                    SingleFile = singleFile,
                };

                dataWriter = new Mat73Writer((Mat73Settings)settings, NullLogger.Instance);

                break;

            default:
                throw new NotImplementedException();
            }

            // create custom meta data
            var customMetadataEntrySet = new List <CustomMetadataEntry>();

            //customMetadataEntrySet.Add(new CustomMetadataEntry("system_name", "Nexus Explorer", CustomMetadataEntryLevel.File));

            if (!string.IsNullOrWhiteSpace(sparseProject.License.FileMessage))
            {
                customMetadataEntrySet.Add(new CustomMetadataEntry("license", sparseProject.License.FileMessage, CustomMetadataEntryLevel.Project));
            }

            // initialize data writer
            var projectName_splitted = sparseProject.Id.Split('/');
            var dataWriterContext    = new DataWriterContext("Nexus Explorer", directoryPath, new NexusProjectDescription(Guid.Empty, 0, projectName_splitted[1], projectName_splitted[2], projectName_splitted[3]), customMetadataEntrySet);

            dataWriter.Configure(dataWriterContext, channelDescriptionSet);

            try
            {
                // create temp files
                this.CreateFiles(user, dataWriter, exportParameters, sparseProject, cancellationToken);
                dataWriter.Dispose();
            }
            finally
            {
                dataWriter.Dispose();
            }
        }