diff OrthancServer/OrthancRestApi.cpp @ 484:b8ace6fc1d1f

preparation for handling Orthanc peers
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 16 Jul 2013 12:51:27 +0200
parents 8c3573d28868
children bdbde1fbfab3
line wrap: on
line diff
--- a/OrthancServer/OrthancRestApi.cpp	Tue Jul 16 12:01:39 2013 +0200
+++ b/OrthancServer/OrthancRestApi.cpp	Tue Jul 16 12:51:27 2013 +0200
@@ -52,9 +52,13 @@
   ServerContext& context = contextApi.GetContext()
 
 #define RETRIEVE_MODALITIES(call)                                       \
-  const OrthancRestApi::Modalities& modalities =                        \
+  const OrthancRestApi::SetOfStrings& modalities =                      \
     dynamic_cast<OrthancRestApi&>(call.GetContext()).GetModalities();
 
+#define RETRIEVE_PEERS(call)                                            \
+  const OrthancRestApi::SetOfStrings& peers =                           \
+    dynamic_cast<OrthancRestApi&>(call.GetContext()).GetPeers();
+
 
 
 namespace Orthanc
@@ -881,7 +885,7 @@
 
   // DICOM bridge -------------------------------------------------------------
 
-  static bool IsExistingModality(const OrthancRestApi::Modalities& modalities,
+  static bool IsExistingModality(const OrthancRestApi::SetOfStrings& modalities,
                                  const std::string& id)
   {
     return modalities.find(id) != modalities.end();
@@ -892,7 +896,7 @@
     RETRIEVE_MODALITIES(call);
 
     Json::Value result = Json::arrayValue;
-    for (OrthancRestApi::Modalities::const_iterator 
+    for (OrthancRestApi::SetOfStrings::const_iterator 
            it = modalities.begin(); it != modalities.end(); it++)
     {
       result.append(*it);
@@ -1610,12 +1614,51 @@
 
 
 
+  // Orthanc Peers ------------------------------------------------------------
+
+  static bool IsExistingPeer(const OrthancRestApi::SetOfStrings& peers,
+                             const std::string& id)
+  {
+    return peers.find(id) != peers.end();
+  }
+
+  static void ListPeers(RestApi::GetCall& call)
+  {
+    RETRIEVE_PEERS(call);
+
+    Json::Value result = Json::arrayValue;
+    for (OrthancRestApi::SetOfStrings::const_iterator 
+           it = peers.begin(); it != peers.end(); it++)
+    {
+      result.append(*it);
+    }
+
+    call.GetOutput().AnswerJson(result);
+  }
+
+  static void ListPeerOperations(RestApi::GetCall& call)
+  {
+    RETRIEVE_PEERS(call);
+
+    std::string id = call.GetUriComponent("id", "");
+    if (IsExistingPeer(peers, id))
+    {
+      Json::Value result = Json::arrayValue;
+      result.append("store");
+      call.GetOutput().AnswerJson(result);
+    }
+  }
+
+
+
+
   // Registration of the various REST handlers --------------------------------
 
   OrthancRestApi::OrthancRestApi(ServerContext& context) : 
     context_(context)
   {
     GetListOfDicomModalities(modalities_);
+    GetListOfOrthancPeers(peers_);
 
     Register("/", ServeRoot);
     Register("/system", GetSystemInformation);
@@ -1692,6 +1735,9 @@
     Register("/modalities/{id}/find", DicomFind);
     Register("/modalities/{id}/store", DicomStore);
 
+    Register("/peers", ListPeers);
+    Register("/peers/{id}", ListPeerOperations);
+
     Register("/instances/{id}/modify", ModifyInstance);
     Register("/series/{id}/modify", ModifySeriesInplace);
     Register("/studies/{id}/modify", ModifyStudyInplace);