# HG changeset patch # User Sebastien Jodogne # Date 1368629010 -7200 # Node ID beca6747945e385ef391be29e9cefe31d7238481 # Parent d51186bf76024fbc0dd4e6cc0b0990adb379f8f7 PUT on metadata diff -r d51186bf7602 -r beca6747945e OrthancServer/OrthancRestApi.cpp --- a/OrthancServer/OrthancRestApi.cpp Wed May 15 16:28:00 2013 +0200 +++ b/OrthancServer/OrthancRestApi.cpp Wed May 15 16:43:30 2013 +0200 @@ -1499,7 +1499,6 @@ // Handling of metadata ----------------------------------------------------- - template static void ListMetadata(RestApi::GetCall& call) { RETRIEVE_CONTEXT(call); @@ -1521,7 +1520,6 @@ } - template static void GetMetadata(RestApi::GetCall& call) { RETRIEVE_CONTEXT(call); @@ -1538,6 +1536,26 @@ } + static void SetMetadata(RestApi::PutCall& call) + { + RETRIEVE_CONTEXT(call); + + std::string publicId = call.GetUriComponent("id", ""); + std::string name = call.GetUriComponent("name", ""); + MetadataType metadata = StringToMetadata(name); + std::string value = call.GetPutBody(); + + if (metadata >= MetadataType_StartUser && + metadata <= MetadataType_EndUser) + { + // It is forbidden to modify internal metadata + context.GetIndex().SetMetadata(publicId, metadata, value); + call.GetOutput().AnswerBuffer("", "text/plain"); + } + } + + + // Registration of the various REST handlers -------------------------------- OrthancRestApi::OrthancRestApi(ServerContext& context) : @@ -1572,14 +1590,18 @@ Register("/studies/{id}/archive", GetArchive); Register("/series/{id}/archive", GetArchive); - Register("/instances/{id}/metadata", ListMetadata); - Register("/instances/{id}/metadata/{name}", GetMetadata); - Register("/patients/{id}/metadata", ListMetadata); - Register("/patients/{id}/metadata/{name}", GetMetadata); - Register("/series/{id}/metadata", ListMetadata); - Register("/series/{id}/metadata/{name}", GetMetadata); - Register("/studies/{id}/metadata", ListMetadata); - Register("/studies/{id}/metadata/{name}", GetMetadata); + Register("/instances/{id}/metadata", ListMetadata); + Register("/instances/{id}/metadata/{name}", GetMetadata); + Register("/instances/{id}/metadata/{name}", SetMetadata); + Register("/patients/{id}/metadata", ListMetadata); + Register("/patients/{id}/metadata/{name}", GetMetadata); + Register("/patients/{id}/metadata/{name}", SetMetadata); + Register("/series/{id}/metadata", ListMetadata); + Register("/series/{id}/metadata/{name}", GetMetadata); + Register("/series/{id}/metadata/{name}", SetMetadata); + Register("/studies/{id}/metadata", ListMetadata); + Register("/studies/{id}/metadata/{name}", GetMetadata); + Register("/studies/{id}/metadata/{name}", SetMetadata); Register("/patients/{id}/protected", IsProtectedPatient); Register("/patients/{id}/protected", SetPatientProtection); diff -r d51186bf7602 -r beca6747945e OrthancServer/ServerEnumerations.cpp --- a/OrthancServer/ServerEnumerations.cpp Wed May 15 16:28:00 2013 +0200 +++ b/OrthancServer/ServerEnumerations.cpp Wed May 15 16:43:30 2013 +0200 @@ -68,10 +68,12 @@ dictMetadataType_.Add(static_cast(metadata), name); } - const char* EnumerationToString(MetadataType type) + std::string EnumerationToString(MetadataType type) { + // This function MUST return a "std::string" and not "const + // char*", as the result is not a static string boost::mutex::scoped_lock lock(enumerationsMutex_); - return dictMetadataType_.Translate(type).c_str(); + return dictMetadataType_.Translate(type); } MetadataType StringToMetadata(const std::string& str) diff -r d51186bf7602 -r beca6747945e OrthancServer/ServerEnumerations.h --- a/OrthancServer/ServerEnumerations.h Wed May 15 16:28:00 2013 +0200 +++ b/OrthancServer/ServerEnumerations.h Wed May 15 16:43:30 2013 +0200 @@ -115,7 +115,7 @@ const char* EnumerationToString(ResourceType type); - const char* EnumerationToString(MetadataType type); + std::string EnumerationToString(MetadataType type); const char* EnumerationToString(SeriesStatus status); diff -r d51186bf7602 -r beca6747945e UnitTests/main.cpp --- a/UnitTests/main.cpp Wed May 15 16:28:00 2013 +0200 +++ b/UnitTests/main.cpp Wed May 15 16:43:30 2013 +0200 @@ -384,8 +384,8 @@ ASSERT_STREQ("CompletedSeries", EnumerationToString(ChangeType_CompletedSeries)); - ASSERT_STREQ("IndexInSeries", EnumerationToString(MetadataType_Instance_IndexInSeries)); - ASSERT_STREQ("LastUpdate", EnumerationToString(MetadataType_LastUpdate)); + ASSERT_EQ("IndexInSeries", EnumerationToString(MetadataType_Instance_IndexInSeries)); + ASSERT_EQ("LastUpdate", EnumerationToString(MetadataType_LastUpdate)); ASSERT_EQ(2047, StringToMetadata("2047")); ASSERT_THROW(StringToMetadata("Ceci est un test"), OrthancException);