comparison OrthancServer/OrthancRestApi/OrthancRestModalities.cpp @ 3738:bff4da769f6f storage-commitment

new route: "/storage-commitment/{...}/remove"
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 10 Mar 2020 20:53:40 +0100
parents f29843323daf
children e69c556f1913
comparison
equal deleted inserted replaced
3737:f29843323daf 3738:bff4da769f6f
1421 } 1421 }
1422 } 1422 }
1423 } 1423 }
1424 1424
1425 1425
1426 static void RemoveAfterStorageCommitment(RestApiPostCall& call)
1427 {
1428 ServerContext& context = OrthancRestApi::GetContext(call);
1429
1430 const std::string& transactionUid = call.GetUriComponent("id", "");
1431
1432 {
1433 StorageCommitmentReports::Accessor accessor(
1434 context.GetStorageCommitmentReports(), transactionUid);
1435
1436 if (!accessor.IsValid())
1437 {
1438 throw OrthancException(ErrorCode_InexistentItem,
1439 "No storage commitment transaction with UID: " + transactionUid);
1440 }
1441 else if (accessor.GetReport().GetStatus() != StorageCommitmentReports::Report::Status_Success)
1442 {
1443 throw OrthancException(ErrorCode_BadSequenceOfCalls,
1444 "Cannot remove DICOM instances after failure "
1445 "in storage commitment transaction: " + transactionUid);
1446 }
1447 else
1448 {
1449 std::vector<std::string> sopInstanceUids;
1450 accessor.GetReport().GetSuccessSopInstanceUids(sopInstanceUids);
1451
1452 for (size_t i = 0; i < sopInstanceUids.size(); i++)
1453 {
1454 std::vector<std::string> orthancId;
1455 context.GetIndex().LookupIdentifierExact(
1456 orthancId, ResourceType_Instance, DICOM_TAG_SOP_INSTANCE_UID, sopInstanceUids[i]);
1457
1458 for (size_t j = 0; j < orthancId.size(); j++)
1459 {
1460 LOG(INFO) << "Storage commitment - Removing SOP instance UID / Orthanc ID: "
1461 << sopInstanceUids[i] << " / " << orthancId[j];
1462
1463 Json::Value tmp;
1464 context.GetIndex().DeleteResource(tmp, orthancId[j], ResourceType_Instance);
1465 }
1466 }
1467
1468 call.GetOutput().AnswerBuffer("{}", MimeType_Json);
1469 }
1470 }
1471 }
1472
1473
1426 void OrthancRestApi::RegisterModalities() 1474 void OrthancRestApi::RegisterModalities()
1427 { 1475 {
1428 Register("/modalities", ListModalities); 1476 Register("/modalities", ListModalities);
1429 Register("/modalities/{id}", ListModalityOperations); 1477 Register("/modalities/{id}", ListModalityOperations);
1430 Register("/modalities/{id}", UpdateModality); 1478 Register("/modalities/{id}", UpdateModality);
1465 Register("/peers/{id}/store", PeerStore); 1513 Register("/peers/{id}/store", PeerStore);
1466 Register("/peers/{id}/system", PeerSystem); 1514 Register("/peers/{id}/system", PeerSystem);
1467 1515
1468 Register("/modalities/{id}/find-worklist", DicomFindWorklist); 1516 Register("/modalities/{id}/find-worklist", DicomFindWorklist);
1469 1517
1518 // Storage commitment
1470 Register("/modalities/{id}/storage-commitment", StorageCommitmentScu); 1519 Register("/modalities/{id}/storage-commitment", StorageCommitmentScu);
1471 Register("/storage-commitment/{id}", GetStorageCommitmentReport); 1520 Register("/storage-commitment/{id}", GetStorageCommitmentReport);
1521 Register("/storage-commitment/{id}/remove", RemoveAfterStorageCommitment);
1472 } 1522 }
1473 } 1523 }