Mercurial > hg > orthanc
comparison Plugins/Engine/OrthancPlugins.cpp @ 2827:d4fd4614f275
IncomingWorklistRequestFilter() to filter incoming C-FIND worklist queries
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 19 Sep 2018 21:10:49 +0200 |
parents | 807169f85ba9 |
children | 7133ad478eea |
comparison
equal
deleted
inserted
replaced
2826:c277e0421200 | 2827:d4fd4614f275 |
---|---|
60 #include "../../Core/Images/PngWriter.h" | 60 #include "../../Core/Images/PngWriter.h" |
61 #include "../../Core/Images/JpegReader.h" | 61 #include "../../Core/Images/JpegReader.h" |
62 #include "../../Core/Images/JpegWriter.h" | 62 #include "../../Core/Images/JpegWriter.h" |
63 #include "../../Core/Images/ImageProcessing.h" | 63 #include "../../Core/Images/ImageProcessing.h" |
64 #include "../../OrthancServer/DefaultDicomImageDecoder.h" | 64 #include "../../OrthancServer/DefaultDicomImageDecoder.h" |
65 #include "../../OrthancServer/OrthancFindRequestHandler.h" | |
65 #include "PluginsEnumerations.h" | 66 #include "PluginsEnumerations.h" |
66 #include "PluginsJob.h" | 67 #include "PluginsJob.h" |
67 | 68 |
68 #include <boost/regex.hpp> | 69 #include <boost/regex.hpp> |
69 #include <dcmtk/dcmdata/dcdict.h> | 70 #include <dcmtk/dcmdata/dcdict.h> |
452 class OrthancPlugins::WorklistHandler : public IWorklistRequestHandler | 453 class OrthancPlugins::WorklistHandler : public IWorklistRequestHandler |
453 { | 454 { |
454 private: | 455 private: |
455 OrthancPlugins& that_; | 456 OrthancPlugins& that_; |
456 std::auto_ptr<HierarchicalMatcher> matcher_; | 457 std::auto_ptr<HierarchicalMatcher> matcher_; |
458 std::auto_ptr<ParsedDicomFile> filtered_; | |
457 ParsedDicomFile* currentQuery_; | 459 ParsedDicomFile* currentQuery_; |
458 | 460 |
459 void Reset() | 461 void Reset() |
460 { | 462 { |
461 matcher_.reset(NULL); | 463 matcher_.reset(); |
464 filtered_.reset(); | |
462 currentQuery_ = NULL; | 465 currentQuery_ = NULL; |
463 } | 466 } |
464 | 467 |
465 public: | 468 public: |
466 WorklistHandler(OrthancPlugins& that) : that_(that) | 469 WorklistHandler(OrthancPlugins& that) : that_(that) |
473 const std::string& remoteIp, | 476 const std::string& remoteIp, |
474 const std::string& remoteAet, | 477 const std::string& remoteAet, |
475 const std::string& calledAet, | 478 const std::string& calledAet, |
476 ModalityManufacturer manufacturer) | 479 ModalityManufacturer manufacturer) |
477 { | 480 { |
481 static const char* LUA_CALLBACK = "IncomingWorklistRequestFilter"; | |
482 | |
483 { | |
484 PImpl::ServerContextLock lock(*that_.pimpl_); | |
485 LuaScripting::Lock lua(lock.GetContext().GetLuaScripting()); | |
486 | |
487 if (!lua.GetLua().IsExistingFunction(LUA_CALLBACK)) | |
488 { | |
489 currentQuery_ = &query; | |
490 } | |
491 else | |
492 { | |
493 Json::Value source, origin; | |
494 query.DatasetToJson(source, DicomToJsonFormat_Short, DicomToJsonFlags_None, 0); | |
495 | |
496 OrthancFindRequestHandler::FormatOrigin | |
497 (origin, remoteIp, remoteAet, calledAet, manufacturer); | |
498 | |
499 LuaFunctionCall call(lua.GetLua(), LUA_CALLBACK); | |
500 call.PushJson(source); | |
501 call.PushJson(origin); | |
502 | |
503 Json::Value target; | |
504 call.ExecuteToJson(target, true); | |
505 | |
506 filtered_.reset(ParsedDicomFile::CreateFromJson(target, DicomFromJsonFlags_None)); | |
507 currentQuery_ = filtered_.get(); | |
508 } | |
509 } | |
510 | |
511 matcher_.reset(new HierarchicalMatcher(*currentQuery_)); | |
512 | |
478 { | 513 { |
479 boost::mutex::scoped_lock lock(that_.pimpl_->worklistCallbackMutex_); | 514 boost::mutex::scoped_lock lock(that_.pimpl_->worklistCallbackMutex_); |
480 | |
481 matcher_.reset(new HierarchicalMatcher(query)); | |
482 currentQuery_ = &query; | |
483 | 515 |
484 if (that_.pimpl_->worklistCallback_) | 516 if (that_.pimpl_->worklistCallback_) |
485 { | 517 { |
486 OrthancPluginErrorCode error = that_.pimpl_->worklistCallback_ | 518 OrthancPluginErrorCode error = that_.pimpl_->worklistCallback_ |
487 (reinterpret_cast<OrthancPluginWorklistAnswers*>(&answers), | 519 (reinterpret_cast<OrthancPluginWorklistAnswers*>(&answers), |