Mercurial > hg > orthanc
comparison OrthancServer/main.cpp @ 388:466c992a9a42 lua-scripting
testing filters inside orthanc
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 29 Apr 2013 17:30:38 +0200 |
parents | 2cef9c2d4148 |
children | 7035f4a5b07b |
comparison
equal
deleted
inserted
replaced
386:7dec4f3c922c | 388:466c992a9a42 |
---|---|
36 #include <glog/logging.h> | 36 #include <glog/logging.h> |
37 #include <boost/algorithm/string/predicate.hpp> | 37 #include <boost/algorithm/string/predicate.hpp> |
38 | 38 |
39 #include "../Core/HttpServer/EmbeddedResourceHttpHandler.h" | 39 #include "../Core/HttpServer/EmbeddedResourceHttpHandler.h" |
40 #include "../Core/HttpServer/FilesystemHttpHandler.h" | 40 #include "../Core/HttpServer/FilesystemHttpHandler.h" |
41 #include "../Core/HttpServer/MongooseServer.h" | 41 #include "../Core/Lua/LuaFunctionCall.h" |
42 #include "DicomProtocol/DicomServer.h" | 42 #include "DicomProtocol/DicomServer.h" |
43 #include "OrthancInitialization.h" | 43 #include "OrthancInitialization.h" |
44 #include "ServerContext.h" | 44 #include "ServerContext.h" |
45 | 45 |
46 using namespace Orthanc; | 46 using namespace Orthanc; |
48 | 48 |
49 | 49 |
50 class MyDicomStore : public IStoreRequestHandler | 50 class MyDicomStore : public IStoreRequestHandler |
51 { | 51 { |
52 private: | 52 private: |
53 ServerContext& context_; | 53 ServerContext& server_; |
54 | 54 |
55 public: | 55 public: |
56 MyDicomStore(ServerContext& context) : | 56 MyDicomStore(ServerContext& context) : |
57 context_(context) | 57 server_(context) |
58 { | 58 { |
59 LuaContext& lua = server_.GetLuaContext(); | |
60 lua.Execute(Orthanc::EmbeddedResources::LUA_TOOLBOX); | |
61 lua.Execute("function NewInstanceFilter(dicom, aet) print(dicom['0010,0020'].Value); return true end"); | |
59 } | 62 } |
60 | 63 |
61 virtual void Handle(const std::string& dicomFile, | 64 virtual void Handle(const std::string& dicomFile, |
62 const DicomMap& dicomSummary, | 65 const DicomMap& dicomSummary, |
63 const Json::Value& dicomJson, | 66 const Json::Value& dicomJson, |
64 const std::string& remoteAet) | 67 const std::string& remoteAet) |
65 { | 68 { |
66 if (dicomFile.size() > 0) | 69 if (dicomFile.size() > 0) |
67 { | 70 { |
68 context_.Store(&dicomFile[0], dicomFile.size(), dicomSummary, dicomJson, remoteAet); | 71 LuaContext& lua = server_.GetLuaContext(); |
72 // TODO : Is existing trigger ? | |
73 LuaFunctionCall call(lua, "NewInstanceFilter"); | |
74 call.PushJSON(dicomJson); | |
75 call.PushString(remoteAet); | |
76 | |
77 if (call.ExecutePredicate()) | |
78 { | |
79 server_.Store(&dicomFile[0], dicomFile.size(), dicomSummary, dicomJson, remoteAet); | |
80 } | |
81 else | |
82 { | |
83 LOG(WARNING) << "An instance has been discarded by a filter"; | |
84 } | |
69 } | 85 } |
70 } | 86 } |
71 }; | 87 }; |
72 | 88 |
73 | 89 |
74 class MyDicomStoreFactory : public IStoreRequestHandlerFactory | 90 class MyDicomStoreFactory : public IStoreRequestHandlerFactory |
75 { | 91 { |
76 private: | 92 private: |
77 ServerContext& context_; | 93 ServerContext& server_; |
78 | 94 |
79 public: | 95 public: |
80 MyDicomStoreFactory(ServerContext& context) : context_(context) | 96 MyDicomStoreFactory(ServerContext& context) : server_(context) |
81 { | 97 { |
82 } | 98 } |
83 | 99 |
84 virtual IStoreRequestHandler* ConstructStoreRequestHandler() | 100 virtual IStoreRequestHandler* ConstructStoreRequestHandler() |
85 { | 101 { |
86 return new MyDicomStore(context_); | 102 return new MyDicomStore(server_); |
87 } | 103 } |
88 | 104 |
89 void Done() | 105 void Done() |
90 { | 106 { |
91 //index_.db().Execute("DELETE FROM Studies"); | 107 //index_.db().Execute("DELETE FROM Studies"); |