Mercurial > hg > orthanc
diff OrthancServer/Plugins/Engine/OrthancPluginDatabaseV4.cpp @ 5239:178b0434256a db-protobuf
added primitives to exchange labels with plugins
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 05 Apr 2023 11:31:05 +0200 |
parents | d0f7c742d397 |
children | a7d95f951f8a |
line wrap: on
line diff
--- a/OrthancServer/Plugins/Engine/OrthancPluginDatabaseV4.cpp Wed Apr 05 10:02:19 2023 +0200 +++ b/OrthancServer/Plugins/Engine/OrthancPluginDatabaseV4.cpp Wed Apr 05 11:31:05 2023 +0200 @@ -976,10 +976,14 @@ } } - if (!withLabels.empty() || - !withoutLabels.empty()) + for (std::set<std::string>::const_iterator it = withLabels.begin(); it != withLabels.end(); ++it) { - throw OrthancException(ErrorCode_NotImplemented); // TODO + request.mutable_lookup_resources()->add_with_labels(*it); + } + + for (std::set<std::string>::const_iterator it = withoutLabels.begin(); it != withoutLabels.end(); ++it) + { + request.mutable_lookup_resources()->add_without_labels(*it); } DatabasePluginMessages::TransactionResponse response; @@ -1152,21 +1156,63 @@ virtual void AddLabel(int64_t resource, const std::string& label) ORTHANC_OVERRIDE { - throw OrthancException(ErrorCode_NotImplemented); + if (database_.HasLabelsSupport()) + { + DatabasePluginMessages::TransactionRequest request; + request.mutable_add_label()->set_id(resource); + request.mutable_add_label()->set_label(label); + + ExecuteTransaction(DatabasePluginMessages::OPERATION_ADD_LABEL, request); + } + else + { + // This method shouldn't have been called + throw OrthancException(ErrorCode_InternalError); + } } virtual void RemoveLabel(int64_t resource, const std::string& label) ORTHANC_OVERRIDE { - throw OrthancException(ErrorCode_NotImplemented); + if (database_.HasLabelsSupport()) + { + DatabasePluginMessages::TransactionRequest request; + request.mutable_remove_label()->set_id(resource); + request.mutable_remove_label()->set_label(label); + + ExecuteTransaction(DatabasePluginMessages::OPERATION_REMOVE_LABEL, request); + } + else + { + // This method shouldn't have been called + throw OrthancException(ErrorCode_InternalError); + } } virtual void ListLabels(std::set<std::string>& target, int64_t resource) ORTHANC_OVERRIDE { - throw OrthancException(ErrorCode_NotImplemented); + if (database_.HasLabelsSupport()) + { + DatabasePluginMessages::TransactionRequest request; + request.mutable_list_labels()->set_id(resource); + + DatabasePluginMessages::TransactionResponse response; + ExecuteTransaction(response, DatabasePluginMessages::OPERATION_LIST_LABELS, request); + + target.clear(); + for (int i = 0; i < response.list_labels().labels().size(); i++) + { + target.insert(response.list_labels().labels(i)); + } + } + else + { + // This method shouldn't have been called + throw OrthancException(ErrorCode_InternalError); + } } };