Mercurial > hg > orthanc
comparison Core/FileStorage/CompressedFileStorageAccessor.cpp @ 1134:ba9fd42284d0
preparing storage plugin
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 09 Sep 2014 12:53:49 +0200 |
parents | bf67431a7383 |
children | 67c3c1e4a6e0 |
comparison
equal
deleted
inserted
replaced
1133:382e162c074c | 1134:ba9fd42284d0 |
---|---|
54 | 54 |
55 switch (compressionType_) | 55 switch (compressionType_) |
56 { | 56 { |
57 case CompressionType_None: | 57 case CompressionType_None: |
58 { | 58 { |
59 std::string uuid = storage_.Create(data, size, type); | 59 std::string uuid = GetStorageArea().Create(data, size, type); |
60 return FileInfo(uuid, type, size, md5); | 60 return FileInfo(uuid, type, size, md5); |
61 } | 61 } |
62 | 62 |
63 case CompressionType_Zlib: | 63 case CompressionType_Zlib: |
64 { | 64 { |
73 } | 73 } |
74 | 74 |
75 std::string uuid; | 75 std::string uuid; |
76 if (compressed.size() > 0) | 76 if (compressed.size() > 0) |
77 { | 77 { |
78 uuid = storage_.Create(&compressed[0], compressed.size(), type); | 78 uuid = GetStorageArea().Create(&compressed[0], compressed.size(), type); |
79 } | 79 } |
80 else | 80 else |
81 { | 81 { |
82 uuid = storage_.Create(NULL, 0, type); | 82 uuid = GetStorageArea().Create(NULL, 0, type); |
83 } | 83 } |
84 | 84 |
85 return FileInfo(uuid, type, size, md5, | 85 return FileInfo(uuid, type, size, md5, |
86 CompressionType_Zlib, compressed.size(), compressedMD5); | 86 CompressionType_Zlib, compressed.size(), compressedMD5); |
87 } | 87 } |
89 default: | 89 default: |
90 throw OrthancException(ErrorCode_NotImplemented); | 90 throw OrthancException(ErrorCode_NotImplemented); |
91 } | 91 } |
92 } | 92 } |
93 | 93 |
94 | |
95 CompressedFileStorageAccessor::CompressedFileStorageAccessor() : | |
96 storage_(NULL), | |
97 compressionType_(CompressionType_None) | |
98 { | |
99 } | |
100 | |
101 | |
94 CompressedFileStorageAccessor::CompressedFileStorageAccessor(IStorageArea& storage) : | 102 CompressedFileStorageAccessor::CompressedFileStorageAccessor(IStorageArea& storage) : |
95 storage_(storage) | 103 storage_(&storage), |
104 compressionType_(CompressionType_None) | |
96 { | 105 { |
97 compressionType_ = CompressionType_None; | |
98 } | 106 } |
107 | |
108 | |
109 IStorageArea& CompressedFileStorageAccessor::GetStorageArea() | |
110 { | |
111 if (storage_ == NULL) | |
112 { | |
113 throw OrthancException(ErrorCode_BadSequenceOfCalls); | |
114 } | |
115 | |
116 return *storage_; | |
117 } | |
118 | |
99 | 119 |
100 void CompressedFileStorageAccessor::Read(std::string& content, | 120 void CompressedFileStorageAccessor::Read(std::string& content, |
101 const std::string& uuid, | 121 const std::string& uuid, |
102 FileContentType type) | 122 FileContentType type) |
103 { | 123 { |
104 switch (compressionType_) | 124 switch (compressionType_) |
105 { | 125 { |
106 case CompressionType_None: | 126 case CompressionType_None: |
107 storage_.Read(content, uuid, type); | 127 GetStorageArea().Read(content, uuid, type); |
108 break; | 128 break; |
109 | 129 |
110 case CompressionType_Zlib: | 130 case CompressionType_Zlib: |
111 { | 131 { |
112 std::string compressed; | 132 std::string compressed; |
113 storage_.Read(compressed, uuid, type); | 133 GetStorageArea().Read(compressed, uuid, type); |
114 zlib_.Uncompress(content, compressed); | 134 zlib_.Uncompress(content, compressed); |
115 break; | 135 break; |
116 } | 136 } |
117 | 137 |
118 default: | 138 default: |
125 { | 145 { |
126 switch (compressionType_) | 146 switch (compressionType_) |
127 { | 147 { |
128 case CompressionType_None: | 148 case CompressionType_None: |
129 { | 149 { |
130 FileStorageAccessor uncompressedAccessor(storage_); | 150 FileStorageAccessor uncompressedAccessor(GetStorageArea()); |
131 return uncompressedAccessor.ConstructHttpFileSender(uuid, type); | 151 return uncompressedAccessor.ConstructHttpFileSender(uuid, type); |
132 } | 152 } |
133 | 153 |
134 case CompressionType_Zlib: | 154 case CompressionType_Zlib: |
135 { | 155 { |
136 std::string compressed; | 156 std::string compressed; |
137 storage_.Read(compressed, uuid, type); | 157 GetStorageArea().Read(compressed, uuid, type); |
138 | 158 |
139 std::auto_ptr<BufferHttpSender> sender(new BufferHttpSender); | 159 std::auto_ptr<BufferHttpSender> sender(new BufferHttpSender); |
140 zlib_.Uncompress(sender->GetBuffer(), compressed); | 160 zlib_.Uncompress(sender->GetBuffer(), compressed); |
141 | 161 |
142 return sender.release(); | 162 return sender.release(); |
144 | 164 |
145 default: | 165 default: |
146 throw OrthancException(ErrorCode_NotImplemented); | 166 throw OrthancException(ErrorCode_NotImplemented); |
147 } | 167 } |
148 } | 168 } |
169 | |
170 | |
171 void CompressedFileStorageAccessor::Remove(const std::string& uuid, | |
172 FileContentType type) | |
173 { | |
174 GetStorageArea().Remove(uuid, type); | |
175 } | |
149 } | 176 } |