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;