Mercurial > hg > orthanc
annotate OrthancServer/Sources/LuaScripting.cpp @ 4889:d8c8274d4e41
cppcheck
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Sat, 19 Feb 2022 12:17:41 +0100 |
parents | 43e613a7756b |
children | 6eff25f70121 |
rev | line source |
---|---|
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1 /** |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
2 * Orthanc - A Lightweight, RESTful DICOM Store |
1900 | 3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
4 * Department, University Hospital of Liege, Belgium |
4870
43e613a7756b
upgrade to year 2022
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4831
diff
changeset
|
5 * Copyright (C) 2017-2022 Osimis S.A., Belgium |
43e613a7756b
upgrade to year 2022
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4831
diff
changeset
|
6 * Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
7 * |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
8 * This program is free software: you can redistribute it and/or |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
9 * modify it under the terms of the GNU General Public License as |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
10 * published by the Free Software Foundation, either version 3 of the |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
11 * License, or (at your option) any later version. |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
12 * |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
13 * In addition, as a special exception, the copyright holders of this |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
14 * program give permission to link the code of its release with the |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
15 * OpenSSL project's "OpenSSL" library (or with modified versions of it |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
16 * that use the same license as the "OpenSSL" library), and distribute |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
17 * the linked executables. You must obey the GNU General Public License |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
18 * in all respects for all of the code used other than "OpenSSL". If you |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
19 * modify file(s) with this exception, you may extend this exception to |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
20 * your version of the file(s), but you are not obligated to do so. If |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
21 * you do not wish to do so, delete this exception statement from your |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
22 * version. If you delete this exception statement from all source files |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
23 * in the program, then also delete it here. |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
24 * |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
25 * This program is distributed in the hope that it will be useful, but |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
26 * WITHOUT ANY WARRANTY; without even the implied warranty of |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
27 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
28 * General Public License for more details. |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
29 * |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
30 * You should have received a copy of the GNU General Public License |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
31 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
32 **/ |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
33 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
34 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
35 #include "PrecompiledHeadersServer.h" |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
36 #include "LuaScripting.h" |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
37 |
2940
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2799
diff
changeset
|
38 #include "OrthancConfiguration.h" |
2609
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
39 #include "OrthancRestApi/OrthancRestApi.h" |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
40 #include "ServerContext.h" |
2609
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
41 |
4554 | 42 #include "../../OrthancFramework/Sources/DicomParsing/FromDcmtkBridge.h" |
4045 | 43 #include "../../OrthancFramework/Sources/HttpServer/StringHttpOutput.h" |
44 #include "../../OrthancFramework/Sources/Logging.h" | |
45 #include "../../OrthancFramework/Sources/Lua/LuaFunctionCall.h" | |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
46 |
4796
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
47 #include <dcmtk/dcmnet/dimse.h> |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
48 |
4032
058b5ade8acd
renaming embedded resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4031
diff
changeset
|
49 #include <OrthancServerResources.h> |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
50 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
51 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
52 namespace Orthanc |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
53 { |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
54 class LuaScripting::IEvent : public IDynamicObject |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
55 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
56 public: |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
57 virtual void Apply(LuaScripting& lock) = 0; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
58 }; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
59 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
60 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
61 class LuaScripting::OnStoredInstanceEvent : public LuaScripting::IEvent |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
62 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
63 private: |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
64 std::string instanceId_; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
65 Json::Value simplifiedTags_; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
66 Json::Value metadata_; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
67 Json::Value origin_; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
68 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
69 public: |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
70 OnStoredInstanceEvent(const std::string& instanceId, |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
71 const Json::Value& simplifiedTags, |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
72 const Json::Value& metadata, |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
73 const DicomInstanceToStore& instance) : |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
74 instanceId_(instanceId), |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
75 simplifiedTags_(simplifiedTags), |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
76 metadata_(metadata) |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
77 { |
2640
c691fcf66071
ResourceModificationJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2638
diff
changeset
|
78 instance.GetOrigin().Format(origin_); |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
79 } |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
80 |
4204 | 81 virtual void Apply(LuaScripting& that) ORTHANC_OVERRIDE |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
82 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
83 static const char* NAME = "OnStoredInstance"; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
84 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
85 LuaScripting::Lock lock(that); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
86 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
87 if (lock.GetLua().IsExistingFunction(NAME)) |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
88 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
89 that.InitializeJob(); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
90 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
91 LuaFunctionCall call(lock.GetLua(), NAME); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
92 call.PushString(instanceId_); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
93 call.PushJson(simplifiedTags_); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
94 call.PushJson(metadata_); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
95 call.PushJson(origin_); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
96 call.Execute(); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
97 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
98 that.SubmitJob(); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
99 } |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
100 } |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
101 }; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
102 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
103 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
104 class LuaScripting::ExecuteEvent : public LuaScripting::IEvent |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
105 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
106 private: |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
107 std::string command_; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
108 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
109 public: |
4204 | 110 explicit ExecuteEvent(const std::string& command) : |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
111 command_(command) |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
112 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
113 } |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
114 |
4204 | 115 virtual void Apply(LuaScripting& that) ORTHANC_OVERRIDE |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
116 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
117 LuaScripting::Lock lock(that); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
118 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
119 if (lock.GetLua().IsExistingFunction(command_.c_str())) |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
120 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
121 LuaFunctionCall call(lock.GetLua(), command_.c_str()); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
122 call.Execute(); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
123 } |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
124 } |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
125 }; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
126 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
127 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
128 class LuaScripting::StableResourceEvent : public LuaScripting::IEvent |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
129 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
130 private: |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
131 ServerIndexChange change_; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
132 |
4551
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
133 class GetInfoOperations : public ServerIndex::IReadOnlyOperations |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
134 { |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
135 private: |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
136 const ServerIndexChange& change_; |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
137 bool ok_; |
4554 | 138 DicomMap tags_; |
4551
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
139 std::map<MetadataType, std::string> metadata_; |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
140 |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
141 public: |
4555 | 142 explicit GetInfoOperations(const ServerIndexChange& change) : |
4551
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
143 change_(change), |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
144 ok_(false) |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
145 { |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
146 } |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
147 |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
148 virtual void Apply(ServerIndex::ReadOnlyTransaction& transaction) ORTHANC_OVERRIDE |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
149 { |
4554 | 150 int64_t internalId; |
151 ResourceType level; | |
152 if (transaction.LookupResource(internalId, level, change_.GetPublicId()) && | |
153 level == change_.GetResourceType()) | |
4551
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
154 { |
4554 | 155 transaction.GetMainDicomTags(tags_, internalId); |
156 transaction.GetAllMetadata(metadata_, internalId); | |
4551
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
157 ok_ = true; |
4554 | 158 } |
4551
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
159 } |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
160 |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
161 void CallLua(LuaScripting& that, |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
162 const char* name) const |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
163 { |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
164 if (ok_) |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
165 { |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
166 Json::Value formattedMetadata = Json::objectValue; |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
167 |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
168 for (std::map<MetadataType, std::string>::const_iterator |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
169 it = metadata_.begin(); it != metadata_.end(); ++it) |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
170 { |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
171 std::string key = EnumerationToString(it->first); |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
172 formattedMetadata[key] = it->second; |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
173 } |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
174 |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
175 { |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
176 LuaScripting::Lock lock(that); |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
177 |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
178 if (lock.GetLua().IsExistingFunction(name)) |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
179 { |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
180 that.InitializeJob(); |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
181 |
4554 | 182 Json::Value json = Json::objectValue; |
183 | |
184 if (change_.GetResourceType() == ResourceType_Study) | |
185 { | |
186 DicomMap t; | |
187 tags_.ExtractStudyInformation(t); // Discard patient-related tags | |
4697
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4606
diff
changeset
|
188 FromDcmtkBridge::ToJson(json, t, DicomToJsonFormat_Human); |
4554 | 189 } |
190 else | |
191 { | |
4697
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4606
diff
changeset
|
192 FromDcmtkBridge::ToJson(json, tags_, DicomToJsonFormat_Human); |
4554 | 193 } |
194 | |
4551
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
195 LuaFunctionCall call(lock.GetLua(), name); |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
196 call.PushString(change_.GetPublicId()); |
4554 | 197 call.PushJson(json); |
4551
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
198 call.PushJson(formattedMetadata); |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
199 call.Execute(); |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
200 |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
201 that.SubmitJob(); |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
202 } |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
203 } |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
204 } |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
205 } |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
206 }; |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
207 |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
208 |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
209 public: |
4204 | 210 explicit StableResourceEvent(const ServerIndexChange& change) : |
211 change_(change) | |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
212 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
213 } |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
214 |
4204 | 215 virtual void Apply(LuaScripting& that) ORTHANC_OVERRIDE |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
216 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
217 const char* name; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
218 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
219 switch (change_.GetChangeType()) |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
220 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
221 case ChangeType_StablePatient: |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
222 name = "OnStablePatient"; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
223 break; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
224 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
225 case ChangeType_StableStudy: |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
226 name = "OnStableStudy"; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
227 break; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
228 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
229 case ChangeType_StableSeries: |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
230 name = "OnStableSeries"; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
231 break; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
232 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
233 default: |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
234 throw OrthancException(ErrorCode_InternalError); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
235 } |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
236 |
2638
25ae209dcea9
Avoid unnecessary calls to the database if there is no Lua callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2620
diff
changeset
|
237 { |
25ae209dcea9
Avoid unnecessary calls to the database if there is no Lua callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2620
diff
changeset
|
238 // Avoid unnecessary calls to the database if there's no Lua callback |
25ae209dcea9
Avoid unnecessary calls to the database if there is no Lua callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2620
diff
changeset
|
239 LuaScripting::Lock lock(that); |
25ae209dcea9
Avoid unnecessary calls to the database if there is no Lua callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2620
diff
changeset
|
240 |
25ae209dcea9
Avoid unnecessary calls to the database if there is no Lua callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2620
diff
changeset
|
241 if (!lock.GetLua().IsExistingFunction(name)) |
25ae209dcea9
Avoid unnecessary calls to the database if there is no Lua callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2620
diff
changeset
|
242 { |
25ae209dcea9
Avoid unnecessary calls to the database if there is no Lua callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2620
diff
changeset
|
243 return; |
25ae209dcea9
Avoid unnecessary calls to the database if there is no Lua callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2620
diff
changeset
|
244 } |
25ae209dcea9
Avoid unnecessary calls to the database if there is no Lua callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2620
diff
changeset
|
245 } |
25ae209dcea9
Avoid unnecessary calls to the database if there is no Lua callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2620
diff
changeset
|
246 |
4551
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
247 GetInfoOperations operations(change_); |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
248 that.context_.GetIndex().Apply(operations); |
350a22c094f2
testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
249 operations.CallLua(that, name); |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
250 } |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
251 }; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
252 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
253 |
2675
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
254 class LuaScripting::JobEvent : public LuaScripting::IEvent |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
255 { |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
256 public: |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
257 enum Type |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
258 { |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
259 Type_Failure, |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
260 Type_Submitted, |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
261 Type_Success |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
262 }; |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
263 |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
264 private: |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
265 Type type_; |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
266 std::string jobId_; |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
267 |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
268 public: |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
269 JobEvent(Type type, |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
270 const std::string& jobId) : |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
271 type_(type), |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
272 jobId_(jobId) |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
273 { |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
274 } |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
275 |
4204 | 276 virtual void Apply(LuaScripting& that) ORTHANC_OVERRIDE |
2675
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
277 { |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
278 std::string functionName; |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
279 |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
280 switch (type_) |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
281 { |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
282 case Type_Failure: |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
283 functionName = "OnJobFailure"; |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
284 break; |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
285 |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
286 case Type_Submitted: |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
287 functionName = "OnJobSubmitted"; |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
288 break; |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
289 |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
290 case Type_Success: |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
291 functionName = "OnJobSuccess"; |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
292 break; |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
293 |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
294 default: |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
295 throw OrthancException(ErrorCode_InternalError); |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
296 } |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
297 |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
298 { |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
299 LuaScripting::Lock lock(that); |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
300 |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
301 if (lock.GetLua().IsExistingFunction(functionName.c_str())) |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
302 { |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
303 LuaFunctionCall call(lock.GetLua(), functionName.c_str()); |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
304 call.PushString(jobId_); |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
305 call.Execute(); |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
306 } |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
307 } |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
308 } |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
309 }; |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
310 |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
311 |
3676
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
312 class LuaScripting::DeleteEvent : public LuaScripting::IEvent |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
313 { |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
314 private: |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
315 ResourceType level_; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
316 std::string publicId_; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
317 |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
318 public: |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
319 DeleteEvent(ResourceType level, |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
320 const std::string& publicId) : |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
321 level_(level), |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
322 publicId_(publicId) |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
323 { |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
324 } |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
325 |
4204 | 326 virtual void Apply(LuaScripting& that) ORTHANC_OVERRIDE |
3676
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
327 { |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
328 std::string functionName; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
329 |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
330 switch (level_) |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
331 { |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
332 case ResourceType_Patient: |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
333 functionName = "OnDeletedPatient"; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
334 break; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
335 |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
336 case ResourceType_Study: |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
337 functionName = "OnDeletedStudy"; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
338 break; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
339 |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
340 case ResourceType_Series: |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
341 functionName = "OnDeletedSeries"; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
342 break; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
343 |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
344 case ResourceType_Instance: |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
345 functionName = "OnDeletedInstance"; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
346 break; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
347 |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
348 default: |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
349 throw OrthancException(ErrorCode_InternalError); |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
350 } |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
351 |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
352 { |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
353 LuaScripting::Lock lock(that); |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
354 |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
355 if (lock.GetLua().IsExistingFunction(functionName.c_str())) |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
356 { |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
357 LuaFunctionCall call(lock.GetLua(), functionName.c_str()); |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
358 call.PushString(publicId_); |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
359 call.Execute(); |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
360 } |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
361 } |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
362 } |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
363 }; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
364 |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
365 |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
366 class LuaScripting::UpdateEvent : public LuaScripting::IEvent |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
367 { |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
368 private: |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
369 ResourceType level_; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
370 std::string publicId_; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
371 |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
372 public: |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
373 UpdateEvent(ResourceType level, |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
374 const std::string& publicId) : |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
375 level_(level), |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
376 publicId_(publicId) |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
377 { |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
378 } |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
379 |
4204 | 380 virtual void Apply(LuaScripting& that) ORTHANC_OVERRIDE |
3676
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
381 { |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
382 std::string functionName; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
383 |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
384 switch (level_) |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
385 { |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
386 case ResourceType_Patient: |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
387 functionName = "OnUpdatedPatient"; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
388 break; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
389 |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
390 case ResourceType_Study: |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
391 functionName = "OnUpdatedStudy"; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
392 break; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
393 |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
394 case ResourceType_Series: |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
395 functionName = "OnUpdatedSeries"; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
396 break; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
397 |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
398 case ResourceType_Instance: |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
399 functionName = "OnUpdatedInstance"; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
400 break; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
401 |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
402 default: |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
403 throw OrthancException(ErrorCode_InternalError); |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
404 } |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
405 |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
406 { |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
407 LuaScripting::Lock lock(that); |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
408 |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
409 if (lock.GetLua().IsExistingFunction(functionName.c_str())) |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
410 { |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
411 LuaFunctionCall call(lock.GetLua(), functionName.c_str()); |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
412 call.PushString(publicId_); |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
413 call.Execute(); |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
414 } |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
415 } |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
416 } |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
417 }; |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
418 |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
419 |
1444
b2b09a3dbd8e
refactoring: OrthancHttpHandler inside OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1441
diff
changeset
|
420 ServerContext* LuaScripting::GetServerContext(lua_State *state) |
1437
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
421 { |
1444
b2b09a3dbd8e
refactoring: OrthancHttpHandler inside OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1441
diff
changeset
|
422 const void* value = LuaContext::GetGlobalVariable(state, "_ServerContext"); |
b2b09a3dbd8e
refactoring: OrthancHttpHandler inside OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1441
diff
changeset
|
423 return const_cast<ServerContext*>(reinterpret_cast<const ServerContext*>(value)); |
1437
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
424 } |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
425 |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
426 |
1447
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
427 // Syntax in Lua: RestApiGet(uri, builtin) |
1444
b2b09a3dbd8e
refactoring: OrthancHttpHandler inside OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1441
diff
changeset
|
428 int LuaScripting::RestApiGet(lua_State *state) |
1437
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
429 { |
1444
b2b09a3dbd8e
refactoring: OrthancHttpHandler inside OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1441
diff
changeset
|
430 ServerContext* serverContext = GetServerContext(state); |
b2b09a3dbd8e
refactoring: OrthancHttpHandler inside OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1441
diff
changeset
|
431 if (serverContext == NULL) |
1437
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
432 { |
1440 | 433 LOG(ERROR) << "Lua: The Orthanc API is unavailable"; |
1437
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
434 lua_pushnil(state); |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
435 return 1; |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
436 } |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
437 |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
438 // Check the types of the arguments |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
439 int nArgs = lua_gettop(state); |
3442
dd1e68f2d0c0
Fix issue #106 (Unable to export preview as jpeg from Lua script)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3187
diff
changeset
|
440 if (nArgs < 1 || nArgs > 3 || |
1444
b2b09a3dbd8e
refactoring: OrthancHttpHandler inside OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1441
diff
changeset
|
441 !lua_isstring(state, 1) || // URI |
3442
dd1e68f2d0c0
Fix issue #106 (Unable to export preview as jpeg from Lua script)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3187
diff
changeset
|
442 (nArgs >= 2 && !lua_isboolean(state, 2))) // Restrict to built-in API? |
1437
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
443 { |
1444
b2b09a3dbd8e
refactoring: OrthancHttpHandler inside OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1441
diff
changeset
|
444 LOG(ERROR) << "Lua: Bad parameters to RestApiGet()"; |
1437
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
445 lua_pushnil(state); |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
446 return 1; |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
447 } |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
448 |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
449 const char* uri = lua_tostring(state, 1); |
1545 | 450 bool builtin = (nArgs == 2 ? lua_toboolean(state, 2) != 0 : false); |
1444
b2b09a3dbd8e
refactoring: OrthancHttpHandler inside OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1441
diff
changeset
|
451 |
3442
dd1e68f2d0c0
Fix issue #106 (Unable to export preview as jpeg from Lua script)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3187
diff
changeset
|
452 std::map<std::string, std::string> headers; |
dd1e68f2d0c0
Fix issue #106 (Unable to export preview as jpeg from Lua script)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3187
diff
changeset
|
453 LuaContext::GetDictionaryArgument(headers, state, 3, true /* HTTP header key to lower case */); |
dd1e68f2d0c0
Fix issue #106 (Unable to export preview as jpeg from Lua script)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3187
diff
changeset
|
454 |
1658
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
455 try |
1437
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
456 { |
1658
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
457 std::string result; |
4605
c8f444e8556d
new function in the plugin SDK: OrthancPluginCallRestApi()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
458 if (IHttpHandler::SimpleGet(result, NULL, serverContext->GetHttpHandler().RestrictToOrthancRestApi(builtin), |
c8f444e8556d
new function in the plugin SDK: OrthancPluginCallRestApi()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
459 RequestOrigin_Lua, uri, headers) == HttpStatus_200_Ok) |
1658
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
460 { |
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
461 lua_pushlstring(state, result.c_str(), result.size()); |
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
462 return 1; |
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
463 } |
1437
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
464 } |
1658
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
465 catch (OrthancException& e) |
1437
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
466 { |
1658
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
467 LOG(ERROR) << "Lua: " << e.What(); |
1447
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
468 } |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
469 |
1658
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
470 LOG(ERROR) << "Lua: Error in RestApiGet() for URI: " << uri; |
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
471 lua_pushnil(state); |
1447
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
472 return 1; |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
473 } |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
474 |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
475 |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
476 int LuaScripting::RestApiPostOrPut(lua_State *state, |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
477 bool isPost) |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
478 { |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
479 ServerContext* serverContext = GetServerContext(state); |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
480 if (serverContext == NULL) |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
481 { |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
482 LOG(ERROR) << "Lua: The Orthanc API is unavailable"; |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
483 lua_pushnil(state); |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
484 return 1; |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
485 } |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
486 |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
487 // Check the types of the arguments |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
488 int nArgs = lua_gettop(state); |
3442
dd1e68f2d0c0
Fix issue #106 (Unable to export preview as jpeg from Lua script)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3187
diff
changeset
|
489 if (nArgs < 2 || nArgs > 4 || |
1447
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
490 !lua_isstring(state, 1) || // URI |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
491 !lua_isstring(state, 2) || // Body |
3442
dd1e68f2d0c0
Fix issue #106 (Unable to export preview as jpeg from Lua script)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3187
diff
changeset
|
492 (nArgs >= 3 && !lua_isboolean(state, 3))) // Restrict to built-in API? |
1447
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
493 { |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
494 LOG(ERROR) << "Lua: Bad parameters to " << (isPost ? "RestApiPost()" : "RestApiPut()"); |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
495 lua_pushnil(state); |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
496 return 1; |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
497 } |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
498 |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
499 const char* uri = lua_tostring(state, 1); |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
500 size_t bodySize = 0; |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
501 const char* bodyData = lua_tolstring(state, 2, &bodySize); |
1545 | 502 bool builtin = (nArgs == 3 ? lua_toboolean(state, 3) != 0 : false); |
1447
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
503 |
3442
dd1e68f2d0c0
Fix issue #106 (Unable to export preview as jpeg from Lua script)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3187
diff
changeset
|
504 std::map<std::string, std::string> headers; |
dd1e68f2d0c0
Fix issue #106 (Unable to export preview as jpeg from Lua script)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3187
diff
changeset
|
505 LuaContext::GetDictionaryArgument(headers, state, 4, true /* HTTP header key to lower case */); |
dd1e68f2d0c0
Fix issue #106 (Unable to export preview as jpeg from Lua script)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3187
diff
changeset
|
506 |
1658
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
507 try |
1447
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
508 { |
1658
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
509 std::string result; |
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
510 if (isPost ? |
4605
c8f444e8556d
new function in the plugin SDK: OrthancPluginCallRestApi()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
511 IHttpHandler::SimplePost(result, NULL, |
c8f444e8556d
new function in the plugin SDK: OrthancPluginCallRestApi()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
512 serverContext->GetHttpHandler().RestrictToOrthancRestApi(builtin), |
c8f444e8556d
new function in the plugin SDK: OrthancPluginCallRestApi()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
513 RequestOrigin_Lua, uri, bodyData, bodySize, headers) == HttpStatus_200_Ok : |
c8f444e8556d
new function in the plugin SDK: OrthancPluginCallRestApi()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
514 IHttpHandler::SimplePut(result, NULL, |
c8f444e8556d
new function in the plugin SDK: OrthancPluginCallRestApi()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
515 serverContext->GetHttpHandler().RestrictToOrthancRestApi(builtin), |
c8f444e8556d
new function in the plugin SDK: OrthancPluginCallRestApi()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
516 RequestOrigin_Lua, uri, bodyData, bodySize, headers) == HttpStatus_200_Ok) |
1658
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
517 { |
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
518 lua_pushlstring(state, result.c_str(), result.size()); |
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
519 return 1; |
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
520 } |
1447
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
521 } |
1658
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
522 catch (OrthancException& e) |
1447
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
523 { |
1658
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
524 LOG(ERROR) << "Lua: " << e.What(); |
1447
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
525 } |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
526 |
1658
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
527 LOG(ERROR) << "Lua: Error in " << (isPost ? "RestApiPost()" : "RestApiPut()") << " for URI: " << uri; |
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
528 lua_pushnil(state); |
1447
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
529 return 1; |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
530 } |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
531 |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
532 |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
533 // Syntax in Lua: RestApiPost(uri, body, builtin) |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
534 int LuaScripting::RestApiPost(lua_State *state) |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
535 { |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
536 return RestApiPostOrPut(state, true); |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
537 } |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
538 |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
539 |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
540 // Syntax in Lua: RestApiPut(uri, body, builtin) |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
541 int LuaScripting::RestApiPut(lua_State *state) |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
542 { |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
543 return RestApiPostOrPut(state, false); |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
544 } |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
545 |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
546 |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
547 // Syntax in Lua: RestApiDelete(uri, builtin) |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
548 int LuaScripting::RestApiDelete(lua_State *state) |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
549 { |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
550 ServerContext* serverContext = GetServerContext(state); |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
551 if (serverContext == NULL) |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
552 { |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
553 LOG(ERROR) << "Lua: The Orthanc API is unavailable"; |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
554 lua_pushnil(state); |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
555 return 1; |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
556 } |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
557 |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
558 // Check the types of the arguments |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
559 int nArgs = lua_gettop(state); |
3442
dd1e68f2d0c0
Fix issue #106 (Unable to export preview as jpeg from Lua script)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3187
diff
changeset
|
560 if (nArgs < 1 || nArgs > 3 || |
1447
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
561 !lua_isstring(state, 1) || // URI |
3442
dd1e68f2d0c0
Fix issue #106 (Unable to export preview as jpeg from Lua script)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3187
diff
changeset
|
562 (nArgs >= 2 && !lua_isboolean(state, 2))) // Restrict to built-in API? |
1447
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
563 { |
1449 | 564 LOG(ERROR) << "Lua: Bad parameters to RestApiDelete()"; |
1447
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
565 lua_pushnil(state); |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
566 return 1; |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
567 } |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
568 |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
569 const char* uri = lua_tostring(state, 1); |
1545 | 570 bool builtin = (nArgs == 2 ? lua_toboolean(state, 2) != 0 : false); |
1447
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
571 |
3442
dd1e68f2d0c0
Fix issue #106 (Unable to export preview as jpeg from Lua script)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3187
diff
changeset
|
572 std::map<std::string, std::string> headers; |
dd1e68f2d0c0
Fix issue #106 (Unable to export preview as jpeg from Lua script)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3187
diff
changeset
|
573 LuaContext::GetDictionaryArgument(headers, state, 3, true /* HTTP header key to lower case */); |
dd1e68f2d0c0
Fix issue #106 (Unable to export preview as jpeg from Lua script)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3187
diff
changeset
|
574 |
1658
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
575 try |
1447
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
576 { |
4605
c8f444e8556d
new function in the plugin SDK: OrthancPluginCallRestApi()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
577 if (IHttpHandler::SimpleDelete(NULL, serverContext->GetHttpHandler().RestrictToOrthancRestApi(builtin), |
c8f444e8556d
new function in the plugin SDK: OrthancPluginCallRestApi()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
578 RequestOrigin_Lua, uri, headers) == HttpStatus_200_Ok) |
1658
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
579 { |
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
580 lua_pushboolean(state, 1); |
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
581 return 1; |
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
582 } |
1447
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
583 } |
1658
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
584 catch (OrthancException& e) |
1447
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
585 { |
1658
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
586 LOG(ERROR) << "Lua: " << e.What(); |
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
587 } |
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
588 |
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
589 LOG(ERROR) << "Lua: Error in RestApiDelete() for URI: " << uri; |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
590 lua_pushnil(state); |
1437
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
591 |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
592 return 1; |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
593 } |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
594 |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
595 |
1587
d7e569640d09
New function "GetOrthancConfiguration()" to get the Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1574
diff
changeset
|
596 // Syntax in Lua: GetOrthancConfiguration() |
d7e569640d09
New function "GetOrthancConfiguration()" to get the Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1574
diff
changeset
|
597 int LuaScripting::GetOrthancConfiguration(lua_State *state) |
d7e569640d09
New function "GetOrthancConfiguration()" to get the Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1574
diff
changeset
|
598 { |
d7e569640d09
New function "GetOrthancConfiguration()" to get the Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1574
diff
changeset
|
599 Json::Value configuration; |
2940
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2799
diff
changeset
|
600 |
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2799
diff
changeset
|
601 { |
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2799
diff
changeset
|
602 OrthancConfiguration::ReaderLock lock; |
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2799
diff
changeset
|
603 configuration = lock.GetJson(); |
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2799
diff
changeset
|
604 } |
1587
d7e569640d09
New function "GetOrthancConfiguration()" to get the Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1574
diff
changeset
|
605 |
d7e569640d09
New function "GetOrthancConfiguration()" to get the Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1574
diff
changeset
|
606 LuaContext::GetLuaContext(state).PushJson(configuration); |
d7e569640d09
New function "GetOrthancConfiguration()" to get the Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1574
diff
changeset
|
607 |
d7e569640d09
New function "GetOrthancConfiguration()" to get the Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1574
diff
changeset
|
608 return 1; |
d7e569640d09
New function "GetOrthancConfiguration()" to get the Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1574
diff
changeset
|
609 } |
d7e569640d09
New function "GetOrthancConfiguration()" to get the Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1574
diff
changeset
|
610 |
d7e569640d09
New function "GetOrthancConfiguration()" to get the Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1574
diff
changeset
|
611 |
2609
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
612 size_t LuaScripting::ParseOperation(LuaJobManager::Lock& lock, |
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
613 const std::string& operation, |
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
614 const Json::Value& parameters) |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
615 { |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
616 if (operation == "delete") |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
617 { |
1435
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
618 LOG(INFO) << "Lua script to delete resource " << parameters["Resource"].asString(); |
2609
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
619 return lock.AddDeleteResourceOperation(context_); |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
620 } |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
621 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
622 if (operation == "store-scu") |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
623 { |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
624 std::string localAet; |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
625 if (parameters.isMember("LocalAet")) |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
626 { |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
627 localAet = parameters["LocalAet"].asString(); |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
628 } |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
629 else |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
630 { |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
631 localAet = context_.GetDefaultLocalApplicationEntityTitle(); |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
632 } |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
633 |
2609
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
634 std::string name = parameters["Modality"].asString(); |
2940
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2799
diff
changeset
|
635 RemoteModalityParameters modality; |
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2799
diff
changeset
|
636 |
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2799
diff
changeset
|
637 { |
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2799
diff
changeset
|
638 OrthancConfiguration::ReaderLock configLock; |
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2799
diff
changeset
|
639 modality = configLock.GetConfiguration().GetModalityUsingSymbolicName(name); |
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2799
diff
changeset
|
640 } |
2222
21713ce8717b
Fix handling of Move Originator AET and ID in C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
641 |
21713ce8717b
Fix handling of Move Originator AET and ID in C-MOVE SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
642 // This is not a C-MOVE: No need to call "StoreScuCommand::SetMoveOriginator()" |
3894
8f7ad4989fec
transcoding to uncompressed transfer syntaxes over DICOM protocol is implemented
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3851
diff
changeset
|
643 return lock.AddStoreScuOperation(context_, localAet, modality); |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
644 } |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
645 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
646 if (operation == "store-peer") |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
647 { |
2940
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2799
diff
changeset
|
648 OrthancConfiguration::ReaderLock configLock; |
2609
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
649 std::string name = parameters["Peer"].asString(); |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
650 |
2609
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
651 WebServiceParameters peer; |
2944
f395460af74d
simplifying OrthancConfiguration for modalities/peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2940
diff
changeset
|
652 if (configLock.GetConfiguration().LookupOrthancPeer(peer, name)) |
2799
6e3a60b85da6
New primitives to access Orthanc peers from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2738
diff
changeset
|
653 { |
6e3a60b85da6
New primitives to access Orthanc peers from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2738
diff
changeset
|
654 return lock.AddStorePeerOperation(peer); |
6e3a60b85da6
New primitives to access Orthanc peers from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2738
diff
changeset
|
655 } |
6e3a60b85da6
New primitives to access Orthanc peers from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2738
diff
changeset
|
656 else |
6e3a60b85da6
New primitives to access Orthanc peers from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2738
diff
changeset
|
657 { |
2955 | 658 throw OrthancException(ErrorCode_UnknownResource, |
659 "No peer with symbolic name: " + name); | |
2799
6e3a60b85da6
New primitives to access Orthanc peers from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2738
diff
changeset
|
660 } |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
661 } |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
662 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
663 if (operation == "modify") |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
664 { |
3712
2a170a8f1faf
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3676
diff
changeset
|
665 std::unique_ptr<DicomModification> modification(new DicomModification); |
2519
2e6b7862ccf2
ParseAnonymizationRequest/ParseModifyRequest now in DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2447
diff
changeset
|
666 modification->ParseModifyRequest(parameters); |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
667 |
2609
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
668 return lock.AddModifyInstanceOperation(context_, modification.release()); |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
669 } |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
670 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
671 if (operation == "call-system") |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
672 { |
1435
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
673 LOG(INFO) << "Lua script to call system command on " << parameters["Resource"].asString(); |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
674 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
675 const Json::Value& argsIn = parameters["Arguments"]; |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
676 if (argsIn.type() != Json::arrayValue) |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
677 { |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
678 throw OrthancException(ErrorCode_BadParameterType); |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
679 } |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
680 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
681 std::vector<std::string> args; |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
682 args.reserve(argsIn.size()); |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
683 for (Json::Value::ArrayIndex i = 0; i < argsIn.size(); ++i) |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
684 { |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
685 // http://jsoncpp.sourceforge.net/namespace_json.html#7d654b75c16a57007925868e38212b4e |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
686 switch (argsIn[i].type()) |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
687 { |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
688 case Json::stringValue: |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
689 args.push_back(argsIn[i].asString()); |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
690 break; |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
691 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
692 case Json::intValue: |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
693 args.push_back(boost::lexical_cast<std::string>(argsIn[i].asInt())); |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
694 break; |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
695 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
696 case Json::uintValue: |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
697 args.push_back(boost::lexical_cast<std::string>(argsIn[i].asUInt())); |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
698 break; |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
699 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
700 case Json::realValue: |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
701 args.push_back(boost::lexical_cast<std::string>(argsIn[i].asFloat())); |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
702 break; |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
703 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
704 default: |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
705 throw OrthancException(ErrorCode_BadParameterType); |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
706 } |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
707 } |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
708 |
2609
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
709 std::string command = parameters["Command"].asString(); |
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
710 std::vector<std::string> postArgs; |
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
711 |
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
712 return lock.AddSystemCallOperation(command, args, postArgs); |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
713 } |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
714 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
715 throw OrthancException(ErrorCode_ParameterOutOfRange); |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
716 } |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
717 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
718 |
1435
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
719 void LuaScripting::InitializeJob() |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
720 { |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
721 lua_.Execute("_InitializeJob()"); |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
722 } |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
723 |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
724 |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
725 void LuaScripting::SubmitJob() |
1435
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
726 { |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
727 Json::Value operations; |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
728 LuaFunctionCall call2(lua_, "_AccessJob"); |
1658
54bafe0e7e7b
Optional argument "keepStrings" in "DumpJson()"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
729 call2.ExecuteToJson(operations, false); |
1435
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
730 |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
731 if (operations.type() != Json::arrayValue) |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
732 { |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
733 throw OrthancException(ErrorCode_InternalError); |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
734 } |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
735 |
2609
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
736 LuaJobManager::Lock lock(jobManager_, context_.GetJobsEngine()); |
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
737 |
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
738 bool isFirst = true; |
2727 | 739 size_t previous = 0; // Dummy initialization to avoid warning |
1435
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
740 |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
741 for (Json::Value::ArrayIndex i = 0; i < operations.size(); ++i) |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
742 { |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
743 if (operations[i].type() != Json::objectValue || |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
744 !operations[i].isMember("Operation")) |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
745 { |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
746 throw OrthancException(ErrorCode_InternalError); |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
747 } |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
748 |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
749 const Json::Value& parameters = operations[i]; |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
750 if (!parameters.isMember("Resource")) |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
751 { |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
752 throw OrthancException(ErrorCode_InternalError); |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
753 } |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
754 |
2609
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
755 std::string operation = parameters["Operation"].asString(); |
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
756 size_t index = ParseOperation(lock, operation, operations[i]); |
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
757 |
1435
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
758 std::string resource = parameters["Resource"].asString(); |
2609
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
759 if (!resource.empty()) |
1435
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
760 { |
2609
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
761 lock.AddDicomInstanceInput(index, context_, resource); |
1435
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
762 } |
2609
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
763 else if (!isFirst) |
1435
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
764 { |
2609
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
765 lock.Connect(previous, index); |
1435
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
766 } |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
767 |
2609
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
768 isFirst = false; |
f7a84b551ee4
switch Lua to new jobs engine
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2519
diff
changeset
|
769 previous = index; |
1435
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
770 } |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
771 } |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
772 |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
773 |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
774 LuaScripting::LuaScripting(ServerContext& context) : |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
775 context_(context), |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2649
diff
changeset
|
776 state_(State_Setup) |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
777 { |
1444
b2b09a3dbd8e
refactoring: OrthancHttpHandler inside OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1441
diff
changeset
|
778 lua_.SetGlobalVariable("_ServerContext", &context); |
b2b09a3dbd8e
refactoring: OrthancHttpHandler inside OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1441
diff
changeset
|
779 lua_.RegisterFunction("RestApiGet", RestApiGet); |
1447
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
780 lua_.RegisterFunction("RestApiPost", RestApiPost); |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
781 lua_.RegisterFunction("RestApiPut", RestApiPut); |
5ba7471780ae
refactoring: HttpToolbox, DumpJson in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1445
diff
changeset
|
782 lua_.RegisterFunction("RestApiDelete", RestApiDelete); |
1587
d7e569640d09
New function "GetOrthancConfiguration()" to get the Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1574
diff
changeset
|
783 lua_.RegisterFunction("GetOrthancConfiguration", GetOrthancConfiguration); |
2738
3a55b77339ff
fix deadlock in Lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2727
diff
changeset
|
784 |
3a55b77339ff
fix deadlock in Lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2727
diff
changeset
|
785 LOG(INFO) << "Initializing Lua for the event handler"; |
3a55b77339ff
fix deadlock in Lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2727
diff
changeset
|
786 LoadGlobalConfiguration(); |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
787 } |
1437
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1436
diff
changeset
|
788 |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
789 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
790 LuaScripting::~LuaScripting() |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
791 { |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2649
diff
changeset
|
792 if (state_ == State_Running) |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
793 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
794 LOG(ERROR) << "INTERNAL ERROR: LuaScripting::Stop() should be invoked manually to avoid mess in the destruction order!"; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
795 Stop(); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
796 } |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
797 } |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
798 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
799 |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
800 void LuaScripting::EventThread(LuaScripting* that) |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
801 { |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
802 for (;;) |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
803 { |
3712
2a170a8f1faf
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3676
diff
changeset
|
804 std::unique_ptr<IDynamicObject> event(that->pendingEvents_.Dequeue(100)); |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
805 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
806 if (event.get() == NULL) |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
807 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
808 // The event queue is empty, check whether we should stop |
2618 | 809 boost::recursive_mutex::scoped_lock lock(that->mutex_); |
1435
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
810 |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2649
diff
changeset
|
811 if (that->state_ != State_Running) |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
812 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
813 return; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
814 } |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
815 } |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
816 else |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
817 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
818 try |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
819 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
820 dynamic_cast<IEvent&>(*event).Apply(*that); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
821 } |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
822 catch (OrthancException& e) |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
823 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
824 LOG(ERROR) << "Error while processing Lua events: " << e.What(); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
825 } |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
826 } |
3851
6498739a3c3c
refactoring: TimeoutDicomConnectionManager is now only used by Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3845
diff
changeset
|
827 |
6498739a3c3c
refactoring: TimeoutDicomConnectionManager is now only used by Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3845
diff
changeset
|
828 that->jobManager_.GetDicomConnectionManager().CloseIfInactive(); |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
829 } |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
830 } |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
831 |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
832 |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
833 void LuaScripting::Start() |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
834 { |
2618 | 835 boost::recursive_mutex::scoped_lock lock(mutex_); |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
836 |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2649
diff
changeset
|
837 if (state_ != State_Setup || |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
838 eventThread_.joinable() /* already started */) |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
839 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
840 throw OrthancException(ErrorCode_BadSequenceOfCalls); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
841 } |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
842 else |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
843 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
844 LOG(INFO) << "Starting the Lua engine"; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
845 eventThread_ = boost::thread(EventThread, this); |
2665
389d050a2e66
fix deadlock, speed up unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2651
diff
changeset
|
846 state_ = State_Running; |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
847 } |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
848 } |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
849 |
1572
904096e7367e
More information about the origin request in OnStoredInstance() callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1571
diff
changeset
|
850 |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
851 void LuaScripting::Stop() |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
852 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
853 { |
2618 | 854 boost::recursive_mutex::scoped_lock lock(mutex_); |
1572
904096e7367e
More information about the origin request in OnStoredInstance() callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1571
diff
changeset
|
855 |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2649
diff
changeset
|
856 if (state_ != State_Running) |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
857 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
858 throw OrthancException(ErrorCode_BadSequenceOfCalls); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
859 } |
1572
904096e7367e
More information about the origin request in OnStoredInstance() callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1571
diff
changeset
|
860 |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2649
diff
changeset
|
861 state_ = State_Done; |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
862 } |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
863 |
2620
1232922c8793
speeding up shutdown if Lua script is in trailing phase
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2618
diff
changeset
|
864 jobManager_.AwakeTrailingSleep(); |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
865 |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
866 if (eventThread_.joinable()) |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
867 { |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
868 LOG(INFO) << "Stopping the Lua engine"; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
869 eventThread_.join(); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
870 LOG(INFO) << "The Lua engine has stopped"; |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
871 } |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
872 } |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
873 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
874 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
875 void LuaScripting::SignalStoredInstance(const std::string& publicId, |
3916
0e3849268a55
new plugin SDK primitives related to OrthancPluginDicomInstance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3894
diff
changeset
|
876 const DicomInstanceToStore& instance, |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
877 const Json::Value& simplifiedTags) |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
878 { |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
879 Json::Value metadata = Json::objectValue; |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
880 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
881 for (ServerIndex::MetadataMap::const_iterator |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
882 it = instance.GetMetadata().begin(); |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
883 it != instance.GetMetadata().end(); ++it) |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
884 { |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
885 if (it->first.first == ResourceType_Instance) |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
886 { |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
887 metadata[EnumerationToString(it->first.second)] = it->second; |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
888 } |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
889 } |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
890 |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
891 pendingEvents_.Enqueue(new OnStoredInstanceEvent(publicId, simplifiedTags, metadata, instance)); |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
892 } |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
893 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
894 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
895 void LuaScripting::SignalChange(const ServerIndexChange& change) |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
896 { |
1435
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
897 if (change.GetChangeType() == ChangeType_StablePatient || |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
898 change.GetChangeType() == ChangeType_StableStudy || |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
899 change.GetChangeType() == ChangeType_StableSeries) |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
900 { |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
901 pendingEvents_.Enqueue(new StableResourceEvent(change)); |
1435
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
902 } |
3676
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
903 else if (change.GetChangeType() == ChangeType_Deleted) |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
904 { |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
905 pendingEvents_.Enqueue(new DeleteEvent(change.GetResourceType(), change.GetPublicId())); |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
906 } |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
907 else if (change.GetChangeType() == ChangeType_UpdatedAttachment || |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
908 change.GetChangeType() == ChangeType_UpdatedMetadata) |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
909 { |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
910 pendingEvents_.Enqueue(new UpdateEvent(change.GetResourceType(), change.GetPublicId())); |
231b46ce1984
Lua events for deleted/updated resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
911 } |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
912 } |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
913 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
914 |
1574
0c29ebe80ac9
give access to full request origin in ReceivedInstanceFilter (Lua)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1572
diff
changeset
|
915 bool LuaScripting::FilterIncomingInstance(const DicomInstanceToStore& instance, |
0c29ebe80ac9
give access to full request origin in ReceivedInstanceFilter (Lua)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1572
diff
changeset
|
916 const Json::Value& simplified) |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
917 { |
1435
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
918 static const char* NAME = "ReceivedInstanceFilter"; |
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
919 |
1456
68827c07e683
fix recursive calls with Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1455
diff
changeset
|
920 boost::recursive_mutex::scoped_lock lock(mutex_); |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
921 |
1435
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
922 if (lua_.IsExistingFunction(NAME)) |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
923 { |
1435
6406f5493d92
refactoring: Lua toolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1433
diff
changeset
|
924 LuaFunctionCall call(lua_, NAME); |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
925 call.PushJson(simplified); |
1574
0c29ebe80ac9
give access to full request origin in ReceivedInstanceFilter (Lua)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1572
diff
changeset
|
926 |
0c29ebe80ac9
give access to full request origin in ReceivedInstanceFilter (Lua)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1572
diff
changeset
|
927 Json::Value origin; |
2640
c691fcf66071
ResourceModificationJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2638
diff
changeset
|
928 instance.GetOrigin().Format(origin); |
1574
0c29ebe80ac9
give access to full request origin in ReceivedInstanceFilter (Lua)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1572
diff
changeset
|
929 call.PushJson(origin); |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
930 |
3845
281045a1e6db
new "info" field in "ReceivedInstanceFilter()" callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
931 Json::Value info = Json::objectValue; |
281045a1e6db
new "info" field in "ReceivedInstanceFilter()" callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
932 info["HasPixelData"] = instance.HasPixelData(); |
281045a1e6db
new "info" field in "ReceivedInstanceFilter()" callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
933 |
4507
b4c58795f3a8
widening the use of DicomTransferSyntax enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4460
diff
changeset
|
934 DicomTransferSyntax s; |
3845
281045a1e6db
new "info" field in "ReceivedInstanceFilter()" callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
935 if (instance.LookupTransferSyntax(s)) |
281045a1e6db
new "info" field in "ReceivedInstanceFilter()" callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
936 { |
4507
b4c58795f3a8
widening the use of DicomTransferSyntax enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4460
diff
changeset
|
937 info["TransferSyntaxUID"] = GetTransferSyntaxUid(s); |
3845
281045a1e6db
new "info" field in "ReceivedInstanceFilter()" callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
938 } |
281045a1e6db
new "info" field in "ReceivedInstanceFilter()" callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
939 |
281045a1e6db
new "info" field in "ReceivedInstanceFilter()" callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
940 call.PushJson(info); |
281045a1e6db
new "info" field in "ReceivedInstanceFilter()" callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
941 |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
942 if (!call.ExecutePredicate()) |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
943 { |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
944 return false; |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
945 } |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
946 } |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
947 |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
948 return true; |
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
949 } |
1455
a68545767975
Initialize() and Finalize() events in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1449
diff
changeset
|
950 |
4796
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
951 uint16_t LuaScripting::FilterIncomingCStoreInstance(const DicomInstanceToStore& instance, |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
952 const Json::Value& simplified) |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
953 { |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
954 static const char* NAME = "ReceivedCStoreInstanceFilter"; |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
955 |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
956 boost::recursive_mutex::scoped_lock lock(mutex_); |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
957 |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
958 if (lua_.IsExistingFunction(NAME)) |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
959 { |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
960 LuaFunctionCall call(lua_, NAME); |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
961 call.PushJson(simplified); |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
962 |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
963 Json::Value origin; |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
964 instance.GetOrigin().Format(origin); |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
965 call.PushJson(origin); |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
966 |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
967 Json::Value info = Json::objectValue; |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
968 info["HasPixelData"] = instance.HasPixelData(); |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
969 |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
970 DicomTransferSyntax s; |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
971 if (instance.LookupTransferSyntax(s)) |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
972 { |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
973 info["TransferSyntaxUID"] = GetTransferSyntaxUid(s); |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
974 } |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
975 |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
976 call.PushJson(info); |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
977 |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
978 int result; |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
979 call.ExecuteToInt(result); |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
980 return static_cast<uint16_t>(result); |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
981 } |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
982 |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
983 return STATUS_Success; |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
984 } |
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4697
diff
changeset
|
985 |
1455
a68545767975
Initialize() and Finalize() events in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1449
diff
changeset
|
986 |
a68545767975
Initialize() and Finalize() events in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1449
diff
changeset
|
987 void LuaScripting::Execute(const std::string& command) |
a68545767975
Initialize() and Finalize() events in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1449
diff
changeset
|
988 { |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
989 pendingEvents_.Enqueue(new ExecuteEvent(command)); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
990 } |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
991 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
992 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
993 void LuaScripting::LoadGlobalConfiguration() |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
994 { |
2940
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2799
diff
changeset
|
995 OrthancConfiguration::ReaderLock configLock; |
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2799
diff
changeset
|
996 |
4031
e3b3af80732d
ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4030
diff
changeset
|
997 { |
e3b3af80732d
ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4030
diff
changeset
|
998 std::string command; |
e3b3af80732d
ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4030
diff
changeset
|
999 Orthanc::ServerResources::GetFileResource(command, Orthanc::ServerResources::LUA_TOOLBOX); |
e3b3af80732d
ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4030
diff
changeset
|
1000 lua_.Execute(command); |
e3b3af80732d
ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4030
diff
changeset
|
1001 } |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
1002 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
1003 std::list<std::string> luaScripts; |
2940
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2799
diff
changeset
|
1004 configLock.GetConfiguration().GetListOfStringsParameter(luaScripts, "LuaScripts"); |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
1005 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
1006 LuaScripting::Lock lock(*this); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
1007 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
1008 for (std::list<std::string>::const_iterator |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
1009 it = luaScripts.begin(); it != luaScripts.end(); ++it) |
1455
a68545767975
Initialize() and Finalize() events in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1449
diff
changeset
|
1010 { |
2940
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2799
diff
changeset
|
1011 std::string path = configLock.GetConfiguration().InterpretStringParameterAsPath(*it); |
2616
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
1012 LOG(INFO) << "Installing the Lua scripts from: " << path; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
1013 std::string script; |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
1014 SystemToolbox::ReadFile(script, path); |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
1015 |
2f3007bf0708
event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2609
diff
changeset
|
1016 lock.GetLua().Execute(script); |
1455
a68545767975
Initialize() and Finalize() events in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1449
diff
changeset
|
1017 } |
a68545767975
Initialize() and Finalize() events in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1449
diff
changeset
|
1018 } |
2675
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
1019 |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
1020 |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
1021 void LuaScripting::SignalJobSubmitted(const std::string& jobId) |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
1022 { |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
1023 pendingEvents_.Enqueue(new JobEvent(JobEvent::Type_Submitted, jobId)); |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
1024 } |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
1025 |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
1026 |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
1027 void LuaScripting::SignalJobSuccess(const std::string& jobId) |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
1028 { |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
1029 pendingEvents_.Enqueue(new JobEvent(JobEvent::Type_Success, jobId)); |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
1030 } |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
1031 |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
1032 |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
1033 void LuaScripting::SignalJobFailure(const std::string& jobId) |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
1034 { |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
1035 pendingEvents_.Enqueue(new JobEvent(JobEvent::Type_Failure, jobId)); |
3fc310ceb6d4
lua callbacks for jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2665
diff
changeset
|
1036 } |
1433
461e7554bff7
refactoring: LuaScripting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1037 } |