# HG changeset patch # User Sebastien Jodogne # Date 1720517947 -7200 # Node ID 9b3816c210086830aac9e6e9bf031aa3857416a6 # Parent fd4c5e064cbe7ba5fec0ef9fc9769e97204ee36c# Parent 0c218d90096ed114d224a9efc2c05c58c332b3e5 integration mainline->find-refactoring diff -r fd4c5e064cbe -r 9b3816c21008 OrthancServer/Sources/OrthancRestApi/OrthancRestResources.cpp --- a/OrthancServer/Sources/OrthancRestApi/OrthancRestResources.cpp Tue Jul 09 11:17:34 2024 +0200 +++ b/OrthancServer/Sources/OrthancRestApi/OrthancRestResources.cpp Tue Jul 09 11:39:07 2024 +0200 @@ -3502,6 +3502,8 @@ } } + std::set labels; + if (request.isMember(KEY_LABELS)) // New in Orthanc 1.12.0 { for (Json::Value::ArrayIndex i = 0; i < request[KEY_LABELS].size(); i++) @@ -3512,27 +3514,27 @@ } else { - query.AddLabel(request[KEY_LABELS][i].asString()); + labels.insert(request[KEY_LABELS][i].asString()); } } } - query.SetLabelsConstraint(LabelsConstraint_All); + LabelsConstraint labelsConstraint = LabelsConstraint_All; if (request.isMember(KEY_LABELS_CONSTRAINT)) { const std::string& s = request[KEY_LABELS_CONSTRAINT].asString(); if (s == "All") { - query.SetLabelsConstraint(LabelsConstraint_All); + labelsConstraint = LabelsConstraint_All; } else if (s == "Any") { - query.SetLabelsConstraint(LabelsConstraint_Any); + labelsConstraint = LabelsConstraint_Any; } else if (s == "None") { - query.SetLabelsConstraint(LabelsConstraint_None); + labelsConstraint = LabelsConstraint_None; } else { @@ -3541,7 +3543,7 @@ } FindVisitor visitor(OrthancRestApi::GetDicomFormat(request, DicomToJsonFormat_Human), context.GetFindStorageAccessMode()); - context.Apply(visitor, query, level, since, limit); + context.Apply(visitor, query, level, labels, labelsConstraint, since, limit); visitor.Answer(call.GetOutput(), context, level, expand, requestedTags); } } diff -r fd4c5e064cbe -r 9b3816c21008 OrthancServer/Sources/Search/DatabaseLookup.cpp --- a/OrthancServer/Sources/Search/DatabaseLookup.cpp Tue Jul 09 11:17:34 2024 +0200 +++ b/OrthancServer/Sources/Search/DatabaseLookup.cpp Tue Jul 09 11:39:07 2024 +0200 @@ -369,14 +369,4 @@ return clone.release(); } - - - void DatabaseLookup::AddLabel(const std::string& label) - { - if (!label.empty()) - { - ServerToolbox::CheckValidLabel(label); - labels_.insert(label); - } - } } diff -r fd4c5e064cbe -r 9b3816c21008 OrthancServer/Sources/Search/DatabaseLookup.h --- a/OrthancServer/Sources/Search/DatabaseLookup.h Tue Jul 09 11:17:34 2024 +0200 +++ b/OrthancServer/Sources/Search/DatabaseLookup.h Tue Jul 09 11:39:07 2024 +0200 @@ -23,7 +23,6 @@ #pragma once -#include "../Search/ISqlLookupFormatter.h" #include "DicomTagConstraint.h" class DcmItem; @@ -34,8 +33,6 @@ { private: std::vector constraints_; - std::set labels_; - LabelsConstraint labelsConstraint_; void AddDicomConstraintInternal(const DicomTag& tag, ValueRepresentation vr, @@ -46,11 +43,6 @@ void AddConstraintInternal(DicomTagConstraint* constraint); // Takes ownership public: - DatabaseLookup() : - labelsConstraint_(LabelsConstraint_All) - { - } - ~DatabaseLookup(); DatabaseLookup* Clone() const; @@ -97,22 +89,5 @@ bool HasTag(const DicomTag& tag) const; void RemoveConstraint(const DicomTag& tag); - - void AddLabel(const std::string& label); - - void SetLabelsConstraint(LabelsConstraint constraint) - { - labelsConstraint_ = constraint; - } - - const std::set& GetLabels() const - { - return labels_; - } - - LabelsConstraint GetLabelsConstraint() const - { - return labelsConstraint_; - } }; } diff -r fd4c5e064cbe -r 9b3816c21008 OrthancServer/Sources/ServerContext.cpp --- a/OrthancServer/Sources/ServerContext.cpp Tue Jul 09 11:17:34 2024 +0200 +++ b/OrthancServer/Sources/ServerContext.cpp Tue Jul 09 11:39:07 2024 +0200 @@ -1534,6 +1534,8 @@ void ServerContext::Apply(ILookupVisitor& visitor, const DatabaseLookup& lookup, ResourceType queryLevel, + const std::set& labels, + LabelsConstraint labelsConstraint, size_t since, size_t limit) { @@ -1566,8 +1568,8 @@ ResourceFinder finder(queryLevel, false /* TODO-FIND: don't expand for now */); finder.SetLimits(0, lookupLimit); finder.SetDatabaseLookup(*fastLookup); - finder.SetLabels(lookup.GetLabels()); - finder.SetLabelsConstraint(lookup.GetLabelsConstraint()); + finder.SetLabels(labels); + finder.SetLabelsConstraint(labelsConstraint); if (queryLevel != ResourceType_Instance) { @@ -1601,8 +1603,7 @@ * VERSION IN ORTHANC <= 1.12.4 **/ - GetIndex().ApplyLookupResources(resources, &instances, *fastLookup, queryLevel, - lookup.GetLabels(), lookup.GetLabelsConstraint(), lookupLimit); + GetIndex().ApplyLookupResources(resources, &instances, *fastLookup, queryLevel, labels, labelsConstraint, lookupLimit); } bool complete = (databaseLimit == 0 || diff -r fd4c5e064cbe -r 9b3816c21008 OrthancServer/Sources/ServerContext.h --- a/OrthancServer/Sources/ServerContext.h Tue Jul 09 11:17:34 2024 +0200 +++ b/OrthancServer/Sources/ServerContext.h Tue Jul 09 11:39:07 2024 +0200 @@ -445,9 +445,20 @@ void Apply(ILookupVisitor& visitor, const DatabaseLookup& lookup, ResourceType queryLevel, + const std::set& labels, + LabelsConstraint labelsConstraint, size_t since, size_t limit); + void Apply(ILookupVisitor& visitor, + const DatabaseLookup& lookup, + ResourceType queryLevel, + size_t since, + size_t limit) + { + Apply(visitor, lookup, queryLevel, std::set(), LabelsConstraint_All, since, limit); + } + bool LookupOrReconstructMetadata(std::string& target, const std::string& publicId, ResourceType level,