diff OrthancServer/OrthancRestApi/OrthancRestModalities.cpp @ 2940:4767d36679ed

refactoring access to Orthanc configuration
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 29 Nov 2018 11:47:00 +0100
parents 9d277f8ad698
children f395460af74d
line wrap: on
line diff
--- a/OrthancServer/OrthancRestApi/OrthancRestModalities.cpp	Wed Nov 28 14:48:14 2018 +0100
+++ b/OrthancServer/OrthancRestApi/OrthancRestModalities.cpp	Thu Nov 29 11:47:00 2018 +0100
@@ -37,7 +37,7 @@
 #include "../../Core/DicomParsing/FromDcmtkBridge.h"
 #include "../../Core/Logging.h"
 #include "../../Core/SerializationToolbox.h"
-#include "../OrthancInitialization.h"
+#include "../OrthancConfiguration.h"
 #include "../QueryRetrieveHandler.h"
 #include "../ServerJobs/DicomModalityStoreJob.h"
 #include "../ServerJobs/DicomMoveScuJob.h"
@@ -47,6 +47,13 @@
 
 namespace Orthanc
 {
+  static RemoteModalityParameters MyGetModalityUsingSymbolicName(const std::string& name)
+  {
+    OrthancConfiguration::ReaderLock lock;
+    return lock.GetConfiguration().GetModalityUsingSymbolicName(name);
+  }
+
+
   /***************************************************************************
    * DICOM C-Echo SCU
    ***************************************************************************/
@@ -57,7 +64,7 @@
 
     const std::string& localAet = context.GetDefaultLocalApplicationEntityTitle();
     RemoteModalityParameters remote =
-      Configuration::GetModalityUsingSymbolicName(call.GetUriComponent("id", ""));
+      MyGetModalityUsingSymbolicName(call.GetUriComponent("id", ""));
 
     try
     {
@@ -181,7 +188,7 @@
 
     const std::string& localAet = context.GetDefaultLocalApplicationEntityTitle();
     RemoteModalityParameters remote =
-      Configuration::GetModalityUsingSymbolicName(call.GetUriComponent("id", ""));
+      MyGetModalityUsingSymbolicName(call.GetUriComponent("id", ""));
     
     DicomFindAnswers answers(false);
 
@@ -216,7 +223,7 @@
       
     const std::string& localAet = context.GetDefaultLocalApplicationEntityTitle();
     RemoteModalityParameters remote =
-      Configuration::GetModalityUsingSymbolicName(call.GetUriComponent("id", ""));
+      MyGetModalityUsingSymbolicName(call.GetUriComponent("id", ""));
 
     DicomFindAnswers answers(false);
 
@@ -252,7 +259,7 @@
          
     const std::string& localAet = context.GetDefaultLocalApplicationEntityTitle();
     RemoteModalityParameters remote =
-      Configuration::GetModalityUsingSymbolicName(call.GetUriComponent("id", ""));
+      MyGetModalityUsingSymbolicName(call.GetUriComponent("id", ""));
 
     DicomFindAnswers answers(false);
 
@@ -289,7 +296,7 @@
          
     const std::string& localAet = context.GetDefaultLocalApplicationEntityTitle();
     RemoteModalityParameters remote =
-      Configuration::GetModalityUsingSymbolicName(call.GetUriComponent("id", ""));
+      MyGetModalityUsingSymbolicName(call.GetUriComponent("id", ""));
 
     DicomFindAnswers answers(false);
 
@@ -331,7 +338,7 @@
  
     const std::string& localAet = context.GetDefaultLocalApplicationEntityTitle();
     RemoteModalityParameters remote =
-      Configuration::GetModalityUsingSymbolicName(call.GetUriComponent("id", ""));
+      MyGetModalityUsingSymbolicName(call.GetUriComponent("id", ""));
 
     DicomUserConnection connection(localAet, remote);
     connection.Open();
@@ -696,6 +703,13 @@
       }
     }
 
+    bool logExportedResources;
+
+    {
+      OrthancConfiguration::ReaderLock lock;
+      logExportedResources = lock.GetConfiguration().GetBooleanParameter("LogExportedResources", false);
+    }
+
     for (Json::Value::ArrayIndex i = 0; i < resources->size(); i++)
     {
       if (!(*resources) [i].isString())
@@ -709,7 +723,7 @@
         return false;
       }
 
-      if (Configuration::GetGlobalBoolParameter("LogExportedResources", false))
+      if (logExportedResources)
       {
         context.GetIndex().LogExportedResource(stripped, remote);
       }
@@ -740,7 +754,7 @@
         (request, "MoveOriginatorID", 0 /* By default, not a C-MOVE */);
 
       job->SetLocalAet(localAet);
-      job->SetRemoteModality(Configuration::GetModalityUsingSymbolicName(remote));
+      job->SetRemoteModality(MyGetModalityUsingSymbolicName(remote));
 
       if (moveOriginatorID != 0)
       {
@@ -784,7 +798,7 @@
       (request, "TargetAet", context.GetDefaultLocalApplicationEntityTitle());
 
     const RemoteModalityParameters source =
-      Configuration::GetModalityUsingSymbolicName(call.GetUriComponent("id", ""));
+      MyGetModalityUsingSymbolicName(call.GetUriComponent("id", ""));
 
     DicomUserConnection connection(localAet, source);
     connection.Open();
@@ -815,8 +829,10 @@
 
   static void ListPeers(RestApiGetCall& call)
   {
+    OrthancConfiguration::ReaderLock lock;
+
     OrthancRestApi::SetOfStrings peers;
-    Configuration::GetListOfOrthancPeers(peers);
+    lock.GetConfiguration().GetListOfOrthancPeers(peers);
 
     if (call.HasArgument("expand"))
     {
@@ -826,7 +842,7 @@
       {
         WebServiceParameters peer;
         
-        if (Configuration::GetOrthancPeer(peer, *it))
+        if (lock.GetConfiguration().GetOrthancPeer(peer, *it))
         {
           Json::Value jsonPeer = Json::objectValue;
           // only return the minimum information to identify the
@@ -857,8 +873,10 @@
 
   static void ListPeerOperations(RestApiGetCall& call)
   {
+    OrthancConfiguration::ReaderLock lock;
+
     OrthancRestApi::SetOfStrings peers;
-    Configuration::GetListOfOrthancPeers(peers);
+    lock.GetConfiguration().GetListOfOrthancPeers(peers);
 
     std::string id = call.GetUriComponent("id", "");
     if (IsExistingPeer(peers, id))
@@ -878,8 +896,10 @@
 
     if (GetInstancesToExport(request, *job, remote, call))
     {
+      OrthancConfiguration::ReaderLock lock;
+
       WebServiceParameters peer;
-      if (Configuration::GetOrthancPeer(peer, remote))
+      if (lock.GetConfiguration().GetOrthancPeer(peer, remote))
       {
         job->SetPeer(peer);    
         OrthancRestApi::GetApi(call).SubmitCommandsJob
@@ -904,8 +924,10 @@
 
   static void ListModalities(RestApiGetCall& call)
   {
+    OrthancConfiguration::ReaderLock lock;
+
     OrthancRestApi::SetOfStrings modalities;
-    Configuration::GetListOfDicomModalities(modalities);
+    lock.GetConfiguration().GetListOfDicomModalities(modalities);
 
     if (call.HasArgument("expand"))
     {
@@ -913,7 +935,7 @@
       for (OrthancRestApi::SetOfStrings::const_iterator
              it = modalities.begin(); it != modalities.end(); ++it)
       {
-        const RemoteModalityParameters& remote = Configuration::GetModalityUsingSymbolicName(*it);
+        const RemoteModalityParameters& remote = lock.GetConfiguration().GetModalityUsingSymbolicName(*it);
         
         Json::Value info;
         remote.Serialize(info, true /* force advanced format */);
@@ -936,8 +958,10 @@
 
   static void ListModalityOperations(RestApiGetCall& call)
   {
+    OrthancConfiguration::ReaderLock lock;
+
     OrthancRestApi::SetOfStrings modalities;
-    Configuration::GetListOfDicomModalities(modalities);
+    lock.GetConfiguration().GetListOfDicomModalities(modalities);
 
     std::string id = call.GetUriComponent("id", "");
     if (IsExistingModality(modalities, id))
@@ -957,7 +981,14 @@
     {
       RemoteModalityParameters modality;
       modality.Unserialize(json);
-      Configuration::UpdateModality(context, call.GetUriComponent("id", ""), modality);
+
+      {
+        OrthancConfiguration::WriterLock lock;
+        lock.GetConfiguration().UpdateModality(call.GetUriComponent("id", ""), modality);
+      }
+
+      context.SignalUpdatedModalities();
+
       call.GetOutput().AnswerBuffer("", MimeType_PlainText);
     }
   }
@@ -967,7 +998,13 @@
   {
     ServerContext& context = OrthancRestApi::GetContext(call);
 
-    Configuration::RemoveModality(context, call.GetUriComponent("id", ""));
+    {
+      OrthancConfiguration::WriterLock lock;
+      lock.GetConfiguration().RemoveModality(call.GetUriComponent("id", ""));
+    }
+
+    context.SignalUpdatedModalities();
+
     call.GetOutput().AnswerBuffer("", MimeType_PlainText);
   }
 
@@ -982,7 +1019,14 @@
     {
       WebServiceParameters peer;
       peer.Unserialize(json);
-      Configuration::UpdatePeer(context, call.GetUriComponent("id", ""), peer);
+
+      {
+        OrthancConfiguration::WriterLock lock;
+        lock.GetConfiguration().UpdatePeer(call.GetUriComponent("id", ""), peer);
+      }
+
+      context.SignalUpdatedPeers();
+
       call.GetOutput().AnswerBuffer("", MimeType_PlainText);
     }
   }
@@ -992,7 +1036,13 @@
   {
     ServerContext& context = OrthancRestApi::GetContext(call);
 
-    Configuration::RemovePeer(context, call.GetUriComponent("id", ""));
+    {
+      OrthancConfiguration::WriterLock lock;
+      lock.GetConfiguration().RemovePeer(call.GetUriComponent("id", ""));
+    }
+
+    context.SignalUpdatedPeers();
+
     call.GetOutput().AnswerBuffer("", MimeType_PlainText);
   }
 
@@ -1006,7 +1056,7 @@
     {
       const std::string& localAet = context.GetDefaultLocalApplicationEntityTitle();
       RemoteModalityParameters remote =
-        Configuration::GetModalityUsingSymbolicName(call.GetUriComponent("id", ""));
+        MyGetModalityUsingSymbolicName(call.GetUriComponent("id", ""));
 
       std::auto_ptr<ParsedDicomFile> query(ParsedDicomFile::CreateFromJson(json, static_cast<DicomFromJsonFlags>(0)));