Mercurial > hg > orthanc
diff OrthancServer/Sources/Database/FindResponse.h @ 5596:81a29ad7fb4b find-refactoring
added possibility to retrieve main DICOM tags and metadata at any level
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 07 May 2024 18:44:53 +0200 |
parents | a87f2a56257d |
children | 8796c100aaf8 |
line wrap: on
line diff
--- a/OrthancServer/Sources/Database/FindResponse.h Tue May 07 12:53:12 2024 +0200 +++ b/OrthancServer/Sources/Database/FindResponse.h Tue May 07 18:44:53 2024 +0200 @@ -41,18 +41,28 @@ class FindResponse : public boost::noncopyable { private: - class ChildrenAtLevel : public boost::noncopyable + class MainDicomTagsAtLevel : public boost::noncopyable { private: - std::set<std::string> identifiers_; + class DicomValue; + + typedef std::map<DicomTag, DicomValue*> MainDicomTags; + + MainDicomTags mainDicomTags_; public: - void AddIdentifier(const std::string& identifier); + ~MainDicomTagsAtLevel(); + + void AddStringDicomTag(uint16_t group, + uint16_t element, + const std::string& value); - const std::set<std::string>& GetIdentifiers() const - { - return identifiers_; - } + // The "Null" value could be used in the future to indicate a + // value that is not available, typically a new "ExtraMainDicomTag" + void AddNullDicomTag(uint16_t group, + uint16_t element); + + void Export(DicomMap& target) const; }; @@ -60,28 +70,30 @@ class Resource : public boost::noncopyable { private: - class DicomValue; - - typedef std::map<DicomTag, DicomValue*> MainDicomTags; typedef std::map<MetadataType, std::list<std::string>*> ChildrenMetadata; ResourceType level_; std::string identifier_; std::unique_ptr<std::string> parentIdentifier_; - MainDicomTags mainDicomTags_; - ChildrenAtLevel childrenStudies_; - ChildrenAtLevel childrenSeries_; - ChildrenAtLevel childrenInstances_; + MainDicomTagsAtLevel mainDicomTagsPatient_; + MainDicomTagsAtLevel mainDicomTagsStudy_; + MainDicomTagsAtLevel mainDicomTagsSeries_; + MainDicomTagsAtLevel mainDicomTagsInstance_; + std::map<MetadataType, std::string> metadataPatient_; + std::map<MetadataType, std::string> metadataStudy_; + std::map<MetadataType, std::string> metadataSeries_; + std::map<MetadataType, std::string> metadataInstance_; + std::set<std::string> childrenIdentifiers_; std::set<std::string> labels_; - std::map<MetadataType, std::string> metadata_; std::map<FileContentType, FileInfo> attachments_; ChildrenMetadata childrenMetadata_; + std::map<FileContentType, FileInfo> attachmentOfOneInstance_; - ChildrenAtLevel& GetChildrenAtLevel(ResourceType level); + MainDicomTagsAtLevel& GetMainDicomTagsAtLevel(ResourceType level); - const ChildrenAtLevel& GetChildrenAtLevel(ResourceType level) const + const MainDicomTagsAtLevel& GetMainDicomTagsAtLevel(ResourceType level) const { - return const_cast<Resource&>(*this).GetChildrenAtLevel(level); + return const_cast<Resource&>(*this).GetMainDicomTagsAtLevel(level); } public: @@ -110,26 +122,47 @@ bool HasParentIdentifier() const; - void AddStringDicomTag(uint16_t group, + void AddStringDicomTag(ResourceType level, + uint16_t group, uint16_t element, - const std::string& value); + const std::string& value) + { + GetMainDicomTagsAtLevel(level).AddStringDicomTag(group, element, value); + } - // The "Null" value could be used in the future to indicate a - // value that is not available, typically a new "ExtraMainDicomTag" - void AddNullDicomTag(uint16_t group, - uint16_t element); + void AddNullDicomTag(ResourceType level, + uint16_t group, + uint16_t element) + { + GetMainDicomTagsAtLevel(level).AddNullDicomTag(group, element); + } - void GetMainDicomTags(DicomMap& target) const; - - void AddChildIdentifier(ResourceType level, - const std::string& childId) + void GetMainDicomTags(DicomMap& target, + ResourceType level) const { - GetChildrenAtLevel(level).AddIdentifier(childId); + GetMainDicomTagsAtLevel(level).Export(target); } - const std::set<std::string>& GetChildrenIdentifiers(ResourceType level) const + void AddMetadata(ResourceType level, + MetadataType metadata, + const std::string& value); + + std::map<MetadataType, std::string>& GetMetadata(ResourceType level); + + const std::map<MetadataType, std::string>& GetMetadata(ResourceType level) const { - return const_cast<Resource&>(*this).GetChildrenAtLevel(level).GetIdentifiers(); + return const_cast<Resource&>(*this).GetMetadata(level); + } + + bool LookupMetadata(std::string& value, + ResourceType level, + MetadataType metadata) const; + + void AddChildIdentifier(const std::string& childId); + + const std::set<std::string>& GetChildrenIdentifiers() const + { + return childrenIdentifiers_; } void AddLabel(const std::string& label); @@ -144,44 +177,35 @@ return labels_; } - void AddMetadata(MetadataType metadata, - const std::string& value); - - std::map<MetadataType, std::string>& GetMetadata() - { - return metadata_; - } - - const std::map<MetadataType, std::string>& GetMetadata() const - { - return metadata_; - } - - bool HasMetadata(MetadataType metadata) const - { - return metadata_.find(metadata) != metadata_.end(); - } - - bool LookupMetadata(std::string& value, - MetadataType metadata) const; - - void ListMetadata(std::set<MetadataType>& metadata) const; - void AddAttachment(const FileInfo& attachment); bool LookupAttachment(FileInfo& target, FileContentType type) const; + const std::map<FileContentType, FileInfo>& GetAttachments() const + { + return attachments_; + } + void AddChildrenMetadata(MetadataType metadata, const std::list<std::string>& values); bool LookupChildrenMetadata(std::list<std::string>& values, MetadataType metadata) const; + void AddAttachmentOfOneInstance(const FileInfo& info); + + bool LookupAttachmentOfOneInstance(FileInfo& target, + FileContentType type) const; + SeriesStatus GetSeriesStatus(uint32_t& expecterNumberOfInstances) const; void Expand(Json::Value& target, - const FindRequest& request) const; + const FindRequest& request, + bool includeAllMetadata) const; + + void DebugExport(Json::Value& target, + const FindRequest& request) const; }; private: