diff OrthancServer/FromDcmtkBridge.cpp @ 2216:9a8fab016145

sample worklist plugin fine-tuning the C-Find query
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 12 Dec 2016 11:01:09 +0100
parents e3fd5bc429a2
children 3eefb84ac0bd
line wrap: on
line diff
--- a/OrthancServer/FromDcmtkBridge.cpp	Sat Dec 10 11:41:17 2016 +0100
+++ b/OrthancServer/FromDcmtkBridge.cpp	Mon Dec 12 11:01:09 2016 +0100
@@ -1646,7 +1646,9 @@
 
     if (!ok)
     {
-      throw OrthancException(ErrorCode_InternalError);
+      LOG(ERROR) << "While creating a DICOM instance, tag (" << tag.Format()
+                 << ") has out-of-range value: \"" << *decoded << "\"";
+      throw OrthancException(ErrorCode_BadFileFormat);
     }
   }
 
@@ -1665,6 +1667,11 @@
         FillElementWithString(*element, tag, value.asString(), decodeDataUriScheme, dicomEncoding);
         break;
 
+      case Json::nullValue:
+        element.reset(CreateElementForTag(tag));
+        FillElementWithString(*element, tag, "", decodeDataUriScheme, dicomEncoding);
+        break;
+
       case Json::arrayValue:
       {
         DcmTag key(tag.GetGroup(), tag.GetElement());
@@ -1742,11 +1749,17 @@
       {
         const Json::Value& value = json[tags[i]];
         if (value.type() != Json::stringValue ||
-            !GetDicomEncoding(encoding, value.asCString()))
+            (value.asString().length() != 0 &&
+             !GetDicomEncoding(encoding, value.asCString())))
         {
           LOG(ERROR) << "Unknown encoding while creating DICOM from JSON: " << value;
           throw OrthancException(ErrorCode_BadRequest);
         }
+
+        if (value.asString().length() == 0)
+        {
+          return defaultEncoding;
+        }
       }
     }