comparison OrthancServer/OrthancRestApi/OrthancRestAnonymizeModify.cpp @ 796:e7b1ca0f1e04

creation of dicom files
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 06 May 2014 12:09:11 +0200
parents d466b3606aca
children ecedd89055db
comparison
equal deleted inserted replaced
795:d466b3606aca 796:e7b1ca0f1e04
93 for (size_t i = 0; i < members.size(); i++) 93 for (size_t i = 0; i < members.size(); i++)
94 { 94 {
95 const std::string& name = members[i]; 95 const std::string& name = members[i];
96 std::string value = replacements[name].asString(); 96 std::string value = replacements[name].asString();
97 97
98 DicomTag tag = FromDcmtkBridge::ParseTag(name); 98 DicomTag tag = FromDcmtkBridge::ParseTag(name);
99 target.Replace(tag, value); 99 if (tag != DICOM_TAG_PIXEL_DATA)
100 {
101 target.Replace(tag, value);
102 }
100 103
101 VLOG(1) << "Replace: " << name << " " << tag << " == " << value << std::endl; 104 VLOG(1) << "Replace: " << name << " " << tag << " == " << value << std::endl;
102 } 105 }
103 } 106 }
104 107
334 337
335 static void ModifyInstance(RestApi::PostCall& call) 338 static void ModifyInstance(RestApi::PostCall& call)
336 { 339 {
337 DicomModification modification; 340 DicomModification modification;
338 341
339 // TODO : modification.SetLevel(ResourceType_Series); ?????
340
341 if (ParseModifyRequest(modification, call)) 342 if (ParseModifyRequest(modification, call))
342 { 343 {
344 if (modification.IsReplaced(DICOM_TAG_PATIENT_ID))
345 {
346 modification.SetLevel(ResourceType_Patient);
347 }
348 else if (modification.IsReplaced(DICOM_TAG_STUDY_INSTANCE_UID))
349 {
350 modification.SetLevel(ResourceType_Study);
351 }
352 else if (modification.IsReplaced(DICOM_TAG_SERIES_INSTANCE_UID))
353 {
354 modification.SetLevel(ResourceType_Series);
355 }
356 else
357 {
358 modification.SetLevel(ResourceType_Instance);
359 }
360
343 AnonymizeOrModifyInstance(modification, call); 361 AnonymizeOrModifyInstance(modification, call);
344 } 362 }
345 } 363 }
346 364
347 365
360 enum ResourceType resourceType> 378 enum ResourceType resourceType>
361 static void ModifyResource(RestApi::PostCall& call) 379 static void ModifyResource(RestApi::PostCall& call)
362 { 380 {
363 DicomModification modification; 381 DicomModification modification;
364 382
365 switch (resourceType)
366 {
367 case ResourceType_Series:
368 modification.SetLevel(ResourceType_Series);
369 break;
370
371 case ResourceType_Study:
372 modification.SetLevel(ResourceType_Study);
373 break;
374
375 case ResourceType_Patient:
376 modification.SetLevel(ResourceType_Patient);
377 break;
378
379 default:
380 throw OrthancException(ErrorCode_InternalError);
381 }
382
383 if (ParseModifyRequest(modification, call)) 383 if (ParseModifyRequest(modification, call))
384 { 384 {
385 modification.SetLevel(resourceType);
385 AnonymizeOrModifyResource(modification, MetadataType_ModifiedFrom, 386 AnonymizeOrModifyResource(modification, MetadataType_ModifiedFrom,
386 changeType, resourceType, call); 387 changeType, resourceType, call);
387 } 388 }
388 } 389 }
389 390
400 changeType, resourceType, call); 401 changeType, resourceType, call);
401 } 402 }
402 } 403 }
403 404
404 405
406 static void Create(RestApi::PostCall& call)
407 {
408 // curl http://localhost:8042/tools/create-dicom -X POST -d '{"PatientName":"Hello^World"}'
409
410 Json::Value request;
411 if (call.ParseJsonRequest(request) && request.isObject())
412 {
413 DicomModification modification;
414 ParseReplacements(modification, request);
415
416 ParsedDicomFile dicom;
417 modification.Apply(dicom);
418
419 std::string id;
420 StoreStatus status = OrthancRestApi::GetContext(call).Store(id, dicom);
421
422 if (status == StoreStatus_Failure)
423 {
424 LOG(ERROR) << "Error while storing a manually-created instance";
425 return;
426 }
427
428 OrthancRestApi::GetApi(call).AnswerStoredInstance(call, id, status);
429 }
430 }
431
432
405 void OrthancRestApi::RegisterAnonymizeModify() 433 void OrthancRestApi::RegisterAnonymizeModify()
406 { 434 {
407 Register("/instances/{id}/modify", ModifyInstance); 435 Register("/instances/{id}/modify", ModifyInstance);
408 Register("/series/{id}/modify", ModifyResource<ChangeType_ModifiedSeries, ResourceType_Series>); 436 Register("/series/{id}/modify", ModifyResource<ChangeType_ModifiedSeries, ResourceType_Series>);
409 Register("/studies/{id}/modify", ModifyResource<ChangeType_ModifiedStudy, ResourceType_Study>); 437 Register("/studies/{id}/modify", ModifyResource<ChangeType_ModifiedStudy, ResourceType_Study>);
410 //Register("/patients/{id}/modify", ModifyResource<ChangeType_ModifiedPatient, ResourceType_Patient>); 438 Register("/patients/{id}/modify", ModifyResource<ChangeType_ModifiedPatient, ResourceType_Patient>);
411 439
412 Register("/instances/{id}/anonymize", AnonymizeInstance); 440 Register("/instances/{id}/anonymize", AnonymizeInstance);
413 Register("/series/{id}/anonymize", AnonymizeResource<ChangeType_ModifiedSeries, ResourceType_Series>); 441 Register("/series/{id}/anonymize", AnonymizeResource<ChangeType_ModifiedSeries, ResourceType_Series>);
414 Register("/studies/{id}/anonymize", AnonymizeResource<ChangeType_ModifiedStudy, ResourceType_Study>); 442 Register("/studies/{id}/anonymize", AnonymizeResource<ChangeType_ModifiedStudy, ResourceType_Study>);
415 Register("/patients/{id}/anonymize", AnonymizeResource<ChangeType_ModifiedPatient, ResourceType_Patient>); 443 Register("/patients/{id}/anonymize", AnonymizeResource<ChangeType_ModifiedPatient, ResourceType_Patient>);
444
445 Register("/tools/create-dicom", Create);
416 } 446 }
417 } 447 }