diff Plugins/Engine/OrthancPluginDatabase.cpp @ 3082:847a0ed92654 db-changes

new extension for database plugin SDK: createInstance
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 04 Jan 2019 13:52:34 +0100
parents 1a75595d8e44
children 195ba4cbac3f
line wrap: on
line diff
--- a/Plugins/Engine/OrthancPluginDatabase.cpp	Thu Jan 03 20:03:35 2019 +0100
+++ b/Plugins/Engine/OrthancPluginDatabase.cpp	Fri Jan 04 13:52:34 2019 +0100
@@ -1195,13 +1195,39 @@
     const std::string& patient,
     const std::string& study,
     const std::string& series,
-    const std::string& instance,
-    bool overwrite)
+    const std::string& instance)
   {
-    // TODO optimized version
+    if (extensions_.createInstance == NULL)
+    {
+      // Fallback to compatibility mode
+      return CompatibilityDatabaseWrapper::CreateInstance
+        (result, instanceId, patient, study, series, instance);
+    }
+    else
+    {
+      OrthancPluginCreateInstanceResult output;
+      memset(&output, 0, sizeof(output));
+
+      CheckSuccess(extensions_.createInstance(&output, payload_, patient.c_str(),
+                                              study.c_str(), series.c_str(), instance.c_str()));
 
-    return CompatibilityDatabaseWrapper::CreateInstance(
-      result, instanceId, patient, study, series, instance, overwrite);
+      instanceId = output.instanceId;
+      
+      if (output.isNewInstance)
+      {
+        result.isNewPatient_ = output.isNewPatient;
+        result.isNewStudy_ = output.isNewStudy;
+        result.isNewSeries_ = output.isNewSeries;
+        result.patientId_ = output.patientId;
+        result.studyId_ = output.studyId;
+        result.seriesId_ = output.seriesId;
+        return true;
+      }
+      else
+      {
+        return false;
+      }
+    }
   }