diff OrthancServer/OrthancRestApi/OrthancRestResources.cpp @ 1276:6164f7200c43

refactoring modules
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 23 Jan 2015 14:42:33 +0100
parents 09aa7c126be9
children 8dac11c78d71
line wrap: on
line diff
--- a/OrthancServer/OrthancRestApi/OrthancRestResources.cpp	Wed Jan 21 17:47:27 2015 +0100
+++ b/OrthancServer/OrthancRestApi/OrthancRestResources.cpp	Fri Jan 23 14:42:33 2015 +0100
@@ -713,10 +713,14 @@
 
   static void GetModuleInternal(RestApiGetCall& call,
                                 ResourceType resourceType,
-                                ResourceType queryLevel)
+                                DicomModule module)
   {
-    if (resourceType != queryLevel &&
-        !(resourceType == ResourceType_Study && queryLevel == ResourceType_Patient))
+    if (!((resourceType == ResourceType_Patient && module == DicomModule_Patient) ||
+          (resourceType == ResourceType_Study && module == DicomModule_Patient) ||
+          (resourceType == ResourceType_Study && module == DicomModule_Study) ||
+          (resourceType == ResourceType_Series && module == DicomModule_Series) ||
+          (resourceType == ResourceType_Instance && module == DicomModule_Instance) ||
+          (resourceType == ResourceType_Instance && module == DicomModule_Image)))
     {
       throw OrthancException(ErrorCode_NotImplemented);
     }
@@ -725,9 +729,9 @@
     std::string publicId = call.GetUriComponent("id", "");
     bool simplify = call.HasArgument("simplify");
 
-    typedef std::set<DicomTag> Module;
-    Module module;
-    DicomTag::GetTagsForModule(module, queryLevel);
+    typedef std::set<DicomTag> ModuleTags;
+    ModuleTags moduleTags;
+    DicomTag::GetTagsForModule(moduleTags, module);
 
     Json::Value tags;
 
@@ -751,9 +755,9 @@
     
     // Filter the tags of the instance according to the module
     Json::Value result = Json::objectValue;
-    for (Module::const_iterator it = module.begin(); it != module.end(); it++)
+    for (ModuleTags::const_iterator tag = moduleTags.begin(); tag != moduleTags.end(); tag++)
     {
-      std::string s = it->Format();
+      std::string s = tag->Format();
       if (tags.isMember(s))
       {
         result[s] = tags[s];
@@ -774,16 +778,11 @@
     
 
 
-  template <enum ResourceType resourceType>
+  template <enum ResourceType resourceType, 
+            enum DicomModule module>
   static void GetModule(RestApiGetCall& call)
   {
-    GetModuleInternal(call, resourceType, resourceType);
-  }
-
-
-  static void GetPatientModuleForStudy(RestApiGetCall& call)
-  {
-    GetModuleInternal(call, ResourceType_Study, ResourceType_Patient);
+    GetModuleInternal(call, resourceType, module);
   }
 
 
@@ -938,11 +937,11 @@
     Register("/series/{id}/shared-tags", GetSharedTags);
     Register("/studies/{id}/shared-tags", GetSharedTags);
 
-    Register("/instances/{id}/module", GetModule<ResourceType_Instance>);
-    Register("/patients/{id}/module", GetModule<ResourceType_Patient>);
-    Register("/series/{id}/module", GetModule<ResourceType_Series>);
-    Register("/studies/{id}/module", GetModule<ResourceType_Study>);
-    Register("/studies/{id}/module-patient", GetPatientModuleForStudy);
+    Register("/instances/{id}/module", GetModule<ResourceType_Instance, DicomModule_Instance>);
+    Register("/patients/{id}/module", GetModule<ResourceType_Patient, DicomModule_Patient>);
+    Register("/series/{id}/module", GetModule<ResourceType_Series, DicomModule_Series>);
+    Register("/studies/{id}/module", GetModule<ResourceType_Study, DicomModule_Study>);
+    Register("/studies/{id}/module-patient", GetModule<ResourceType_Study, DicomModule_Patient>);
 
     Register("/instances/{id}/file", GetInstanceFile);
     Register("/instances/{id}/export", ExportInstanceFile);