Mercurial > hg > orthanc
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 |