diff Framework/Plugins/OrthancCppDatabasePlugin.h @ 199:8cae98f73d53

refactoring
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 18 Mar 2021 14:52:06 +0100
parents 7335efde0d23
children 30b210616f4f
line wrap: on
line diff
--- a/Framework/Plugins/OrthancCppDatabasePlugin.h	Thu Mar 18 12:24:28 2021 +0100
+++ b/Framework/Plugins/OrthancCppDatabasePlugin.h	Thu Mar 18 14:52:06 2021 +0100
@@ -55,7 +55,7 @@
   }                                                               \
   catch (...)                                                     \
   {                                                               \
-    OrthancPluginLogError(backend->GetOutput().GetContext(), "Native exception"); \
+    OrthancPluginLogError(backend->GetContext(), "Native exception");   \
     return OrthancPluginErrorCode_DatabasePlugin;                 \
   }
 
@@ -71,9 +71,7 @@
    **/
   class DatabaseBackendOutput : public boost::noncopyable
   {
-    friend class DatabaseBackendAdapter;
-
-  private:
+  public:
     enum AllowedAnswers
     {
       AllowedAnswers_All,
@@ -87,15 +85,11 @@
       AllowedAnswers_Metadata
     };
 
+  private:
     OrthancPluginContext*         context_;
     OrthancPluginDatabaseContext* database_;
     AllowedAnswers                allowedAnswers_;
 
-    void SetAllowedAnswers(AllowedAnswers allowed)
-    {
-      allowedAnswers_ = allowed;
-    }
-
   public:
     DatabaseBackendOutput(OrthancPluginContext*         context,
                           OrthancPluginDatabaseContext* database) :
@@ -105,9 +99,14 @@
     {
     }
 
-    OrthancPluginContext* GetContext()
+    void SetAllowedAnswers(AllowedAnswers allowed)
     {
-      return context_;
+      allowedAnswers_ = allowed;
+    }
+
+    OrthancPluginDatabaseContext* GetDatabase() const
+    {
+      return database_;
     }
 
     void SignalDeletedAttachment(const std::string& uuid,
@@ -282,9 +281,8 @@
    **/
   class IDatabaseBackend : public boost::noncopyable
   {
-    friend class DatabaseBackendAdapter;
-
   private:
+    OrthancPluginContext*   context_;
     DatabaseBackendOutput*  output_;
 
     void Finalize()
@@ -296,14 +294,11 @@
       }
     }
 
-  protected:
-    DatabaseBackendOutput& GetOutput()
-    {
-      return *output_;
-    }
-
   public:
-    IDatabaseBackend() : output_(NULL)
+    // "context" can be NULL iff. running the unit tests
+    IDatabaseBackend() :
+      context_(NULL),
+      output_(NULL)
     {
     }
 
@@ -312,10 +307,22 @@
       Finalize();
     }
 
+    DatabaseBackendOutput& GetOutput()
+    {
+      return *output_;
+    }
+
+    OrthancPluginContext* GetContext() const
+    {
+      return context_;
+    }
+
     // This takes the ownership
-    void RegisterOutput(DatabaseBackendOutput* output)
+    void RegisterOutput(OrthancPluginContext* context,
+                        DatabaseBackendOutput* output)
     {
       Finalize();
+      context_ = context;
       output_ = output;
     }
 
@@ -563,7 +570,7 @@
                          const std::runtime_error& e)
     {
       const std::string message = "Exception in database back-end: " + std::string(e.what());
-      OrthancPluginLogError(backend->GetOutput().GetContext(), message.c_str());
+      OrthancPluginLogError(backend->GetContext(), message.c_str());
     }
 
 
@@ -706,8 +713,8 @@
         for (std::list<int64_t>::const_iterator
                it = target.begin(); it != target.end(); ++it)
         {
-          OrthancPluginDatabaseAnswerInt64(backend->GetOutput().context_,
-                                           backend->GetOutput().database_, *it);
+          OrthancPluginDatabaseAnswerInt64(backend->GetContext(),
+                                           backend->GetOutput().GetDatabase(), *it);
         }
 
         return OrthancPluginErrorCode_Success;
@@ -731,8 +738,8 @@
         for (std::list<std::string>::const_iterator
                it = ids.begin(); it != ids.end(); ++it)
         {
-          OrthancPluginDatabaseAnswerString(backend->GetOutput().context_,
-                                            backend->GetOutput().database_,
+          OrthancPluginDatabaseAnswerString(backend->GetContext(),
+                                            backend->GetOutput().GetDatabase(),
                                             it->c_str());
         }
 
@@ -759,8 +766,8 @@
         for (std::list<std::string>::const_iterator
                it = ids.begin(); it != ids.end(); ++it)
         {
-          OrthancPluginDatabaseAnswerString(backend->GetOutput().context_,
-                                            backend->GetOutput().database_,
+          OrthancPluginDatabaseAnswerString(backend->GetContext(),
+                                            backend->GetOutput().GetDatabase(),
                                             it->c_str());
         }
 
@@ -785,8 +792,8 @@
         
         if (done)
         {
-          OrthancPluginDatabaseAnswerChangesDone(backend->GetOutput().context_,
-                                                 backend->GetOutput().database_);
+          OrthancPluginDatabaseAnswerChangesDone(backend->GetContext(),
+                                                 backend->GetOutput().GetDatabase());
         }
 
         return OrthancPluginErrorCode_Success;
@@ -810,8 +817,8 @@
         for (std::list<int64_t>::const_iterator
                it = target.begin(); it != target.end(); ++it)
         {
-          OrthancPluginDatabaseAnswerInt64(backend->GetOutput().context_,
-                                           backend->GetOutput().database_, *it);
+          OrthancPluginDatabaseAnswerInt64(backend->GetContext(),
+                                           backend->GetOutput().GetDatabase(), *it);
         }
 
         return OrthancPluginErrorCode_Success;
@@ -835,8 +842,8 @@
         for (std::list<std::string>::const_iterator
                it = ids.begin(); it != ids.end(); ++it)
         {
-          OrthancPluginDatabaseAnswerString(backend->GetOutput().context_,
-                                            backend->GetOutput().database_,
+          OrthancPluginDatabaseAnswerString(backend->GetContext(),
+                                            backend->GetOutput().GetDatabase(),
                                             it->c_str());
         }
 
@@ -861,8 +868,8 @@
 
         if (done)
         {
-          OrthancPluginDatabaseAnswerExportedResourcesDone(backend->GetOutput().context_,
-                                                           backend->GetOutput().database_);
+          OrthancPluginDatabaseAnswerExportedResourcesDone(backend->GetContext(),
+                                                           backend->GetOutput().GetDatabase());
         }
         return OrthancPluginErrorCode_Success;
       }
@@ -926,8 +933,8 @@
       try
       {
         std::string s = backend->GetPublicId(id);
-        OrthancPluginDatabaseAnswerString(backend->GetOutput().context_,
-                                          backend->GetOutput().database_,
+        OrthancPluginDatabaseAnswerString(backend->GetContext(),
+                                          backend->GetOutput().GetDatabase(),
                                           s.c_str());
 
         return OrthancPluginErrorCode_Success;
@@ -1045,8 +1052,8 @@
         for (std::list<int32_t>::const_iterator
                it = target.begin(); it != target.end(); ++it)
         {
-          OrthancPluginDatabaseAnswerInt32(backend->GetOutput().context_,
-                                           backend->GetOutput().database_,
+          OrthancPluginDatabaseAnswerInt32(backend->GetContext(),
+                                           backend->GetOutput().GetDatabase(),
                                            *it);
         }
 
@@ -1071,8 +1078,8 @@
         for (std::list<int32_t>::const_iterator
                it = target.begin(); it != target.end(); ++it)
         {
-          OrthancPluginDatabaseAnswerInt32(backend->GetOutput().context_,
-                                           backend->GetOutput().database_,
+          OrthancPluginDatabaseAnswerInt32(backend->GetContext(),
+                                           backend->GetOutput().GetDatabase(),
                                            *it);
         }
 
@@ -1141,8 +1148,8 @@
         std::string s;
         if (backend->LookupGlobalProperty(s, property))
         {
-          OrthancPluginDatabaseAnswerString(backend->GetOutput().context_,
-                                            backend->GetOutput().database_,
+          OrthancPluginDatabaseAnswerString(backend->GetContext(),
+                                            backend->GetOutput().GetDatabase(),
                                             s.c_str());
         }
 
@@ -1169,8 +1176,8 @@
         for (std::list<int64_t>::const_iterator
                it = target.begin(); it != target.end(); ++it)
         {
-          OrthancPluginDatabaseAnswerInt64(backend->GetOutput().context_,
-                                           backend->GetOutput().database_, *it);
+          OrthancPluginDatabaseAnswerInt64(backend->GetContext(),
+                                           backend->GetOutput().GetDatabase(), *it);
         }
 
         return OrthancPluginErrorCode_Success;
@@ -1198,8 +1205,8 @@
         for (std::list<int64_t>::const_iterator
                it = target.begin(); it != target.end(); ++it)
         {
-          OrthancPluginDatabaseAnswerInt64(backend->GetOutput().context_,
-                                           backend->GetOutput().database_, *it);
+          OrthancPluginDatabaseAnswerInt64(backend->GetContext(),
+                                           backend->GetOutput().GetDatabase(), *it);
         }
 
         return OrthancPluginErrorCode_Success;
@@ -1221,8 +1228,8 @@
         std::string s;
         if (backend->LookupMetadata(s, id, metadata))
         {
-          OrthancPluginDatabaseAnswerString(backend->GetOutput().context_,
-                                            backend->GetOutput().database_, s.c_str());
+          OrthancPluginDatabaseAnswerString(backend->GetContext(),
+                                            backend->GetOutput().GetDatabase(), s.c_str());
         }
 
         return OrthancPluginErrorCode_Success;
@@ -1243,8 +1250,8 @@
         int64_t parent;
         if (backend->LookupParent(parent, id))
         {
-          OrthancPluginDatabaseAnswerInt64(backend->GetOutput().context_,
-                                           backend->GetOutput().database_, parent);
+          OrthancPluginDatabaseAnswerInt64(backend->GetContext(),
+                                           backend->GetOutput().GetDatabase(), parent);
         }
 
         return OrthancPluginErrorCode_Success;
@@ -1266,8 +1273,8 @@
         OrthancPluginResourceType type;
         if (backend->LookupResource(id, type, publicId))
         {
-          OrthancPluginDatabaseAnswerResource(backend->GetOutput().context_,
-                                              backend->GetOutput().database_, 
+          OrthancPluginDatabaseAnswerResource(backend->GetContext(),
+                                              backend->GetOutput().GetDatabase(), 
                                               id, type);
         }
 
@@ -1288,8 +1295,8 @@
         int64_t id;
         if (backend->SelectPatientToRecycle(id))
         {
-          OrthancPluginDatabaseAnswerInt64(backend->GetOutput().context_,
-                                           backend->GetOutput().database_, id);
+          OrthancPluginDatabaseAnswerInt64(backend->GetContext(),
+                                           backend->GetOutput().GetDatabase(), id);
         }
 
         return OrthancPluginErrorCode_Success;
@@ -1310,8 +1317,8 @@
         int64_t id;
         if (backend->SelectPatientToRecycle(id, patientIdToAvoid))
         {
-          OrthancPluginDatabaseAnswerInt64(backend->GetOutput().context_,
-                                           backend->GetOutput().database_, id);
+          OrthancPluginDatabaseAnswerInt64(backend->GetContext(),
+                                           backend->GetOutput().GetDatabase(), id);
         }
 
         return OrthancPluginErrorCode_Success;
@@ -1612,8 +1619,8 @@
         for (std::list<std::string>::const_iterator
                it = values.begin(); it != values.end(); ++it)
         {
-          OrthancPluginDatabaseAnswerString(backend->GetOutput().context_,
-                                            backend->GetOutput().database_,
+          OrthancPluginDatabaseAnswerString(backend->GetContext(),
+                                            backend->GetOutput().GetDatabase(),
                                             it->c_str());
         }
 
@@ -1673,8 +1680,8 @@
         for (std::map<int32_t, std::string>::const_iterator
                it = result.begin(); it != result.end(); ++it)
         {
-          OrthancPluginDatabaseAnswerMetadata(backend->GetOutput().context_,
-                                            backend->GetOutput().database_,
+          OrthancPluginDatabaseAnswerMetadata(backend->GetContext(),
+                                            backend->GetOutput().GetDatabase(),
                                             resourceId, it->first, it->second.c_str());
         }
         
@@ -1708,8 +1715,8 @@
 
           if (!parent.empty())
           {
-            OrthancPluginDatabaseAnswerString(backend->GetOutput().context_,
-                                              backend->GetOutput().database_,
+            OrthancPluginDatabaseAnswerString(backend->GetContext(),
+                                              backend->GetOutput().GetDatabase(),
                                               parent.c_str());
           }
         }
@@ -1852,7 +1859,7 @@
         throw std::runtime_error("Unable to register the database backend");
       }
 
-      backend.RegisterOutput(new DatabaseBackendOutput(context, database));
+      backend.RegisterOutput(context, new DatabaseBackendOutput(context, database));
     }
   };
 }