comparison OrthancServer/OrthancRestApi/OrthancRestAnonymizeModify.cpp @ 1160:80671157d051

generalization of create-dicom
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 17 Sep 2014 11:57:28 +0200
parents 8dabdc0d3007
children 7f3a65e84d4b
comparison
equal deleted inserted replaced
1156:8c9574576f42 1160:80671157d051
429 static void CreateDicom(RestApiPostCall& call) 429 static void CreateDicom(RestApiPostCall& call)
430 { 430 {
431 // curl http://localhost:8042/tools/create-dicom -X POST -d '{"PatientName":"Hello^World"}' 431 // curl http://localhost:8042/tools/create-dicom -X POST -d '{"PatientName":"Hello^World"}'
432 // curl http://localhost:8042/tools/create-dicom -X POST -d '{"PatientName":"Hello^World","PixelData":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gUGDDcB53FulQAAAElJREFUGNNtj0sSAEEEQ1+U+185s1CtmRkblQ9CZldsKHJDk6DLGLJa6chjh0ooQmpjXMM86zPwydGEj6Ed/UGykkEM8X+p3u8/8LcOJIWLGeMAAAAASUVORK5CYII="}' 432 // curl http://localhost:8042/tools/create-dicom -X POST -d '{"PatientName":"Hello^World","PixelData":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gUGDDcB53FulQAAAElJREFUGNNtj0sSAEEEQ1+U+185s1CtmRkblQ9CZldsKHJDk6DLGLJa6chjh0ooQmpjXMM86zPwydGEj6Ed/UGykkEM8X+p3u8/8LcOJIWLGeMAAAAASUVORK5CYII="}'
433 433
434 Json::Value request; 434 Json::Value replacements;
435 if (call.ParseJsonRequest(request) && request.isObject()) 435 if (call.ParseJsonRequest(replacements) && replacements.isObject())
436 { 436 {
437 DicomModification modification;
438 modification.SetLevel(ResourceType_Patient);
439 ParseReplacements(modification, request);
440
441 // If no PatientID is specified, create a random one
442 if (!modification.IsReplaced(DICOM_TAG_PATIENT_ID))
443 {
444 modification.Replace(DICOM_TAG_PATIENT_ID, Toolbox::GenerateUuid());
445 }
446
447 ParsedDicomFile dicom; 437 ParsedDicomFile dicom;
448 438
449 if (modification.IsReplaced(DICOM_TAG_PIXEL_DATA)) 439 Json::Value::Members members = replacements.getMemberNames();
450 { 440 for (size_t i = 0; i < members.size(); i++)
451 dicom.EmbedImage(modification.GetReplacement(DICOM_TAG_PIXEL_DATA)); 441 {
452 modification.Keep(DICOM_TAG_PIXEL_DATA); 442 const std::string& name = members[i];
453 } 443 std::string value = replacements[name].asString();
454 444
455 modification.Apply(dicom); 445 DicomTag tag = FromDcmtkBridge::ParseTag(name);
446 if (tag == DICOM_TAG_PIXEL_DATA)
447 {
448 dicom.EmbedImage(value);
449 }
450 else
451 {
452 dicom.Replace(tag, value);
453 }
454 }
456 455
457 DicomInstanceToStore toStore; 456 DicomInstanceToStore toStore;
458 toStore.SetParsedDicomFile(dicom); 457 toStore.SetParsedDicomFile(dicom);
459 458
460 std::string id; 459 std::string id;