# HG changeset patch # User Sebastien Jodogne # Date 1445439143 -7200 # Node ID b953c6eef28d8f103c6e3c5764546302da06a0bd # Parent a001f6226c7ccc9813046765623d6ec728f15cfa ToJson: IncludePrivateTags and IncludeUnknownTags diff -r a001f6226c7c -r b953c6eef28d OrthancServer/FromDcmtkBridge.cpp --- a/OrthancServer/FromDcmtkBridge.cpp Wed Oct 21 16:25:09 2015 +0200 +++ b/OrthancServer/FromDcmtkBridge.cpp Wed Oct 21 16:52:23 2015 +0200 @@ -332,7 +332,7 @@ { target.SetValue(element->getTag().getGTag(), element->getTag().getETag(), - ConvertLeafElement(*element, encoding)); + ConvertLeafElement(*element, DicomToJsonFlags_Default, encoding)); } } } @@ -364,6 +364,7 @@ DicomValue* FromDcmtkBridge::ConvertLeafElement(DcmElement& element, + DicomToJsonFlags flags, Encoding encoding) { if (!element.isLeaf()) @@ -700,7 +701,7 @@ if (element.isLeaf()) { - std::auto_ptr v(FromDcmtkBridge::ConvertLeafElement(element, encoding)); + std::auto_ptr v(FromDcmtkBridge::ConvertLeafElement(element, flags, encoding)); LeafValueToJson(target, *v, format, maxStringLength); } else @@ -740,11 +741,22 @@ throw OrthancException(ErrorCode_InternalError); } - if ((flags & DicomToJsonFlags_IncludePrivateTags) || - !element->getTag().isPrivate()) + if (!(flags & DicomToJsonFlags_IncludePrivateTags) && + element->getTag().isPrivate()) + { + continue; + } + + if (!(flags & DicomToJsonFlags_IncludeUnknownTags)) { - FromDcmtkBridge::ToJson(parent, *element, format, flags, maxStringLength, encoding); + DictionaryLocker locker; + if (locker->findEntry(element->getTag(), NULL) == NULL) + { + continue; + } } + + FromDcmtkBridge::ToJson(parent, *element, format, flags, maxStringLength, encoding); } } diff -r a001f6226c7c -r b953c6eef28d OrthancServer/FromDcmtkBridge.h --- a/OrthancServer/FromDcmtkBridge.h Wed Oct 21 16:25:09 2015 +0200 +++ b/OrthancServer/FromDcmtkBridge.h Wed Oct 21 16:52:23 2015 +0200 @@ -65,6 +65,7 @@ static bool IsUnknownTag(const DicomTag& tag); static DicomValue* ConvertLeafElement(DcmElement& element, + DicomToJsonFlags flags, Encoding encoding); static void ToJson(Json::Value& parent, diff -r a001f6226c7c -r b953c6eef28d OrthancServer/ParsedDicomFile.cpp --- a/OrthancServer/ParsedDicomFile.cpp Wed Oct 21 16:25:09 2015 +0200 +++ b/OrthancServer/ParsedDicomFile.cpp Wed Oct 21 16:52:23 2015 +0200 @@ -763,7 +763,8 @@ return false; } - std::auto_ptr v(FromDcmtkBridge::ConvertLeafElement(*element, GetEncoding())); + std::auto_ptr v(FromDcmtkBridge::ConvertLeafElement + (*element, DicomToJsonFlags_Default, GetEncoding())); if (v.get() == NULL) { diff -r a001f6226c7c -r b953c6eef28d OrthancServer/ServerEnumerations.h --- a/OrthancServer/ServerEnumerations.h Wed Oct 21 16:25:09 2015 +0200 +++ b/OrthancServer/ServerEnumerations.h Wed Oct 21 16:52:23 2015 +0200 @@ -110,10 +110,11 @@ enum DicomToJsonFlags { - DicomToJsonFlags_IncludeBinary = (1 << 0), - DicomToJsonFlags_IncludePrivateTags = (1 << 1), - DicomToJsonFlags_IncludeUnknownTags = (1 << 2), - DicomToJsonFlags_IncludePixelData = (1 << 3), + DicomToJsonFlags_IncludeBinary = (1 << 0), + DicomToJsonFlags_IncludePrivateTags = (1 << 1), + DicomToJsonFlags_IncludeUnknownTags = (1 << 2), + DicomToJsonFlags_IncludePixelData = (1 << 3), + DicomToJsonFlags_DataUriSchemeForBinary = (1 << 4), // Some predefined combinations DicomToJsonFlags_None = 0, diff -r a001f6226c7c -r b953c6eef28d UnitTestsSources/FromDcmtkTests.cpp --- a/UnitTestsSources/FromDcmtkTests.cpp Wed Oct 21 16:25:09 2015 +0200 +++ b/UnitTestsSources/FromDcmtkTests.cpp Wed Oct 21 16:52:23 2015 +0200 @@ -523,20 +523,51 @@ TEST(ParsedDicomFile, ToJsonFlags) { + FromDcmtkBridge::RegisterDictionaryTag(DicomTag(0x7053, 0x1000), EVR_PN, "MyPrivateTag", 1, 1); + FromDcmtkBridge::RegisterDictionaryTag(DicomTag(0x7050, 0x1000), EVR_PN, "Declared public tag", 1, 1); + { ParsedDicomFile f; - f.Insert(DicomTag(0x7053, 0x1000), "Some private tag", false); + f.Insert(DicomTag(0x7050, 0x1000), "Some public tag", false); // Even group => public tag + f.Insert(DicomTag(0x7052, 0x1000), "Some unknown tag", false); // Even group => public, unknown tag + f.Insert(DicomTag(0x7053, 0x1000), "Some private tag", false); // Odd group => private tag Json::Value v; f.ToJson(v, DicomToJsonFormat_Short, DicomToJsonFlags_None, 0); ASSERT_EQ(Json::objectValue, v.type()); - ASSERT_EQ(5, v.getMemberNames().size()); - ASSERT_FALSE(v.isMember("7053-1000")); + ASSERT_EQ(6, v.getMemberNames().size()); + ASSERT_FALSE(v.isMember("7052,1000")); + ASSERT_FALSE(v.isMember("7053,1000")); + ASSERT_TRUE(v.isMember("7050,1000")); + ASSERT_EQ(Json::stringValue, v["7050,1000"].type()); + ASSERT_EQ("Some public tag", v["7050,1000"].asString()); f.ToJson(v, DicomToJsonFormat_Short, DicomToJsonFlags_IncludePrivateTags, 0); ASSERT_EQ(Json::objectValue, v.type()); - ASSERT_EQ(6, v.getMemberNames().size()); + ASSERT_EQ(7, v.getMemberNames().size()); + ASSERT_FALSE(v.isMember("7052,1000")); + ASSERT_TRUE(v.isMember("7050,1000")); ASSERT_TRUE(v.isMember("7053,1000")); - ASSERT_EQ(Json::nullValue, v["7053,1000"].type()); + ASSERT_EQ("Some public tag", v["7050,1000"].asString()); + ASSERT_EQ(Json::nullValue, v["7053,1000"].type()); // TODO SHOULD BE STRING + + f.ToJson(v, DicomToJsonFormat_Short, DicomToJsonFlags_IncludeUnknownTags, 0); + ASSERT_EQ(Json::objectValue, v.type()); + ASSERT_EQ(7, v.getMemberNames().size()); + ASSERT_TRUE(v.isMember("7050,1000")); + ASSERT_TRUE(v.isMember("7052,1000")); + ASSERT_FALSE(v.isMember("7053,1000")); + ASSERT_EQ("Some public tag", v["7050,1000"].asString()); + ASSERT_EQ(Json::nullValue, v["7052,1000"].type()); // TODO SHOULD BE STRING + + f.ToJson(v, DicomToJsonFormat_Short, static_cast(DicomToJsonFlags_IncludeUnknownTags | DicomToJsonFlags_IncludePrivateTags), 0); + ASSERT_EQ(Json::objectValue, v.type()); + ASSERT_EQ(8, v.getMemberNames().size()); + ASSERT_TRUE(v.isMember("7050,1000")); + ASSERT_TRUE(v.isMember("7052,1000")); + ASSERT_TRUE(v.isMember("7053,1000")); + ASSERT_EQ("Some public tag", v["7050,1000"].asString()); + ASSERT_EQ(Json::nullValue, v["7052,1000"].type()); // TODO SHOULD BE STRING + ASSERT_EQ(Json::nullValue, v["7053,1000"].type()); // TODO SHOULD BE STRING } }