Mercurial > hg > orthanc
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) || |