# HG changeset patch # User Alain Mazy # Date 1680110649 -7200 # Node ID 08e0c9c0ab39fa9d4399c5c9c0230aef10fe0da9 # Parent f8f1c4a9a216733d936199a546245662fec0f0c1 added UserMetadata in /system diff -r f8f1c4a9a216 -r 08e0c9c0ab39 NEWS --- a/NEWS Wed Mar 29 11:23:37 2023 +0200 +++ b/NEWS Wed Mar 29 19:24:09 2023 +0200 @@ -1,6 +1,12 @@ Pending changes in the mainline =============================== +REST API +-------- + +* API version upgraded to 20 +* /system: added UserMetadata + Maintenance ----------- diff -r f8f1c4a9a216 -r 08e0c9c0ab39 OrthancFramework/Resources/CMake/OrthancFrameworkParameters.cmake --- a/OrthancFramework/Resources/CMake/OrthancFrameworkParameters.cmake Wed Mar 29 11:23:37 2023 +0200 +++ b/OrthancFramework/Resources/CMake/OrthancFrameworkParameters.cmake Wed Mar 29 19:24:09 2023 +0200 @@ -38,7 +38,7 @@ # Version of the Orthanc API, can be retrieved from "/system" URI in # order to check whether new URI endpoints are available even if using # the mainline version of Orthanc -set(ORTHANC_API_VERSION "19") +set(ORTHANC_API_VERSION "20") ##################################################################### diff -r f8f1c4a9a216 -r 08e0c9c0ab39 OrthancFramework/Sources/EnumerationDictionary.h --- a/OrthancFramework/Sources/EnumerationDictionary.h Wed Mar 29 11:23:37 2023 +0200 +++ b/OrthancFramework/Sources/EnumerationDictionary.h Wed Mar 29 19:24:09 2023 +0200 @@ -105,5 +105,10 @@ return found->second; } } + + const std::map& GetAllEntries() const + { + return stringToEnumeration_; + } }; } diff -r f8f1c4a9a216 -r 08e0c9c0ab39 OrthancServer/Sources/OrthancRestApi/OrthancRestSystem.cpp --- a/OrthancServer/Sources/OrthancRestApi/OrthancRestSystem.cpp Wed Mar 29 11:23:37 2023 +0200 +++ b/OrthancServer/Sources/OrthancRestApi/OrthancRestSystem.cpp Wed Mar 29 19:24:09 2023 +0200 @@ -50,14 +50,23 @@ static void GetMainDicomTagsConfiguration(Json::Value& result) { - Json::Value v; - result["Patient"] = DicomMap::GetMainDicomTagsSignature(ResourceType_Patient); result["Study"] = DicomMap::GetMainDicomTagsSignature(ResourceType_Study); result["Series"] = DicomMap::GetMainDicomTagsSignature(ResourceType_Series); result["Instance"] = DicomMap::GetMainDicomTagsSignature(ResourceType_Instance); } + static void GetUserMetadataConfiguration(Json::Value& result) + { + std::map userMetadata; + Orthanc::GetRegisteredUserMetadata(userMetadata); + + for (std::map::const_iterator it = userMetadata.begin(); it != userMetadata.end(); ++it) + { + result[it->first] = it->second; + } + } + static void GetSystemInformation(RestApiGetCall& call) { static const char* const API_VERSION = "ApiVersion"; @@ -79,6 +88,7 @@ static const char* const INGEST_TRANSCODING = "IngestTranscoding"; static const char* const MAXIMUM_STORAGE_SIZE = "MaximumStorageSize"; static const char* const MAXIMUM_STORAGE_MODE = "MaximumStorageMode"; + static const char* const USER_METADATA = "UserMetadata"; if (call.IsDocumentation()) { @@ -119,6 +129,8 @@ "The configured MaximumStorageSize in MB (new in Orthanc 1.11.3)") .SetAnswerField(MAXIMUM_STORAGE_MODE, RestApiCallDocumentation::Type_String, "The configured MaximumStorageMode (new in Orthanc 1.11.3)") + .SetAnswerField(USER_METADATA, RestApiCallDocumentation::Type_JsonObject, + "The configured UserMetadata (new in Orthanc 1.12.0)") .SetHttpGetSample("https://demo.orthanc-server.com/system", true); return; } @@ -172,6 +184,9 @@ result[MAIN_DICOM_TAGS] = Json::objectValue; GetMainDicomTagsConfiguration(result[MAIN_DICOM_TAGS]); + result[USER_METADATA] = Json::objectValue; + GetUserMetadataConfiguration(result[USER_METADATA]); + call.GetOutput().AnswerJson(result); } diff -r f8f1c4a9a216 -r 08e0c9c0ab39 OrthancServer/Sources/ServerEnumerations.cpp --- a/OrthancServer/Sources/ServerEnumerations.cpp Wed Mar 29 11:23:37 2023 +0200 +++ b/OrthancServer/Sources/ServerEnumerations.cpp Wed Mar 29 19:24:09 2023 +0200 @@ -112,6 +112,23 @@ return dictMetadataType_.Translate(str); } + void GetRegisteredUserMetadata(std::map& allEntries) + { + boost::mutex::scoped_lock lock(enumerationsMutex_); + + allEntries.clear(); + + std::map allEntriesTyped = dictMetadataType_.GetAllEntries(); + + for (std::map::const_iterator it = allEntriesTyped.begin(); it != allEntriesTyped.end(); ++it) + { + if (it->second >= MetadataType_StartUser) + { + allEntries[it->first] = it->second; + } + } + } + void RegisterUserContentType(int contentType, const std::string& name, const std::string& mime) diff -r f8f1c4a9a216 -r 08e0c9c0ab39 OrthancServer/Sources/ServerEnumerations.h --- a/OrthancServer/Sources/ServerEnumerations.h Wed Mar 29 11:23:37 2023 +0200 +++ b/OrthancServer/Sources/ServerEnumerations.h Wed Mar 29 19:24:09 2023 +0200 @@ -216,6 +216,8 @@ std::string EnumerationToString(MetadataType type); + void GetRegisteredUserMetadata(std::map& allEntries); + void RegisterUserContentType(int contentType, const std::string& name, const std::string& mime);