Mercurial > hg > orthanc-object-storage
diff Common/BaseStorage.cpp @ 78:d7295e8678d7
renames
author | Alain Mazy <am@osimis.io> |
---|---|
date | Fri, 14 Oct 2022 11:00:18 +0200 |
parents | Common/BaseStoragePlugin.cpp@80792bb9600e |
children | 3c7e0374f28e |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Common/BaseStorage.cpp Fri Oct 14 11:00:18 2022 +0200 @@ -0,0 +1,95 @@ +/** + * Cloud storage plugins for Orthanc + * Copyright (C) 2020-2021 Osimis S.A., Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * 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 + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + **/ + + +#include "BaseStorage.h" +#include <boost/filesystem/fstream.hpp> + +boost::filesystem::path BaseStorage::GetOrthancFileSystemPath(const std::string& uuid, const std::string& fileSystemRootPath) +{ + boost::filesystem::path path = fileSystemRootPath; + + path /= std::string(&uuid[0], &uuid[2]); + path /= std::string(&uuid[2], &uuid[4]); + path /= uuid; + + path.make_preferred(); + + return path; +} + + +std::string BaseStorage::GetPath(const char* uuid, OrthancPluginContentType type, bool encryptionEnabled, bool useAlternateExtension) +{ + if (enableLegacyStorageStructure_) + { + return GetOrthancFileSystemPath(uuid, rootPath_).string(); + } + else + { + boost::filesystem::path path = rootPath_; + std::string filename = std::string(uuid); + + if (type == OrthancPluginContentType_Dicom) + { + filename += ".dcm"; + } + else if (type == OrthancPluginContentType_DicomAsJson) + { + filename += ".json"; + } + else if (type == OrthancPluginContentType_DicomUntilPixelData && !useAlternateExtension) // for some time, header files were saved with .unk (happened with S3 storage plugin between version 1.2.0 and 1.3.0 - 21.5.1 and 21.6.2) + { + filename += ".dcm.head"; + } + else + { + filename += ".unk"; + } + + if (encryptionEnabled) + { + filename += ".enc"; + } + path /= filename; + + return path.string(); + } +} + +bool BaseStorage::ReadCommonConfiguration(bool& enableLegacyStorageStructure, bool& storageContainsUnknownFiles, const OrthancPlugins::OrthancConfiguration& pluginSection) +{ + std::string storageStructure = pluginSection.GetStringValue("StorageStructure", "flat"); + if (storageStructure == "flat") + { + enableLegacyStorageStructure = false; + } + else + { + enableLegacyStorageStructure = true; + if (storageStructure != "legacy") + { + OrthancPlugins::LogError("ObjectStorage/StorageStructure configuration invalid value: " + storageStructure + ", allowed values are 'flat' and 'legacy'"); + return false; + } + } + + storageContainsUnknownFiles = pluginSection.GetBooleanValue("EnableLegacyUnknownFiles", false); + + return true; +}