comparison Framework/Toolbox/OrthancApiClient.cpp @ 382:dd4c7e82b4be

removed class OrthancApiClient::HttpErrorMessage, redundant with IWebService::HttpRequestErrorMessage
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 06 Nov 2018 19:36:32 +0100
parents 8eb4fe74000f
children 939f626eb6d7
comparison
equal deleted inserted replaced
381:19bd222283ae 382:dd4c7e82b4be
64 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); 64 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
65 } 65 }
66 } 66 }
67 67
68 68
69 const Orthanc::IDynamicObject& OrthancApiClient::HttpErrorMessage::GetPayload() const 69 OrthancApiClient::OrthancApiClient(MessageBroker& broker,
70 { 70 IWebService& orthanc) :
71 if (HasPayload())
72 {
73 return *payload_;
74 }
75 else
76 {
77 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
78 }
79 }
80
81
82 OrthancApiClient::OrthancApiClient(MessageBroker &broker, IWebService &orthanc) :
83 IObservable(broker), 71 IObservable(broker),
84 orthanc_(orthanc) 72 orthanc_(orthanc)
85 { 73 {
86 } 74 }
87 75
89 // TODO: handle destruction of this object (with shared_ptr ?::delete_later ???) 77 // TODO: handle destruction of this object (with shared_ptr ?::delete_later ???)
90 class HttpResponseToJsonConverter : public IObserver, IObservable 78 class HttpResponseToJsonConverter : public IObserver, IObservable
91 { 79 {
92 private: 80 private:
93 std::auto_ptr<MessageHandler<OrthancApiClient::JsonResponseReadyMessage> > orthancApiSuccessCallback_; 81 std::auto_ptr<MessageHandler<OrthancApiClient::JsonResponseReadyMessage> > orthancApiSuccessCallback_;
94 std::auto_ptr<MessageHandler<OrthancApiClient::HttpErrorMessage> > orthancApiFailureCallback_; 82 std::auto_ptr<MessageHandler<IWebService::HttpRequestErrorMessage> > orthancApiFailureCallback_;
95 83
96 public: 84 public:
97 HttpResponseToJsonConverter(MessageBroker& broker, 85 HttpResponseToJsonConverter(MessageBroker& broker,
98 MessageHandler<OrthancApiClient::JsonResponseReadyMessage>* orthancApiSuccessCallback, 86 MessageHandler<OrthancApiClient::JsonResponseReadyMessage>* orthancApiSuccessCallback,
99 MessageHandler<OrthancApiClient::HttpErrorMessage>* orthancApiFailureCallback) 87 MessageHandler<IWebService::HttpRequestErrorMessage>* orthancApiFailureCallback)
100 : IObserver(broker), 88 : IObserver(broker),
101 IObservable(broker), 89 IObservable(broker),
102 orthancApiSuccessCallback_(orthancApiSuccessCallback), 90 orthancApiSuccessCallback_(orthancApiSuccessCallback),
103 orthancApiFailureCallback_(orthancApiFailureCallback) 91 orthancApiFailureCallback_(orthancApiFailureCallback)
104 { 92 {
115 (message.GetUri(), response, message.GetPayloadPointer())); 103 (message.GetUri(), response, message.GetPayloadPointer()));
116 } 104 }
117 } 105 }
118 else if (orthancApiFailureCallback_.get() != NULL) 106 else if (orthancApiFailureCallback_.get() != NULL)
119 { 107 {
120 orthancApiFailureCallback_->Apply(OrthancApiClient::HttpErrorMessage 108 orthancApiFailureCallback_->Apply(IWebService::HttpRequestErrorMessage
121 (message.GetUri(), message.GetPayloadPointer())); 109 (message.GetUri(), message.GetPayloadPointer()));
122 } 110 }
123 111
124 delete this; // hack untill we find someone to take ownership of this object (https://isocpp.org/wiki/faq/freestore-mgmt#delete-this) 112 delete this; // hack untill we find someone to take ownership of this object (https://isocpp.org/wiki/faq/freestore-mgmt#delete-this)
125 } 113 }
126 114
127 void ConvertError(const IWebService::HttpRequestErrorMessage& message) 115 void ConvertError(const IWebService::HttpRequestErrorMessage& message)
128 { 116 {
129 if (orthancApiFailureCallback_.get() != NULL) 117 if (orthancApiFailureCallback_.get() != NULL)
130 { 118 {
131 orthancApiFailureCallback_->Apply(OrthancApiClient::HttpErrorMessage(message.GetUri(), message.GetPayloadPointer())); 119 orthancApiFailureCallback_->Apply(IWebService::HttpRequestErrorMessage(message.GetUri(), message.GetPayloadPointer()));
132 } 120 }
133 121
134 delete this; // hack untill we find someone to take ownership of this object (https://isocpp.org/wiki/faq/freestore-mgmt#delete-this) 122 delete this; // hack untill we find someone to take ownership of this object (https://isocpp.org/wiki/faq/freestore-mgmt#delete-this)
135 } 123 }
136 }; 124 };
139 // TODO: handle destruction of this object (with shared_ptr ?::delete_later ???) 127 // TODO: handle destruction of this object (with shared_ptr ?::delete_later ???)
140 class HttpResponseToBinaryConverter : public IObserver, IObservable 128 class HttpResponseToBinaryConverter : public IObserver, IObservable
141 { 129 {
142 private: 130 private:
143 std::auto_ptr<MessageHandler<OrthancApiClient::BinaryResponseReadyMessage> > orthancApiSuccessCallback_; 131 std::auto_ptr<MessageHandler<OrthancApiClient::BinaryResponseReadyMessage> > orthancApiSuccessCallback_;
144 std::auto_ptr<MessageHandler<OrthancApiClient::HttpErrorMessage> > orthancApiFailureCallback_; 132 std::auto_ptr<MessageHandler<IWebService::HttpRequestErrorMessage> > orthancApiFailureCallback_;
145 133
146 public: 134 public:
147 HttpResponseToBinaryConverter(MessageBroker& broker, 135 HttpResponseToBinaryConverter(MessageBroker& broker,
148 MessageHandler<OrthancApiClient::BinaryResponseReadyMessage>* orthancApiSuccessCallback, 136 MessageHandler<OrthancApiClient::BinaryResponseReadyMessage>* orthancApiSuccessCallback,
149 MessageHandler<OrthancApiClient::HttpErrorMessage>* orthancApiFailureCallback) 137 MessageHandler<IWebService::HttpRequestErrorMessage>* orthancApiFailureCallback)
150 : IObserver(broker), 138 : IObserver(broker),
151 IObservable(broker), 139 IObservable(broker),
152 orthancApiSuccessCallback_(orthancApiSuccessCallback), 140 orthancApiSuccessCallback_(orthancApiSuccessCallback),
153 orthancApiFailureCallback_(orthancApiFailureCallback) 141 orthancApiFailureCallback_(orthancApiFailureCallback)
154 { 142 {
162 (message.GetUri(), message.GetAnswer(), 150 (message.GetUri(), message.GetAnswer(),
163 message.GetAnswerSize(), message.GetPayloadPointer())); 151 message.GetAnswerSize(), message.GetPayloadPointer()));
164 } 152 }
165 else if (orthancApiFailureCallback_.get() != NULL) 153 else if (orthancApiFailureCallback_.get() != NULL)
166 { 154 {
167 orthancApiFailureCallback_->Apply(OrthancApiClient::HttpErrorMessage 155 orthancApiFailureCallback_->Apply(IWebService::HttpRequestErrorMessage
168 (message.GetUri(), message.GetPayloadPointer())); 156 (message.GetUri(), message.GetPayloadPointer()));
169 } 157 }
170 158
171 delete this; // hack untill we find someone to take ownership of this object (https://isocpp.org/wiki/faq/freestore-mgmt#delete-this) 159 delete this; // hack untill we find someone to take ownership of this object (https://isocpp.org/wiki/faq/freestore-mgmt#delete-this)
172 } 160 }
173 161
174 void ConvertError(const IWebService::HttpRequestErrorMessage& message) 162 void ConvertError(const IWebService::HttpRequestErrorMessage& message)
175 { 163 {
176 if (orthancApiFailureCallback_.get() != NULL) 164 if (orthancApiFailureCallback_.get() != NULL)
177 { 165 {
178 orthancApiFailureCallback_->Apply(OrthancApiClient::HttpErrorMessage(message.GetUri(), message.GetPayloadPointer())); 166 orthancApiFailureCallback_->Apply(IWebService::HttpRequestErrorMessage(message.GetUri(), message.GetPayloadPointer()));
179 } 167 }
180 168
181 delete this; // hack untill we find someone to take ownership of this object (https://isocpp.org/wiki/faq/freestore-mgmt#delete-this) 169 delete this; // hack untill we find someone to take ownership of this object (https://isocpp.org/wiki/faq/freestore-mgmt#delete-this)
182 } 170 }
183 }; 171 };
186 // TODO: handle destruction of this object (with shared_ptr ?::delete_later ???) 174 // TODO: handle destruction of this object (with shared_ptr ?::delete_later ???)
187 class HttpResponseToEmptyConverter : public IObserver, IObservable 175 class HttpResponseToEmptyConverter : public IObserver, IObservable
188 { 176 {
189 private: 177 private:
190 std::auto_ptr<MessageHandler<OrthancApiClient::EmptyResponseReadyMessage> > orthancApiSuccessCallback_; 178 std::auto_ptr<MessageHandler<OrthancApiClient::EmptyResponseReadyMessage> > orthancApiSuccessCallback_;
191 std::auto_ptr<MessageHandler<OrthancApiClient::HttpErrorMessage> > orthancApiFailureCallback_; 179 std::auto_ptr<MessageHandler<IWebService::HttpRequestErrorMessage> > orthancApiFailureCallback_;
192 180
193 public: 181 public:
194 HttpResponseToEmptyConverter(MessageBroker& broker, 182 HttpResponseToEmptyConverter(MessageBroker& broker,
195 MessageHandler<OrthancApiClient::EmptyResponseReadyMessage>* orthancApiSuccessCallback, 183 MessageHandler<OrthancApiClient::EmptyResponseReadyMessage>* orthancApiSuccessCallback,
196 MessageHandler<OrthancApiClient::HttpErrorMessage>* orthancApiFailureCallback) 184 MessageHandler<IWebService::HttpRequestErrorMessage>* orthancApiFailureCallback)
197 : IObserver(broker), 185 : IObserver(broker),
198 IObservable(broker), 186 IObservable(broker),
199 orthancApiSuccessCallback_(orthancApiSuccessCallback), 187 orthancApiSuccessCallback_(orthancApiSuccessCallback),
200 orthancApiFailureCallback_(orthancApiFailureCallback) 188 orthancApiFailureCallback_(orthancApiFailureCallback)
201 { 189 {
208 orthancApiSuccessCallback_->Apply(OrthancApiClient::EmptyResponseReadyMessage 196 orthancApiSuccessCallback_->Apply(OrthancApiClient::EmptyResponseReadyMessage
209 (message.GetUri(), message.GetPayloadPointer())); 197 (message.GetUri(), message.GetPayloadPointer()));
210 } 198 }
211 else if (orthancApiFailureCallback_.get() != NULL) 199 else if (orthancApiFailureCallback_.get() != NULL)
212 { 200 {
213 orthancApiFailureCallback_->Apply(OrthancApiClient::HttpErrorMessage 201 orthancApiFailureCallback_->Apply(IWebService::HttpRequestErrorMessage
214 (message.GetUri(), message.GetPayloadPointer())); 202 (message.GetUri(), message.GetPayloadPointer()));
215 } 203 }
216 204
217 delete this; // hack untill we find someone to take ownership of this object (https://isocpp.org/wiki/faq/freestore-mgmt#delete-this) 205 delete this; // hack untill we find someone to take ownership of this object (https://isocpp.org/wiki/faq/freestore-mgmt#delete-this)
218 } 206 }
219 207
220 void ConvertError(const IWebService::HttpRequestErrorMessage& message) 208 void ConvertError(const IWebService::HttpRequestErrorMessage& message)
221 { 209 {
222 if (orthancApiFailureCallback_.get() != NULL) 210 if (orthancApiFailureCallback_.get() != NULL)
223 { 211 {
224 orthancApiFailureCallback_->Apply(OrthancApiClient::HttpErrorMessage(message.GetUri(), message.GetPayloadPointer())); 212 orthancApiFailureCallback_->Apply(IWebService::HttpRequestErrorMessage(message.GetUri(), message.GetPayloadPointer()));
225 } 213 }
226 214
227 delete this; // hack untill we find someone to take ownership of this object (https://isocpp.org/wiki/faq/freestore-mgmt#delete-this) 215 delete this; // hack untill we find someone to take ownership of this object (https://isocpp.org/wiki/faq/freestore-mgmt#delete-this)
228 } 216 }
229 }; 217 };
230 218
231 219
232 void OrthancApiClient::GetJsonAsync(const std::string& uri, 220 void OrthancApiClient::GetJsonAsync(const std::string& uri,
233 MessageHandler<JsonResponseReadyMessage>* successCallback, 221 MessageHandler<JsonResponseReadyMessage>* successCallback,
234 MessageHandler<HttpErrorMessage>* failureCallback, 222 MessageHandler<IWebService::HttpRequestErrorMessage>* failureCallback,
235 Orthanc::IDynamicObject* payload) 223 Orthanc::IDynamicObject* payload)
236 { 224 {
237 HttpResponseToJsonConverter* converter = new HttpResponseToJsonConverter(broker_, successCallback, failureCallback); // it is currently deleting itself after being used 225 HttpResponseToJsonConverter* converter = new HttpResponseToJsonConverter(broker_, successCallback, failureCallback); // it is currently deleting itself after being used
238 orthanc_.GetAsync(uri, IWebService::Headers(), payload, 226 orthanc_.GetAsync(uri, IWebService::Headers(), payload,
239 new Callable<HttpResponseToJsonConverter, IWebService::HttpRequestSuccessMessage>(*converter, &HttpResponseToJsonConverter::ConvertResponseToJson), 227 new Callable<HttpResponseToJsonConverter, IWebService::HttpRequestSuccessMessage>(*converter, &HttpResponseToJsonConverter::ConvertResponseToJson),
240 new Callable<HttpResponseToJsonConverter, IWebService::HttpRequestErrorMessage>(*converter, &HttpResponseToJsonConverter::ConvertError)); 228 new Callable<HttpResponseToJsonConverter, IWebService::HttpRequestErrorMessage>(*converter, &HttpResponseToJsonConverter::ConvertError));
241 229
242 } 230 }
243 231
232
233 void OrthancApiClient::GetBinaryAsync(const std::string& uri,
234 const std::string& contentType,
235 MessageHandler<BinaryResponseReadyMessage>* successCallback,
236 MessageHandler<IWebService::HttpRequestErrorMessage>* failureCallback,
237 Orthanc::IDynamicObject* payload)
238 {
239 IWebService::Headers headers;
240 headers["Accept"] = contentType;
241 GetBinaryAsync(uri, headers, successCallback, failureCallback, payload);
242 }
243
244
244 void OrthancApiClient::GetBinaryAsync(const std::string& uri, 245 void OrthancApiClient::GetBinaryAsync(const std::string& uri,
245 const IWebService::Headers& headers, 246 const IWebService::Headers& headers,
246 MessageHandler<BinaryResponseReadyMessage>* successCallback, 247 MessageHandler<BinaryResponseReadyMessage>* successCallback,
247 MessageHandler<HttpErrorMessage>* failureCallback, 248 MessageHandler<IWebService::HttpRequestErrorMessage>* failureCallback,
248 Orthanc::IDynamicObject* payload) 249 Orthanc::IDynamicObject* payload)
249 { 250 {
250 HttpResponseToBinaryConverter* converter = new HttpResponseToBinaryConverter(broker_, successCallback, failureCallback); // it is currently deleting itself after being used 251 HttpResponseToBinaryConverter* converter = new HttpResponseToBinaryConverter(broker_, successCallback, failureCallback); // it is currently deleting itself after being used
251 orthanc_.GetAsync(uri, headers, payload, 252 orthanc_.GetAsync(uri, headers, payload,
252 new Callable<HttpResponseToBinaryConverter, IWebService::HttpRequestSuccessMessage>(*converter, &HttpResponseToBinaryConverter::ConvertResponseToBinary), 253 new Callable<HttpResponseToBinaryConverter, IWebService::HttpRequestSuccessMessage>(*converter, &HttpResponseToBinaryConverter::ConvertResponseToBinary),
253 new Callable<HttpResponseToBinaryConverter, IWebService::HttpRequestErrorMessage>(*converter, &HttpResponseToBinaryConverter::ConvertError)); 254 new Callable<HttpResponseToBinaryConverter, IWebService::HttpRequestErrorMessage>(*converter, &HttpResponseToBinaryConverter::ConvertError));
254 } 255 }
255 256
257
256 void OrthancApiClient::PostBinaryAsyncExpectJson(const std::string& uri, 258 void OrthancApiClient::PostBinaryAsyncExpectJson(const std::string& uri,
257 const std::string& body, 259 const std::string& body,
258 MessageHandler<JsonResponseReadyMessage>* successCallback, 260 MessageHandler<JsonResponseReadyMessage>* successCallback,
259 MessageHandler<HttpErrorMessage>* failureCallback, 261 MessageHandler<IWebService::HttpRequestErrorMessage>* failureCallback,
260 Orthanc::IDynamicObject* payload) 262 Orthanc::IDynamicObject* payload)
261 { 263 {
262 HttpResponseToJsonConverter* converter = new HttpResponseToJsonConverter(broker_, successCallback, failureCallback); // it is currently deleting itself after being used 264 HttpResponseToJsonConverter* converter = new HttpResponseToJsonConverter(broker_, successCallback, failureCallback); // it is currently deleting itself after being used
263 orthanc_.PostAsync(uri, IWebService::Headers(), body, payload, 265 orthanc_.PostAsync(uri, IWebService::Headers(), body, payload,
264 new Callable<HttpResponseToJsonConverter, IWebService::HttpRequestSuccessMessage>(*converter, &HttpResponseToJsonConverter::ConvertResponseToJson), 266 new Callable<HttpResponseToJsonConverter, IWebService::HttpRequestSuccessMessage>(*converter, &HttpResponseToJsonConverter::ConvertResponseToJson),
265 new Callable<HttpResponseToJsonConverter, IWebService::HttpRequestErrorMessage>(*converter, &HttpResponseToJsonConverter::ConvertError)); 267 new Callable<HttpResponseToJsonConverter, IWebService::HttpRequestErrorMessage>(*converter, &HttpResponseToJsonConverter::ConvertError));
266 268
267 } 269 }
268 270
271
269 void OrthancApiClient::PostJsonAsyncExpectJson(const std::string& uri, 272 void OrthancApiClient::PostJsonAsyncExpectJson(const std::string& uri,
270 const Json::Value& data, 273 const Json::Value& data,
271 MessageHandler<JsonResponseReadyMessage>* successCallback, 274 MessageHandler<JsonResponseReadyMessage>* successCallback,
272 MessageHandler<HttpErrorMessage>* failureCallback, 275 MessageHandler<IWebService::HttpRequestErrorMessage>* failureCallback,
273 Orthanc::IDynamicObject* payload) 276 Orthanc::IDynamicObject* payload)
274 { 277 {
275 std::string body; 278 std::string body;
276 MessagingToolbox::JsonToString(body, data); 279 MessagingToolbox::JsonToString(body, data);
277 return PostBinaryAsyncExpectJson(uri, body, successCallback, failureCallback, payload); 280 return PostBinaryAsyncExpectJson(uri, body, successCallback, failureCallback, payload);
278 } 281 }
279 282
283
280 void OrthancApiClient::DeleteAsync(const std::string& uri, 284 void OrthancApiClient::DeleteAsync(const std::string& uri,
281 MessageHandler<EmptyResponseReadyMessage>* successCallback, 285 MessageHandler<EmptyResponseReadyMessage>* successCallback,
282 MessageHandler<HttpErrorMessage>* failureCallback, 286 MessageHandler<IWebService::HttpRequestErrorMessage>* failureCallback,
283 Orthanc::IDynamicObject* payload) 287 Orthanc::IDynamicObject* payload)
284 { 288 {
285 HttpResponseToEmptyConverter* converter = new HttpResponseToEmptyConverter(broker_, successCallback, failureCallback); // it is currently deleting itself after being used 289 HttpResponseToEmptyConverter* converter = new HttpResponseToEmptyConverter(broker_, successCallback, failureCallback); // it is currently deleting itself after being used
286 orthanc_.DeleteAsync(uri, IWebService::Headers(), payload, 290 orthanc_.DeleteAsync(uri, IWebService::Headers(), payload,
287 new Callable<HttpResponseToEmptyConverter, IWebService::HttpRequestSuccessMessage>(*converter, &HttpResponseToEmptyConverter::ConvertResponseToEmpty), 291 new Callable<HttpResponseToEmptyConverter, IWebService::HttpRequestSuccessMessage>(*converter, &HttpResponseToEmptyConverter::ConvertResponseToEmpty),
288 new Callable<HttpResponseToEmptyConverter, IWebService::HttpRequestErrorMessage>(*converter, &HttpResponseToEmptyConverter::ConvertError)); 292 new Callable<HttpResponseToEmptyConverter, IWebService::HttpRequestErrorMessage>(*converter, &HttpResponseToEmptyConverter::ConvertError));
289 } 293 }
290 294
291 295
296 class OrthancApiClient::WebServicePayload : public boost::noncopyable
297 {
298 private:
299 std::auto_ptr< MessageHandler<EmptyResponseReadyMessage> > emptyHandler_;
300 std::auto_ptr< MessageHandler<JsonResponseReadyMessage> > jsonHandler_;
301 std::auto_ptr< MessageHandler<BinaryResponseReadyMessage> > binaryHandler_;
302 std::auto_ptr< Orthanc::IDynamicObject > userPayload;
303 };
292 } 304 }