diff Framework/Oracle/ParseDicomFromWadoCommand.cpp @ 1484:121d01aa328e

SeriesThumbnailsLoader working on raw dicom files
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 22 Jun 2020 17:46:40 +0200
parents 30deba7bc8e2
children
line wrap: on
line diff
--- a/Framework/Oracle/ParseDicomFromWadoCommand.cpp	Sat Jun 20 11:16:55 2020 +0200
+++ b/Framework/Oracle/ParseDicomFromWadoCommand.cpp	Mon Jun 22 17:46:40 2020 +0200
@@ -25,8 +25,10 @@
 
 namespace OrthancStone
 {
-  ParseDicomFromWadoCommand::ParseDicomFromWadoCommand(const std::string& sopInstanceUid,
+  ParseDicomFromWadoCommand::ParseDicomFromWadoCommand(const DicomSource& source,
+                                                       const std::string& sopInstanceUid,
                                                        IOracleCommand* restCommand) :
+    source_(source),
     sopInstanceUid_(sopInstanceUid),
     restCommand_(restCommand)
   {
@@ -46,7 +48,7 @@
   IOracleCommand* ParseDicomFromWadoCommand::Clone() const
   {
     assert(restCommand_.get() != NULL);
-    return new ParseDicomFromWadoCommand(sopInstanceUid_, restCommand_->Clone());
+    return new ParseDicomFromWadoCommand(source_, sopInstanceUid_, restCommand_->Clone());
   }
 
 
@@ -55,4 +57,47 @@
     assert(restCommand_.get() != NULL);
     return *restCommand_;
   }
+
+
+  ParseDicomFromWadoCommand* ParseDicomFromWadoCommand::Create(
+    const DicomSource& source,
+    const std::string& studyInstanceUid,
+    const std::string& seriesInstanceUid,
+    const std::string& sopInstanceUid,
+    bool transcode,
+    Orthanc::DicomTransferSyntax transferSyntax,
+    Orthanc::IDynamicObject* payload)
+  {
+    std::unique_ptr<Orthanc::IDynamicObject> protection(payload);
+    
+    const std::string uri = ("/studies/" + studyInstanceUid +
+                             "/series/" + seriesInstanceUid +
+                             "/instances/" + sopInstanceUid);
+
+    std::string s;
+    if (transcode)
+    {
+      s = Orthanc::GetTransferSyntaxUid(transferSyntax);      
+    }
+    else
+    {
+      s = "*";  // No transcoding, keep source transfer syntax
+    }
+    
+    std::map<std::string, std::string> arguments, headers;
+    headers["Accept"] = ("multipart/related; type=\"application/dicom\"; transfer-syntax=" + s);
+                         
+    std::unique_ptr<IOracleCommand> rest(
+      source.CreateDicomWebCommand(uri, arguments, headers, NULL));
+
+    std::unique_ptr<ParseDicomFromWadoCommand> command(
+      new ParseDicomFromWadoCommand(source, sopInstanceUid, rest.release()));
+
+    if (protection.get() != NULL)
+    {
+      command->AcquirePayload(protection.release());
+    }
+                            
+    return command.release();
+  }
 }