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