annotate Samples/Sdl/Loader.cpp @ 619:9cd19b28f011

test: refactoring oracle
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 07 May 2019 11:13:24 +0200
parents
children 8a3a25f2d42c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
619
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 /**
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2 * Stone of Orthanc
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
4 * Department, University Hospital of Liege, Belgium
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
5 * Copyright (C) 2017-2019 Osimis S.A., Belgium
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
6 *
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
7 * This program is free software: you can redistribute it and/or
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8 * modify it under the terms of the GNU Affero General Public License
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 * as published by the Free Software Foundation, either version 3 of
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 * the License, or (at your option) any later version.
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 *
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful, but
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15 * Affero General Public License for more details.
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16 *
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17 * You should have received a copy of the GNU Affero General Public License
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 **/
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21 // From Stone
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
22 #include "../../Framework/StoneInitialization.h"
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23 #include "../../Framework/Messages/IMessage.h"
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
24 #include "../../Framework/Messages/MessageBroker.h"
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
25 #include "../../Framework/Messages/ICallable.h"
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
26 #include "../../Framework/Messages/IObservable.h"
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
27
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
28 // From Orthanc framework
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
29 #include <Core/IDynamicObject.h>
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
30 #include <Core/Images/Image.h>
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
31 #include <Core/Images/ImageProcessing.h>
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
32 #include <Core/Images/PngWriter.h>
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
33 #include <Core/Logging.h>
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
34 #include <Core/HttpClient.h>
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
35 #include <Core/MultiThreading/SharedMessageQueue.h>
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
36 #include <Core/OrthancException.h>
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
37
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
38 #include <json/reader.h>
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
39 #include <json/value.h>
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
40 #include <json/writer.h>
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
41
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
42 #include <list>
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
43 #include <stdio.h>
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
44
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
45
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
46
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
47 namespace Refactoring
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
48 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
49 class IOracleCommand : public boost::noncopyable
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
50 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
51 public:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
52 enum Type
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
53 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
54 Type_OrthancApi
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
55 };
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
56
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
57 virtual ~IOracleCommand()
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
58 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
59 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
60
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
61 virtual Type GetType() const = 0;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
62 };
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
63
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
64
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
65 class IOracle : public boost::noncopyable
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
66 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
67 public:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
68 virtual ~IOracle()
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
69 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
70 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
71
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
72 virtual void Schedule(IOracleCommand* command) = 0; // Takes ownership
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
73 };
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
74
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
75
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
76
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
77
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
78 class OracleCommandWithPayload : public IOracleCommand
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
79 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
80 private:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
81 std::auto_ptr<Orthanc::IDynamicObject> payload_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
82
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
83 public:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
84 void SetPayload(Orthanc::IDynamicObject* payload)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
85 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
86 if (payload == NULL)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
87 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
88 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
89 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
90 else
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
91 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
92 payload_.reset(payload);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
93 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
94 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
95
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
96 bool HasPayload() const
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
97 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
98 return (payload_.get() != NULL);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
99 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
100
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
101 const Orthanc::IDynamicObject& GetPayload() const
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
102 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
103 if (HasPayload())
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
104 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
105 return *payload_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
106 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
107 else
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
108 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
109 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
110 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
111 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
112 };
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
113
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
114
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
115
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
116 typedef std::map<std::string, std::string> HttpHeaders;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
117
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
118 class OrthancApiOracleCommand : public OracleCommandWithPayload
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
119 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
120 public:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
121 class SuccessMessage : public OrthancStone::OriginMessage<OrthancStone::MessageType_HttpRequestSuccess, // TODO
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
122 OrthancApiOracleCommand>
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
123 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
124 private:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
125 HttpHeaders headers_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
126 std::string answer_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
127
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
128 public:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
129 SuccessMessage(const OrthancApiOracleCommand& command,
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
130 const HttpHeaders& answerHeaders,
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
131 std::string& answer /* will be swapped to avoid a memcpy() */) :
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
132 OriginMessage(command),
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
133 headers_(answerHeaders),
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
134 answer_(answer)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
135 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
136 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
137
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
138 const std::string& GetAnswer() const
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
139 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
140 return answer_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
141 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
142
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
143 void GetJsonBody(Json::Value& target) const
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
144 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
145 Json::Reader reader;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
146 if (!reader.parse(answer_, target))
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
147 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
148 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
149 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
150 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
151
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
152 const HttpHeaders& GetAnswerHeaders() const
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
153 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
154 return headers_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
155 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
156 };
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
157
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
158
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
159 class FailureMessage : public OrthancStone::OriginMessage<OrthancStone::MessageType_HttpRequestError, // TODO
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
160 OrthancApiOracleCommand>
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
161 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
162 private:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
163 Orthanc::HttpStatus status_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
164
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
165 public:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
166 FailureMessage(const OrthancApiOracleCommand& command,
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
167 Orthanc::HttpStatus status) :
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
168 OriginMessage(command),
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
169 status_(status)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
170 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
171 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
172
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
173 Orthanc::HttpStatus GetHttpStatus() const
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
174 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
175 return status_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
176 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
177 };
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
178
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
179
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
180 private:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
181 Orthanc::HttpMethod method_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
182 std::string uri_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
183 std::string body_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
184 HttpHeaders headers_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
185 unsigned int timeout_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
186
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
187 std::auto_ptr< OrthancStone::MessageHandler<SuccessMessage> > successCallback_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
188 std::auto_ptr< OrthancStone::MessageHandler<FailureMessage> > failureCallback_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
189
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
190 public:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
191 OrthancApiOracleCommand() :
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
192 method_(Orthanc::HttpMethod_Get),
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
193 uri_("/"),
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
194 timeout_(10)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
195 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
196 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
197
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
198 virtual Type GetType() const
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
199 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
200 return Type_OrthancApi;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
201 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
202
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
203 void SetMethod(Orthanc::HttpMethod method)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
204 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
205 method_ = method;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
206 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
207
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
208 void SetUri(const std::string& uri)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
209 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
210 uri_ = uri;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
211 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
212
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
213 void SetBody(const std::string& body)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
214 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
215 body_ = body;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
216 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
217
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
218 void SetBody(const Json::Value& json)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
219 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
220 Json::FastWriter writer;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
221 body_ = writer.write(json);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
222 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
223
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
224 void SetHttpHeader(const std::string& key,
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
225 const std::string& value)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
226 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
227 headers_[key] = value;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
228 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
229
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
230 Orthanc::HttpMethod GetMethod() const
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
231 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
232 return method_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
233 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
234
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
235 const std::string& GetUri() const
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
236 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
237 return uri_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
238 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
239
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
240 const std::string& GetBody() const
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
241 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
242 if (method_ == Orthanc::HttpMethod_Post ||
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
243 method_ == Orthanc::HttpMethod_Put)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
244 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
245 return body_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
246 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
247 else
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
248 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
249 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
250 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
251 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
252
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
253 const HttpHeaders& GetHttpHeaders() const
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
254 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
255 return headers_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
256 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
257
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
258 void SetTimeout(unsigned int seconds)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
259 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
260 timeout_ = seconds;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
261 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
262
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
263 unsigned int GetTimeout() const
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
264 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
265 return timeout_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
266 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
267 };
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
268
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
269
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
270
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
271 class NativeApplicationContext : public boost::noncopyable
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
272 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
273 private:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
274 boost::shared_mutex mutex_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
275 Orthanc::WebServiceParameters orthanc_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
276 OrthancStone::MessageBroker broker_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
277 OrthancStone::IObservable oracleObservable_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
278
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
279 public:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
280 NativeApplicationContext() :
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
281 oracleObservable_(broker_)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
282 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
283 orthanc_.SetUrl("http://localhost:8042/");
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
284 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
285
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
286
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
287 class ReaderLock : public boost::noncopyable
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
288 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
289 private:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
290 NativeApplicationContext& that_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
291 boost::shared_lock<boost::shared_mutex> lock_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
292
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
293 public:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
294 ReaderLock(NativeApplicationContext& that) :
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
295 that_(that),
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
296 lock_(that.mutex_)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
297 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
298 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
299
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
300 const Orthanc::WebServiceParameters& GetOrthancParameters() const
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
301 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
302 return that_.orthanc_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
303 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
304 };
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
305
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
306
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
307 class WriterLock : public boost::noncopyable
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
308 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
309 private:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
310 NativeApplicationContext& that_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
311 boost::unique_lock<boost::shared_mutex> lock_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
312
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
313 public:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
314 WriterLock(NativeApplicationContext& that) :
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
315 that_(that),
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
316 lock_(that.mutex_)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
317 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
318 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
319
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
320 OrthancStone::MessageBroker& GetBroker()
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
321 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
322 return that_.broker_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
323 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
324
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
325 void SetOrthancParameters(Orthanc::WebServiceParameters& orthanc)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
326 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
327 that_.orthanc_ = orthanc;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
328 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
329
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
330 OrthancStone::IObservable& GetOracleObservable()
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
331 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
332 return that_.oracleObservable_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
333 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
334 };
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
335 };
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
336
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
337
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
338
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
339 class NativeOracle : public IOracle
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
340 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
341 private:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
342 class Item : public Orthanc::IDynamicObject
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
343 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
344 private:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
345 std::auto_ptr<IOracleCommand> command_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
346
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
347 public:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
348 Item(IOracleCommand* command) :
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
349 command_(command)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
350 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
351 if (command == NULL)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
352 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
353 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
354 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
355 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
356
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
357 const IOracleCommand& GetCommand()
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
358 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
359 assert(command_.get() != NULL);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
360 return *command_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
361 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
362 };
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
363
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
364
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
365 enum State
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
366 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
367 State_Setup,
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
368 State_Running,
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
369 State_Stopped
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
370 };
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
371
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
372
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
373 NativeApplicationContext& context_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
374 Orthanc::SharedMessageQueue queue_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
375 State state_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
376 boost::mutex mutex_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
377 std::vector<boost::thread*> workers_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
378
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
379
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
380 void Execute(const OrthancApiOracleCommand& command)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
381 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
382 std::auto_ptr<Orthanc::HttpClient> client;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
383
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
384 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
385 NativeApplicationContext::ReaderLock lock(context_);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
386 client.reset(new Orthanc::HttpClient(lock.GetOrthancParameters(), command.GetUri()));
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
387 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
388
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
389 client->SetMethod(command.GetMethod());
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
390 client->SetBody(command.GetBody());
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
391 client->SetTimeout(command.GetTimeout());
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
392
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
393 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
394 const HttpHeaders& headers = command.GetHttpHeaders();
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
395 for (HttpHeaders::const_iterator it = headers.begin(); it != headers.end(); it++ )
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
396 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
397 client->AddHeader(it->first, it->second);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
398 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
399 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
400
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
401 std::string answer;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
402 HttpHeaders answerHeaders;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
403
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
404 bool success;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
405 try
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
406 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
407 success = client->Apply(answer, answerHeaders);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
408 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
409 catch (Orthanc::OrthancException& e)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
410 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
411 success = false;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
412 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
413
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
414 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
415 NativeApplicationContext::WriterLock lock(context_);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
416
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
417 if (success)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
418 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
419 OrthancApiOracleCommand::SuccessMessage message(command, answerHeaders, answer);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
420 lock.GetOracleObservable().EmitMessage(message);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
421 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
422 else
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
423 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
424 OrthancApiOracleCommand::FailureMessage message(command, client->GetLastStatus());
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
425 lock.GetOracleObservable().EmitMessage(message);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
426 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
427 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
428 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
429
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
430
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
431
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
432 void Step()
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
433 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
434 std::auto_ptr<Orthanc::IDynamicObject> item(queue_.Dequeue(100));
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
435
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
436 if (item.get() != NULL)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
437 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
438 const IOracleCommand& command = dynamic_cast<Item*>(item.get())->GetCommand();
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
439
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
440 switch (command.GetType())
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
441 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
442 case IOracleCommand::Type_OrthancApi:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
443 Execute(dynamic_cast<const OrthancApiOracleCommand&>(command));
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
444 break;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
445
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
446 default:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
447 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
448 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
449 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
450 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
451
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
452
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
453 static void Worker(NativeOracle* that)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
454 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
455 assert(that != NULL);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
456
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
457 for (;;)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
458 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
459 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
460 boost::mutex::scoped_lock lock(that->mutex_);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
461 if (that->state_ != State_Running)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
462 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
463 return;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
464 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
465 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
466
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
467 that->Step();
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
468 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
469 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
470
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
471
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
472 void StopInternal()
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
473 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
474 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
475 boost::mutex::scoped_lock lock(mutex_);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
476
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
477 if (state_ == State_Setup ||
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
478 state_ == State_Stopped)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
479 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
480 return;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
481 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
482 else
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
483 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
484 state_ = State_Stopped;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
485 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
486 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
487
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
488 for (size_t i = 0; i < workers_.size(); i++)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
489 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
490 if (workers_[i] != NULL)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
491 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
492 if (workers_[i]->joinable())
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
493 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
494 workers_[i]->join();
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
495 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
496
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
497 delete workers_[i];
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
498 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
499 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
500 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
501
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
502
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
503 public:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
504 NativeOracle(NativeApplicationContext& context) :
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
505 context_(context),
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
506 state_(State_Setup),
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
507 workers_(4)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
508 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
509 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
510
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
511 virtual ~NativeOracle()
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
512 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
513 StopInternal();
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
514 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
515
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
516 void SetWorkersCount(unsigned int count)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
517 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
518 boost::mutex::scoped_lock lock(mutex_);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
519
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
520 if (count <= 0)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
521 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
522 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
523 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
524 else if (state_ != State_Setup)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
525 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
526 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
527 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
528 else
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
529 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
530 workers_.resize(count);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
531 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
532 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
533
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
534 void Start()
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
535 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
536 boost::mutex::scoped_lock lock(mutex_);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
537
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
538 if (state_ != State_Setup)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
539 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
540 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
541 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
542 else
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
543 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
544 state_ = State_Running;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
545
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
546 for (unsigned int i = 0; i < workers_.size(); i++)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
547 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
548 workers_[i] = new boost::thread(Worker, this);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
549 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
550 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
551 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
552
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
553 void Stop()
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
554 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
555 StopInternal();
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
556 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
557
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
558 virtual void Schedule(IOracleCommand* command)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
559 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
560 queue_.Enqueue(new Item(command));
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
561 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
562 };
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
563 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
564
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
565
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
566
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
567 class Toto : public OrthancStone::IObserver
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
568 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
569 private:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
570 void Handle(const Refactoring::OrthancApiOracleCommand::SuccessMessage& message)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
571 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
572 Json::Value v;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
573 message.GetJsonBody(v);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
574
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
575 printf("ICI [%s]\n", v.toStyledString().c_str());
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
576 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
577
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
578 void Handle(const Refactoring::OrthancApiOracleCommand::FailureMessage& message)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
579 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
580 printf("ERROR %d\n", message.GetHttpStatus());
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
581 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
582
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
583 public:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
584 Toto(OrthancStone::IObservable& oracle) :
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
585 IObserver(oracle.GetBroker())
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
586 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
587 oracle.RegisterObserverCallback(new OrthancStone::Callable<Toto, Refactoring::OrthancApiOracleCommand::SuccessMessage>(*this, &Toto::Handle));
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
588 oracle.RegisterObserverCallback(new OrthancStone::Callable<Toto, Refactoring::OrthancApiOracleCommand::FailureMessage>(*this, &Toto::Handle));
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
589 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
590 };
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
591
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
592
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
593 void Run(Refactoring::NativeApplicationContext& context)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
594 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
595 std::auto_ptr<Toto> toto;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
596
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
597 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
598 Refactoring::NativeApplicationContext::WriterLock lock(context);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
599 toto.reset(new Toto(lock.GetOracleObservable()));
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
600 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
601
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
602 Refactoring::NativeOracle oracle(context);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
603 oracle.Start();
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
604
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
605 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
606 Json::Value v = Json::objectValue;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
607 v["Level"] = "Series";
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
608 v["Query"] = Json::objectValue;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
609
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
610 std::auto_ptr<Refactoring::OrthancApiOracleCommand> command(new Refactoring::OrthancApiOracleCommand);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
611 command->SetMethod(Orthanc::HttpMethod_Post);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
612 command->SetUri("/tools/find");
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
613 command->SetBody(v);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
614
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
615 oracle.Schedule(command.release());
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
616 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
617
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
618 boost::this_thread::sleep(boost::posix_time::seconds(1));
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
619
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
620 oracle.Stop();
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
621 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
622
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
623
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
624
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
625 /**
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
626 * IMPORTANT: The full arguments to "main()" are needed for SDL on
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
627 * Windows. Otherwise, one gets the linking error "undefined reference
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
628 * to `SDL_main'". https://wiki.libsdl.org/FAQWindows
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
629 **/
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
630 int main(int argc, char* argv[])
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
631 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
632 OrthancStone::StoneInitialize();
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
633 Orthanc::Logging::EnableInfoLevel(true);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
634
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
635 try
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
636 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
637 Refactoring::NativeApplicationContext context;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
638 Run(context);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
639 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
640 catch (Orthanc::OrthancException& e)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
641 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
642 LOG(ERROR) << "EXCEPTION: " << e.What();
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
643 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
644
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
645 OrthancStone::StoneFinalize();
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
646
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
647 return 0;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
648 }