annotate UnitTests/FileStorage.cpp @ 224:4eb0c7ce86c9

refactoring for store
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 29 Nov 2012 22:22:00 +0100
parents 6f0e4a8ebb0f
children 5368bbe813cf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
222
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 #include "gtest/gtest.h"
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3 #include <ctype.h>
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
4 #include <glog/logging.h>
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
5
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
6 #include "../Core/FileStorage.h"
224
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
7 #include "../OrthancServer/ServerIndex.h"
222
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8 #include "../Core/Toolbox.h"
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 #include "../Core/OrthancException.h"
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 #include "../Core/Uuid.h"
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 #include "../Core/HttpServer/FilesystemHttpSender.h"
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 #include "../Core/HttpServer/BufferHttpSender.h"
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 #include "../Core/FileStorage/FileStorageAccessor.h"
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14 #include "../Core/FileStorage/CompressedFileStorageAccessor.h"
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16 using namespace Orthanc;
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18 TEST(FileStorage, Basic)
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 {
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20 FileStorage s("FileStorageUnitTests");
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
22 std::string data = Toolbox::GenerateUuid();
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23 std::string uid = s.Create(data);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
24 std::string d;
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
25 s.ReadFile(d, uid);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
26 ASSERT_EQ(d.size(), data.size());
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
27 ASSERT_FALSE(memcmp(&d[0], &data[0], data.size()));
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
28 }
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
29
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
30 TEST(FileStorage, EndToEnd)
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
31 {
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
32 FileStorage s("FileStorageUnitTests");
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
33 s.Clear();
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
34
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
35 std::list<std::string> u;
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
36 for (unsigned int i = 0; i < 10; i++)
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
37 {
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
38 u.push_back(s.Create(Toolbox::GenerateUuid()));
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
39 }
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
40
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
41 std::set<std::string> ss;
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
42 s.ListAllFiles(ss);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
43 ASSERT_EQ(10u, ss.size());
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
44
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
45 unsigned int c = 0;
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
46 for (std::list<std::string>::iterator
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
47 i = u.begin(); i != u.end(); i++, c++)
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
48 {
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
49 ASSERT_TRUE(ss.find(*i) != ss.end());
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
50 if (c < 5)
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
51 s.Remove(*i);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
52 }
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
53
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
54 s.ListAllFiles(ss);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
55 ASSERT_EQ(5u, ss.size());
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
56
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
57 s.Clear();
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
58 s.ListAllFiles(ss);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
59 ASSERT_EQ(0u, ss.size());
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
60 }
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
61
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
62
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
63 TEST(FileStorageAccessor, Simple)
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
64 {
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
65 FileStorage s("FileStorageUnitTests");
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
66 FileStorageAccessor accessor(s);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
67
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
68 std::string data = "Hello world";
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
69 std::string id = accessor.Write(data);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
70
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
71 std::string r;
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
72 accessor.Read(r, id);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
73
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
74 ASSERT_EQ(data, r);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
75 }
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
76
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
77
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
78 TEST(FileStorageAccessor, NoCompression)
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
79 {
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
80 FileStorage s("FileStorageUnitTests");
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
81 CompressedFileStorageAccessor accessor(s);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
82
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
83 accessor.SetCompressionForNextOperations(CompressionType_None);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
84 std::string data = "Hello world";
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
85 std::string id = accessor.Write(data);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
86
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
87 std::string r;
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
88 accessor.Read(r, id);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
89
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
90 ASSERT_EQ(data, r);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
91 }
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
92
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
93
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
94 TEST(FileStorageAccessor, Compression)
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
95 {
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
96 FileStorage s("FileStorageUnitTests");
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
97 CompressedFileStorageAccessor accessor(s);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
98
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
99 accessor.SetCompressionForNextOperations(CompressionType_Zlib);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
100 std::string data = "Hello world";
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
101 std::string id = accessor.Write(data);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
102
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
103 std::string r;
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
104 accessor.Read(r, id);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
105
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
106 ASSERT_EQ(data, r);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
107 }
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
108
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
109
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
110 TEST(FileStorageAccessor, Mix)
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
111 {
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
112 FileStorage s("FileStorageUnitTests");
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
113 CompressedFileStorageAccessor accessor(s);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
114
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
115 std::string r;
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
116 std::string compressedData = "Hello";
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
117 std::string uncompressedData = "HelloWorld";
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
118
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
119 accessor.SetCompressionForNextOperations(CompressionType_Zlib);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
120 std::string compressedId = accessor.Write(compressedData);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
121
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
122 accessor.SetCompressionForNextOperations(CompressionType_None);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
123 std::string uncompressedId = accessor.Write(uncompressedData);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
124
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
125 accessor.SetCompressionForNextOperations(CompressionType_Zlib);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
126 accessor.Read(r, compressedId);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
127 ASSERT_EQ(compressedData, r);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
128
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
129 accessor.SetCompressionForNextOperations(CompressionType_None);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
130 accessor.Read(r, compressedId);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
131 ASSERT_NE(compressedData, r);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
132
223
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 222
diff changeset
133 #if defined(__linux)
224
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
134 // This test is too slow on Windows
222
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
135 accessor.SetCompressionForNextOperations(CompressionType_Zlib);
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
136 ASSERT_THROW(accessor.Read(r, uncompressedId), OrthancException);
223
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 222
diff changeset
137 #endif
222
bd934af46ba4 unit test of storagearea in separate file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
138 }
224
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
139
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
140
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
141
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
142 #if 0
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
143 // TODO REMOVE THIS STUFF
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
144 namespace Orthanc
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
145 {
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
146 class ServerStorageAccessor : public StorageAccessor
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
147 {
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
148 private:
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
149 CompressedFileStorageAccessor composite_;
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
150 ServerIndex& index_;
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
151 AttachedFileType contentType_;
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
152
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
153 protected:
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
154 virtual std::string WriteInternal(const void* data,
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
155 size_t size)
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
156 {
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
157 switch (contentType_)
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
158 {
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
159 case AttachedFileType_Json:
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
160 composite_.SetCompressionForNextOperations(CompressionType_None);
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
161 break;
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
162
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
163 case AttachedFileType_Dicom:
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
164 // TODO GLOBAL PARAMETER
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
165 composite_.SetCompressionForNextOperations(CompressionType_Zlib);
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
166 break;
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
167
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
168 default:
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
169 throw OrthancException(ErrorCode_InternalError);
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
170 }
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
171
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
172 std::string fileUuid = composite_.Write(data, size);
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
173
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
174
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
175 }
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
176
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
177 public:
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
178 ServerStorageAccessor(FileStorage& storage,
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
179 ServerIndex& index) :
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
180 composite_(storage),
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
181 index_(index)
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
182 {
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
183 contentType_ = AttachedFileType_Dicom;
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
184 }
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
185
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
186 void SetAttachmentType(AttachedFileType type)
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
187 {
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
188 contentType_ = type;
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
189 }
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
190
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
191 AttachedFileType GetAttachmentType() const
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
192 {
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
193 return contentType_;
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
194 }
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
195
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
196 virtual void Read(std::string& content,
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
197 const std::string& uuid)
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
198 {
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
199 std::string fileUuid;
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
200 CompressionType compression;
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
201
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
202 if (index_.GetFile(fileUuid, compression, uuid, contentType_))
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
203 {
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
204 composite_.SetCompressionForNextOperations(compression);
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
205 composite_.Read(content, fileUuid);
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
206 }
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
207 else
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
208 {
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
209 throw OrthancException(ErrorCode_InternalError);
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
210 }
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
211 }
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
212
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
213 virtual HttpFileSender* ConstructHttpFileSender(const std::string& uuid)
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
214 {
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
215 std::string fileUuid;
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
216 CompressionType compression;
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
217
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
218 if (index_.GetFile(fileUuid, compression, uuid, contentType_))
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
219 {
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
220 composite_.SetCompressionForNextOperations(compression);
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
221 return composite_.ConstructHttpFileSender(fileUuid);
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
222 }
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
223 else
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
224 {
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
225 throw OrthancException(ErrorCode_InternalError);
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
226 }
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
227 }
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
228 };
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
229 }
4eb0c7ce86c9 refactoring for store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 223
diff changeset
230 #endif