Mercurial > hg > orthanc-stone
annotate Framework/Oracle/GenericOracleRunner.cpp @ 1111:3730956f41a5 broker
ParseDicomFileCommand::GetDicomDirPath()
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 31 Oct 2019 18:38:26 +0100 |
parents | b82b74d13830 |
children | a08699daf78b |
rev | line source |
---|---|
1077 | 1 /** |
2 * Stone of Orthanc | |
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics | |
4 * Department, University Hospital of Liege, Belgium | |
5 * Copyright (C) 2017-2019 Osimis S.A., Belgium | |
6 * | |
7 * This program is free software: you can redistribute it and/or | |
8 * modify it under the terms of the GNU Affero General Public License | |
9 * as published by the Free Software Foundation, either version 3 of | |
10 * the License, or (at your option) any later version. | |
11 * | |
12 * This program is distributed in the hope that it will be useful, but | |
13 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 * Affero General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU Affero General Public License | |
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
19 **/ | |
20 | |
21 | |
22 #include "GenericOracleRunner.h" | |
23 | |
1110
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
24 #if !defined(ORTHANC_ENABLE_DCMTK) |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
25 # error The macro ORTHANC_ENABLE_DCMTK must be defined |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
26 #endif |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
27 |
1077 | 28 #include "CustomOracleCommand.h" |
29 #include "GetOrthancImageCommand.h" | |
30 #include "GetOrthancWebViewerJpegCommand.h" | |
31 #include "HttpCommand.h" | |
32 #include "OracleCommandExceptionMessage.h" | |
33 #include "OrthancRestApiCommand.h" | |
1104 | 34 #include "ReadFileCommand.h" |
1077 | 35 |
1110
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
36 #if ORTHANC_ENABLE_DCMTK == 1 |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
37 # include "ParseDicomFileCommand.h" |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
38 # include <dcmtk/dcmdata/dcdeftag.h> |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
39 #endif |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
40 |
1077 | 41 #include <Core/Compression/GzipCompressor.h> |
42 #include <Core/HttpClient.h> | |
43 #include <Core/OrthancException.h> | |
44 #include <Core/Toolbox.h> | |
1104 | 45 #include <Core/SystemToolbox.h> |
46 | |
47 #include <boost/filesystem.hpp> | |
1077 | 48 |
1110
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
49 |
1077 | 50 namespace OrthancStone |
51 { | |
52 static void CopyHttpHeaders(Orthanc::HttpClient& client, | |
53 const Orthanc::HttpClient::HttpHeaders& headers) | |
54 { | |
55 for (Orthanc::HttpClient::HttpHeaders::const_iterator | |
56 it = headers.begin(); it != headers.end(); it++ ) | |
57 { | |
58 client.AddHeader(it->first, it->second); | |
59 } | |
60 } | |
61 | |
62 | |
63 static void DecodeAnswer(std::string& answer, | |
64 const Orthanc::HttpClient::HttpHeaders& headers) | |
65 { | |
66 Orthanc::HttpCompression contentEncoding = Orthanc::HttpCompression_None; | |
67 | |
68 for (Orthanc::HttpClient::HttpHeaders::const_iterator it = headers.begin(); | |
69 it != headers.end(); ++it) | |
70 { | |
71 std::string s; | |
72 Orthanc::Toolbox::ToLowerCase(s, it->first); | |
73 | |
74 if (s == "content-encoding") | |
75 { | |
76 if (it->second == "gzip") | |
77 { | |
78 contentEncoding = Orthanc::HttpCompression_Gzip; | |
79 } | |
80 else | |
81 { | |
82 throw Orthanc::OrthancException(Orthanc::ErrorCode_NetworkProtocol, | |
83 "Unsupported HTTP Content-Encoding: " + it->second); | |
84 } | |
85 | |
86 break; | |
87 } | |
88 } | |
89 | |
90 if (contentEncoding == Orthanc::HttpCompression_Gzip) | |
91 { | |
92 std::string compressed; | |
93 answer.swap(compressed); | |
94 | |
95 Orthanc::GzipCompressor compressor; | |
96 compressor.Uncompress(answer, compressed.c_str(), compressed.size()); | |
97 | |
98 LOG(INFO) << "Uncompressing gzip Encoding: from " << compressed.size() | |
99 << " to " << answer.size() << " bytes"; | |
100 } | |
101 } | |
102 | |
103 | |
1098
17660df24c36
simplification of IOracleRunner
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1079
diff
changeset
|
104 static IMessage* Execute(const HttpCommand& command) |
1077 | 105 { |
106 Orthanc::HttpClient client; | |
107 client.SetUrl(command.GetUrl()); | |
108 client.SetMethod(command.GetMethod()); | |
109 client.SetTimeout(command.GetTimeout()); | |
110 | |
111 CopyHttpHeaders(client, command.GetHttpHeaders()); | |
112 | |
1079
e6d2ff8f1ab4
credentials in HttpCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1077
diff
changeset
|
113 if (command.HasCredentials()) |
e6d2ff8f1ab4
credentials in HttpCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1077
diff
changeset
|
114 { |
e6d2ff8f1ab4
credentials in HttpCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1077
diff
changeset
|
115 client.SetCredentials(command.GetUsername().c_str(), command.GetPassword().c_str()); |
e6d2ff8f1ab4
credentials in HttpCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1077
diff
changeset
|
116 } |
e6d2ff8f1ab4
credentials in HttpCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1077
diff
changeset
|
117 |
1077 | 118 if (command.GetMethod() == Orthanc::HttpMethod_Post || |
119 command.GetMethod() == Orthanc::HttpMethod_Put) | |
120 { | |
121 client.SetBody(command.GetBody()); | |
122 } | |
123 | |
124 std::string answer; | |
125 Orthanc::HttpClient::HttpHeaders answerHeaders; | |
126 client.ApplyAndThrowException(answer, answerHeaders); | |
127 | |
128 DecodeAnswer(answer, answerHeaders); | |
129 | |
1098
17660df24c36
simplification of IOracleRunner
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1079
diff
changeset
|
130 return new HttpCommand::SuccessMessage(command, answerHeaders, answer); |
1077 | 131 } |
132 | |
133 | |
1098
17660df24c36
simplification of IOracleRunner
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1079
diff
changeset
|
134 static IMessage* Execute(const Orthanc::WebServiceParameters& orthanc, |
17660df24c36
simplification of IOracleRunner
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1079
diff
changeset
|
135 const OrthancRestApiCommand& command) |
1077 | 136 { |
137 Orthanc::HttpClient client(orthanc, command.GetUri()); | |
138 client.SetMethod(command.GetMethod()); | |
139 client.SetTimeout(command.GetTimeout()); | |
140 | |
141 CopyHttpHeaders(client, command.GetHttpHeaders()); | |
142 | |
143 if (command.GetMethod() == Orthanc::HttpMethod_Post || | |
144 command.GetMethod() == Orthanc::HttpMethod_Put) | |
145 { | |
146 client.SetBody(command.GetBody()); | |
147 } | |
148 | |
149 std::string answer; | |
150 Orthanc::HttpClient::HttpHeaders answerHeaders; | |
151 client.ApplyAndThrowException(answer, answerHeaders); | |
152 | |
153 DecodeAnswer(answer, answerHeaders); | |
154 | |
1098
17660df24c36
simplification of IOracleRunner
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1079
diff
changeset
|
155 return new OrthancRestApiCommand::SuccessMessage(command, answerHeaders, answer); |
1077 | 156 } |
157 | |
158 | |
1098
17660df24c36
simplification of IOracleRunner
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1079
diff
changeset
|
159 static IMessage* Execute(const Orthanc::WebServiceParameters& orthanc, |
17660df24c36
simplification of IOracleRunner
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1079
diff
changeset
|
160 const GetOrthancImageCommand& command) |
1077 | 161 { |
162 Orthanc::HttpClient client(orthanc, command.GetUri()); | |
163 client.SetTimeout(command.GetTimeout()); | |
164 | |
165 CopyHttpHeaders(client, command.GetHttpHeaders()); | |
166 | |
167 std::string answer; | |
168 Orthanc::HttpClient::HttpHeaders answerHeaders; | |
169 client.ApplyAndThrowException(answer, answerHeaders); | |
170 | |
171 DecodeAnswer(answer, answerHeaders); | |
172 | |
1098
17660df24c36
simplification of IOracleRunner
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1079
diff
changeset
|
173 return command.ProcessHttpAnswer(answer, answerHeaders); |
1077 | 174 } |
175 | |
176 | |
1098
17660df24c36
simplification of IOracleRunner
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1079
diff
changeset
|
177 static IMessage* Execute(const Orthanc::WebServiceParameters& orthanc, |
17660df24c36
simplification of IOracleRunner
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1079
diff
changeset
|
178 const GetOrthancWebViewerJpegCommand& command) |
1077 | 179 { |
180 Orthanc::HttpClient client(orthanc, command.GetUri()); | |
181 client.SetTimeout(command.GetTimeout()); | |
182 | |
183 CopyHttpHeaders(client, command.GetHttpHeaders()); | |
184 | |
185 std::string answer; | |
186 Orthanc::HttpClient::HttpHeaders answerHeaders; | |
187 client.ApplyAndThrowException(answer, answerHeaders); | |
188 | |
189 DecodeAnswer(answer, answerHeaders); | |
190 | |
1098
17660df24c36
simplification of IOracleRunner
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1079
diff
changeset
|
191 return command.ProcessHttpAnswer(answer); |
1077 | 192 } |
193 | |
194 | |
1110
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
195 static std::string GetPath(const std::string& root, |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
196 const std::string& file) |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
197 { |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
198 boost::filesystem::path a(root); |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
199 boost::filesystem::path b(file); |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
200 |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
201 boost::filesystem::path c; |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
202 if (b.is_absolute()) |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
203 { |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
204 c = b; |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
205 } |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
206 else |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
207 { |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
208 c = a / b; |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
209 } |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
210 |
1111
3730956f41a5
ParseDicomFileCommand::GetDicomDirPath()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1110
diff
changeset
|
211 LOG(TRACE) << "Oracle reading file: " << c.string(); |
1110
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
212 return c.string(); |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
213 } |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
214 |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
215 |
1104 | 216 static IMessage* Execute(const std::string& root, |
217 const ReadFileCommand& command) | |
218 { | |
1110
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
219 std::string path = GetPath(root, command.GetPath()); |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
220 |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
221 std::string content; |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
222 Orthanc::SystemToolbox::ReadFile(content, path, true /* log */); |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
223 |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
224 return new ReadFileCommand::SuccessMessage(command, content); |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
225 } |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
226 |
1104 | 227 |
1110
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
228 #if ORTHANC_ENABLE_DCMTK == 1 |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
229 static IMessage* Execute(const std::string& root, |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
230 const ParseDicomFileCommand& command) |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
231 { |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
232 std::string path = GetPath(root, command.GetPath()); |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
233 |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
234 DcmFileFormat f; |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
235 bool ok; |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
236 |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
237 if (command.IsPixelDataIncluded()) |
1104 | 238 { |
1110
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
239 ok = f.loadFile(path.c_str()).good(); |
1104 | 240 } |
241 else | |
242 { | |
1110
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
243 #if DCMTK_VERSION_NUMBER >= 362 |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
244 // NB : We could stop at (0x3007, 0x0000) instead of |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
245 // DCM_PixelData, cf. the Orthanc::DICOM_TAG_* constants |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
246 |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
247 static const DcmTagKey STOP = DCM_PixelData; |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
248 //static const DcmTagKey STOP(0x3007, 0x0000); |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
249 |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
250 ok = f.loadFileUntilTag(path.c_str(), EXS_Unknown, EGL_noChange, |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
251 DCM_MaxReadLength, ERM_autoDetect, STOP).good(); |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
252 #else |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
253 // The primitive "loadFileUntilTag" was introduced in DCMTK 3.6.2 |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
254 ok = f.loadFile(path.c_str()).good(); |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
255 #endif |
1104 | 256 } |
257 | |
1110
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
258 if (ok) |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
259 { |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
260 return new ParseDicomFileCommand::SuccessMessage(command, f); |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
261 } |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
262 else |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
263 { |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
264 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat, |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
265 "Cannot parse file: " + path); |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
266 } |
1104 | 267 } |
1110
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
268 #endif |
1104 | 269 |
270 | |
1098
17660df24c36
simplification of IOracleRunner
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1079
diff
changeset
|
271 IMessage* GenericOracleRunner::Run(IOracleCommand& command) |
1077 | 272 { |
273 try | |
274 { | |
275 switch (command.GetType()) | |
276 { | |
277 case IOracleCommand::Type_Sleep: | |
278 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadParameterType, | |
279 "Sleep command cannot be executed by the runner"); | |
280 | |
281 case IOracleCommand::Type_Http: | |
1098
17660df24c36
simplification of IOracleRunner
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1079
diff
changeset
|
282 return Execute(dynamic_cast<const HttpCommand&>(command)); |
1077 | 283 |
284 case IOracleCommand::Type_OrthancRestApi: | |
1098
17660df24c36
simplification of IOracleRunner
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1079
diff
changeset
|
285 return Execute(orthanc_, dynamic_cast<const OrthancRestApiCommand&>(command)); |
1077 | 286 |
287 case IOracleCommand::Type_GetOrthancImage: | |
1098
17660df24c36
simplification of IOracleRunner
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1079
diff
changeset
|
288 return Execute(orthanc_, dynamic_cast<const GetOrthancImageCommand&>(command)); |
1077 | 289 |
290 case IOracleCommand::Type_GetOrthancWebViewerJpeg: | |
1098
17660df24c36
simplification of IOracleRunner
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1079
diff
changeset
|
291 return Execute(orthanc_, dynamic_cast<const GetOrthancWebViewerJpegCommand&>(command)); |
1077 | 292 |
293 case IOracleCommand::Type_Custom: | |
1098
17660df24c36
simplification of IOracleRunner
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1079
diff
changeset
|
294 return dynamic_cast<CustomOracleCommand&>(command).Execute(*this); |
1077 | 295 |
1104 | 296 case IOracleCommand::Type_ReadFile: |
297 return Execute(rootDirectory_, dynamic_cast<const ReadFileCommand&>(command)); | |
298 | |
1110
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
299 case IOracleCommand::Type_ParseDicomFile: |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
300 #if ORTHANC_ENABLE_DCMTK == 1 |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
301 return Execute(rootDirectory_, dynamic_cast<const ParseDicomFileCommand&>(command)); |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
302 #else |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
303 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented, |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
304 "DCMTK must be enabled to parse DICOM files"); |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
305 #endif |
b82b74d13830
ParseDicomFileCommand
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1104
diff
changeset
|
306 |
1077 | 307 default: |
308 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); | |
309 } | |
310 } | |
311 catch (Orthanc::OrthancException& e) | |
312 { | |
313 LOG(ERROR) << "Exception within the oracle: " << e.What(); | |
1098
17660df24c36
simplification of IOracleRunner
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1079
diff
changeset
|
314 return new OracleCommandExceptionMessage(command, e); |
1077 | 315 } |
316 catch (...) | |
317 { | |
318 LOG(ERROR) << "Threaded exception within the oracle"; | |
1098
17660df24c36
simplification of IOracleRunner
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1079
diff
changeset
|
319 return new OracleCommandExceptionMessage(command, Orthanc::ErrorCode_InternalError); |
1077 | 320 } |
321 } | |
322 } |