comparison Core/DicomParsing/DicomModification.cpp @ 3691:4922bdd046dd

Fix issue #140 (Modifying private tags with REST API changes VR from LO to UN) - DANGEROUS COMMIT
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 25 Feb 2020 21:44:09 +0100
parents 94f4a18a79cc
children 1f4910999fe7
comparison
equal deleted inserted replaced
3690:a9ce35d67c3c 3691:4922bdd046dd
345 345
346 std::string mapped = MapDicomIdentifier(Toolbox::StripSpaces(original), level); 346 std::string mapped = MapDicomIdentifier(Toolbox::StripSpaces(original), level);
347 347
348 dicom.Replace(*tag, mapped, 348 dicom.Replace(*tag, mapped,
349 false /* don't try and decode data URI scheme for UIDs */, 349 false /* don't try and decode data URI scheme for UIDs */,
350 DicomReplaceMode_InsertIfAbsent); 350 DicomReplaceMode_InsertIfAbsent, privateCreator_);
351 } 351 }
352 352
353 353
354 DicomModification::DicomModification() : 354 DicomModification::DicomModification() :
355 removePrivateTags_(false), 355 removePrivateTags_(false),
357 allowManualIdentifiers_(true), 357 allowManualIdentifiers_(true),
358 keepStudyInstanceUid_(false), 358 keepStudyInstanceUid_(false),
359 keepSeriesInstanceUid_(false), 359 keepSeriesInstanceUid_(false),
360 updateReferencedRelationships_(true), 360 updateReferencedRelationships_(true),
361 isAnonymization_(false), 361 isAnonymization_(false),
362 //privateCreator_("PrivateCreator"),
362 identifierGenerator_(NULL) 363 identifierGenerator_(NULL)
363 { 364 {
364 } 365 }
365 366
366 DicomModification::~DicomModification() 367 DicomModification::~DicomModification()
1065 1066
1066 // (5) Replace the tags 1067 // (5) Replace the tags
1067 for (Replacements::const_iterator it = replacements_.begin(); 1068 for (Replacements::const_iterator it = replacements_.begin();
1068 it != replacements_.end(); ++it) 1069 it != replacements_.end(); ++it)
1069 { 1070 {
1070 toModify.Replace(it->first, *it->second, true /* decode data URI scheme */, DicomReplaceMode_InsertIfAbsent); 1071 toModify.Replace(it->first, *it->second, true /* decode data URI scheme */,
1072 DicomReplaceMode_InsertIfAbsent, privateCreator_);
1071 } 1073 }
1072 1074
1073 // (6) Update the DICOM identifiers 1075 // (6) Update the DICOM identifiers
1074 if (level_ <= ResourceType_Study && 1076 if (level_ <= ResourceType_Study &&
1075 !IsReplaced(DICOM_TAG_STUDY_INSTANCE_UID)) 1077 !IsReplaced(DICOM_TAG_STUDY_INSTANCE_UID))
1259 // model of the real world, except if you know exactly what 1261 // model of the real world, except if you know exactly what
1260 // you're doing! 1262 // you're doing!
1261 if (request.isMember("Keep")) 1263 if (request.isMember("Keep"))
1262 { 1264 {
1263 ParseListOfTags(*this, request["Keep"], TagOperation_Keep, force); 1265 ParseListOfTags(*this, request["Keep"], TagOperation_Keep, force);
1266 }
1267
1268 // New in Orthanc 1.6.0
1269 if (request.isMember("PrivateCreator"))
1270 {
1271 privateCreator_ = SerializationToolbox::ReadString(request, "PrivateCreator");
1264 } 1272 }
1265 } 1273 }
1266 1274
1267 1275
1268 void DicomModification::ParseAnonymizationRequest(bool& patientNameReplaced, 1276 void DicomModification::ParseAnonymizationRequest(bool& patientNameReplaced,
1334 static const char* REPLACEMENTS = "Replacements"; 1342 static const char* REPLACEMENTS = "Replacements";
1335 static const char* MAP_PATIENTS = "MapPatients"; 1343 static const char* MAP_PATIENTS = "MapPatients";
1336 static const char* MAP_STUDIES = "MapStudies"; 1344 static const char* MAP_STUDIES = "MapStudies";
1337 static const char* MAP_SERIES = "MapSeries"; 1345 static const char* MAP_SERIES = "MapSeries";
1338 static const char* MAP_INSTANCES = "MapInstances"; 1346 static const char* MAP_INSTANCES = "MapInstances";
1347 static const char* PRIVATE_CREATOR = "PrivateCreator"; // New in Orthanc 1.6.0
1339 1348
1340 void DicomModification::Serialize(Json::Value& value) const 1349 void DicomModification::Serialize(Json::Value& value) const
1341 { 1350 {
1342 if (identifierGenerator_ != NULL) 1351 if (identifierGenerator_ != NULL)
1343 { 1352 {
1351 value[ALLOW_MANUAL_IDENTIFIERS] = allowManualIdentifiers_; 1360 value[ALLOW_MANUAL_IDENTIFIERS] = allowManualIdentifiers_;
1352 value[KEEP_STUDY_INSTANCE_UID] = keepStudyInstanceUid_; 1361 value[KEEP_STUDY_INSTANCE_UID] = keepStudyInstanceUid_;
1353 value[KEEP_SERIES_INSTANCE_UID] = keepSeriesInstanceUid_; 1362 value[KEEP_SERIES_INSTANCE_UID] = keepSeriesInstanceUid_;
1354 value[UPDATE_REFERENCED_RELATIONSHIPS] = updateReferencedRelationships_; 1363 value[UPDATE_REFERENCED_RELATIONSHIPS] = updateReferencedRelationships_;
1355 value[IS_ANONYMIZATION] = isAnonymization_; 1364 value[IS_ANONYMIZATION] = isAnonymization_;
1365 value[PRIVATE_CREATOR] = privateCreator_;
1356 1366
1357 SerializationToolbox::WriteSetOfTags(value, removals_, REMOVALS); 1367 SerializationToolbox::WriteSetOfTags(value, removals_, REMOVALS);
1358 SerializationToolbox::WriteSetOfTags(value, clearings_, CLEARINGS); 1368 SerializationToolbox::WriteSetOfTags(value, clearings_, CLEARINGS);
1359 SerializationToolbox::WriteSetOfTags(value, privateTagsToKeep_, PRIVATE_TAGS_TO_KEEP); 1369 SerializationToolbox::WriteSetOfTags(value, privateTagsToKeep_, PRIVATE_TAGS_TO_KEEP);
1360 1370
1449 keepSeriesInstanceUid_ = SerializationToolbox::ReadBoolean(serialized, KEEP_SERIES_INSTANCE_UID); 1459 keepSeriesInstanceUid_ = SerializationToolbox::ReadBoolean(serialized, KEEP_SERIES_INSTANCE_UID);
1450 updateReferencedRelationships_ = SerializationToolbox::ReadBoolean 1460 updateReferencedRelationships_ = SerializationToolbox::ReadBoolean
1451 (serialized, UPDATE_REFERENCED_RELATIONSHIPS); 1461 (serialized, UPDATE_REFERENCED_RELATIONSHIPS);
1452 isAnonymization_ = SerializationToolbox::ReadBoolean(serialized, IS_ANONYMIZATION); 1462 isAnonymization_ = SerializationToolbox::ReadBoolean(serialized, IS_ANONYMIZATION);
1453 1463
1464 if (serialized.isMember(PRIVATE_CREATOR))
1465 {
1466 privateCreator_ = SerializationToolbox::ReadString(serialized, PRIVATE_CREATOR);
1467 }
1468
1454 SerializationToolbox::ReadSetOfTags(removals_, serialized, REMOVALS); 1469 SerializationToolbox::ReadSetOfTags(removals_, serialized, REMOVALS);
1455 SerializationToolbox::ReadSetOfTags(clearings_, serialized, CLEARINGS); 1470 SerializationToolbox::ReadSetOfTags(clearings_, serialized, CLEARINGS);
1456 SerializationToolbox::ReadSetOfTags(privateTagsToKeep_, serialized, PRIVATE_TAGS_TO_KEEP); 1471 SerializationToolbox::ReadSetOfTags(privateTagsToKeep_, serialized, PRIVATE_TAGS_TO_KEEP);
1457 1472
1458 if (!serialized.isMember(REPLACEMENTS) || 1473 if (!serialized.isMember(REPLACEMENTS) ||