Mercurial > hg > orthanc
diff OrthancServer/ServerContext.cpp @ 1549:e5e975e9b738
refactoring and simplification of StorageAccessor
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 17 Aug 2015 10:47:04 +0200 |
parents | e9325f3ac496 |
children | 2c7d5eb588e6 |
line wrap: on
line diff
--- a/OrthancServer/ServerContext.cpp Fri Aug 14 11:52:03 2015 +0200 +++ b/OrthancServer/ServerContext.cpp Mon Aug 17 10:47:04 2015 +0200 @@ -33,6 +33,7 @@ #include "PrecompiledHeadersServer.h" #include "ServerContext.h" +#include "../Core/FileStorage/StorageAccessor.h" #include "../Core/HttpServer/FilesystemHttpSender.h" #include "../Core/HttpServer/HttpStreamTranscoder.h" #include "../Core/Logging.h" @@ -97,9 +98,12 @@ } - ServerContext::ServerContext(IDatabaseWrapper& database) : + ServerContext::ServerContext(IDatabaseWrapper& database, + IStorageArea& area) : index_(*this, database), + area_(area), compressionEnabled_(false), + storeMD5_(true), provider_(*this), dicomCache_(provider_, DICOM_CACHE_SIZE), scheduler_(Configuration::GetGlobalIntegerParameter("LimitJobs", 10)), @@ -164,10 +168,11 @@ compressionEnabled_ = enabled; } + void ServerContext::RemoveFile(const std::string& fileUuid, FileContentType type) { - accessor_.Remove(fileUuid, type); + area_.Remove(fileUuid, type); } @@ -176,6 +181,8 @@ { try { + StorageAccessor accessor(area_); + DicomInstanceHasher hasher(dicom.GetSummary()); resultPublicId = hasher.HashInstance(); @@ -213,18 +220,13 @@ return StoreStatus_FilteredOut; } - if (compressionEnabled_) - { - // TODO Should we use "gzip" instead? - accessor_.SetCompressionForNextOperations(CompressionType_ZlibWithSize); - } - else - { - accessor_.SetCompressionForNextOperations(CompressionType_None); - } + // TODO Should we use "gzip" instead? + CompressionType compression = (compressionEnabled_ ? CompressionType_ZlibWithSize : CompressionType_None); - FileInfo dicomInfo = accessor_.Write(dicom.GetBufferData(), dicom.GetBufferSize(), FileContentType_Dicom); - FileInfo jsonInfo = accessor_.Write(dicom.GetJson().toStyledString(), FileContentType_DicomAsJson); + FileInfo dicomInfo = accessor.Write(dicom.GetBufferData(), dicom.GetBufferSize(), + FileContentType_Dicom, compression, storeMD5_); + FileInfo jsonInfo = accessor.Write(dicom.GetJson().toStyledString(), + FileContentType_DicomAsJson, compression, storeMD5_); ServerIndex::Attachments attachments; attachments.push_back(dicomInfo); @@ -247,8 +249,8 @@ if (status != StoreStatus_Success) { - accessor_.Remove(dicomInfo.GetUuid(), FileContentType_Dicom); - accessor_.Remove(jsonInfo.GetUuid(), FileContentType_DicomAsJson); + accessor.Remove(dicomInfo); + accessor.Remove(jsonInfo); } switch (status) @@ -314,15 +316,8 @@ throw OrthancException(ErrorCode_InternalError); } - IStorageArea& area = accessor_.GetStorageArea(); - - BufferHttpSender sender; - area.Read(sender.GetBuffer(), attachment.GetUuid(), content); - sender.SetContentType(GetMimeType(content)); - sender.SetContentFilename(attachment.GetUuid() + std::string(GetFileExtension(content))); - - HttpStreamTranscoder transcoder(sender, attachment.GetCompressionType()); - output.AnswerStream(transcoder); + StorageAccessor accessor(area_); + accessor.AnswerFile(output, attachment); } @@ -350,17 +345,9 @@ { throw OrthancException(ErrorCode_InternalError); } - - if (uncompressIfNeeded) - { - accessor_.SetCompressionForNextOperations(attachment.GetCompressionType()); - } - else - { - accessor_.SetCompressionForNextOperations(CompressionType_None); - } - - accessor_.Read(result, attachment.GetUuid(), attachment.GetContentType()); + + StorageAccessor accessor(area_); + accessor.Read(result, attachment); } @@ -395,7 +382,7 @@ void ServerContext::SetStoreMD5ForAttachments(bool storeMD5) { LOG(INFO) << "Storing MD5 for attachments: " << (storeMD5 ? "yes" : "no"); - accessor_.SetStoreMD5(storeMD5); + storeMD5_ = storeMD5; } @@ -406,22 +393,16 @@ { LOG(INFO) << "Adding attachment " << EnumerationToString(attachmentType) << " to resource " << resourceId; - if (compressionEnabled_) - { - // TODO Should we use "gzip" instead? - accessor_.SetCompressionForNextOperations(CompressionType_ZlibWithSize); - } - else - { - accessor_.SetCompressionForNextOperations(CompressionType_None); - } + // TODO Should we use "gzip" instead? + CompressionType compression = (compressionEnabled_ ? CompressionType_ZlibWithSize : CompressionType_None); - FileInfo info = accessor_.Write(data, size, attachmentType); - StoreStatus status = index_.AddAttachment(info, resourceId); + StorageAccessor accessor(area_); + FileInfo attachment = accessor.Write(data, size, attachmentType, compression, storeMD5_); + StoreStatus status = index_.AddAttachment(attachment, resourceId); if (status != StoreStatus_Success) { - accessor_.Remove(info.GetUuid(), info.GetContentType()); + accessor.Remove(attachment); return false; } else