# HG changeset patch # User Sebastien Jodogne # Date 1404405023 -7200 # Node ID 4136fab6a63992e2b8ecc81d238dfbee2d786562 # Parent 1b1d51e9f1a210756f30758da4d24f8800483ad0 callback on stored instance diff -r 1b1d51e9f1a2 -r 4136fab6a639 OrthancServer/ServerContext.cpp --- a/OrthancServer/ServerContext.cpp Thu Jul 03 18:12:50 2014 +0200 +++ b/OrthancServer/ServerContext.cpp Thu Jul 03 18:30:23 2014 +0200 @@ -93,16 +93,13 @@ } - bool ServerContext::ApplyReceivedInstanceFilter(const Json::Value& dicomJson, + bool ServerContext::ApplyReceivedInstanceFilter(const Json::Value& simplified, const std::string& remoteAet) { LuaContextLocker locker(*this); if (locker.GetLua().IsExistingFunction(RECEIVED_INSTANCE_FILTER)) { - Json::Value simplified; - SimplifyTags(simplified, dicomJson); - LuaFunctionCall call(locker.GetLua(), RECEIVED_INSTANCE_FILTER); call.PushJson(simplified); call.PushString(remoteAet); @@ -117,14 +114,37 @@ } + void ServerContext::ApplyOnStoredInstance(const Json::Value& simplified, + const std::string& instanceId) + { + LuaContextLocker locker(*this); + + if (locker.GetLua().IsExistingFunction(ON_STORED_INSTANCE)) + { + LuaFunctionCall call(locker.GetLua(), ON_STORED_INSTANCE); + call.PushJson(simplified); + call.PushString(instanceId); + + Json::Value result; + call.ExecuteToJson(result); + + printf("TODO\n"); + std::cout << result; + } + } + + StoreStatus ServerContext::Store(const char* dicomInstance, size_t dicomSize, const DicomMap& dicomSummary, const Json::Value& dicomJson, const std::string& remoteAet) { + Json::Value simplified; + SimplifyTags(simplified, dicomJson); + // Test if the instance must be filtered out - if (!ApplyReceivedInstanceFilter(dicomJson, remoteAet)) + if (!ApplyReceivedInstanceFilter(simplified, remoteAet)) { LOG(INFO) << "An incoming instance has been discarded by the filter"; return StoreStatus_FilteredOut; @@ -173,6 +193,13 @@ break; } + if (status == StoreStatus_Success || + status == StoreStatus_AlreadyStored) + { + DicomInstanceHasher hasher(dicomSummary); + ApplyOnStoredInstance(simplified, hasher.HashInstance()); + } + return status; } diff -r 1b1d51e9f1a2 -r 4136fab6a639 OrthancServer/ServerContext.h --- a/OrthancServer/ServerContext.h Thu Jul 03 18:12:50 2014 +0200 +++ b/OrthancServer/ServerContext.h Thu Jul 03 18:30:23 2014 +0200 @@ -65,9 +65,12 @@ virtual IDynamicObject* Provide(const std::string& id); }; - bool ApplyReceivedInstanceFilter(const Json::Value& dicomJson, + bool ApplyReceivedInstanceFilter(const Json::Value& simplified, const std::string& remoteAet); + void ApplyOnStoredInstance(const Json::Value& simplified, + const std::string& instanceId); + FileStorage storage_; ServerIndex index_; CompressedFileStorageAccessor accessor_; diff -r 1b1d51e9f1a2 -r 4136fab6a639 Resources/Samples/Lua/Autorouting.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Resources/Samples/Lua/Autorouting.lua Thu Jul 03 18:30:23 2014 +0200 @@ -0,0 +1,7 @@ +function OnStoredInstance(tags, instance) + PrintRecursive(tags) + return { + { "store", instance, "pacs" }, + { "delete", instance } + } +end