Mercurial > hg > orthanc-object-storage
annotate Common/BaseStorage.cpp @ 148:c02a830ae308
try
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 20 Jun 2024 18:52:57 +0200 |
parents | 3c7e0374f28e |
children | d62f52be1943 |
rev | line source |
---|---|
56
b922ae86bbe1
full static linking against AWS SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
1 /** |
b922ae86bbe1
full static linking against AWS SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
2 * Cloud storage plugins for Orthanc |
145
3c7e0374f28e
updated copyright, as Orthanc Team now replaces Osimis
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
78
diff
changeset
|
3 * Copyright (C) 2020-2023 Osimis S.A., Belgium |
3c7e0374f28e
updated copyright, as Orthanc Team now replaces Osimis
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
78
diff
changeset
|
4 * Copyright (C) 2024-2024 Orthanc Team SRL, Belgium |
3c7e0374f28e
updated copyright, as Orthanc Team now replaces Osimis
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
78
diff
changeset
|
5 * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium |
56
b922ae86bbe1
full static linking against AWS SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
6 * |
b922ae86bbe1
full static linking against AWS SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
7 * This program is free software: you can redistribute it and/or |
b922ae86bbe1
full static linking against AWS SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
8 * modify it under the terms of the GNU Affero General Public License |
b922ae86bbe1
full static linking against AWS SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
9 * as published by the Free Software Foundation, either version 3 of |
b922ae86bbe1
full static linking against AWS SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
10 * the License, or (at your option) any later version. |
b922ae86bbe1
full static linking against AWS SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
11 * |
b922ae86bbe1
full static linking against AWS SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
12 * This program is distributed in the hope that it will be useful, but |
b922ae86bbe1
full static linking against AWS SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
13 * WITHOUT ANY WARRANTY; without even the implied warranty of |
b922ae86bbe1
full static linking against AWS SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
b922ae86bbe1
full static linking against AWS SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
15 * Affero General Public License for more details. |
b922ae86bbe1
full static linking against AWS SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
16 * |
b922ae86bbe1
full static linking against AWS SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
17 * You should have received a copy of the GNU Affero General Public License |
b922ae86bbe1
full static linking against AWS SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
b922ae86bbe1
full static linking against AWS SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
19 **/ |
b922ae86bbe1
full static linking against AWS SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
20 |
b922ae86bbe1
full static linking against AWS SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
55
diff
changeset
|
21 |
78 | 22 #include "BaseStorage.h" |
15 | 23 #include <boost/filesystem/fstream.hpp> |
24 | |
78 | 25 boost::filesystem::path BaseStorage::GetOrthancFileSystemPath(const std::string& uuid, const std::string& fileSystemRootPath) |
15 | 26 { |
27 boost::filesystem::path path = fileSystemRootPath; | |
28 | |
29 path /= std::string(&uuid[0], &uuid[2]); | |
30 path /= std::string(&uuid[2], &uuid[4]); | |
31 path /= uuid; | |
32 | |
33 path.make_preferred(); | |
34 | |
77 | 35 return path; |
15 | 36 } |
37 | |
38 | |
78 | 39 std::string BaseStorage::GetPath(const char* uuid, OrthancPluginContentType type, bool encryptionEnabled, bool useAlternateExtension) |
15 | 40 { |
41 if (enableLegacyStorageStructure_) | |
42 { | |
77 | 43 return GetOrthancFileSystemPath(uuid, rootPath_).string(); |
15 | 44 } |
45 else | |
46 { | |
20 | 47 boost::filesystem::path path = rootPath_; |
48 std::string filename = std::string(uuid); | |
15 | 49 |
50 if (type == OrthancPluginContentType_Dicom) | |
51 { | |
20 | 52 filename += ".dcm"; |
15 | 53 } |
54 else if (type == OrthancPluginContentType_DicomAsJson) | |
55 { | |
20 | 56 filename += ".json"; |
15 | 57 } |
64
c4f56973a279
Fix reading/deleting DCM header files that were saved with plugin v 1.2.0 and Orthanc 1.9.3 which had a .unk extension
Alain Mazy <am@osimis.io>
parents:
56
diff
changeset
|
58 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) |
39
50d0be413c42
implemented ReadRange (only in Azure plugin right now)
Alain Mazy <am@osimis.io>
parents:
20
diff
changeset
|
59 { |
55 | 60 filename += ".dcm.head"; |
39
50d0be413c42
implemented ReadRange (only in Azure plugin right now)
Alain Mazy <am@osimis.io>
parents:
20
diff
changeset
|
61 } |
15 | 62 else |
63 { | |
20 | 64 filename += ".unk"; |
15 | 65 } |
66 | |
67 if (encryptionEnabled) | |
68 { | |
20 | 69 filename += ".enc"; |
15 | 70 } |
20 | 71 path /= filename; |
72 | |
73 return path.string(); | |
15 | 74 } |
75 } | |
76 | |
78 | 77 bool BaseStorage::ReadCommonConfiguration(bool& enableLegacyStorageStructure, bool& storageContainsUnknownFiles, const OrthancPlugins::OrthancConfiguration& pluginSection) |
15 | 78 { |
79 std::string storageStructure = pluginSection.GetStringValue("StorageStructure", "flat"); | |
80 if (storageStructure == "flat") | |
81 { | |
82 enableLegacyStorageStructure = false; | |
83 } | |
84 else | |
85 { | |
86 enableLegacyStorageStructure = true; | |
87 if (storageStructure != "legacy") | |
88 { | |
89 OrthancPlugins::LogError("ObjectStorage/StorageStructure configuration invalid value: " + storageStructure + ", allowed values are 'flat' and 'legacy'"); | |
90 return false; | |
91 } | |
92 } | |
93 | |
70
16e419fe80c5
Google & Azure: Added the "EnableLegacyUnknownFiles" configuration option
Alain Mazy <am@osimis.io>
parents:
64
diff
changeset
|
94 storageContainsUnknownFiles = pluginSection.GetBooleanValue("EnableLegacyUnknownFiles", false); |
16e419fe80c5
Google & Azure: Added the "EnableLegacyUnknownFiles" configuration option
Alain Mazy <am@osimis.io>
parents:
64
diff
changeset
|
95 |
15 | 96 return true; |
97 } |