annotate Samples/Sdl/Loader.cpp @ 622:8a3a25f2d42c

uncoupling oracle from context
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 07 May 2019 12:32:21 +0200
parents 9cd19b28f011
children 42dadae61fa9
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
622
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
65 class IMessageEmitter : public boost::noncopyable
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
66 {
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
67 public:
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
68 virtual ~IMessageEmitter()
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
69 {
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
70 }
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
71
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
72 virtual void EmitMessage(const OrthancStone::IMessage& message) = 0;
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
73 };
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
74
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
75
619
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
76 class IOracle : public boost::noncopyable
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 public:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
79 virtual ~IOracle()
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
80 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
81 }
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 virtual void Schedule(IOracleCommand* command) = 0; // Takes ownership
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
84 };
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
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
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
89 class OracleCommandWithPayload : public IOracleCommand
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
90 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
91 private:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
92 std::auto_ptr<Orthanc::IDynamicObject> 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 public:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
95 void SetPayload(Orthanc::IDynamicObject* payload)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
96 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
97 if (payload == NULL)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
98 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
99 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer);
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 else
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 payload_.reset(payload);
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 }
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 bool HasPayload() const
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 return (payload_.get() != NULL);
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 const Orthanc::IDynamicObject& GetPayload() const
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 if (HasPayload())
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 return *payload_;
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 else
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 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
121 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
122 }
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
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
125
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
126
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
127 typedef std::map<std::string, std::string> HttpHeaders;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
128
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
129 class OrthancApiOracleCommand : public OracleCommandWithPayload
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
130 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
131 public:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
132 class SuccessMessage : public OrthancStone::OriginMessage<OrthancStone::MessageType_HttpRequestSuccess, // TODO
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
133 OrthancApiOracleCommand>
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
134 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
135 private:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
136 HttpHeaders headers_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
137 std::string answer_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
138
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
139 public:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
140 SuccessMessage(const OrthancApiOracleCommand& command,
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
141 const HttpHeaders& answerHeaders,
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
142 std::string& answer /* will be swapped to avoid a memcpy() */) :
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
143 OriginMessage(command),
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
144 headers_(answerHeaders),
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
145 answer_(answer)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
146 {
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
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
149 const std::string& GetAnswer() const
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 return answer_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
152 }
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 void GetJsonBody(Json::Value& target) const
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 Json::Reader reader;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
157 if (!reader.parse(answer_, target))
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 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
160 }
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
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
163 const HttpHeaders& GetAnswerHeaders() const
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 return headers_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
166 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
167 };
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
168
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
169
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
170 class FailureMessage : public OrthancStone::OriginMessage<OrthancStone::MessageType_HttpRequestError, // TODO
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
171 OrthancApiOracleCommand>
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 private:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
174 Orthanc::HttpStatus status_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
175
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
176 public:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
177 FailureMessage(const OrthancApiOracleCommand& command,
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
178 Orthanc::HttpStatus status) :
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
179 OriginMessage(command),
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
180 status_(status)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
181 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
182 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
183
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
184 Orthanc::HttpStatus GetHttpStatus() const
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
185 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
186 return status_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
187 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
188 };
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
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
191 private:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
192 Orthanc::HttpMethod method_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
193 std::string uri_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
194 std::string body_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
195 HttpHeaders headers_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
196 unsigned int timeout_;
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 std::auto_ptr< OrthancStone::MessageHandler<SuccessMessage> > successCallback_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
199 std::auto_ptr< OrthancStone::MessageHandler<FailureMessage> > failureCallback_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
200
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
201 public:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
202 OrthancApiOracleCommand() :
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
203 method_(Orthanc::HttpMethod_Get),
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
204 uri_("/"),
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
205 timeout_(10)
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
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
209 virtual Type GetType() const
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
210 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
211 return Type_OrthancApi;
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
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
214 void SetMethod(Orthanc::HttpMethod method)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
215 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
216 method_ = method;
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
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
219 void SetUri(const std::string& uri)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
220 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
221 uri_ = uri;
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 SetBody(const std::string& body)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
225 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
226 body_ = body;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
227 }
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 void SetBody(const Json::Value& json)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
230 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
231 Json::FastWriter writer;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
232 body_ = writer.write(json);
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 void SetHttpHeader(const std::string& key,
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
236 const std::string& value)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
237 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
238 headers_[key] = value;
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
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
241 Orthanc::HttpMethod GetMethod() const
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
242 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
243 return method_;
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
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
246 const std::string& GetUri() const
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
247 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
248 return uri_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
249 }
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 const std::string& GetBody() const
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 if (method_ == Orthanc::HttpMethod_Post ||
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
254 method_ == Orthanc::HttpMethod_Put)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
255 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
256 return body_;
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 else
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 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
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
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
264 const HttpHeaders& GetHttpHeaders() const
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
265 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
266 return headers_;
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 void SetTimeout(unsigned int seconds)
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 timeout_ = seconds;
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
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
274 unsigned int GetTimeout() const
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
275 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
276 return timeout_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
277 }
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
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
280
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
281
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
282 class NativeOracle : public IOracle
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
283 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
284 private:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
285 class Item : public Orthanc::IDynamicObject
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 private:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
288 std::auto_ptr<IOracleCommand> command_;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
289
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
290 public:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
291 Item(IOracleCommand* command) :
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
292 command_(command)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
293 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
294 if (command == NULL)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
295 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
296 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer);
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 IOracleCommand& GetCommand()
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 assert(command_.get() != NULL);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
303 return *command_;
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
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
308 enum State
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
309 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
310 State_Setup,
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
311 State_Running,
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
312 State_Stopped
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
313 };
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
314
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
315
622
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
316 IMessageEmitter& emitter_;
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
317 Orthanc::WebServiceParameters orthanc_;
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
318 Orthanc::SharedMessageQueue queue_;
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
319 State state_;
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
320 boost::mutex mutex_;
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
321 std::vector<boost::thread*> workers_;
619
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
322
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 void Execute(const OrthancApiOracleCommand& command)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
325 {
622
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
326 Orthanc::HttpClient client(orthanc_, command.GetUri());
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
327 client.SetMethod(command.GetMethod());
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
328 client.SetBody(command.GetBody());
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
329 client.SetTimeout(command.GetTimeout());
619
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
330
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 const HttpHeaders& headers = command.GetHttpHeaders();
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
333 for (HttpHeaders::const_iterator it = headers.begin(); it != headers.end(); it++ )
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
334 {
622
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
335 client.AddHeader(it->first, it->second);
619
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 std::string answer;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
340 HttpHeaders answerHeaders;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
341
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
342 bool success;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
343 try
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
344 {
622
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
345 success = client.Apply(answer, answerHeaders);
619
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 catch (Orthanc::OrthancException& e)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
348 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
349 success = false;
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
622
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
352 if (success)
619
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
353 {
622
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
354 OrthancApiOracleCommand::SuccessMessage message(command, answerHeaders, answer);
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
355 emitter_.EmitMessage(message);
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
356 }
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
357 else
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
358 {
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
359 OrthancApiOracleCommand::FailureMessage message(command, client.GetLastStatus());
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
360 emitter_.EmitMessage(message);
619
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
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
366 void Step()
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
367 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
368 std::auto_ptr<Orthanc::IDynamicObject> item(queue_.Dequeue(100));
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
369
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
370 if (item.get() != NULL)
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 const IOracleCommand& command = dynamic_cast<Item*>(item.get())->GetCommand();
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
373
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
374 switch (command.GetType())
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
375 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
376 case IOracleCommand::Type_OrthancApi:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
377 Execute(dynamic_cast<const OrthancApiOracleCommand&>(command));
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
378 break;
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 default:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
381 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
382 }
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
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
386
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
387 static void Worker(NativeOracle* that)
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 assert(that != NULL);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
390
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
391 for (;;)
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 boost::mutex::scoped_lock lock(that->mutex_);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
395 if (that->state_ != State_Running)
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 return;
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 that->Step();
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
402 }
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
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
405
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
406 void StopInternal()
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
407 {
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 boost::mutex::scoped_lock lock(mutex_);
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 if (state_ == State_Setup ||
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
412 state_ == State_Stopped)
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 return;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
415 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
416 else
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
417 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
418 state_ = State_Stopped;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
419 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
420 }
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 for (size_t i = 0; i < workers_.size(); i++)
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 if (workers_[i] != NULL)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
425 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
426 if (workers_[i]->joinable())
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 workers_[i]->join();
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 delete workers_[i];
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
432 }
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 }
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
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
437 public:
622
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
438 NativeOracle(IMessageEmitter& emitter) :
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
439 emitter_(emitter),
619
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
440 state_(State_Setup),
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
441 workers_(4)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
442 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
443 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
444
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
445 virtual ~NativeOracle()
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
446 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
447 StopInternal();
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
622
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
450 void SetOrthancParameters(const Orthanc::WebServiceParameters& orthanc)
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
451 {
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
452 boost::mutex::scoped_lock lock(mutex_);
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
453
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
454 if (state_ != State_Setup)
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
455 {
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
456 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
457 }
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
458 else
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
459 {
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
460 orthanc_ = orthanc;
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
461 }
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
462 }
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
463
619
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
464 void SetWorkersCount(unsigned int count)
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 boost::mutex::scoped_lock lock(mutex_);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
467
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
468 if (count <= 0)
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 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
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 else if (state_ != State_Setup)
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 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
475 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
476 else
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
477 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
478 workers_.resize(count);
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 }
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 void Start()
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 boost::mutex::scoped_lock lock(mutex_);
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 if (state_ != State_Setup)
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 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
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 else
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 state_ = State_Running;
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 for (unsigned int i = 0; i < workers_.size(); i++)
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 workers_[i] = new boost::thread(Worker, this);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
497 }
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 void Stop()
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 StopInternal();
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
504 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
505
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
506 virtual void Schedule(IOracleCommand* command)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
507 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
508 queue_.Enqueue(new Item(command));
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 };
622
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
511
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
512
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
513
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
514 class NativeApplicationContext : public IMessageEmitter
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
515 {
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
516 private:
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
517 boost::shared_mutex mutex_;
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
518 OrthancStone::MessageBroker broker_;
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
519 OrthancStone::IObservable oracleObservable_;
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
520
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
521 public:
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
522 NativeApplicationContext() :
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
523 oracleObservable_(broker_)
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
524 {
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
525 }
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
526
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
527
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
528 virtual void EmitMessage(const OrthancStone::IMessage& message)
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
529 {
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
530 boost::unique_lock<boost::shared_mutex> lock(mutex_);
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
531 oracleObservable_.EmitMessage(message);
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
532 }
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
533
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
534
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
535 class ReaderLock : public boost::noncopyable
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
536 {
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
537 private:
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
538 NativeApplicationContext& that_;
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
539 boost::shared_lock<boost::shared_mutex> lock_;
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
540
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
541 public:
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
542 ReaderLock(NativeApplicationContext& that) :
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
543 that_(that),
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
544 lock_(that.mutex_)
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
545 {
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
546 }
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
547 };
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
548
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
549
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
550 class WriterLock : public boost::noncopyable
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
551 {
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
552 private:
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
553 NativeApplicationContext& that_;
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
554 boost::unique_lock<boost::shared_mutex> lock_;
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
555
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
556 public:
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
557 WriterLock(NativeApplicationContext& that) :
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
558 that_(that),
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
559 lock_(that.mutex_)
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
560 {
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
561 }
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
562
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
563 OrthancStone::MessageBroker& GetBroker()
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
564 {
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
565 return that_.broker_;
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
566 }
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
567
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
568 OrthancStone::IObservable& GetOracleObservable()
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
569 {
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
570 return that_.oracleObservable_;
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
571 }
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
572 };
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
573 };
619
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
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 class Toto : public OrthancStone::IObserver
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 private:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
581 void Handle(const Refactoring::OrthancApiOracleCommand::SuccessMessage& message)
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 Json::Value v;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
584 message.GetJsonBody(v);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
585
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
586 printf("ICI [%s]\n", v.toStyledString().c_str());
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
587 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
588
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
589 void Handle(const Refactoring::OrthancApiOracleCommand::FailureMessage& message)
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 printf("ERROR %d\n", message.GetHttpStatus());
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
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
594 public:
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
595 Toto(OrthancStone::IObservable& oracle) :
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
596 IObserver(oracle.GetBroker())
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 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
599 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
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
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
603
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
604 void Run(Refactoring::NativeApplicationContext& context)
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 std::auto_ptr<Toto> toto;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
607
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
608 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
609 Refactoring::NativeApplicationContext::WriterLock lock(context);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
610 toto.reset(new Toto(lock.GetOracleObservable()));
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
611 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
612
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
613 Refactoring::NativeOracle oracle(context);
622
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
614
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
615 {
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
616 Orthanc::WebServiceParameters p;
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
617 //p.SetUrl("http://localhost:8043/");
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
618 p.SetCredentials("orthanc", "orthanc");
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
619 oracle.SetOrthancParameters(p);
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
620 }
8a3a25f2d42c uncoupling oracle from context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
621
619
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
622 oracle.Start();
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 Json::Value v = Json::objectValue;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
626 v["Level"] = "Series";
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
627 v["Query"] = Json::objectValue;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
628
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
629 std::auto_ptr<Refactoring::OrthancApiOracleCommand> command(new Refactoring::OrthancApiOracleCommand);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
630 command->SetMethod(Orthanc::HttpMethod_Post);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
631 command->SetUri("/tools/find");
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
632 command->SetBody(v);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
633
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
634 oracle.Schedule(command.release());
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
635 }
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 boost::this_thread::sleep(boost::posix_time::seconds(1));
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
638
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
639 oracle.Stop();
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
640 }
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
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 * IMPORTANT: The full arguments to "main()" are needed for SDL on
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
646 * Windows. Otherwise, one gets the linking error "undefined reference
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
647 * to `SDL_main'". https://wiki.libsdl.org/FAQWindows
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
648 **/
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
649 int main(int argc, char* argv[])
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
650 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
651 OrthancStone::StoneInitialize();
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
652 Orthanc::Logging::EnableInfoLevel(true);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
653
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
654 try
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
655 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
656 Refactoring::NativeApplicationContext context;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
657 Run(context);
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
658 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
659 catch (Orthanc::OrthancException& e)
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
660 {
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
661 LOG(ERROR) << "EXCEPTION: " << e.What();
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
662 }
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
663
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
664 OrthancStone::StoneFinalize();
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
665
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
666 return 0;
9cd19b28f011 test: refactoring oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
667 }