diff PalantirServer/FromDcmtkBridge.cpp @ 35:f6d12037f886

full json vs. simplified json
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 30 Aug 2012 12:24:31 +0200
parents 67a6978503b7
children c1097a676eca
line wrap: on
line diff
--- a/PalantirServer/FromDcmtkBridge.cpp	Thu Aug 30 11:22:21 2012 +0200
+++ b/PalantirServer/FromDcmtkBridge.cpp	Thu Aug 30 12:24:31 2012 +0200
@@ -298,14 +298,20 @@
   {
     assert(target.type() == Json::objectValue);
 
-    const std::string tagName = FromDcmtkBridge::GetName(FromDcmtkBridge::GetTag(element));
+    DicomTag tag(FromDcmtkBridge::GetTag(element));
+    const std::string tagName = FromDcmtkBridge::GetName(tag);
+    const std::string formattedTag = tag.Format();
 
     if (element.isLeaf())
     {
+      Json::Value value(Json::objectValue);
+      value["Name"] = tagName;
+
       std::auto_ptr<DicomValue> v(FromDcmtkBridge::ConvertLeafElement(element));
       if (v->IsNull())
       {
-        target[tagName] = Json::nullValue;
+        value["Type"] = "Null";
+        value["Value"] = Json::nullValue;
       }
       else
       {
@@ -313,18 +319,21 @@
         if (maxStringLength == 0 ||
             s.size() <= maxStringLength)
         {
-          target[tagName] = s;
+          value["Type"] = "String";
+          value["Value"] = s;
         }
         else
         {
-          // An integer value of 0 in JSON indicates too long field
-          target[tagName] = 0; 
+          value["Type"] = "TooLong";
+          value["Value"] = Json::nullValue;
         }
       }
+
+      target[formattedTag] = value;
     }
     else
     {
-      target[tagName] = Json::Value(Json::arrayValue);
+      Json::Value children(Json::arrayValue);
 
       // "All subclasses of DcmElement except for DcmSequenceOfItems
       // are leaf nodes, while DcmSequenceOfItems, DcmItem, DcmDataset
@@ -334,9 +343,13 @@
       for (unsigned long i = 0; i < sequence.card(); i++)
       {
         DcmItem* child = sequence.getItem(i);
-        Json::Value& v = target[tagName].append(Json::objectValue);
+        Json::Value& v = children.append(Json::objectValue);
         StoreItem(v, *child, maxStringLength);
       }  
+
+      target[formattedTag]["Name"] = tagName;
+      target[formattedTag]["Type"] = "Sequence";
+      target[formattedTag]["Value"] = children;
     }
   }