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(); }
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(); } }