Mercurial > hg > orthanc
comparison OrthancServer/OrthancRestApi/OrthancRestModalities.cpp @ 3734:4fc24b69446a storage-commitment
triggering storage commitment scu from REST API
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 10 Mar 2020 13:22:02 +0100 |
parents | 56f2397f027a |
children | f29843323daf |
comparison
equal
deleted
inserted
replaced
3731:e7ff4f9b34bd | 3734:4fc24b69446a |
---|---|
961 if (moveOriginatorID != 0) | 961 if (moveOriginatorID != 0) |
962 { | 962 { |
963 job->SetMoveOriginator(moveOriginatorAET, moveOriginatorID); | 963 job->SetMoveOriginator(moveOriginatorAET, moveOriginatorID); |
964 } | 964 } |
965 | 965 |
966 // New in Orthanc 1.6.0 | |
967 if (Toolbox::GetJsonBooleanField(request, "StorageCommitment", false)) | |
968 { | |
969 job->EnableStorageCommitment(true); | |
970 } | |
971 | |
966 OrthancRestApi::GetApi(call).SubmitCommandsJob | 972 OrthancRestApi::GetApi(call).SubmitCommandsJob |
967 (call, job.release(), true /* synchronous by default */, request); | 973 (call, job.release(), true /* synchronous by default */, request); |
968 } | 974 } |
969 | 975 |
970 | 976 |
1297 throw OrthancException(ErrorCode_BadFileFormat, "Must provide a JSON object"); | 1303 throw OrthancException(ErrorCode_BadFileFormat, "Must provide a JSON object"); |
1298 } | 1304 } |
1299 } | 1305 } |
1300 | 1306 |
1301 | 1307 |
1302 static void TestStorageCommitment(RestApiPostCall& call) | 1308 static void StorageCommitment(RestApiPostCall& call) |
1303 { | 1309 { |
1304 ServerContext& context = OrthancRestApi::GetContext(call); | 1310 ServerContext& context = OrthancRestApi::GetContext(call); |
1305 | 1311 |
1306 Json::Value json; | 1312 Json::Value json; |
1307 if (call.ParseJsonRequest(json)) | 1313 if (call.ParseJsonRequest(json) || |
1308 { | 1314 json.type() != Json::arrayValue) |
1309 const std::string& localAet = context.GetDefaultLocalApplicationEntityTitle(); | 1315 { |
1310 const RemoteModalityParameters remote = | 1316 std::vector<std::string> sopClassUids, sopInstanceUids; |
1311 MyGetModalityUsingSymbolicName(call.GetUriComponent("id", "")); | 1317 sopClassUids.resize(json.size()); |
1312 | 1318 sopInstanceUids.resize(json.size()); |
1313 { | 1319 |
1320 for (Json::Value::ArrayIndex i = 0; i < json.size(); i++) | |
1321 { | |
1322 if (json[i].type() == Json::arrayValue) | |
1323 { | |
1324 if (json[i].size() != 2 || | |
1325 json[i][0].type() != Json::stringValue || | |
1326 json[i][1].type() != Json::stringValue) | |
1327 { | |
1328 throw OrthancException(ErrorCode_BadFileFormat, | |
1329 "An instance entry must provide an array with 2 strings: " | |
1330 "SOP Class UID and SOP Instance UID"); | |
1331 } | |
1332 else | |
1333 { | |
1334 sopClassUids[i] = json[i][0].asString(); | |
1335 sopInstanceUids[i] = json[i][1].asString(); | |
1336 } | |
1337 } | |
1338 else if (json[i].type() == Json::objectValue) | |
1339 { | |
1340 static const char* const SOP_CLASS_UID = "SOPClassUID"; | |
1341 static const char* const SOP_INSTANCE_UID = "SOPInstanceUID"; | |
1342 | |
1343 if (!json[i].isMember(SOP_CLASS_UID) || | |
1344 !json[i].isMember(SOP_INSTANCE_UID) || | |
1345 json[i][SOP_CLASS_UID].type() != Json::stringValue || | |
1346 json[i][SOP_INSTANCE_UID].type() != Json::stringValue) | |
1347 { | |
1348 throw OrthancException(ErrorCode_BadFileFormat, | |
1349 "An instance entry must provide an object with 2 string fiels: " | |
1350 "\"" + std::string(SOP_CLASS_UID) + "\" and \"" + | |
1351 std::string(SOP_INSTANCE_UID)); | |
1352 } | |
1353 else | |
1354 { | |
1355 sopClassUids[i] = json[i][SOP_CLASS_UID].asString(); | |
1356 sopInstanceUids[i] = json[i][SOP_INSTANCE_UID].asString(); | |
1357 } | |
1358 } | |
1359 else | |
1360 { | |
1361 throw OrthancException(ErrorCode_BadFileFormat, | |
1362 "JSON array or object is expected to specify one " | |
1363 "instance to be queried, found: " + json[i].toStyledString()); | |
1364 } | |
1365 } | |
1366 | |
1367 const std::string transaction = Toolbox::GenerateDicomPrivateUniqueIdentifier(); | |
1368 | |
1369 { | |
1370 const std::string& localAet = context.GetDefaultLocalApplicationEntityTitle(); | |
1371 const RemoteModalityParameters remote = | |
1372 MyGetModalityUsingSymbolicName(call.GetUriComponent("id", "")); | |
1373 | |
1314 DicomUserConnection scu(localAet, remote); | 1374 DicomUserConnection scu(localAet, remote); |
1315 | 1375 scu.RequestStorageCommitment(transaction, sopClassUids, sopInstanceUids); |
1316 std::vector<std::string> sopClassUids, sopInstanceUids; | 1376 } |
1317 sopClassUids.push_back("a"); | 1377 |
1318 sopInstanceUids.push_back("b"); | 1378 Json::Value result = Json::objectValue; |
1319 sopClassUids.push_back("1.2.840.10008.5.1.4.1.1.6.1"); | 1379 result["ID"] = transaction; |
1320 sopInstanceUids.push_back("1.2.840.113543.6.6.4.7.64234348190163144631511103849051737563212"); | 1380 result["Path"] = "/storage-commitment/" + transaction; |
1321 | |
1322 std::string t = Toolbox::GenerateDicomPrivateUniqueIdentifier(); | |
1323 scu.RequestStorageCommitment(t, sopClassUids, sopInstanceUids); | |
1324 } | |
1325 | |
1326 Json::Value result; | |
1327 call.GetOutput().AnswerJson(result); | 1381 call.GetOutput().AnswerJson(result); |
1328 } | 1382 } |
1329 else | 1383 else |
1330 { | 1384 { |
1331 throw OrthancException(ErrorCode_BadFileFormat, "Must provide a JSON object"); | 1385 throw OrthancException(ErrorCode_BadFileFormat, |
1386 "Must provide a JSON array with a list of instances"); | |
1332 } | 1387 } |
1333 } | 1388 } |
1334 | 1389 |
1335 | 1390 |
1336 void OrthancRestApi::RegisterModalities() | 1391 void OrthancRestApi::RegisterModalities() |
1375 Register("/peers/{id}/store", PeerStore); | 1430 Register("/peers/{id}/store", PeerStore); |
1376 Register("/peers/{id}/system", PeerSystem); | 1431 Register("/peers/{id}/system", PeerSystem); |
1377 | 1432 |
1378 Register("/modalities/{id}/find-worklist", DicomFindWorklist); | 1433 Register("/modalities/{id}/find-worklist", DicomFindWorklist); |
1379 | 1434 |
1380 Register("/modalities/{id}/storage-commitment", TestStorageCommitment); | 1435 Register("/modalities/{id}/storage-commitment", StorageCommitment); |
1381 } | 1436 } |
1382 } | 1437 } |