Mercurial > hg > orthanc
diff OrthancServer/ServerContext.cpp @ 304:4eea080e6e7a
refactoring
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 19 Dec 2012 14:57:18 +0100 |
parents | 4d7469f72a0b |
children | 1b0ffed55ab0 |
line wrap: on
line diff
--- a/OrthancServer/ServerContext.cpp Tue Dec 18 19:01:01 2012 +0100 +++ b/OrthancServer/ServerContext.cpp Wed Dec 19 14:57:18 2012 +0100 @@ -76,7 +76,7 @@ storage_.Remove(fileUuid); } - StoreStatus ServerContext::Store(const char* dicomFile, + StoreStatus ServerContext::Store(const char* dicomInstance, size_t dicomSize, const DicomMap& dicomSummary, const Json::Value& dicomJson, @@ -91,7 +91,7 @@ accessor_.SetCompressionForNextOperations(CompressionType_None); } - FileInfo dicomInfo = accessor_.Write(dicomFile, dicomSize, FileContentType_Dicom); + FileInfo dicomInfo = accessor_.Write(dicomInstance, dicomSize, FileContentType_Dicom); FileInfo jsonInfo = accessor_.Write(dicomJson.toStyledString(), FileContentType_Json); ServerIndex::Attachments attachments; @@ -188,4 +188,54 @@ return dynamic_cast<ParsedDicomFile&>(dicomCache_.Access(instancePublicId)); #endif } + + + StoreStatus ServerContext::Store(std::string& resultPublicId, + DcmFileFormat& dicomInstance, + const char* dicomBuffer, + size_t dicomSize) + { + DicomMap dicomSummary; + FromDcmtkBridge::Convert(dicomSummary, *dicomInstance.getDataset()); + + DicomInstanceHasher hasher(dicomSummary); + resultPublicId = hasher.HashInstance(); + + Json::Value dicomJson; + FromDcmtkBridge::ToJson(dicomJson, *dicomInstance.getDataset()); + + StoreStatus status = StoreStatus_Failure; + if (dicomSize > 0) + { + status = Store(dicomBuffer, dicomSize, dicomSummary, dicomJson, ""); + } + + return status; + } + + + StoreStatus ServerContext::Store(std::string& resultPublicId, + DcmFileFormat& dicomInstance) + { + std::string buffer; + if (!FromDcmtkBridge::SaveToMemoryBuffer(buffer, dicomInstance.getDataset())) + { + throw OrthancException(ErrorCode_InternalError); + } + + if (buffer.size() == 0) + return Store(resultPublicId, dicomInstance, NULL, 0); + else + return Store(resultPublicId, dicomInstance, &buffer[0], buffer.size()); + } + + + StoreStatus ServerContext::Store(std::string& resultPublicId, + const char* dicomBuffer, + size_t dicomSize) + { + ParsedDicomFile dicom(dicomBuffer, dicomSize); + return Store(resultPublicId, dicom.GetDicom(), dicomBuffer, dicomSize); + } + }