Mercurial > hg > orthanc-stone
diff OrthancStone/Sources/Oracle/ParseDicomFromWadoCommand.cpp @ 1512:244ad1e4e76a
reorganization of folders
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 07 Jul 2020 16:21:02 +0200 |
parents | Framework/Oracle/ParseDicomFromWadoCommand.cpp@121d01aa328e |
children | 4fb8fdf03314 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancStone/Sources/Oracle/ParseDicomFromWadoCommand.cpp Tue Jul 07 16:21:02 2020 +0200 @@ -0,0 +1,103 @@ +/** + * Stone of Orthanc + * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * Copyright (C) 2017-2020 Osimis S.A., Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + **/ + + +#include "ParseDicomFromWadoCommand.h" + +#include <OrthancException.h> + +namespace OrthancStone +{ + ParseDicomFromWadoCommand::ParseDicomFromWadoCommand(const DicomSource& source, + const std::string& sopInstanceUid, + IOracleCommand* restCommand) : + source_(source), + sopInstanceUid_(sopInstanceUid), + restCommand_(restCommand) + { + if (restCommand == NULL) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); + } + + if (restCommand_->GetType() != Type_Http && + restCommand_->GetType() != Type_OrthancRestApi) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadParameterType); + } + } + + + IOracleCommand* ParseDicomFromWadoCommand::Clone() const + { + assert(restCommand_.get() != NULL); + return new ParseDicomFromWadoCommand(source_, sopInstanceUid_, restCommand_->Clone()); + } + + + const IOracleCommand& ParseDicomFromWadoCommand::GetRestCommand() const + { + assert(restCommand_.get() != NULL); + return *restCommand_; + } + + + ParseDicomFromWadoCommand* ParseDicomFromWadoCommand::Create( + const DicomSource& source, + const std::string& studyInstanceUid, + const std::string& seriesInstanceUid, + const std::string& sopInstanceUid, + bool transcode, + Orthanc::DicomTransferSyntax transferSyntax, + Orthanc::IDynamicObject* payload) + { + std::unique_ptr<Orthanc::IDynamicObject> protection(payload); + + const std::string uri = ("/studies/" + studyInstanceUid + + "/series/" + seriesInstanceUid + + "/instances/" + sopInstanceUid); + + std::string s; + if (transcode) + { + s = Orthanc::GetTransferSyntaxUid(transferSyntax); + } + else + { + s = "*"; // No transcoding, keep source transfer syntax + } + + std::map<std::string, std::string> arguments, headers; + headers["Accept"] = ("multipart/related; type=\"application/dicom\"; transfer-syntax=" + s); + + std::unique_ptr<IOracleCommand> rest( + source.CreateDicomWebCommand(uri, arguments, headers, NULL)); + + std::unique_ptr<ParseDicomFromWadoCommand> command( + new ParseDicomFromWadoCommand(source, sopInstanceUid, rest.release())); + + if (protection.get() != NULL) + { + command->AcquirePayload(protection.release()); + } + + return command.release(); + } +}