diff OrthancServer/ResourceFinder.h @ 1360:0649c5aef34a

DicomFindQuery
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 15 May 2015 15:34:32 +0200
parents 4378a6636187
children 94ffb597d297
line wrap: on
line diff
--- a/OrthancServer/ResourceFinder.h	Fri May 15 13:17:37 2015 +0200
+++ b/OrthancServer/ResourceFinder.h	Fri May 15 15:34:32 2015 +0200
@@ -38,30 +38,30 @@
 
 namespace Orthanc
 {
-  class BaseResourceFinder : public boost::noncopyable
+  class ResourceFinder : public boost::noncopyable
   {
   public:
-    class IMainTagsFilter : public boost::noncopyable
+    class IQuery : public boost::noncopyable
     {
     public:
-      virtual ~IMainTagsFilter()
+      virtual ~IQuery()
       {
       }
 
-      virtual bool Apply(const DicomMap& mainTags,
-                         ResourceType level) = 0;
-    };
+      virtual ResourceType GetLevel() const = 0;
 
+      virtual bool RestrictIdentifier(std::string& value,
+                                      DicomTag identifier) const = 0;
+
+      virtual bool HasMainDicomTagsFilter(ResourceType level) const = 0;
 
-    class IInstanceFilter : public boost::noncopyable
-    {
-    public:
-      virtual ~IInstanceFilter()
-      {
-      }
+      virtual bool FilterMainDicomTags(const DicomMap& mainTags,
+                                       ResourceType level) const = 0;
 
-      virtual bool Apply(const std::string& instanceId,
-                         const Json::Value& content) = 0;
+      virtual bool HasInstanceFilter() const = 0;
+
+      virtual bool FilterInstance(const std::string& instanceId,
+                                  const Json::Value& content) const = 0;
     };
 
 
@@ -71,40 +71,14 @@
     class CandidateResources;
 
     ServerContext&    context_;
-    ResourceType      level_;
     size_t            maxResults_;
-    Identifiers       identifiers_;
-    IMainTagsFilter  *mainTagsFilter_;
-    IInstanceFilter  *instanceFilter_;
 
     void ApplyAtLevel(CandidateResources& candidates,
+                      const IQuery& query,
                       ResourceType level);
 
   public:
-    BaseResourceFinder(ServerContext& context);
-
-    ResourceType GetLevel() const
-    {
-      return level_;
-    }
-
-    void SetLevel(ResourceType level)
-    {
-      level_ = level;
-    }
-
-    void SetIdentifier(const DicomTag& tag,
-                       const std::string& value);
-
-    void SetMainTagsFilter(IMainTagsFilter& filter)
-    {
-      mainTagsFilter_ = &filter;
-    }
-
-    void SetInstanceFilter(IInstanceFilter& filter)
-    {
-      instanceFilter_ = &filter;
-    }
+    ResourceFinder(ServerContext& context);
 
     void SetMaxResults(size_t value)
     {
@@ -119,7 +93,8 @@
     // Returns "true" iff. all the matching resources have been
     // returned. Will be "false" if the results were truncated by
     // "SetMaxResults()".
-    bool Apply(std::list<std::string>& result);
+    bool Apply(std::list<std::string>& result,
+               const IQuery& query);
   };
 
 }