comparison OrthancServer/OrthancRestApi/OrthancRestModalities.cpp @ 773:3bd0589af992

refactoring
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 30 Apr 2014 15:08:51 +0200
parents 5197fd35333c
children be87dd517416
comparison
equal deleted inserted replaced
772:31cc399c7762 773:3bd0589af992
30 **/ 30 **/
31 31
32 32
33 #include "OrthancRestApi.h" 33 #include "OrthancRestApi.h"
34 34
35 #include "../DicomProtocol/DicomUserConnection.h"
36 #include "../OrthancInitialization.h" 35 #include "../OrthancInitialization.h"
37 #include "../../Core/HttpClient.h" 36 #include "../../Core/HttpClient.h"
38 37
39 #include <glog/logging.h> 38 #include <glog/logging.h>
40 39
64 return true; 63 return true;
65 } 64 }
66 65
67 static void DicomFindPatient(RestApi::PostCall& call) 66 static void DicomFindPatient(RestApi::PostCall& call)
68 { 67 {
68 ServerContext& context = OrthancRestApi::GetContext(call);
69
69 DicomMap m; 70 DicomMap m;
70 DicomMap::SetupFindPatientTemplate(m); 71 DicomMap::SetupFindPatientTemplate(m);
71 if (!MergeQueryAndTemplate(m, call.GetPostBody())) 72 if (!MergeQueryAndTemplate(m, call.GetPostBody()))
72 { 73 {
73 return; 74 return;
74 } 75 }
75 76
76 DicomUserConnection connection; 77 RemoteModalityParameters remote = GetModalityUsingSymbolicName(call.GetUriComponent("id", ""));
77 ConnectToModalityUsingSymbolicName(connection, call.GetUriComponent("id", "")); 78 ReusableDicomUserConnection::Connection connection(context.GetReusableDicomUserConnection(), remote);
78 79
79 DicomFindAnswers answers; 80 DicomFindAnswers answers;
80 connection.FindPatient(answers, m); 81 connection.GetConnection().FindPatient(answers, m);
81 82
82 Json::Value result; 83 Json::Value result;
83 answers.ToJson(result); 84 answers.ToJson(result);
84 call.GetOutput().AnswerJson(result); 85 call.GetOutput().AnswerJson(result);
85 } 86 }
86 87
87 static void DicomFindStudy(RestApi::PostCall& call) 88 static void DicomFindStudy(RestApi::PostCall& call)
88 { 89 {
90 ServerContext& context = OrthancRestApi::GetContext(call);
91
89 DicomMap m; 92 DicomMap m;
90 DicomMap::SetupFindStudyTemplate(m); 93 DicomMap::SetupFindStudyTemplate(m);
91 if (!MergeQueryAndTemplate(m, call.GetPostBody())) 94 if (!MergeQueryAndTemplate(m, call.GetPostBody()))
92 { 95 {
93 return; 96 return;
97 m.GetValue(DICOM_TAG_PATIENT_ID).AsString().size() <= 2) 100 m.GetValue(DICOM_TAG_PATIENT_ID).AsString().size() <= 2)
98 { 101 {
99 return; 102 return;
100 } 103 }
101 104
102 DicomUserConnection connection; 105 RemoteModalityParameters remote = GetModalityUsingSymbolicName(call.GetUriComponent("id", ""));
103 ConnectToModalityUsingSymbolicName(connection, call.GetUriComponent("id", "")); 106 ReusableDicomUserConnection::Connection connection(context.GetReusableDicomUserConnection(), remote);
104 107
105 DicomFindAnswers answers; 108 DicomFindAnswers answers;
106 connection.FindStudy(answers, m); 109 connection.GetConnection().FindStudy(answers, m);
107 110
108 Json::Value result; 111 Json::Value result;
109 answers.ToJson(result); 112 answers.ToJson(result);
110 call.GetOutput().AnswerJson(result); 113 call.GetOutput().AnswerJson(result);
111 } 114 }
112 115
113 static void DicomFindSeries(RestApi::PostCall& call) 116 static void DicomFindSeries(RestApi::PostCall& call)
114 { 117 {
118 ServerContext& context = OrthancRestApi::GetContext(call);
119
115 DicomMap m; 120 DicomMap m;
116 DicomMap::SetupFindSeriesTemplate(m); 121 DicomMap::SetupFindSeriesTemplate(m);
117 if (!MergeQueryAndTemplate(m, call.GetPostBody())) 122 if (!MergeQueryAndTemplate(m, call.GetPostBody()))
118 { 123 {
119 return; 124 return;
124 m.GetValue(DICOM_TAG_STUDY_INSTANCE_UID).AsString().size() <= 2) 129 m.GetValue(DICOM_TAG_STUDY_INSTANCE_UID).AsString().size() <= 2)
125 { 130 {
126 return; 131 return;
127 } 132 }
128 133
129 DicomUserConnection connection; 134 RemoteModalityParameters remote = GetModalityUsingSymbolicName(call.GetUriComponent("id", ""));
130 ConnectToModalityUsingSymbolicName(connection, call.GetUriComponent("id", "")); 135 ReusableDicomUserConnection::Connection connection(context.GetReusableDicomUserConnection(), remote);
131 136
132 DicomFindAnswers answers; 137 DicomFindAnswers answers;
133 connection.FindSeries(answers, m); 138 connection.GetConnection().FindSeries(answers, m);
134 139
135 Json::Value result; 140 Json::Value result;
136 answers.ToJson(result); 141 answers.ToJson(result);
137 call.GetOutput().AnswerJson(result); 142 call.GetOutput().AnswerJson(result);
138 } 143 }
139 144
140 static void DicomFindInstance(RestApi::PostCall& call) 145 static void DicomFindInstance(RestApi::PostCall& call)
141 { 146 {
147 ServerContext& context = OrthancRestApi::GetContext(call);
148
142 DicomMap m; 149 DicomMap m;
143 DicomMap::SetupFindInstanceTemplate(m); 150 DicomMap::SetupFindInstanceTemplate(m);
144 if (!MergeQueryAndTemplate(m, call.GetPostBody())) 151 if (!MergeQueryAndTemplate(m, call.GetPostBody()))
145 { 152 {
146 return; 153 return;
152 m.GetValue(DICOM_TAG_SERIES_INSTANCE_UID).AsString().size() <= 2) 159 m.GetValue(DICOM_TAG_SERIES_INSTANCE_UID).AsString().size() <= 2)
153 { 160 {
154 return; 161 return;
155 } 162 }
156 163
157 DicomUserConnection connection; 164 RemoteModalityParameters remote = GetModalityUsingSymbolicName(call.GetUriComponent("id", ""));
158 ConnectToModalityUsingSymbolicName(connection, call.GetUriComponent("id", "")); 165 ReusableDicomUserConnection::Connection connection(context.GetReusableDicomUserConnection(), remote);
159 166
160 DicomFindAnswers answers; 167 DicomFindAnswers answers;
161 connection.FindInstance(answers, m); 168 connection.GetConnection().FindInstance(answers, m);
162 169
163 Json::Value result; 170 Json::Value result;
164 answers.ToJson(result); 171 answers.ToJson(result);
165 call.GetOutput().AnswerJson(result); 172 call.GetOutput().AnswerJson(result);
166 } 173 }
167 174
168 static void DicomFind(RestApi::PostCall& call) 175 static void DicomFind(RestApi::PostCall& call)
169 { 176 {
177 ServerContext& context = OrthancRestApi::GetContext(call);
178
170 DicomMap m; 179 DicomMap m;
171 DicomMap::SetupFindPatientTemplate(m); 180 DicomMap::SetupFindPatientTemplate(m);
172 if (!MergeQueryAndTemplate(m, call.GetPostBody())) 181 if (!MergeQueryAndTemplate(m, call.GetPostBody()))
173 { 182 {
174 return; 183 return;
175 } 184 }
176 185
177 DicomUserConnection connection; 186 RemoteModalityParameters remote = GetModalityUsingSymbolicName(call.GetUriComponent("id", ""));
178 ConnectToModalityUsingSymbolicName(connection, call.GetUriComponent("id", "")); 187 ReusableDicomUserConnection::Connection connection(context.GetReusableDicomUserConnection(), remote);
179 188
180 DicomFindAnswers patients; 189 DicomFindAnswers patients;
181 connection.FindPatient(patients, m); 190 connection.GetConnection().FindPatient(patients, m);
182 191
183 // Loop over the found patients 192 // Loop over the found patients
184 Json::Value result = Json::arrayValue; 193 Json::Value result = Json::arrayValue;
185 for (size_t i = 0; i < patients.GetSize(); i++) 194 for (size_t i = 0; i < patients.GetSize(); i++)
186 { 195 {
193 return; 202 return;
194 } 203 }
195 m.CopyTagIfExists(patients.GetAnswer(i), DICOM_TAG_PATIENT_ID); 204 m.CopyTagIfExists(patients.GetAnswer(i), DICOM_TAG_PATIENT_ID);
196 205
197 DicomFindAnswers studies; 206 DicomFindAnswers studies;
198 connection.FindStudy(studies, m); 207 connection.GetConnection().FindStudy(studies, m);
199 208
200 patient["Studies"] = Json::arrayValue; 209 patient["Studies"] = Json::arrayValue;
201 210
202 // Loop over the found studies 211 // Loop over the found studies
203 for (size_t j = 0; j < studies.GetSize(); j++) 212 for (size_t j = 0; j < studies.GetSize(); j++)
212 } 221 }
213 m.CopyTagIfExists(studies.GetAnswer(j), DICOM_TAG_PATIENT_ID); 222 m.CopyTagIfExists(studies.GetAnswer(j), DICOM_TAG_PATIENT_ID);
214 m.CopyTagIfExists(studies.GetAnswer(j), DICOM_TAG_STUDY_INSTANCE_UID); 223 m.CopyTagIfExists(studies.GetAnswer(j), DICOM_TAG_STUDY_INSTANCE_UID);
215 224
216 DicomFindAnswers series; 225 DicomFindAnswers series;
217 connection.FindSeries(series, m); 226 connection.GetConnection().FindSeries(series, m);
218 227
219 // Loop over the found series 228 // Loop over the found series
220 study["Series"] = Json::arrayValue; 229 study["Series"] = Json::arrayValue;
221 for (size_t k = 0; k < series.GetSize(); k++) 230 for (size_t k = 0; k < series.GetSize(); k++)
222 { 231 {
307 if (!GetInstancesToExport(instances, remote, call)) 316 if (!GetInstancesToExport(instances, remote, call))
308 { 317 {
309 return; 318 return;
310 } 319 }
311 320
312 DicomUserConnection connection; 321 RemoteModalityParameters p = GetModalityUsingSymbolicName(remote);
313 ConnectToModalityUsingSymbolicName(connection, remote); 322 ReusableDicomUserConnection::Connection connection(context.GetReusableDicomUserConnection(), p);
314 323
315 for (std::list<std::string>::const_iterator 324 for (std::list<std::string>::const_iterator
316 it = instances.begin(); it != instances.end(); ++it) 325 it = instances.begin(); it != instances.end(); ++it)
317 { 326 {
318 LOG(INFO) << "Sending resource " << *it << " to modality \"" << remote << "\""; 327 LOG(INFO) << "Sending resource " << *it << " to modality \"" << remote << "\"";
319 328
320 std::string dicom; 329 std::string dicom;
321 context.ReadFile(dicom, *it, FileContentType_Dicom); 330 context.ReadFile(dicom, *it, FileContentType_Dicom);
322 connection.Store(dicom); 331 connection.GetConnection().Store(dicom);
323 } 332 }
324 333
325 call.GetOutput().AnswerBuffer("{}", "application/json"); 334 call.GetOutput().AnswerBuffer("{}", "application/json");
326 } 335 }
327 336