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");