Mercurial > hg > orthanc-databases
diff Framework/Plugins/IndexBackend.cpp @ 201:42990b2dd51b
create IDatabaseBackendOutput only if needed
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 18 Mar 2021 16:51:51 +0100 |
parents | 3236894320d6 |
children | 2089d4071408 |
line wrap: on
line diff
--- a/Framework/Plugins/IndexBackend.cpp Thu Mar 18 15:21:17 2021 +0100 +++ b/Framework/Plugins/IndexBackend.cpp Thu Mar 18 16:51:51 2021 +0100 @@ -171,7 +171,8 @@ } - void IndexBackend::ReadChangesInternal(bool& done, + void IndexBackend::ReadChangesInternal(OrthancPlugins::IDatabaseBackendOutput& output, + bool& done, DatabaseManager::CachedStatement& statement, const Dictionary& args, uint32_t maxResults) @@ -183,7 +184,7 @@ while (count < maxResults && !statement.IsDone()) { - GetOutput().AnswerChange( + output.AnswerChange( ReadInteger64(statement, 0), ReadInteger32(statement, 1), static_cast<OrthancPluginResourceType>(ReadInteger32(statement, 3)), @@ -199,7 +200,8 @@ } - void IndexBackend::ReadExportedResourcesInternal(bool& done, + void IndexBackend::ReadExportedResourcesInternal(OrthancPlugins::IDatabaseBackendOutput& output, + bool& done, DatabaseManager::CachedStatement& statement, const Dictionary& args, uint32_t maxResults) @@ -216,16 +218,16 @@ static_cast<OrthancPluginResourceType>(ReadInteger32(statement, 1)); std::string publicId = ReadString(statement, 2); - GetOutput().AnswerExportedResource(seq, - resourceType, - publicId, - ReadString(statement, 3), // modality - ReadString(statement, 8), // date - ReadString(statement, 4), // patient ID - ReadString(statement, 5), // study instance UID - ReadString(statement, 6), // series instance UID - ReadString(statement, 7)); // sop instance UID - + output.AnswerExportedResource(seq, + resourceType, + publicId, + ReadString(statement, 3), // modality + ReadString(statement, 8), // date + ReadString(statement, 4), // patient ID + ReadString(statement, 5), // study instance UID + ReadString(statement, 6), // series instance UID + ReadString(statement, 7)); // sop instance UID + statement.Next(); count++; } @@ -255,7 +257,7 @@ } - void IndexBackend::SignalDeletedFiles() + void IndexBackend::SignalDeletedFiles(OrthancPlugins::IDatabaseBackendOutput& output) { DatabaseManager::CachedStatement statement( STATEMENT_FROM_HERE, manager_, @@ -270,20 +272,20 @@ std::string b = ReadString(statement, 5); std::string c = ReadString(statement, 6); - GetOutput().SignalDeletedAttachment(a.c_str(), - ReadInteger32(statement, 1), - ReadInteger64(statement, 3), - b.c_str(), - ReadInteger32(statement, 4), - ReadInteger64(statement, 2), - c.c_str()); - + output.SignalDeletedAttachment(a.c_str(), + ReadInteger32(statement, 1), + ReadInteger64(statement, 3), + b.c_str(), + ReadInteger32(statement, 4), + ReadInteger64(statement, 2), + c.c_str()); + statement.Next(); } } - void IndexBackend::SignalDeletedResources() + void IndexBackend::SignalDeletedResources(OrthancPlugins::IDatabaseBackendOutput& output) { DatabaseManager::CachedStatement statement( STATEMENT_FROM_HERE, manager_, @@ -294,7 +296,7 @@ while (!statement.IsDone()) { - GetOutput().SignalDeletedResource( + output.SignalDeletedResource( ReadString(statement, 1), static_cast<OrthancPluginResourceType>(ReadInteger32(statement, 0))); @@ -303,12 +305,44 @@ } - IndexBackend::IndexBackend(IDatabaseFactory* factory) : + IndexBackend::IndexBackend(OrthancPluginContext* context, + IDatabaseFactory* factory) : + context_(context), manager_(factory) { } - + + void IndexBackend::SetOutputFactory(OrthancPlugins::IDatabaseBackendOutput::IFactory* factory) + { + if (factory == NULL) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); + } + else if (outputFactory_.get() != NULL) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); + } + else + { + outputFactory_.reset(factory); + } + } + + + OrthancPlugins::IDatabaseBackendOutput* IndexBackend::CreateOutput() + { + if (outputFactory_.get() == NULL) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); + } + else + { + return outputFactory_->CreateOutput(); + } + } + + void IndexBackend::AddAttachment(int64_t id, const OrthancPluginAttachment& attachment) { @@ -378,7 +412,8 @@ } - void IndexBackend::DeleteAttachment(int64_t id, + void IndexBackend::DeleteAttachment(OrthancPlugins::IDatabaseBackendOutput& output, + int64_t id, int32_t attachment) { ClearDeletedFiles(); @@ -398,7 +433,7 @@ statement.Execute(args); } - SignalDeletedFiles(); + SignalDeletedFiles(output); } @@ -420,7 +455,8 @@ } - void IndexBackend::DeleteResource(int64_t id) + void IndexBackend::DeleteResource(OrthancPlugins::IDatabaseBackendOutput& output, + int64_t id) { assert(manager_.GetDialect() != Dialect_MySQL); @@ -458,7 +494,7 @@ if (!statement.IsDone()) { - GetOutput().SignalRemainingAncestor( + output.SignalRemainingAncestor( ReadString(statement, 1), static_cast<OrthancPluginResourceType>(ReadInteger32(statement, 0))); @@ -467,8 +503,8 @@ } } - SignalDeletedFiles(); - SignalDeletedResources(); + SignalDeletedFiles(output); + SignalDeletedResources(output); } @@ -532,7 +568,8 @@ /* Use GetOutput().AnswerChange() */ - void IndexBackend::GetChanges(bool& done /*out*/, + void IndexBackend::GetChanges(OrthancPlugins::IDatabaseBackendOutput& output, + bool& done /*out*/, int64_t since, uint32_t maxResults) { @@ -548,7 +585,7 @@ args.SetIntegerValue("limit", maxResults + 1); args.SetIntegerValue("since", since); - ReadChangesInternal(done, statement, args, maxResults); + ReadChangesInternal(output, done, statement, args, maxResults); } @@ -589,7 +626,8 @@ /* Use GetOutput().AnswerExportedResource() */ - void IndexBackend::GetExportedResources(bool& done /*out*/, + void IndexBackend::GetExportedResources(OrthancPlugins::IDatabaseBackendOutput& output, + bool& done /*out*/, int64_t since, uint32_t maxResults) { @@ -605,12 +643,12 @@ args.SetIntegerValue("limit", maxResults + 1); args.SetIntegerValue("since", since); - ReadExportedResourcesInternal(done, statement, args, maxResults); + ReadExportedResourcesInternal(output, done, statement, args, maxResults); } /* Use GetOutput().AnswerChange() */ - void IndexBackend::GetLastChange() + void IndexBackend::GetLastChange(OrthancPlugins::IDatabaseBackendOutput& output) { DatabaseManager::CachedStatement statement( STATEMENT_FROM_HERE, manager_, @@ -621,12 +659,12 @@ Dictionary args; bool done; // Ignored - ReadChangesInternal(done, statement, args, 1); + ReadChangesInternal(output, done, statement, args, 1); } /* Use GetOutput().AnswerExportedResource() */ - void IndexBackend::GetLastExportedResource() + void IndexBackend::GetLastExportedResource(OrthancPlugins::IDatabaseBackendOutput& output) { DatabaseManager::CachedStatement statement( STATEMENT_FROM_HERE, manager_, @@ -637,12 +675,13 @@ Dictionary args; bool done; // Ignored - ReadExportedResourcesInternal(done, statement, args, 1); + ReadExportedResourcesInternal(output, done, statement, args, 1); } /* Use GetOutput().AnswerDicomTag() */ - void IndexBackend::GetMainDicomTags(int64_t id) + void IndexBackend::GetMainDicomTags(OrthancPlugins::IDatabaseBackendOutput& output, + int64_t id) { DatabaseManager::CachedStatement statement( STATEMENT_FROM_HERE, manager_, @@ -658,9 +697,9 @@ while (!statement.IsDone()) { - GetOutput().AnswerDicomTag(static_cast<uint16_t>(ReadInteger64(statement, 1)), - static_cast<uint16_t>(ReadInteger64(statement, 2)), - ReadString(statement, 3)); + output.AnswerDicomTag(static_cast<uint16_t>(ReadInteger64(statement, 1)), + static_cast<uint16_t>(ReadInteger64(statement, 2)), + ReadString(statement, 3)); statement.Next(); } } @@ -960,7 +999,8 @@ /* Use GetOutput().AnswerAttachment() */ - bool IndexBackend::LookupAttachment(int64_t id, + bool IndexBackend::LookupAttachment(OrthancPlugins::IDatabaseBackendOutput& output, + int64_t id, int32_t contentType) { DatabaseManager::CachedStatement statement( @@ -984,13 +1024,13 @@ } else { - GetOutput().AnswerAttachment(ReadString(statement, 0), - contentType, - ReadInteger64(statement, 1), - ReadString(statement, 4), - ReadInteger32(statement, 2), - ReadInteger64(statement, 3), - ReadString(statement, 5)); + output.AnswerAttachment(ReadString(statement, 0), + contentType, + ReadInteger64(statement, 1), + ReadString(statement, 4), + ReadInteger32(statement, 2), + ReadInteger64(statement, 3), + ReadString(statement, 5)); return true; } } @@ -1653,7 +1693,8 @@ #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1 // New primitive since Orthanc 1.5.2 - void IndexBackend::LookupResources(const std::vector<Orthanc::DatabaseConstraint>& lookup, + void IndexBackend::LookupResources(OrthancPlugins::IDatabaseBackendOutput& output, + const std::vector<Orthanc::DatabaseConstraint>& lookup, OrthancPluginResourceType queryLevel, uint32_t limit, bool requestSomeInstance) @@ -1708,11 +1749,11 @@ { if (requestSomeInstance) { - GetOutput().AnswerMatchingResource(ReadString(statement, 0), ReadString(statement, 1)); + output.AnswerMatchingResource(ReadString(statement, 0), ReadString(statement, 1)); } else { - GetOutput().AnswerMatchingResource(ReadString(statement, 0)); + output.AnswerMatchingResource(ReadString(statement, 0)); } statement.Next();