Mercurial > hg > orthanc
comparison OrthancServer/OrthancRestApi/OrthancRestSystem.cpp @ 1232:f1c01451a8ee
Introspection of plugins, Plugins can extend Orthanc Explorer with custom JavaScript
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 04 Dec 2014 17:04:40 +0100 |
parents | efece308018e |
children | eac00401cb96 |
comparison
equal
deleted
inserted
replaced
1231:703fcd797186 | 1232:f1c01451a8ee |
---|---|
33 #include "../PrecompiledHeadersServer.h" | 33 #include "../PrecompiledHeadersServer.h" |
34 #include "OrthancRestApi.h" | 34 #include "OrthancRestApi.h" |
35 | 35 |
36 #include "../OrthancInitialization.h" | 36 #include "../OrthancInitialization.h" |
37 #include "../FromDcmtkBridge.h" | 37 #include "../FromDcmtkBridge.h" |
38 #include "../../Plugins/Engine/PluginsManager.h" | |
39 #include "../../Plugins/Engine/OrthancPlugins.h" | |
38 | 40 |
39 #include <glog/logging.h> | 41 #include <glog/logging.h> |
40 | 42 |
41 | 43 |
42 namespace Orthanc | 44 namespace Orthanc |
109 static void GetDicomConformanceStatement(RestApiGetCall& call) | 111 static void GetDicomConformanceStatement(RestApiGetCall& call) |
110 { | 112 { |
111 std::string statement; | 113 std::string statement; |
112 GetFileResource(statement, EmbeddedResources::DICOM_CONFORMANCE_STATEMENT); | 114 GetFileResource(statement, EmbeddedResources::DICOM_CONFORMANCE_STATEMENT); |
113 call.GetOutput().AnswerBuffer(statement, "text/plain"); | 115 call.GetOutput().AnswerBuffer(statement, "text/plain"); |
116 } | |
117 | |
118 | |
119 // Plugins information ------------------------------------------------------ | |
120 | |
121 static void ListPlugins(RestApiGetCall& call) | |
122 { | |
123 Json::Value v = Json::arrayValue; | |
124 | |
125 if (OrthancRestApi::GetContext(call).HasPlugins()) | |
126 { | |
127 std::list<std::string> plugins; | |
128 OrthancRestApi::GetContext(call).GetPluginsManager().ListPlugins(plugins); | |
129 | |
130 for (std::list<std::string>::const_iterator | |
131 it = plugins.begin(); it != plugins.end(); it++) | |
132 { | |
133 v.append(*it); | |
134 } | |
135 } | |
136 | |
137 call.GetOutput().AnswerJson(v); | |
138 } | |
139 | |
140 | |
141 static void GetPlugin(RestApiGetCall& call) | |
142 { | |
143 if (!OrthancRestApi::GetContext(call).HasPlugins()) | |
144 { | |
145 return; | |
146 } | |
147 | |
148 const PluginsManager& manager = OrthancRestApi::GetContext(call).GetPluginsManager(); | |
149 std::string id = call.GetUriComponent("id", ""); | |
150 | |
151 if (manager.HasPlugin(id)) | |
152 { | |
153 Json::Value v = Json::objectValue; | |
154 v["ID"] = id; | |
155 v["Version"] = manager.GetPluginVersion(id); | |
156 | |
157 const OrthancPlugins& plugins = OrthancRestApi::GetContext(call).GetOrthancPlugins(); | |
158 const char *c = plugins.GetProperty(id.c_str(), _OrthancPluginProperty_RootUri); | |
159 if (c != NULL) | |
160 { | |
161 v["RootUri"] = c; | |
162 } | |
163 | |
164 c = plugins.GetProperty(id.c_str(), _OrthancPluginProperty_Description); | |
165 if (c != NULL) | |
166 { | |
167 v["Description"] = c; | |
168 } | |
169 | |
170 c = plugins.GetProperty(id.c_str(), _OrthancPluginProperty_OrthancExplorer); | |
171 v["ExtendsOrthancExplorer"] = (c != NULL); | |
172 | |
173 call.GetOutput().AnswerJson(v); | |
174 } | |
175 } | |
176 | |
177 | |
178 static void GetOrthancExplorerPlugins(RestApiGetCall& call) | |
179 { | |
180 std::string s = "// Extensions to Orthanc Explorer by the registered plugins\n\n"; | |
181 | |
182 if (OrthancRestApi::GetContext(call).HasPlugins()) | |
183 { | |
184 const PluginsManager& manager = OrthancRestApi::GetContext(call).GetPluginsManager(); | |
185 const OrthancPlugins& plugins = OrthancRestApi::GetContext(call).GetOrthancPlugins(); | |
186 | |
187 std::list<std::string> lst; | |
188 OrthancRestApi::GetContext(call).GetPluginsManager().ListPlugins(lst); | |
189 | |
190 for (std::list<std::string>::const_iterator | |
191 it = lst.begin(); it != lst.end(); it++) | |
192 { | |
193 const char* tmp = plugins.GetProperty(it->c_str(), _OrthancPluginProperty_OrthancExplorer); | |
194 if (tmp != NULL) | |
195 { | |
196 s += "/**\n * From plugin: " + *it + " (version " + manager.GetPluginVersion(*it) + ")\n **/\n\n"; | |
197 s += std::string(tmp) + "\n\n"; | |
198 } | |
199 } | |
200 } | |
201 | |
202 call.GetOutput().AnswerBuffer(s, "application/javascript"); | |
114 } | 203 } |
115 | 204 |
116 | 205 |
117 void OrthancRestApi::RegisterSystem() | 206 void OrthancRestApi::RegisterSystem() |
118 { | 207 { |
121 Register("/statistics", GetStatistics); | 210 Register("/statistics", GetStatistics); |
122 Register("/tools/generate-uid", GenerateUid); | 211 Register("/tools/generate-uid", GenerateUid); |
123 Register("/tools/execute-script", ExecuteScript); | 212 Register("/tools/execute-script", ExecuteScript); |
124 Register("/tools/now", GetNowIsoString); | 213 Register("/tools/now", GetNowIsoString); |
125 Register("/tools/dicom-conformance", GetDicomConformanceStatement); | 214 Register("/tools/dicom-conformance", GetDicomConformanceStatement); |
215 | |
216 Register("/plugins", ListPlugins); | |
217 Register("/plugins/{id}", GetPlugin); | |
218 Register("/plugins/explorer.js", GetOrthancExplorerPlugins); | |
126 } | 219 } |
127 } | 220 } |