# HG changeset patch # User Sebastien Jodogne # Date 1545320555 -3600 # Node ID d8a91acb74241dfa70357b1b394e6f211293744d # Parent 6a2c7e206ebb5c957dc186ec9cfffb3ec9491b4f working on a database compatibility layer diff -r 6a2c7e206ebb -r d8a91acb7424 CMakeLists.txt --- a/CMakeLists.txt Thu Dec 20 16:18:38 2018 +0100 +++ b/CMakeLists.txt Thu Dec 20 16:42:35 2018 +0100 @@ -53,7 +53,6 @@ ##################################################################### set(ORTHANC_SERVER_SOURCES - OrthancServer/SQLiteDatabaseWrapper.cpp OrthancServer/DicomInstanceOrigin.cpp OrthancServer/DicomInstanceToStore.cpp OrthancServer/ExportedResource.cpp @@ -71,6 +70,8 @@ OrthancServer/OrthancRestApi/OrthancRestResources.cpp OrthancServer/OrthancRestApi/OrthancRestSystem.cpp OrthancServer/QueryRetrieveHandler.cpp + OrthancServer/SQLiteDatabaseWrapper.cpp + OrthancServer/Search/Compatibility/SetOfResources.cpp OrthancServer/Search/DatabaseConstraint.cpp OrthancServer/Search/DatabaseLookup.cpp OrthancServer/Search/DicomTagConstraint.cpp @@ -132,7 +133,6 @@ Plugins/Engine/PluginsErrorDictionary.cpp Plugins/Engine/PluginsJob.cpp Plugins/Engine/PluginsManager.cpp - Plugins/Engine/SetOfResources.cpp ) list(APPEND ORTHANC_UNIT_TESTS_SOURCES diff -r 6a2c7e206ebb -r d8a91acb7424 OrthancServer/SQLiteDatabaseWrapper.h --- a/OrthancServer/SQLiteDatabaseWrapper.h Thu Dec 20 16:18:38 2018 +0100 +++ b/OrthancServer/SQLiteDatabaseWrapper.h Thu Dec 20 16:42:35 2018 +0100 @@ -76,63 +76,80 @@ SQLiteDatabaseWrapper(); - virtual void Open(); + virtual void Open() + ORTHANC_OVERRIDE; virtual void Close() + ORTHANC_OVERRIDE { db_.Close(); } - virtual void SetListener(IDatabaseListener& listener); + virtual void SetListener(IDatabaseListener& listener) + ORTHANC_OVERRIDE; virtual bool LookupParent(int64_t& parentId, - int64_t resourceId); + int64_t resourceId) + ORTHANC_OVERRIDE; - virtual std::string GetPublicId(int64_t resourceId); + virtual std::string GetPublicId(int64_t resourceId) + ORTHANC_OVERRIDE; - virtual ResourceType GetResourceType(int64_t resourceId); + virtual ResourceType GetResourceType(int64_t resourceId) + ORTHANC_OVERRIDE; - virtual void DeleteResource(int64_t id); + virtual void DeleteResource(int64_t id) + ORTHANC_OVERRIDE; virtual void GetChanges(std::list& target /*out*/, bool& done /*out*/, int64_t since, - uint32_t maxResults); + uint32_t maxResults) + ORTHANC_OVERRIDE; - virtual void GetLastChange(std::list& target /*out*/); + virtual void GetLastChange(std::list& target /*out*/) + ORTHANC_OVERRIDE; - virtual IDatabaseWrapper::ITransaction* StartTransaction(); + virtual IDatabaseWrapper::ITransaction* StartTransaction() + ORTHANC_OVERRIDE; virtual void FlushToDisk() + ORTHANC_OVERRIDE { db_.FlushToDisk(); } virtual bool HasFlushToDisk() const + ORTHANC_OVERRIDE { return true; } virtual void ClearChanges() + ORTHANC_OVERRIDE { ClearTable("Changes"); } virtual void ClearExportedResources() + ORTHANC_OVERRIDE { ClearTable("ExportedResources"); } virtual void GetAllMetadata(std::map& target, - int64_t id); + int64_t id) + ORTHANC_OVERRIDE; virtual unsigned int GetDatabaseVersion() + ORTHANC_OVERRIDE { return version_; } virtual void Upgrade(unsigned int targetVersion, - IStorageArea& storageArea); + IStorageArea& storageArea) + ORTHANC_OVERRIDE; /** @@ -161,114 +178,150 @@ **/ virtual void SetGlobalProperty(GlobalProperty property, - const std::string& value); + const std::string& value) + ORTHANC_OVERRIDE; virtual bool LookupGlobalProperty(std::string& target, - GlobalProperty property); + GlobalProperty property) + ORTHANC_OVERRIDE; virtual int64_t CreateResource(const std::string& publicId, - ResourceType type); + ResourceType type) + ORTHANC_OVERRIDE; virtual bool LookupResource(int64_t& id, ResourceType& type, - const std::string& publicId); + const std::string& publicId) + ORTHANC_OVERRIDE; virtual void AttachChild(int64_t parent, - int64_t child); + int64_t child) + ORTHANC_OVERRIDE; virtual void SetMetadata(int64_t id, MetadataType type, - const std::string& value); + const std::string& value) + ORTHANC_OVERRIDE; virtual void DeleteMetadata(int64_t id, - MetadataType type); + MetadataType type) + ORTHANC_OVERRIDE; virtual bool LookupMetadata(std::string& target, int64_t id, - MetadataType type); + MetadataType type) + ORTHANC_OVERRIDE; virtual void ListAvailableMetadata(std::list& target, - int64_t id); + int64_t id) + ORTHANC_OVERRIDE; virtual void AddAttachment(int64_t id, - const FileInfo& attachment); + const FileInfo& attachment) + ORTHANC_OVERRIDE; virtual void DeleteAttachment(int64_t id, - FileContentType attachment); + FileContentType attachment) + ORTHANC_OVERRIDE; virtual void ListAvailableAttachments(std::list& target, - int64_t id); + int64_t id) + ORTHANC_OVERRIDE; virtual bool LookupAttachment(FileInfo& attachment, int64_t id, - FileContentType contentType); + FileContentType contentType) + ORTHANC_OVERRIDE; - virtual void ClearMainDicomTags(int64_t id); + virtual void ClearMainDicomTags(int64_t id) + ORTHANC_OVERRIDE; virtual void SetMainDicomTag(int64_t id, const DicomTag& tag, - const std::string& value); + const std::string& value) + ORTHANC_OVERRIDE; virtual void SetIdentifierTag(int64_t id, const DicomTag& tag, - const std::string& value); + const std::string& value) + ORTHANC_OVERRIDE; virtual void GetMainDicomTags(DicomMap& map, - int64_t id); + int64_t id) + ORTHANC_OVERRIDE; virtual void GetChildrenPublicId(std::list& target, - int64_t id); + int64_t id) + ORTHANC_OVERRIDE; virtual void GetChildrenInternalId(std::list& target, - int64_t id); + int64_t id) + ORTHANC_OVERRIDE; virtual void LogChange(int64_t internalId, - const ServerIndexChange& change); + const ServerIndexChange& change) + ORTHANC_OVERRIDE; - virtual void LogExportedResource(const ExportedResource& resource); + virtual void LogExportedResource(const ExportedResource& resource) + ORTHANC_OVERRIDE; virtual void GetExportedResources(std::list& target /*out*/, bool& done /*out*/, int64_t since, - uint32_t maxResults); + uint32_t maxResults) + ORTHANC_OVERRIDE; - virtual void GetLastExportedResource(std::list& target /*out*/); + virtual void GetLastExportedResource(std::list& target /*out*/) + ORTHANC_OVERRIDE; - virtual uint64_t GetTotalCompressedSize(); + virtual uint64_t GetTotalCompressedSize() + ORTHANC_OVERRIDE; - virtual uint64_t GetTotalUncompressedSize(); + virtual uint64_t GetTotalUncompressedSize() + ORTHANC_OVERRIDE; - virtual uint64_t GetResourceCount(ResourceType resourceType); + virtual uint64_t GetResourceCount(ResourceType resourceType) + ORTHANC_OVERRIDE; virtual void GetAllInternalIds(std::list& target, - ResourceType resourceType); + ResourceType resourceType) + ORTHANC_OVERRIDE; virtual void GetAllPublicIds(std::list& target, - ResourceType resourceType); + ResourceType resourceType) + ORTHANC_OVERRIDE; virtual void GetAllPublicIds(std::list& target, ResourceType resourceType, size_t since, - size_t limit); + size_t limit) + ORTHANC_OVERRIDE; - virtual bool SelectPatientToRecycle(int64_t& internalId); + virtual bool SelectPatientToRecycle(int64_t& internalId) + ORTHANC_OVERRIDE; virtual bool SelectPatientToRecycle(int64_t& internalId, - int64_t patientIdToAvoid); + int64_t patientIdToAvoid) + ORTHANC_OVERRIDE; - virtual bool IsProtectedPatient(int64_t internalId); + virtual bool IsProtectedPatient(int64_t internalId) + ORTHANC_OVERRIDE; virtual void SetProtectedPatient(int64_t internalId, - bool isProtected); + bool isProtected) + ORTHANC_OVERRIDE; - virtual bool IsExistingResource(int64_t internalId); + virtual bool IsExistingResource(int64_t internalId) + ORTHANC_OVERRIDE; - virtual bool IsDiskSizeAbove(uint64_t threshold); + virtual bool IsDiskSizeAbove(uint64_t threshold) + ORTHANC_OVERRIDE; virtual void ApplyLookupResources(std::vector& resourcesId, std::vector* instancesId, const std::vector& lookup, ResourceType queryLevel, - size_t limit); + size_t limit) + ORTHANC_OVERRIDE; }; } diff -r 6a2c7e206ebb -r d8a91acb7424 OrthancServer/Search/Compatibility/CompatibilityDatabaseWrapper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancServer/Search/Compatibility/CompatibilityDatabaseWrapper.h Thu Dec 20 16:42:35 2018 +0100 @@ -0,0 +1,60 @@ +/** + * Orthanc - A Lightweight, RESTful DICOM Store + * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * Copyright (C) 2017-2018 Osimis S.A., Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * In addition, as a special exception, the copyright holders of this + * program give permission to link the code of its release with the + * OpenSSL project's "OpenSSL" library (or with modified versions of it + * that use the same license as the "OpenSSL" library), and distribute + * the linked executables. You must obey the GNU General Public License + * in all respects for all of the code used other than "OpenSSL". If you + * modify file(s) with this exception, you may extend this exception to + * your version of the file(s), but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. If you delete this exception statement from all source files + * in the program, then also delete it here. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + **/ + + +#pragma once + +#include "../../IDatabaseWrapper.h" + +namespace Orthanc +{ + /** + * This is a compatibility class that contains database primitives + * that were used in Orthanc <= 1.5.1, and that have been removed + * during the optimization of the database engine. + **/ + class CompatibilityDatabaseWrapper : public IDatabaseWrapper + { + public: + virtual void LookupIdentifier(std::list& result, + ResourceType level, + const DicomTag& tag, + IdentifierConstraintType type, + const std::string& value) = 0; + + virtual void LookupIdentifierRange(std::list& result, + ResourceType level, + const DicomTag& tag, + const std::string& start, + const std::string& end) = 0; + }; +} diff -r 6a2c7e206ebb -r d8a91acb7424 OrthancServer/Search/Compatibility/SetOfResources.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancServer/Search/Compatibility/SetOfResources.cpp Thu Dec 20 16:42:35 2018 +0100 @@ -0,0 +1,157 @@ +/** + * Orthanc - A Lightweight, RESTful DICOM Store + * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * Copyright (C) 2017-2018 Osimis S.A., Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * In addition, as a special exception, the copyright holders of this + * program give permission to link the code of its release with the + * OpenSSL project's "OpenSSL" library (or with modified versions of it + * that use the same license as the "OpenSSL" library), and distribute + * the linked executables. You must obey the GNU General Public License + * in all respects for all of the code used other than "OpenSSL". If you + * modify file(s) with this exception, you may extend this exception to + * your version of the file(s), but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. If you delete this exception statement from all source files + * in the program, then also delete it here. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + **/ + + +#include "../../OrthancServer/PrecompiledHeadersServer.h" +#include "SetOfResources.h" + +#include "../../Core/OrthancException.h" + + +namespace Orthanc +{ + void SetOfResources::Intersect(const std::list& resources) + { + if (resources_.get() == NULL) + { + resources_.reset(new Resources); + + for (std::list::const_iterator + it = resources.begin(); it != resources.end(); ++it) + { + resources_->insert(*it); + } + } + else + { + std::auto_ptr filtered(new Resources); + + for (std::list::const_iterator + it = resources.begin(); it != resources.end(); ++it) + { + if (resources_->find(*it) != resources_->end()) + { + filtered->insert(*it); + } + } + + resources_ = filtered; + } + } + + + void SetOfResources::GoDown() + { + if (level_ == ResourceType_Instance) + { + throw OrthancException(ErrorCode_BadSequenceOfCalls); + } + + if (resources_.get() != NULL) + { + std::auto_ptr children(new Resources); + + for (Resources::const_iterator it = resources_->begin(); + it != resources_->end(); ++it) + { + std::list tmp; + database_.GetChildrenInternalId(tmp, *it); + + for (std::list::const_iterator + child = tmp.begin(); child != tmp.end(); ++child) + { + children->insert(*child); + } + } + + resources_ = children; + } + + switch (level_) + { + case ResourceType_Patient: + level_ = ResourceType_Study; + break; + + case ResourceType_Study: + level_ = ResourceType_Series; + break; + + case ResourceType_Series: + level_ = ResourceType_Instance; + break; + + default: + throw OrthancException(ErrorCode_InternalError); + } + } + + + void SetOfResources::Flatten(std::list& result) + { + result.clear(); + + if (resources_.get() == NULL) + { + // All the resources of this level are part of the filter + database_.GetAllPublicIds(result, level_); + } + else + { + for (Resources::const_iterator it = resources_->begin(); + it != resources_->end(); ++it) + { + result.push_back(database_.GetPublicId(*it)); + } + } + } + + + void SetOfResources::Flatten(std::list& result) + { + result.clear(); + + if (resources_.get() == NULL) + { + // All the resources of this level are part of the filter + database_.GetAllInternalIds(result, level_); + } + else + { + for (Resources::const_iterator it = resources_->begin(); + it != resources_->end(); ++it) + { + result.push_back(*it); + } + } + } +} diff -r 6a2c7e206ebb -r d8a91acb7424 OrthancServer/Search/Compatibility/SetOfResources.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancServer/Search/Compatibility/SetOfResources.h Thu Dec 20 16:42:35 2018 +0100 @@ -0,0 +1,79 @@ +/** + * Orthanc - A Lightweight, RESTful DICOM Store + * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * Copyright (C) 2017-2018 Osimis S.A., Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * In addition, as a special exception, the copyright holders of this + * program give permission to link the code of its release with the + * OpenSSL project's "OpenSSL" library (or with modified versions of it + * that use the same license as the "OpenSSL" library), and distribute + * the linked executables. You must obey the GNU General Public License + * in all respects for all of the code used other than "OpenSSL". If you + * modify file(s) with this exception, you may extend this exception to + * your version of the file(s), but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. If you delete this exception statement from all source files + * in the program, then also delete it here. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + **/ + + +#pragma once + +#include "../../IDatabaseWrapper.h" + +#include +#include +#include + +namespace Orthanc +{ + class SetOfResources : public boost::noncopyable + { + private: + typedef std::set Resources; + + IDatabaseWrapper& database_; + ResourceType level_; + std::auto_ptr resources_; + + public: + SetOfResources(IDatabaseWrapper& database, + ResourceType level) : + database_(database), + level_(level) + { + } + + ResourceType GetLevel() const + { + return level_; + } + + void Intersect(const std::list& resources); + + void GoDown(); + + void Flatten(std::list& result); + + void Flatten(std::list& result); + + void Clear() + { + resources_.reset(NULL); + } + }; +} diff -r 6a2c7e206ebb -r d8a91acb7424 Plugins/Engine/OrthancPluginDatabase.h --- a/Plugins/Engine/OrthancPluginDatabase.h Thu Dec 20 16:18:38 2018 +0100 +++ b/Plugins/Engine/OrthancPluginDatabase.h Thu Dec 20 16:42:35 2018 +0100 @@ -96,9 +96,11 @@ size_t extensionsSize, void *payload); - virtual void Open(); + virtual void Open() + ORTHANC_OVERRIDE; - virtual void Close() + virtual void Close() + ORTHANC_OVERRIDE { CheckSuccess(backend_.close(payload_)); } @@ -109,161 +111,229 @@ } virtual void AddAttachment(int64_t id, - const FileInfo& attachment); + const FileInfo& attachment) + ORTHANC_OVERRIDE; virtual void AttachChild(int64_t parent, - int64_t child); + int64_t child) + ORTHANC_OVERRIDE; - virtual void ClearChanges(); + virtual void ClearChanges() + ORTHANC_OVERRIDE; - virtual void ClearExportedResources(); + virtual void ClearExportedResources() + ORTHANC_OVERRIDE; virtual int64_t CreateResource(const std::string& publicId, - ResourceType type); + ResourceType type) + ORTHANC_OVERRIDE; virtual void DeleteAttachment(int64_t id, - FileContentType attachment); + FileContentType attachment) + ORTHANC_OVERRIDE; virtual void DeleteMetadata(int64_t id, - MetadataType type); + MetadataType type) + ORTHANC_OVERRIDE; - virtual void DeleteResource(int64_t id); + virtual void DeleteResource(int64_t id) + ORTHANC_OVERRIDE; - virtual void FlushToDisk() + virtual void FlushToDisk() + ORTHANC_OVERRIDE { } - virtual bool HasFlushToDisk() const + virtual bool HasFlushToDisk() const + ORTHANC_OVERRIDE { return false; } virtual void GetAllMetadata(std::map& target, - int64_t id); + int64_t id) + ORTHANC_OVERRIDE; virtual void GetAllInternalIds(std::list& target, - ResourceType resourceType); + ResourceType resourceType) + ORTHANC_OVERRIDE; virtual void GetAllPublicIds(std::list& target, - ResourceType resourceType); + ResourceType resourceType) + ORTHANC_OVERRIDE; virtual void GetAllPublicIds(std::list& target, ResourceType resourceType, size_t since, - size_t limit); + size_t limit) + ORTHANC_OVERRIDE; virtual void GetChanges(std::list& target /*out*/, bool& done /*out*/, int64_t since, - uint32_t maxResults); + uint32_t maxResults) + ORTHANC_OVERRIDE; virtual void GetChildrenInternalId(std::list& target, - int64_t id); + int64_t id) + ORTHANC_OVERRIDE; virtual void GetChildrenPublicId(std::list& target, - int64_t id); + int64_t id) + ORTHANC_OVERRIDE; virtual void GetExportedResources(std::list& target /*out*/, bool& done /*out*/, int64_t since, - uint32_t maxResults); + uint32_t maxResults) + ORTHANC_OVERRIDE; - virtual void GetLastChange(std::list& target /*out*/); + virtual void GetLastChange(std::list& target /*out*/) + ORTHANC_OVERRIDE; - virtual void GetLastExportedResource(std::list& target /*out*/); + virtual void GetLastExportedResource(std::list& target /*out*/) + ORTHANC_OVERRIDE; virtual void GetMainDicomTags(DicomMap& map, - int64_t id); + int64_t id) + ORTHANC_OVERRIDE; - virtual std::string GetPublicId(int64_t resourceId); + virtual std::string GetPublicId(int64_t resourceId) + ORTHANC_OVERRIDE; - virtual uint64_t GetResourceCount(ResourceType resourceType); + virtual uint64_t GetResourceCount(ResourceType resourceType) + ORTHANC_OVERRIDE; - virtual ResourceType GetResourceType(int64_t resourceId); + virtual ResourceType GetResourceType(int64_t resourceId) + ORTHANC_OVERRIDE; - virtual uint64_t GetTotalCompressedSize(); + virtual uint64_t GetTotalCompressedSize() + ORTHANC_OVERRIDE; - virtual uint64_t GetTotalUncompressedSize(); + virtual uint64_t GetTotalUncompressedSize() + ORTHANC_OVERRIDE; - virtual bool IsExistingResource(int64_t internalId); + virtual bool IsExistingResource(int64_t internalId) + ORTHANC_OVERRIDE; - virtual bool IsProtectedPatient(int64_t internalId); + virtual bool IsProtectedPatient(int64_t internalId) + ORTHANC_OVERRIDE; virtual void ListAvailableMetadata(std::list& target, - int64_t id); + int64_t id) + ORTHANC_OVERRIDE; virtual void ListAvailableAttachments(std::list& target, - int64_t id); + int64_t id) + ORTHANC_OVERRIDE; virtual void LogChange(int64_t internalId, - const ServerIndexChange& change); + const ServerIndexChange& change) + ORTHANC_OVERRIDE; - virtual void LogExportedResource(const ExportedResource& resource); + virtual void LogExportedResource(const ExportedResource& resource) + ORTHANC_OVERRIDE; virtual bool LookupAttachment(FileInfo& attachment, int64_t id, - FileContentType contentType); + FileContentType contentType) + ORTHANC_OVERRIDE; virtual bool LookupGlobalProperty(std::string& target, - GlobalProperty property); + GlobalProperty property) + ORTHANC_OVERRIDE; virtual bool LookupMetadata(std::string& target, int64_t id, - MetadataType type); + MetadataType type) + ORTHANC_OVERRIDE; virtual bool LookupParent(int64_t& parentId, - int64_t resourceId); + int64_t resourceId) + ORTHANC_OVERRIDE; virtual bool LookupResource(int64_t& id, ResourceType& type, - const std::string& publicId); + const std::string& publicId) + ORTHANC_OVERRIDE; - virtual bool SelectPatientToRecycle(int64_t& internalId); + virtual bool SelectPatientToRecycle(int64_t& internalId) + ORTHANC_OVERRIDE; virtual bool SelectPatientToRecycle(int64_t& internalId, - int64_t patientIdToAvoid); + int64_t patientIdToAvoid) + ORTHANC_OVERRIDE; virtual void SetGlobalProperty(GlobalProperty property, - const std::string& value); + const std::string& value) + ORTHANC_OVERRIDE; - virtual void ClearMainDicomTags(int64_t id); + virtual void ClearMainDicomTags(int64_t id) + ORTHANC_OVERRIDE; virtual void SetMainDicomTag(int64_t id, const DicomTag& tag, - const std::string& value); + const std::string& value) + ORTHANC_OVERRIDE; virtual void SetIdentifierTag(int64_t id, const DicomTag& tag, - const std::string& value); + const std::string& value) + ORTHANC_OVERRIDE; virtual void SetMetadata(int64_t id, MetadataType type, - const std::string& value); + const std::string& value) + ORTHANC_OVERRIDE; virtual void SetProtectedPatient(int64_t internalId, - bool isProtected); + bool isProtected) + ORTHANC_OVERRIDE; - virtual IDatabaseWrapper::ITransaction* StartTransaction(); + virtual IDatabaseWrapper::ITransaction* StartTransaction() + ORTHANC_OVERRIDE; - virtual void SetListener(IDatabaseListener& listener) + virtual void SetListener(IDatabaseListener& listener) + ORTHANC_OVERRIDE { listener_ = &listener; } - virtual unsigned int GetDatabaseVersion(); + virtual unsigned int GetDatabaseVersion() + ORTHANC_OVERRIDE; virtual void Upgrade(unsigned int targetVersion, - IStorageArea& storageArea); + IStorageArea& storageArea) + ORTHANC_OVERRIDE; - void AnswerReceived(const _OrthancPluginDatabaseAnswer& answer); + void AnswerReceived(const _OrthancPluginDatabaseAnswer& answer) + ORTHANC_OVERRIDE; - virtual bool IsDiskSizeAbove(uint64_t threshold); + virtual bool IsDiskSizeAbove(uint64_t threshold) + ORTHANC_OVERRIDE; virtual void ApplyLookupResources(std::vector& patientsId, std::vector* instancesId, const std::vector& lookup, ResourceType queryLevel, - size_t limit); + size_t limit) + ORTHANC_OVERRIDE; + + // From the "CompatibilityDatabaseWrapper" interface + virtual void LookupIdentifier(std::list& result, + ResourceType level, + const DicomTag& tag, + IdentifierConstraintType type, + const std::string& value) + ORTHANC_OVERRIDE; + + // From the "CompatibilityDatabaseWrapper" interface + virtual void LookupIdentifierRange(std::list& result, + ResourceType level, + const DicomTag& tag, + const std::string& start, + const std::string& end) + ORTHANC_OVERRIDE; }; } diff -r 6a2c7e206ebb -r d8a91acb7424 Plugins/Engine/SetOfResources.cpp --- a/Plugins/Engine/SetOfResources.cpp Thu Dec 20 16:18:38 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,157 +0,0 @@ -/** - * Orthanc - A Lightweight, RESTful DICOM Store - * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics - * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2018 Osimis S.A., Belgium - * - * This program is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * In addition, as a special exception, the copyright holders of this - * program give permission to link the code of its release with the - * OpenSSL project's "OpenSSL" library (or with modified versions of it - * that use the same license as the "OpenSSL" library), and distribute - * the linked executables. You must obey the GNU General Public License - * in all respects for all of the code used other than "OpenSSL". If you - * modify file(s) with this exception, you may extend this exception to - * your version of the file(s), but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. If you delete this exception statement from all source files - * in the program, then also delete it here. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - **/ - - -#include "../../OrthancServer/PrecompiledHeadersServer.h" -#include "SetOfResources.h" - -#include "../../Core/OrthancException.h" - - -namespace Orthanc -{ - void SetOfResources::Intersect(const std::list& resources) - { - if (resources_.get() == NULL) - { - resources_.reset(new Resources); - - for (std::list::const_iterator - it = resources.begin(); it != resources.end(); ++it) - { - resources_->insert(*it); - } - } - else - { - std::auto_ptr filtered(new Resources); - - for (std::list::const_iterator - it = resources.begin(); it != resources.end(); ++it) - { - if (resources_->find(*it) != resources_->end()) - { - filtered->insert(*it); - } - } - - resources_ = filtered; - } - } - - - void SetOfResources::GoDown() - { - if (level_ == ResourceType_Instance) - { - throw OrthancException(ErrorCode_BadSequenceOfCalls); - } - - if (resources_.get() != NULL) - { - std::auto_ptr children(new Resources); - - for (Resources::const_iterator it = resources_->begin(); - it != resources_->end(); ++it) - { - std::list tmp; - database_.GetChildrenInternalId(tmp, *it); - - for (std::list::const_iterator - child = tmp.begin(); child != tmp.end(); ++child) - { - children->insert(*child); - } - } - - resources_ = children; - } - - switch (level_) - { - case ResourceType_Patient: - level_ = ResourceType_Study; - break; - - case ResourceType_Study: - level_ = ResourceType_Series; - break; - - case ResourceType_Series: - level_ = ResourceType_Instance; - break; - - default: - throw OrthancException(ErrorCode_InternalError); - } - } - - - void SetOfResources::Flatten(std::list& result) - { - result.clear(); - - if (resources_.get() == NULL) - { - // All the resources of this level are part of the filter - database_.GetAllPublicIds(result, level_); - } - else - { - for (Resources::const_iterator it = resources_->begin(); - it != resources_->end(); ++it) - { - result.push_back(database_.GetPublicId(*it)); - } - } - } - - - void SetOfResources::Flatten(std::list& result) - { - result.clear(); - - if (resources_.get() == NULL) - { - // All the resources of this level are part of the filter - database_.GetAllInternalIds(result, level_); - } - else - { - for (Resources::const_iterator it = resources_->begin(); - it != resources_->end(); ++it) - { - result.push_back(*it); - } - } - } -} diff -r 6a2c7e206ebb -r d8a91acb7424 Plugins/Engine/SetOfResources.h --- a/Plugins/Engine/SetOfResources.h Thu Dec 20 16:18:38 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,79 +0,0 @@ -/** - * Orthanc - A Lightweight, RESTful DICOM Store - * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics - * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2018 Osimis S.A., Belgium - * - * This program is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * In addition, as a special exception, the copyright holders of this - * program give permission to link the code of its release with the - * OpenSSL project's "OpenSSL" library (or with modified versions of it - * that use the same license as the "OpenSSL" library), and distribute - * the linked executables. You must obey the GNU General Public License - * in all respects for all of the code used other than "OpenSSL". If you - * modify file(s) with this exception, you may extend this exception to - * your version of the file(s), but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. If you delete this exception statement from all source files - * in the program, then also delete it here. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - **/ - - -#pragma once - -#include "../../OrthancServer/IDatabaseWrapper.h" - -#include -#include -#include - -namespace Orthanc -{ - class SetOfResources : public boost::noncopyable - { - private: - typedef std::set Resources; - - IDatabaseWrapper& database_; - ResourceType level_; - std::auto_ptr resources_; - - public: - SetOfResources(IDatabaseWrapper& database, - ResourceType level) : - database_(database), - level_(level) - { - } - - ResourceType GetLevel() const - { - return level_; - } - - void Intersect(const std::list& resources); - - void GoDown(); - - void Flatten(std::list& result); - - void Flatten(std::list& result); - - void Clear() - { - resources_.reset(NULL); - } - }; -}