comparison OrthancFramework/Sources/DicomParsing/DicomModification.cpp @ 5137:15109c3f0f7d

added sanity checks in DicomModificationJob + automatically reconstruct resources at the end of a DicomModificationJob
author Alain Mazy <am@osimis.io>
date Wed, 18 Jan 2023 17:58:51 +0100
parents 482f3e80ed0a
children 023569e7155b
comparison
equal deleted inserted replaced
5136:e71b22a43c0b 5137:15109c3f0f7d
542 ClearReplacements(); 542 ClearReplacements();
543 } 543 }
544 544
545 void DicomModification::Keep(const DicomTag& tag) 545 void DicomModification::Keep(const DicomTag& tag)
546 { 546 {
547 keep_.insert(tag);
547 removals_.erase(tag); 548 removals_.erase(tag);
548 clearings_.erase(tag); 549 clearings_.erase(tag);
549 uids_.erase(tag); 550 uids_.erase(tag);
550 551
551 CancelReplacement(tag); 552 CancelReplacement(tag);
636 637
637 638
638 bool DicomModification::IsReplaced(const DicomTag& tag) const 639 bool DicomModification::IsReplaced(const DicomTag& tag) const
639 { 640 {
640 return replacements_.find(tag) != replacements_.end(); 641 return replacements_.find(tag) != replacements_.end();
642 }
643
644 bool DicomModification::IsKept(const DicomTag& tag) const
645 {
646 return keep_.find(tag) != keep_.end();
641 } 647 }
642 648
643 const Json::Value& DicomModification::GetReplacement(const DicomTag& tag) const 649 const Json::Value& DicomModification::GetReplacement(const DicomTag& tag) const
644 { 650 {
645 Replacements::const_iterator it = replacements_.find(tag); 651 Replacements::const_iterator it = replacements_.find(tag);
847 { 853 {
848 boost::recursive_mutex::scoped_lock lock(uidMapMutex_); 854 boost::recursive_mutex::scoped_lock lock(uidMapMutex_);
849 855
850 isAnonymization_ = true; 856 isAnonymization_ = true;
851 857
858 keep_.clear();
852 removals_.clear(); 859 removals_.clear();
853 clearings_.clear(); 860 clearings_.clear();
854 removedRanges_.clear(); 861 removedRanges_.clear();
855 uids_.clear(); 862 uids_.clear();
856 ClearReplacements(); 863 ClearReplacements();
924 if (IsRemoved(DICOM_TAG_PATIENT_ID) || 931 if (IsRemoved(DICOM_TAG_PATIENT_ID) ||
925 IsRemoved(DICOM_TAG_STUDY_INSTANCE_UID) || 932 IsRemoved(DICOM_TAG_STUDY_INSTANCE_UID) ||
926 IsRemoved(DICOM_TAG_SERIES_INSTANCE_UID) || 933 IsRemoved(DICOM_TAG_SERIES_INSTANCE_UID) ||
927 IsRemoved(DICOM_TAG_SOP_INSTANCE_UID)) 934 IsRemoved(DICOM_TAG_SOP_INSTANCE_UID))
928 { 935 {
929 throw OrthancException(ErrorCode_BadRequest); 936 throw OrthancException(ErrorCode_BadRequest, "It is forbidden to remove one of the main Dicom identifiers");
930 } 937 }
931 938
932 if (!allowManualIdentifiers_) 939 if (!allowManualIdentifiers_)
933 { 940 {
934 // Sanity checks at the patient level 941 // Sanity checks at the patient level
1841 (tag == DICOM_TAG_SERIES_INSTANCE_UID && 1848 (tag == DICOM_TAG_SERIES_INSTANCE_UID &&
1842 !keepSeriesInstanceUid_) || 1849 !keepSeriesInstanceUid_) ||
1843 (tag == DICOM_TAG_SOP_INSTANCE_UID && 1850 (tag == DICOM_TAG_SOP_INSTANCE_UID &&
1844 !keepSopInstanceUid_)); 1851 !keepSopInstanceUid_));
1845 } 1852 }
1853
1854 void DicomModification::GetReplacedTags(std::set<DicomTag>& target) const
1855 {
1856 target.clear();
1857 for (Replacements::const_iterator it = replacements_.begin(); it != replacements_.end(); it++)
1858 {
1859 target.insert(it->first);
1860 }
1861 }
1846 } 1862 }