Mercurial > hg > orthanc
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 } |