Mercurial > hg > orthanc
comparison OrthancServer/OrthancRestApi/OrthancRestModalities.cpp @ 3830:447880856ce8
removing deprecated DicomUserControl from OrthancRestModalities.cpp
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 10 Apr 2020 17:29:11 +0200 |
parents | 7f083dfae62b |
children | 9973d10bc5c4 |
comparison
equal
deleted
inserted
replaced
3828:3d1bb2193832 | 3830:447880856ce8 |
---|---|
33 | 33 |
34 #include "../PrecompiledHeadersServer.h" | 34 #include "../PrecompiledHeadersServer.h" |
35 #include "OrthancRestApi.h" | 35 #include "OrthancRestApi.h" |
36 | 36 |
37 #include "../../Core/Cache/SharedArchive.h" | 37 #include "../../Core/Cache/SharedArchive.h" |
38 #include "../../Core/DicomNetworking/DicomAssociation.h" | |
39 #include "../../Core/DicomNetworking/DicomControlUserConnection.h" | |
38 #include "../../Core/DicomParsing/FromDcmtkBridge.h" | 40 #include "../../Core/DicomParsing/FromDcmtkBridge.h" |
39 #include "../../Core/Logging.h" | 41 #include "../../Core/Logging.h" |
40 #include "../../Core/SerializationToolbox.h" | 42 #include "../../Core/SerializationToolbox.h" |
41 | 43 |
42 #include "../OrthancConfiguration.h" | 44 #include "../OrthancConfiguration.h" |
78 RemoteModalityParameters remote = | 80 RemoteModalityParameters remote = |
79 MyGetModalityUsingSymbolicName(call.GetUriComponent("id", "")); | 81 MyGetModalityUsingSymbolicName(call.GetUriComponent("id", "")); |
80 | 82 |
81 try | 83 try |
82 { | 84 { |
83 DicomUserConnection connection(localAet, remote); | 85 DicomControlUserConnection connection(localAet, remote); |
84 connection.Open(); | |
85 | 86 |
86 if (connection.Echo()) | 87 if (connection.Echo()) |
87 { | 88 { |
88 // Echo has succeeded | 89 // Echo has succeeded |
89 call.GetOutput().AnswerBuffer("{}", MimeType_Json); | 90 call.GetOutput().AnswerBuffer("{}", MimeType_Json); |
125 return true; | 126 return true; |
126 } | 127 } |
127 | 128 |
128 | 129 |
129 static void FindPatient(DicomFindAnswers& result, | 130 static void FindPatient(DicomFindAnswers& result, |
130 DicomUserConnection& connection, | 131 DicomControlUserConnection& connection, |
131 const DicomMap& fields) | 132 const DicomMap& fields) |
132 { | 133 { |
133 // Only keep the filters from "fields" that are related to the patient | 134 // Only keep the filters from "fields" that are related to the patient |
134 DicomMap s; | 135 DicomMap s; |
135 fields.ExtractPatientInformation(s); | 136 fields.ExtractPatientInformation(s); |
136 connection.Find(result, ResourceType_Patient, s, true /* normalize */); | 137 connection.Find(result, ResourceType_Patient, s, true /* normalize */); |
137 } | 138 } |
138 | 139 |
139 | 140 |
140 static void FindStudy(DicomFindAnswers& result, | 141 static void FindStudy(DicomFindAnswers& result, |
141 DicomUserConnection& connection, | 142 DicomControlUserConnection& connection, |
142 const DicomMap& fields) | 143 const DicomMap& fields) |
143 { | 144 { |
144 // Only keep the filters from "fields" that are related to the study | 145 // Only keep the filters from "fields" that are related to the study |
145 DicomMap s; | 146 DicomMap s; |
146 fields.ExtractStudyInformation(s); | 147 fields.ExtractStudyInformation(s); |
151 | 152 |
152 connection.Find(result, ResourceType_Study, s, true /* normalize */); | 153 connection.Find(result, ResourceType_Study, s, true /* normalize */); |
153 } | 154 } |
154 | 155 |
155 static void FindSeries(DicomFindAnswers& result, | 156 static void FindSeries(DicomFindAnswers& result, |
156 DicomUserConnection& connection, | 157 DicomControlUserConnection& connection, |
157 const DicomMap& fields) | 158 const DicomMap& fields) |
158 { | 159 { |
159 // Only keep the filters from "fields" that are related to the series | 160 // Only keep the filters from "fields" that are related to the series |
160 DicomMap s; | 161 DicomMap s; |
161 fields.ExtractSeriesInformation(s); | 162 fields.ExtractSeriesInformation(s); |
166 | 167 |
167 connection.Find(result, ResourceType_Series, s, true /* normalize */); | 168 connection.Find(result, ResourceType_Series, s, true /* normalize */); |
168 } | 169 } |
169 | 170 |
170 static void FindInstance(DicomFindAnswers& result, | 171 static void FindInstance(DicomFindAnswers& result, |
171 DicomUserConnection& connection, | 172 DicomControlUserConnection& connection, |
172 const DicomMap& fields) | 173 const DicomMap& fields) |
173 { | 174 { |
174 // Only keep the filters from "fields" that are related to the instance | 175 // Only keep the filters from "fields" that are related to the instance |
175 DicomMap s; | 176 DicomMap s; |
176 fields.ExtractInstanceInformation(s); | 177 fields.ExtractInstanceInformation(s); |
201 MyGetModalityUsingSymbolicName(call.GetUriComponent("id", "")); | 202 MyGetModalityUsingSymbolicName(call.GetUriComponent("id", "")); |
202 | 203 |
203 DicomFindAnswers answers(false); | 204 DicomFindAnswers answers(false); |
204 | 205 |
205 { | 206 { |
206 DicomUserConnection connection(localAet, remote); | 207 DicomControlUserConnection connection(localAet, remote); |
207 connection.Open(); | |
208 FindPatient(answers, connection, fields); | 208 FindPatient(answers, connection, fields); |
209 } | 209 } |
210 | 210 |
211 Json::Value result; | 211 Json::Value result; |
212 answers.ToJson(result, true); | 212 answers.ToJson(result, true); |
236 MyGetModalityUsingSymbolicName(call.GetUriComponent("id", "")); | 236 MyGetModalityUsingSymbolicName(call.GetUriComponent("id", "")); |
237 | 237 |
238 DicomFindAnswers answers(false); | 238 DicomFindAnswers answers(false); |
239 | 239 |
240 { | 240 { |
241 DicomUserConnection connection(localAet, remote); | 241 DicomControlUserConnection connection(localAet, remote); |
242 connection.Open(); | |
243 FindStudy(answers, connection, fields); | 242 FindStudy(answers, connection, fields); |
244 } | 243 } |
245 | 244 |
246 Json::Value result; | 245 Json::Value result; |
247 answers.ToJson(result, true); | 246 answers.ToJson(result, true); |
272 MyGetModalityUsingSymbolicName(call.GetUriComponent("id", "")); | 271 MyGetModalityUsingSymbolicName(call.GetUriComponent("id", "")); |
273 | 272 |
274 DicomFindAnswers answers(false); | 273 DicomFindAnswers answers(false); |
275 | 274 |
276 { | 275 { |
277 DicomUserConnection connection(localAet, remote); | 276 DicomControlUserConnection connection(localAet, remote); |
278 connection.Open(); | |
279 FindSeries(answers, connection, fields); | 277 FindSeries(answers, connection, fields); |
280 } | 278 } |
281 | 279 |
282 Json::Value result; | 280 Json::Value result; |
283 answers.ToJson(result, true); | 281 answers.ToJson(result, true); |
309 MyGetModalityUsingSymbolicName(call.GetUriComponent("id", "")); | 307 MyGetModalityUsingSymbolicName(call.GetUriComponent("id", "")); |
310 | 308 |
311 DicomFindAnswers answers(false); | 309 DicomFindAnswers answers(false); |
312 | 310 |
313 { | 311 { |
314 DicomUserConnection connection(localAet, remote); | 312 DicomControlUserConnection connection(localAet, remote); |
315 connection.Open(); | |
316 FindInstance(answers, connection, fields); | 313 FindInstance(answers, connection, fields); |
317 } | 314 } |
318 | 315 |
319 Json::Value result; | 316 Json::Value result; |
320 answers.ToJson(result, true); | 317 answers.ToJson(result, true); |
348 | 345 |
349 const std::string& localAet = context.GetDefaultLocalApplicationEntityTitle(); | 346 const std::string& localAet = context.GetDefaultLocalApplicationEntityTitle(); |
350 RemoteModalityParameters remote = | 347 RemoteModalityParameters remote = |
351 MyGetModalityUsingSymbolicName(call.GetUriComponent("id", "")); | 348 MyGetModalityUsingSymbolicName(call.GetUriComponent("id", "")); |
352 | 349 |
353 DicomUserConnection connection(localAet, remote); | 350 DicomControlUserConnection connection(localAet, remote); |
354 connection.Open(); | |
355 | 351 |
356 DicomFindAnswers patients(false); | 352 DicomFindAnswers patients(false); |
357 FindPatient(patients, connection, m); | 353 FindPatient(patients, connection, m); |
358 | 354 |
359 // Loop over the found patients | 355 // Loop over the found patients |
802 } | 798 } |
803 | 799 |
804 DicomMap answer; | 800 DicomMap answer; |
805 parent.GetHandler().GetAnswer(answer, index); | 801 parent.GetHandler().GetAnswer(answer, index); |
806 | 802 |
807 // This switch-case mimics "DicomUserConnection::Move()" | 803 // This switch-case mimics "DicomControlUserConnection::Move()" |
808 switch (parent.GetHandler().GetLevel()) | 804 switch (parent.GetHandler().GetLevel()) |
809 { | 805 { |
810 case ResourceType_Patient: | 806 case ResourceType_Patient: |
811 handler->CopyStringTag(answer, DICOM_TAG_PATIENT_ID); | 807 handler->CopyStringTag(answer, DICOM_TAG_PATIENT_ID); |
812 break; | 808 break; |
1029 (request, "TargetAet", context.GetDefaultLocalApplicationEntityTitle()); | 1025 (request, "TargetAet", context.GetDefaultLocalApplicationEntityTitle()); |
1030 | 1026 |
1031 const RemoteModalityParameters source = | 1027 const RemoteModalityParameters source = |
1032 MyGetModalityUsingSymbolicName(call.GetUriComponent("id", "")); | 1028 MyGetModalityUsingSymbolicName(call.GetUriComponent("id", "")); |
1033 | 1029 |
1034 DicomUserConnection connection(localAet, source); | 1030 DicomControlUserConnection connection(localAet, source); |
1035 connection.Open(); | |
1036 | 1031 |
1037 for (Json::Value::ArrayIndex i = 0; i < request[KEY_RESOURCES].size(); i++) | 1032 for (Json::Value::ArrayIndex i = 0; i < request[KEY_RESOURCES].size(); i++) |
1038 { | 1033 { |
1039 DicomMap resource; | 1034 DicomMap resource; |
1040 FromDcmtkBridge::FromJson(resource, request[KEY_RESOURCES][i]); | 1035 FromDcmtkBridge::FromJson(resource, request[KEY_RESOURCES][i]); |
1313 "" /* no private creator */)); | 1308 "" /* no private creator */)); |
1314 | 1309 |
1315 DicomFindAnswers answers(true); | 1310 DicomFindAnswers answers(true); |
1316 | 1311 |
1317 { | 1312 { |
1318 DicomUserConnection connection(localAet, remote); | 1313 DicomControlUserConnection connection(localAet, remote); |
1319 connection.Open(); | |
1320 connection.FindWorklist(answers, *query); | 1314 connection.FindWorklist(answers, *query); |
1321 } | 1315 } |
1322 | 1316 |
1323 Json::Value result; | 1317 Json::Value result; |
1324 answers.ToJson(result, true); | 1318 answers.ToJson(result, true); |
1484 // Create a "pending" storage commitment report BEFORE the | 1478 // Create a "pending" storage commitment report BEFORE the |
1485 // actual SCU call in order to avoid race conditions | 1479 // actual SCU call in order to avoid race conditions |
1486 context.GetStorageCommitmentReports().Store( | 1480 context.GetStorageCommitmentReports().Store( |
1487 transactionUid, new StorageCommitmentReports::Report(remoteAet)); | 1481 transactionUid, new StorageCommitmentReports::Report(remoteAet)); |
1488 | 1482 |
1489 DicomUserConnection scu(localAet, remote); | 1483 DicomAssociationParameters parameters(localAet, remote); |
1490 | 1484 |
1491 std::vector<std::string> a(sopClassUids.begin(), sopClassUids.end()); | 1485 std::vector<std::string> a(sopClassUids.begin(), sopClassUids.end()); |
1492 std::vector<std::string> b(sopInstanceUids.begin(), sopInstanceUids.end()); | 1486 std::vector<std::string> b(sopInstanceUids.begin(), sopInstanceUids.end()); |
1493 scu.RequestStorageCommitment(transactionUid, a, b); | 1487 DicomAssociation::RequestStorageCommitment(parameters, transactionUid, a, b); |
1494 } | 1488 } |
1495 | 1489 |
1496 Json::Value result = Json::objectValue; | 1490 Json::Value result = Json::objectValue; |
1497 result["ID"] = transactionUid; | 1491 result["ID"] = transactionUid; |
1498 result["Path"] = "/storage-commitment/" + transactionUid; | 1492 result["Path"] = "/storage-commitment/" + transactionUid; |