public override DataTable GetChunk(IDataLoadEventListener listener, GracefulCancellationToken cancellationToken) { _listener = listener; if (_fileWorklist == null) { listener.OnNotify(this, new NotifyEventArgs(ProgressEventType.Warning, "Skipping component because _fileWorklist is null")); return(null); } _stopwatch.Start(); var dt = base.GetDataTable(); try { FileInfo file; DirectoryInfo directory; if (!_fileWorklist.GetNextFileOrDirectoryToProcess(out directory, out file)) { return(null); } if (file != null && directory == null) { dt.TableName = QuerySyntaxHelper.MakeHeaderNameSane(Path.GetFileNameWithoutExtension(file.Name)); } else if (directory != null) { dt.TableName = QuerySyntaxHelper.MakeHeaderNameSane(Path.GetFileNameWithoutExtension(directory.Name)); } else { throw new Exception("Expected IDicomProcessListProvider to return either a DirectoryInfo or a FileInfo not both/neither"); } if (directory != null) { ProcessDirectoryAsync(dt, directory, listener); Task.WaitAll(tasks.ToArray()); } else //Input is a single zip file if (file.Extension == ".zip") { ProcessZipArchive(dt, listener, file.FullName); } else if (file.Extension == ".dcm") { using (var fs = file.Open(FileMode.Open)) ProcessFile(fs, dt, file.Name, listener); } else { throw new Exception("Expected file to be either .zip or .dcm "); } } finally { //stop recording performance _stopwatch.Stop(); //let people know how far through we are UpdateProgressListeners(); } return(dt); }
public override DataTable GetChunk(IDataLoadEventListener listener, GracefulCancellationToken cancellationToken) { _listener = listener; if (_fileWorklist == null) { listener.OnNotify(this, new NotifyEventArgs(ProgressEventType.Warning, "Skipping component because _fileWorklist is null")); return(null); } _stopwatch.Start(); var dt = base.GetDataTable(); try { AmbiguousFilePath file; DirectoryInfo directory; if (!_fileWorklist.GetNextFileOrDirectoryToProcess(out directory, out file)) { return(null); } // Exactly one of file/directory must be null: if ((file != null) == (directory != null)) { throw new Exception("Expected IDicomProcessListProvider to return either a DirectoryInfo or a FileInfo not both/neither"); } if (file != null) { dt.TableName = QuerySyntaxHelper.MakeHeaderNameSensible(Path.GetFileNameWithoutExtension(file.FullPath)); if (file.FullPath.EndsWith(".zip")) { //Input is a single zip file ProcessZipArchive(dt, listener, file.FullPath); } else { var df = file.GetDataset(_zipPool); ProcessDataset(file.FullPath, df.Dataset, dt, listener); } } if (directory != null) { // Processing a directory dt.TableName = QuerySyntaxHelper.MakeHeaderNameSensible(Path.GetFileNameWithoutExtension(directory.Name)); ProcessDirectoryAsync(dt, directory, listener); Task.WaitAll(tasks.ToArray()); } } finally { //stop recording performance _stopwatch.Stop(); //let people know how far through we are UpdateProgressListeners(); } return(dt); }