/// <inheritdoc /> public async Task StoreDicomInstanceEntryAsync(IDicomInstanceEntry dicomInstanceEntry, CancellationToken cancellationToken) { EnsureArg.IsNotNull(dicomInstanceEntry, nameof(dicomInstanceEntry)); string dicomInstanceIdentifier = (await dicomInstanceEntry.GetDicomDatasetAsync(cancellationToken)) .ToInstanceIdentifier() .ToString(); LogPersistingDicomInstanceEntryDelegate(_logger, dicomInstanceIdentifier, null); try { await _storeOrchestrator.StoreDicomInstanceEntryAsync(dicomInstanceEntry, cancellationToken); LogSuccessfullyPersistedDicomInstanceEntryDelegate(_logger, dicomInstanceIdentifier, null); } catch (Exception ex) { LogFailedToPersistDicomInstanceEntryDelegate(_logger, dicomInstanceIdentifier, ex); throw; } }
private async Task ProcessDicomInstanceEntryAsync(int index, CancellationToken cancellationToken) { IDicomInstanceEntry dicomInstanceEntry = _dicomInstanceEntries[index]; DicomDataset dicomDataset = null; try { // Open and validate the DICOM instance. dicomDataset = await dicomInstanceEntry.GetDicomDatasetAsync(cancellationToken); await _dicomDatasetValidator.ValidateAsync(dicomDataset, _requiredStudyInstanceUid, cancellationToken); } catch (Exception ex) { ushort failureCode = FailureReasonCodes.ProcessingFailure; switch (ex) { case DicomValidationException _: failureCode = FailureReasonCodes.ValidationFailure; break; case DatasetValidationException dicomDatasetValidationException: failureCode = dicomDatasetValidationException.FailureCode; break; case ValidationException _: failureCode = FailureReasonCodes.ValidationFailure; break; } LogValidationFailedDelegate(_logger, index, failureCode, ex); _storeResponseBuilder.AddFailure(dicomDataset, failureCode); return; } try { // Store the instance. await _storeOrchestrator.StoreDicomInstanceEntryAsync( dicomInstanceEntry, cancellationToken); LogSuccessfullyStoredDelegate(_logger, index, null); _storeResponseBuilder.AddSuccess(dicomDataset); } catch (Exception ex) { ushort failureCode = FailureReasonCodes.ProcessingFailure; switch (ex) { case PendingInstanceException _: failureCode = FailureReasonCodes.PendingSopInstance; break; case InstanceAlreadyExistsException _: failureCode = FailureReasonCodes.SopInstanceAlreadyExists; break; } LogFailedToStoreDelegate(_logger, index, failureCode, ex); _storeResponseBuilder.AddFailure(dicomDataset, failureCode); } }