diff Framework/Plugins/IndexBackend.h @ 201:42990b2dd51b

create IDatabaseBackendOutput only if needed
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 18 Mar 2021 16:51:51 +0100
parents 3236894320d6
children 2def2df94f94
line wrap: on
line diff
--- a/Framework/Plugins/IndexBackend.h	Thu Mar 18 15:21:17 2021 +0100
+++ b/Framework/Plugins/IndexBackend.h	Thu Mar 18 16:51:51 2021 +0100
@@ -31,9 +31,12 @@
   {
   private:
     class LookupFormatter;
+
+    OrthancPluginContext*  context_;
+    DatabaseManager        manager_;
+
+    std::unique_ptr<OrthancPlugins::IDatabaseBackendOutput::IFactory>  outputFactory_;
     
-    DatabaseManager   manager_;
-
   protected:
     DatabaseManager& GetManager()
     {
@@ -62,187 +65,205 @@
 
     void ClearDeletedResources();
 
-    void SignalDeletedFiles();
+    void SignalDeletedFiles(OrthancPlugins::IDatabaseBackendOutput& output);
 
-    void SignalDeletedResources();
+    void SignalDeletedResources(OrthancPlugins::IDatabaseBackendOutput& output);
 
   private:
-    void ReadChangesInternal(bool& done,
+    void ReadChangesInternal(OrthancPlugins::IDatabaseBackendOutput& output,
+                             bool& done,
                              DatabaseManager::CachedStatement& statement,
                              const Dictionary& args,
                              uint32_t maxResults);
 
-    void ReadExportedResourcesInternal(bool& done,
+    void ReadExportedResourcesInternal(OrthancPlugins::IDatabaseBackendOutput& output,
+                                       bool& done,
                                        DatabaseManager::CachedStatement& statement,
                                        const Dictionary& args,
                                        uint32_t maxResults);
 
   public:
-    IndexBackend(IDatabaseFactory* factory);
+    IndexBackend(OrthancPluginContext* context,
+                 IDatabaseFactory* factory);
+
+    virtual OrthancPluginContext* GetContext() ORTHANC_OVERRIDE
+    {
+      return context_;
+    }
+
+    virtual void SetOutputFactory(OrthancPlugins::IDatabaseBackendOutput::IFactory* factory) ORTHANC_OVERRIDE;
     
-    virtual void Open()
+    virtual OrthancPlugins::IDatabaseBackendOutput* CreateOutput() ORTHANC_OVERRIDE;
+    
+    virtual void Open() ORTHANC_OVERRIDE
     {
       manager_.Open();
     }
     
-    virtual void Close()
+    virtual void Close() ORTHANC_OVERRIDE
     {
       manager_.Close();
     }
     
     virtual void AddAttachment(int64_t id,
-                               const OrthancPluginAttachment& attachment);
+                               const OrthancPluginAttachment& attachment) ORTHANC_OVERRIDE;
     
     virtual void AttachChild(int64_t parent,
-                             int64_t child);
+                             int64_t child) ORTHANC_OVERRIDE;
     
-    virtual void ClearChanges();
+    virtual void ClearChanges() ORTHANC_OVERRIDE;
     
-    virtual void ClearExportedResources();
+    virtual void ClearExportedResources() ORTHANC_OVERRIDE;
 
-    virtual void DeleteAttachment(int64_t id,
-                                  int32_t attachment);
+    virtual void DeleteAttachment(OrthancPlugins::IDatabaseBackendOutput& output,
+                                  int64_t id,
+                                  int32_t attachment) ORTHANC_OVERRIDE;
     
     virtual void DeleteMetadata(int64_t id,
-                                int32_t metadataType);
+                                int32_t metadataType) ORTHANC_OVERRIDE;
     
-    virtual void DeleteResource(int64_t id);
+    virtual void DeleteResource(OrthancPlugins::IDatabaseBackendOutput& output,
+                                int64_t id) ORTHANC_OVERRIDE;
 
     virtual void GetAllInternalIds(std::list<int64_t>& target,
-                                   OrthancPluginResourceType resourceType);
+                                   OrthancPluginResourceType resourceType) ORTHANC_OVERRIDE;
     
     virtual void GetAllPublicIds(std::list<std::string>& target,
-                                 OrthancPluginResourceType resourceType);
+                                 OrthancPluginResourceType resourceType) ORTHANC_OVERRIDE;
     
     virtual void GetAllPublicIds(std::list<std::string>& target,
                                  OrthancPluginResourceType resourceType,
                                  uint64_t since,
-                                 uint64_t limit);
+                                 uint64_t limit) ORTHANC_OVERRIDE;
     
-    virtual void GetChanges(bool& done /*out*/,
+    virtual void GetChanges(OrthancPlugins::IDatabaseBackendOutput& output,
+                            bool& done /*out*/,
                             int64_t since,
-                            uint32_t maxResults);
+                            uint32_t maxResults) ORTHANC_OVERRIDE;
     
     virtual void GetChildrenInternalId(std::list<int64_t>& target /*out*/,
-                                       int64_t id);
+                                       int64_t id) ORTHANC_OVERRIDE;
     
     virtual void GetChildrenPublicId(std::list<std::string>& target /*out*/,
-                                     int64_t id);
+                                     int64_t id) ORTHANC_OVERRIDE;
     
-    virtual void GetExportedResources(bool& done /*out*/,
+    virtual void GetExportedResources(OrthancPlugins::IDatabaseBackendOutput& output,
+                                      bool& done /*out*/,
                                       int64_t since,
-                                      uint32_t maxResults);
+                                      uint32_t maxResults) ORTHANC_OVERRIDE;
     
-    virtual void GetLastChange();
+    virtual void GetLastChange(OrthancPlugins::IDatabaseBackendOutput& output) ORTHANC_OVERRIDE;
     
-    virtual void GetLastExportedResource();
+    virtual void GetLastExportedResource(OrthancPlugins::IDatabaseBackendOutput& output) ORTHANC_OVERRIDE;
     
-    virtual void GetMainDicomTags(int64_t id);
+    virtual void GetMainDicomTags(OrthancPlugins::IDatabaseBackendOutput& output,
+                                  int64_t id) ORTHANC_OVERRIDE;
     
-    virtual std::string GetPublicId(int64_t resourceId);
+    virtual std::string GetPublicId(int64_t resourceId) ORTHANC_OVERRIDE;
     
-    virtual uint64_t GetResourceCount(OrthancPluginResourceType resourceType);
+    virtual uint64_t GetResourceCount(OrthancPluginResourceType resourceType) ORTHANC_OVERRIDE;
     
-    virtual OrthancPluginResourceType GetResourceType(int64_t resourceId);
+    virtual OrthancPluginResourceType GetResourceType(int64_t resourceId) ORTHANC_OVERRIDE;
     
-    virtual uint64_t GetTotalCompressedSize();
+    virtual uint64_t GetTotalCompressedSize() ORTHANC_OVERRIDE;
     
-    virtual uint64_t GetTotalUncompressedSize();
+    virtual uint64_t GetTotalUncompressedSize() ORTHANC_OVERRIDE;
     
-    virtual bool IsExistingResource(int64_t internalId);
+    virtual bool IsExistingResource(int64_t internalId) ORTHANC_OVERRIDE;
     
-    virtual bool IsProtectedPatient(int64_t internalId);
+    virtual bool IsProtectedPatient(int64_t internalId) ORTHANC_OVERRIDE;
     
     virtual void ListAvailableMetadata(std::list<int32_t>& target /*out*/,
-                                       int64_t id);
+                                       int64_t id) ORTHANC_OVERRIDE;
     
     virtual void ListAvailableAttachments(std::list<int32_t>& target /*out*/,
-                                          int64_t id);
+                                          int64_t id) ORTHANC_OVERRIDE;
     
-    virtual void LogChange(const OrthancPluginChange& change);
+    virtual void LogChange(const OrthancPluginChange& change) ORTHANC_OVERRIDE;
     
-    virtual void LogExportedResource(const OrthancPluginExportedResource& resource);
+    virtual void LogExportedResource(const OrthancPluginExportedResource& resource) ORTHANC_OVERRIDE;
     
-    virtual bool LookupAttachment(int64_t id,
-                                  int32_t contentType);
+    virtual bool LookupAttachment(OrthancPlugins::IDatabaseBackendOutput& output,
+                                  int64_t id,
+                                  int32_t contentType) ORTHANC_OVERRIDE;
     
     virtual bool LookupGlobalProperty(std::string& target /*out*/,
-                                      int32_t property);
+                                      int32_t property) ORTHANC_OVERRIDE;
     
     virtual void LookupIdentifier(std::list<int64_t>& target /*out*/,
                                   OrthancPluginResourceType resourceType,
                                   uint16_t group,
                                   uint16_t element,
                                   OrthancPluginIdentifierConstraint constraint,
-                                  const char* value);
+                                  const char* value) ORTHANC_OVERRIDE;
     
     virtual void LookupIdentifierRange(std::list<int64_t>& target /*out*/,
                                        OrthancPluginResourceType resourceType,
                                        uint16_t group,
                                        uint16_t element,
                                        const char* start,
-                                       const char* end);
+                                       const char* end) ORTHANC_OVERRIDE;
 
     virtual bool LookupMetadata(std::string& target /*out*/,
                                 int64_t id,
-                                int32_t metadataType);
+                                int32_t metadataType) ORTHANC_OVERRIDE;
 
     virtual bool LookupParent(int64_t& parentId /*out*/,
-                              int64_t resourceId);
+                              int64_t resourceId) ORTHANC_OVERRIDE;
     
     virtual bool LookupResource(int64_t& id /*out*/,
                                 OrthancPluginResourceType& type /*out*/,
-                                const char* publicId);
+                                const char* publicId) ORTHANC_OVERRIDE;
     
-    virtual bool SelectPatientToRecycle(int64_t& internalId /*out*/);
+    virtual bool SelectPatientToRecycle(int64_t& internalId /*out*/) ORTHANC_OVERRIDE;
     
     virtual bool SelectPatientToRecycle(int64_t& internalId /*out*/,
-                                        int64_t patientIdToAvoid);
+                                        int64_t patientIdToAvoid) ORTHANC_OVERRIDE;
     
     virtual void SetGlobalProperty(int32_t property,
-                                   const char* value);
+                                   const char* value) ORTHANC_OVERRIDE;
 
     virtual void SetMainDicomTag(int64_t id,
                                  uint16_t group,
                                  uint16_t element,
-                                 const char* value);
+                                 const char* value) ORTHANC_OVERRIDE;
     
     virtual void SetIdentifierTag(int64_t id,
                                   uint16_t group,
                                   uint16_t element,
-                                  const char* value);
+                                  const char* value) ORTHANC_OVERRIDE;
 
     virtual void SetMetadata(int64_t id,
                              int32_t metadataType,
-                             const char* value);
+                             const char* value) ORTHANC_OVERRIDE;
     
     virtual void SetProtectedPatient(int64_t internalId, 
-                                     bool isProtected);
+                                     bool isProtected) ORTHANC_OVERRIDE;
     
-    virtual void StartTransaction()
+    virtual void StartTransaction() ORTHANC_OVERRIDE
     {
       manager_.StartTransaction();
     }
 
     
-    virtual void RollbackTransaction()
+    virtual void RollbackTransaction() ORTHANC_OVERRIDE
     {
       manager_.RollbackTransaction();
     }
 
     
-    virtual void CommitTransaction()
+    virtual void CommitTransaction() ORTHANC_OVERRIDE
     {
       manager_.CommitTransaction();
     }
 
     
-    virtual uint32_t GetDatabaseVersion();
+    virtual uint32_t GetDatabaseVersion() ORTHANC_OVERRIDE;
     
     virtual void UpgradeDatabase(uint32_t  targetVersion,
-                                 OrthancPluginStorageArea* storageArea);
+                                 OrthancPluginStorageArea* storageArea) ORTHANC_OVERRIDE;
     
-    virtual void ClearMainDicomTags(int64_t internalId);
+    virtual void ClearMainDicomTags(int64_t internalId) ORTHANC_OVERRIDE;
 
     // For unit testing only!
     virtual uint64_t GetResourcesCount();
@@ -260,10 +281,11 @@
 
 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1
     // New primitive since Orthanc 1.5.2
-    virtual void LookupResources(const std::vector<Orthanc::DatabaseConstraint>& lookup,
+    virtual void LookupResources(OrthancPlugins::IDatabaseBackendOutput& output,
+                                 const std::vector<Orthanc::DatabaseConstraint>& lookup,
                                  OrthancPluginResourceType queryLevel,
                                  uint32_t limit,
-                                 bool requestSomeInstance);
+                                 bool requestSomeInstance) ORTHANC_OVERRIDE;
 #endif
 
 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1
@@ -274,15 +296,15 @@
       uint32_t countMainDicomTags,
       const OrthancPluginResourcesContentTags* mainDicomTags,
       uint32_t countMetadata,
-      const OrthancPluginResourcesContentMetadata* metadata);
+      const OrthancPluginResourcesContentMetadata* metadata) ORTHANC_OVERRIDE;
 #endif
 
     // New primitive since Orthanc 1.5.2
     virtual void GetChildrenMetadata(std::list<std::string>& target,
                                      int64_t resourceId,
-                                     int32_t metadata);
+                                     int32_t metadata) ORTHANC_OVERRIDE;
 
-    virtual void TagMostRecentPatient(int64_t patient);
+    virtual void TagMostRecentPatient(int64_t patient) ORTHANC_OVERRIDE;
 
 #if defined(ORTHANC_PLUGINS_VERSION_IS_ABOVE)      // Macro introduced in 1.3.1
 #  if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 5, 4)
@@ -290,7 +312,7 @@
     virtual bool LookupResourceAndParent(int64_t& id,
                                          OrthancPluginResourceType& type,
                                          std::string& parentPublicId,
-                                         const char* publicId);
+                                         const char* publicId) ORTHANC_OVERRIDE;
 #  endif
 #endif
 
@@ -298,7 +320,7 @@
 #  if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 5, 4)
     // New primitive since Orthanc 1.5.4
     virtual void GetAllMetadata(std::map<int32_t, std::string>& result,
-                                int64_t id);
+                                int64_t id) ORTHANC_OVERRIDE;
 #  endif
 #endif
   };