comparison OrthancServer/Sources/ServerContext.cpp @ 4506:ac69c9f76c71

refactoring ServerIndex::Store()
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 10 Feb 2021 17:01:44 +0100
parents 97d103b57cd1
children b4c58795f3a8
comparison
equal deleted inserted replaced
4505:97d103b57cd1 4506:ac69c9f76c71
514 514
515 bool hasPixelDataOffset; 515 bool hasPixelDataOffset;
516 uint64_t pixelDataOffset; 516 uint64_t pixelDataOffset;
517 hasPixelDataOffset = DicomStreamReader::LookupPixelDataOffset( 517 hasPixelDataOffset = DicomStreamReader::LookupPixelDataOffset(
518 pixelDataOffset, dicom.GetBufferData(), dicom.GetBufferSize()); 518 pixelDataOffset, dicom.GetBufferData(), dicom.GetBufferSize());
519
520 std::string transferSyntax;
521 bool hasTransferSyntax = dicom.LookupTransferSyntax(transferSyntax);
519 522
520 DicomMap summary; 523 DicomMap summary;
521 OrthancConfiguration::DefaultExtractDicomSummary(summary, dicom.GetParsedDicomFile()); 524 OrthancConfiguration::DefaultExtractDicomSummary(summary, dicom.GetParsedDicomFile());
522 525
523 try 526 try
524 { 527 {
525 MetricsRegistry::Timer timer(GetMetricsRegistry(), "orthanc_store_dicom_duration_ms"); 528 MetricsRegistry::Timer timer(GetMetricsRegistry(), "orthanc_store_dicom_duration_ms");
526 StorageAccessor accessor(area_, GetMetricsRegistry()); 529 StorageAccessor accessor(area_, GetMetricsRegistry());
527 530
528 DicomInstanceHasher hasher(summary); 531 resultPublicId = dicom.GetParsedDicomFile().GetHasher().HashInstance();
529 resultPublicId = hasher.HashInstance();
530 532
531 Json::Value dicomAsJson; 533 Json::Value dicomAsJson;
532 OrthancConfiguration::DefaultDicomDatasetToJson(dicomAsJson, dicom.GetParsedDicomFile()); 534 OrthancConfiguration::DefaultDicomDatasetToJson(dicomAsJson, dicom.GetParsedDicomFile());
533 535
534 Json::Value simplifiedTags; 536 Json::Value simplifiedTags;
588 attachments.push_back(jsonInfo); 590 attachments.push_back(jsonInfo);
589 } 591 }
590 592
591 typedef std::map<MetadataType, std::string> InstanceMetadata; 593 typedef std::map<MetadataType, std::string> InstanceMetadata;
592 InstanceMetadata instanceMetadata; 594 InstanceMetadata instanceMetadata;
593 StoreStatus status = index_.Store(instanceMetadata, dicom, summary, hasher, attachments, 595 StoreStatus status = index_.Store(
594 overwrite, hasPixelDataOffset, pixelDataOffset); 596 instanceMetadata, summary, attachments, dicom.GetMetadata(), dicom.GetOrigin(), overwrite,
597 hasTransferSyntax, transferSyntax, hasPixelDataOffset, pixelDataOffset);
595 598
596 // Only keep the metadata for the "instance" level 599 // Only keep the metadata for the "instance" level
597 dicom.GetMetadata().clear(); 600 dicom.ClearMetadata();
598 601
599 for (InstanceMetadata::const_iterator it = instanceMetadata.begin(); 602 for (InstanceMetadata::const_iterator it = instanceMetadata.begin();
600 it != instanceMetadata.end(); ++it) 603 it != instanceMetadata.end(); ++it)
601 { 604 {
602 dicom.GetMetadata().insert(std::make_pair(std::make_pair(ResourceType_Instance, it->first), 605 dicom.AddMetadata(ResourceType_Instance, it->first, it->second);
603 it->second));
604 } 606 }
605 607
606 if (status != StoreStatus_Success) 608 if (status != StoreStatus_Success)
607 { 609 {
608 accessor.Remove(dicomInfo); 610 accessor.Remove(dicomInfo);