Mercurial > hg > orthanc
annotate OrthancServer/Sources/OrthancRestApi/OrthancRestApi.cpp @ 4997:1f93dc290628
fix compatibility with dcmtk 3.6.7
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 04 May 2022 17:29:58 +0200 |
parents | 8422e4f99a18 |
children | f2dcdbe05884 |
rev | line source |
---|---|
210
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1 /** |
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
2 * Orthanc - A Lightweight, RESTful DICOM Store |
1900 | 3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
1288
6e7e5ed91c2d
upgrade to year 2015
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1103
diff
changeset
|
4 * Department, University Hospital of Liege, Belgium |
4870
43e613a7756b
upgrade to year 2022
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4831
diff
changeset
|
5 * Copyright (C) 2017-2022 Osimis S.A., Belgium |
43e613a7756b
upgrade to year 2022
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4831
diff
changeset
|
6 * Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium |
210
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
7 * |
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
8 * This program is free software: you can redistribute it and/or |
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
9 * modify it under the terms of the GNU General Public License as |
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
10 * published by the Free Software Foundation, either version 3 of the |
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
11 * License, or (at your option) any later version. |
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
12 * |
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
13 * This program is distributed in the hope that it will be useful, but |
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
14 * WITHOUT ANY WARRANTY; without even the implied warranty of |
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
16 * General Public License for more details. |
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
17 * |
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
18 * You should have received a copy of the GNU General Public License |
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
19 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
20 **/ |
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
21 |
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
22 |
831
84513f2ee1f3
pch for unit tests and server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
824
diff
changeset
|
23 #include "../PrecompiledHeadersServer.h" |
230 | 24 #include "OrthancRestApi.h" |
210
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
25 |
4045 | 26 #include "../../../OrthancFramework/Sources/Compression/GzipCompressor.h" |
4357
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
27 #include "../../../OrthancFramework/Sources/Compression/ZipReader.h" |
4045 | 28 #include "../../../OrthancFramework/Sources/Logging.h" |
29 #include "../../../OrthancFramework/Sources/MetricsRegistry.h" | |
30 #include "../../../OrthancFramework/Sources/SerializationToolbox.h" | |
4936
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
31 #include "../../../OrthancFramework/Sources/DicomParsing/FromDcmtkBridge.h" |
4505
97d103b57cd1
removed cached dicom summary from DicomInstanceToStore
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
32 #include "../OrthancConfiguration.h" |
1437
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1288
diff
changeset
|
33 #include "../ServerContext.h" |
796
e7b1ca0f1e04
creation of dicom files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
751
diff
changeset
|
34 |
3689
e85bfba2d307
"/instances": Support "Content-Encoding: gzip" to upload gzip-compressed DICOM files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
35 #include <boost/algorithm/string/predicate.hpp> |
e85bfba2d307
"/instances": Support "Content-Encoding: gzip" to upload gzip-compressed DICOM files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
36 |
210
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
37 namespace Orthanc |
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
38 { |
2899
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
39 static void SetupResourceAnswer(Json::Value& result, |
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
40 const std::string& publicId, |
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
41 ResourceType resourceType, |
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
42 StoreStatus status) |
796
e7b1ca0f1e04
creation of dicom files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
751
diff
changeset
|
43 { |
2899
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
44 result = Json::objectValue; |
796
e7b1ca0f1e04
creation of dicom files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
751
diff
changeset
|
45 |
e7b1ca0f1e04
creation of dicom files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
751
diff
changeset
|
46 if (status != StoreStatus_Failure) |
e7b1ca0f1e04
creation of dicom files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
751
diff
changeset
|
47 { |
e7b1ca0f1e04
creation of dicom files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
751
diff
changeset
|
48 result["ID"] = publicId; |
1564
1b7def486e62
creation of DICOM series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1486
diff
changeset
|
49 result["Path"] = GetBasePath(resourceType, publicId); |
796
e7b1ca0f1e04
creation of dicom files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
751
diff
changeset
|
50 } |
2899
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
51 |
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
52 result["Status"] = EnumerationToString(status); |
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
53 } |
796
e7b1ca0f1e04
creation of dicom files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
751
diff
changeset
|
54 |
2899
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
55 |
4357
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
56 static void SetupResourceAnswer(Json::Value& result, |
4519 | 57 const DicomInstanceToStore& instance, |
4357
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
58 StoreStatus status, |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
59 const std::string& instanceId) |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
60 { |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
61 SetupResourceAnswer(result, instanceId, ResourceType_Instance, status); |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
62 |
4505
97d103b57cd1
removed cached dicom summary from DicomInstanceToStore
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
63 DicomMap summary; |
4507
b4c58795f3a8
widening the use of DicomTransferSyntax enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4505
diff
changeset
|
64 instance.GetSummary(summary); |
4505
97d103b57cd1
removed cached dicom summary from DicomInstanceToStore
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
65 |
97d103b57cd1
removed cached dicom summary from DicomInstanceToStore
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
66 DicomInstanceHasher hasher(summary); |
97d103b57cd1
removed cached dicom summary from DicomInstanceToStore
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
67 result["ParentPatient"] = hasher.HashPatient(); |
97d103b57cd1
removed cached dicom summary from DicomInstanceToStore
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
68 result["ParentStudy"] = hasher.HashStudy(); |
97d103b57cd1
removed cached dicom summary from DicomInstanceToStore
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
69 result["ParentSeries"] = hasher.HashSeries(); |
4357
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
70 } |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
71 |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
72 |
2899
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
73 void OrthancRestApi::AnswerStoredInstance(RestApiPostCall& call, |
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
74 DicomInstanceToStore& instance, |
3912
7610af1532c3
prototyping automated transcoding of incoming DICOM files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3848
diff
changeset
|
75 StoreStatus status, |
7610af1532c3
prototyping automated transcoding of incoming DICOM files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3848
diff
changeset
|
76 const std::string& instanceId) const |
2899
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
77 { |
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
78 Json::Value result; |
4357
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
79 SetupResourceAnswer(result, instance, status, instanceId); |
2899
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
80 call.GetOutput().AnswerJson(result); |
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
81 } |
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
82 |
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
83 |
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
84 void OrthancRestApi::AnswerStoredResource(RestApiPostCall& call, |
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
85 const std::string& publicId, |
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
86 ResourceType resourceType, |
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
87 StoreStatus status) const |
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
88 { |
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
89 Json::Value result; |
5dd649de253d
POST-ing a DICOM file to "/instances" also answers the patient/study/series ID
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2867
diff
changeset
|
90 SetupResourceAnswer(result, publicId, resourceType, status); |
796
e7b1ca0f1e04
creation of dicom files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
751
diff
changeset
|
91 call.GetOutput().AnswerJson(result); |
e7b1ca0f1e04
creation of dicom files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
751
diff
changeset
|
92 } |
e7b1ca0f1e04
creation of dicom files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
751
diff
changeset
|
93 |
e7b1ca0f1e04
creation of dicom files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
751
diff
changeset
|
94 |
1103
bec1eccf976c
Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1063
diff
changeset
|
95 void OrthancRestApi::ResetOrthanc(RestApiPostCall& call) |
bec1eccf976c
Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1063
diff
changeset
|
96 { |
4403 | 97 if (call.IsDocumentation()) |
98 { | |
99 call.GetDocumentation() | |
100 .SetTag("System") | |
101 .SetSummary("Restart Orthanc"); | |
102 return; | |
103 } | |
104 | |
1730
bc34c69b594a
New URI "/tools/shutdown" to stop Orthanc from the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1572
diff
changeset
|
105 OrthancRestApi::GetApi(call).leaveBarrier_ = true; |
1103
bec1eccf976c
Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1063
diff
changeset
|
106 OrthancRestApi::GetApi(call).resetRequestReceived_ = true; |
2908
9d277f8ad698
new enumeration: MimeType
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2905
diff
changeset
|
107 call.GetOutput().AnswerBuffer("{}", MimeType_Json); |
1103
bec1eccf976c
Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1063
diff
changeset
|
108 } |
bec1eccf976c
Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1063
diff
changeset
|
109 |
bec1eccf976c
Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1063
diff
changeset
|
110 |
1730
bc34c69b594a
New URI "/tools/shutdown" to stop Orthanc from the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1572
diff
changeset
|
111 void OrthancRestApi::ShutdownOrthanc(RestApiPostCall& call) |
bc34c69b594a
New URI "/tools/shutdown" to stop Orthanc from the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1572
diff
changeset
|
112 { |
4403 | 113 if (call.IsDocumentation()) |
114 { | |
115 call.GetDocumentation() | |
116 .SetTag("System") | |
117 .SetSummary("Shutdown Orthanc"); | |
118 return; | |
119 } | |
120 | |
1730
bc34c69b594a
New URI "/tools/shutdown" to stop Orthanc from the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1572
diff
changeset
|
121 OrthancRestApi::GetApi(call).leaveBarrier_ = true; |
2908
9d277f8ad698
new enumeration: MimeType
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2905
diff
changeset
|
122 call.GetOutput().AnswerBuffer("{}", MimeType_Json); |
1730
bc34c69b594a
New URI "/tools/shutdown" to stop Orthanc from the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1572
diff
changeset
|
123 LOG(WARNING) << "Shutdown request received"; |
bc34c69b594a
New URI "/tools/shutdown" to stop Orthanc from the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1572
diff
changeset
|
124 } |
bc34c69b594a
New URI "/tools/shutdown" to stop Orthanc from the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1572
diff
changeset
|
125 |
bc34c69b594a
New URI "/tools/shutdown" to stop Orthanc from the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1572
diff
changeset
|
126 |
1103
bec1eccf976c
Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1063
diff
changeset
|
127 |
bec1eccf976c
Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1063
diff
changeset
|
128 |
796
e7b1ca0f1e04
creation of dicom files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
751
diff
changeset
|
129 |
216
e5d5d4a9a326
refactored upload of dicom through http
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
215
diff
changeset
|
130 // Upload of DICOM files through HTTP --------------------------------------- |
e5d5d4a9a326
refactored upload of dicom through http
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
215
diff
changeset
|
131 |
974 | 132 static void UploadDicomFile(RestApiPostCall& call) |
216
e5d5d4a9a326
refactored upload of dicom through http
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
215
diff
changeset
|
133 { |
4399
80fd140b12ba
New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4378
diff
changeset
|
134 if (call.GetRequestOrigin() == RequestOrigin_Documentation) |
80fd140b12ba
New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4378
diff
changeset
|
135 { |
80fd140b12ba
New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4378
diff
changeset
|
136 Json::Value sample = Json::objectValue; |
80fd140b12ba
New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4378
diff
changeset
|
137 sample["ID"] = "19816330-cb02e1cf-df3a8fe8-bf510623-ccefe9f5"; |
80fd140b12ba
New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4378
diff
changeset
|
138 sample["ParentPatient"] = "ef9d77db-eb3b2bef-9b31fd3e-bf42ae46-dbdb0cc3"; |
80fd140b12ba
New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4378
diff
changeset
|
139 sample["ParentSeries"] = "3774320f-ccda46d8-69ee8641-9e791cbf-3ecbbcc6"; |
80fd140b12ba
New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4378
diff
changeset
|
140 sample["ParentStudy"] = "66c8e41e-ac3a9029-0b85e42a-8195ee0a-92c2e62e"; |
80fd140b12ba
New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4378
diff
changeset
|
141 sample["Path"] = "/instances/19816330-cb02e1cf-df3a8fe8-bf510623-ccefe9f5"; |
80fd140b12ba
New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4378
diff
changeset
|
142 sample["Status"] = "Success"; |
80fd140b12ba
New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4378
diff
changeset
|
143 |
80fd140b12ba
New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4378
diff
changeset
|
144 call.GetDocumentation() |
80fd140b12ba
New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4378
diff
changeset
|
145 .SetTag("Instances") |
4403 | 146 .SetSummary("Upload DICOM instances") |
4399
80fd140b12ba
New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4378
diff
changeset
|
147 .AddRequestType(MimeType_Dicom, "DICOM file to be uploaded") |
80fd140b12ba
New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4378
diff
changeset
|
148 .AddRequestType(MimeType_Zip, "ZIP archive containing DICOM files (new in Orthanc 1.8.2)") |
80fd140b12ba
New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4378
diff
changeset
|
149 .AddAnswerType(MimeType_Json, "Information about the uploaded instance, " |
80fd140b12ba
New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4378
diff
changeset
|
150 "or list of information for each uploaded instance in the case of ZIP archive") |
4404 | 151 .SetAnswerField("ID", RestApiCallDocumentation::Type_String, "Orthanc identifier of the new instance") |
152 .SetAnswerField("Path", RestApiCallDocumentation::Type_String, "Path to the new instance in the REST API") | |
153 .SetAnswerField("Status", RestApiCallDocumentation::Type_String, "Can be `Success`, `AlreadyStored`, `Failure`, or `FilteredOut` (removed by some `NewInstanceFilter`)") | |
4413 | 154 .SetAnswerField("ParentPatient", RestApiCallDocumentation::Type_String, "Orthanc identifier of the parent patient") |
155 .SetAnswerField("ParentStudy", RestApiCallDocumentation::Type_String, "Orthanc identifier of the parent study") | |
156 .SetAnswerField("ParentSeries", RestApiCallDocumentation::Type_String, "Orthanc identifier of the parent series") | |
4399
80fd140b12ba
New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4378
diff
changeset
|
157 .SetSample(sample); |
80fd140b12ba
New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4378
diff
changeset
|
158 return; |
80fd140b12ba
New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4378
diff
changeset
|
159 } |
80fd140b12ba
New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4378
diff
changeset
|
160 |
746
478f4f9de9eb
getting rid of macros
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
745
diff
changeset
|
161 ServerContext& context = OrthancRestApi::GetContext(call); |
216
e5d5d4a9a326
refactored upload of dicom through http
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
215
diff
changeset
|
162 |
4294
0923247e69f6
log categories: rest -> http + added lua & jobs
Alain Mazy <alain@mazy.be>
parents:
4272
diff
changeset
|
163 CLOG(INFO, HTTP) << "Receiving a DICOM file of " << call.GetBodySize() << " bytes through HTTP"; |
3491
22bdb9c91ebf
Log an explicit error if uploading an empty DICOM file using REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3401
diff
changeset
|
164 |
1446
8dc80ba768aa
refactoring: IHttpHandler does not use std::string to hold the request body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1437
diff
changeset
|
165 if (call.GetBodySize() == 0) |
291
4d7469f72a0b
embedding of dicom dictionaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
166 { |
3491
22bdb9c91ebf
Log an explicit error if uploading an empty DICOM file using REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3401
diff
changeset
|
167 throw OrthancException(ErrorCode_BadFileFormat, |
22bdb9c91ebf
Log an explicit error if uploading an empty DICOM file using REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3401
diff
changeset
|
168 "Received an empty DICOM file"); |
291
4d7469f72a0b
embedding of dicom dictionaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
285
diff
changeset
|
169 } |
216
e5d5d4a9a326
refactored upload of dicom through http
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
215
diff
changeset
|
170 |
4357
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
171 if (ZipReader::IsZipMemoryBuffer(call.GetBodyData(), call.GetBodySize())) |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
172 { |
4374
79ef2b6d8e76
there will be a 1.8.2 release before 1.9.0
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4357
diff
changeset
|
173 // New in Orthanc 1.8.2 |
4357
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
174 std::unique_ptr<ZipReader> reader(ZipReader::CreateFromMemory(call.GetBodyData(), call.GetBodySize())); |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
175 |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
176 Json::Value answer = Json::arrayValue; |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
177 |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
178 std::string filename, content; |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
179 while (reader->ReadNextFile(filename, content)) |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
180 { |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
181 if (!content.empty()) |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
182 { |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
183 LOG(INFO) << "Uploading DICOM file from ZIP archive: " << filename; |
4508
8f9090b137f1
Optimization in C-STORE SCP by avoiding an unnecessary DICOM parsing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
184 |
8f9090b137f1
Optimization in C-STORE SCP by avoiding an unnecessary DICOM parsing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
185 std::unique_ptr<DicomInstanceToStore> toStore(DicomInstanceToStore::CreateFromBuffer(content)); |
8f9090b137f1
Optimization in C-STORE SCP by avoiding an unnecessary DICOM parsing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
186 toStore->SetOrigin(DicomInstanceOrigin::FromRest(call)); |
4357
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
187 |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
188 std::string publicId; |
3689
e85bfba2d307
"/instances": Support "Content-Encoding: gzip" to upload gzip-compressed DICOM files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
189 |
4357
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
190 try |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
191 { |
4796
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4765
diff
changeset
|
192 ServerContext::StoreResult result = context.Store(publicId, *toStore, StoreInstanceMode_Default); |
3841
be7df7fe3d80
avoid one memcpy of the DICOM buffer on "POST /instances"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
193 |
4357
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
194 Json::Value info; |
4796
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4765
diff
changeset
|
195 SetupResourceAnswer(info, *toStore, result.GetStatus(), publicId); |
4357
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
196 answer.append(info); |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
197 } |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
198 catch (OrthancException& e) |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
199 { |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
200 if (e.GetErrorCode() == ErrorCode_BadFileFormat) |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
201 { |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
202 LOG(ERROR) << "Cannot import non-DICOM file from ZIP archive: " << filename; |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
203 } |
4765
71fbdee4b832
Fix upload of ZIP archives containing a DICOMDIR file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4698
diff
changeset
|
204 else if (e.GetErrorCode() == ErrorCode_InexistentTag) |
71fbdee4b832
Fix upload of ZIP archives containing a DICOMDIR file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4698
diff
changeset
|
205 { |
71fbdee4b832
Fix upload of ZIP archives containing a DICOMDIR file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4698
diff
changeset
|
206 /** |
71fbdee4b832
Fix upload of ZIP archives containing a DICOMDIR file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4698
diff
changeset
|
207 * Allow upload of ZIP archives containing a DICOMDIR |
71fbdee4b832
Fix upload of ZIP archives containing a DICOMDIR file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4698
diff
changeset
|
208 * file (new in Orthanc 1.9.7): |
71fbdee4b832
Fix upload of ZIP archives containing a DICOMDIR file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4698
diff
changeset
|
209 * https://groups.google.com/g/orthanc-users/c/sgBU89o4nhU/m/kbRAYiQUAAAJ |
71fbdee4b832
Fix upload of ZIP archives containing a DICOMDIR file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4698
diff
changeset
|
210 **/ |
71fbdee4b832
Fix upload of ZIP archives containing a DICOMDIR file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4698
diff
changeset
|
211 LOG(ERROR) << "Ignoring what is probably a DICOMDIR file within a ZIP archive: \"" << filename << "\""; |
71fbdee4b832
Fix upload of ZIP archives containing a DICOMDIR file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4698
diff
changeset
|
212 } |
4357
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
213 else |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
214 { |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
215 throw; |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
216 } |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
217 } |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
218 } |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
219 } |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
220 |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
221 call.GetOutput().AnswerJson(answer); |
3689
e85bfba2d307
"/instances": Support "Content-Encoding: gzip" to upload gzip-compressed DICOM files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
222 } |
e85bfba2d307
"/instances": Support "Content-Encoding: gzip" to upload gzip-compressed DICOM files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
223 else |
e85bfba2d307
"/instances": Support "Content-Encoding: gzip" to upload gzip-compressed DICOM files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
224 { |
4357
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
225 // The lifetime of "dicom" must be longer than "toStore", as the |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
226 // latter can possibly store a reference to the former (*) |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
227 std::string dicom; |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
228 |
4508
8f9090b137f1
Optimization in C-STORE SCP by avoiding an unnecessary DICOM parsing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
229 std::unique_ptr<DicomInstanceToStore> toStore; |
1005
84b6d7bca6db
refactoring of ServerContext::Store
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
974
diff
changeset
|
230 |
4357
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
231 if (boost::iequals(call.GetHttpHeader("content-encoding", ""), "gzip")) |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
232 { |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
233 GzipCompressor compressor; |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
234 compressor.Uncompress(dicom, call.GetBodyData(), call.GetBodySize()); |
4508
8f9090b137f1
Optimization in C-STORE SCP by avoiding an unnecessary DICOM parsing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
235 toStore.reset(DicomInstanceToStore::CreateFromBuffer(dicom)); // (*) |
4357
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
236 } |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
237 else |
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
238 { |
4508
8f9090b137f1
Optimization in C-STORE SCP by avoiding an unnecessary DICOM parsing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
239 toStore.reset(DicomInstanceToStore::CreateFromBuffer(call.GetBodyData(), call.GetBodySize())); |
4357
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
240 } |
216
e5d5d4a9a326
refactored upload of dicom through http
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
215
diff
changeset
|
241 |
4508
8f9090b137f1
Optimization in C-STORE SCP by avoiding an unnecessary DICOM parsing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
242 toStore->SetOrigin(DicomInstanceOrigin::FromRest(call)); |
8f9090b137f1
Optimization in C-STORE SCP by avoiding an unnecessary DICOM parsing
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4507
diff
changeset
|
243 |
4357
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
244 std::string publicId; |
4796
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4765
diff
changeset
|
245 ServerContext::StoreResult result = context.Store(publicId, *toStore, StoreInstanceMode_Default); |
4357
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
246 |
4796
94616af363ec
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents:
4765
diff
changeset
|
247 OrthancRestApi::GetApi(call).AnswerStoredInstance(call, *toStore, result.GetStatus(), publicId); |
4357
886bc367aeb2
"/instances" can be used to import ZIP archives provided in the POST body
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4330
diff
changeset
|
248 } |
216
e5d5d4a9a326
refactored upload of dicom through http
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
215
diff
changeset
|
249 } |
215
c07170f3f4f7
refactoring of access to images in REST
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
214
diff
changeset
|
250 |
210
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
251 |
304 | 252 |
213
4ce7fdcc8879
access to tags, simplified-tags and file of an instance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
212
diff
changeset
|
253 // Registration of the various REST handlers -------------------------------- |
4ce7fdcc8879
access to tags, simplified-tags and file of an instance
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
212
diff
changeset
|
254 |
4378
9e2fc6911ac8
adding option to disable orthance explorer when http server is enabled
Andrew Wallis <andrew.wallis@varian.com>>
parents:
4374
diff
changeset
|
255 OrthancRestApi::OrthancRestApi(ServerContext& context, |
9e2fc6911ac8
adding option to disable orthance explorer when http server is enabled
Andrew Wallis <andrew.wallis@varian.com>>
parents:
4374
diff
changeset
|
256 bool orthancExplorerEnabled) : |
1103
bec1eccf976c
Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1063
diff
changeset
|
257 context_(context), |
1730
bc34c69b594a
New URI "/tools/shutdown" to stop Orthanc from the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1572
diff
changeset
|
258 leaveBarrier_(false), |
3176
784bbb03fb54
new metrics: orthanc_rest_api_active_requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3175
diff
changeset
|
259 resetRequestReceived_(false), |
784bbb03fb54
new metrics: orthanc_rest_api_active_requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3175
diff
changeset
|
260 activeRequests_(context.GetMetricsRegistry(), |
784bbb03fb54
new metrics: orthanc_rest_api_active_requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3175
diff
changeset
|
261 "orthanc_rest_api_active_requests", |
784bbb03fb54
new metrics: orthanc_rest_api_active_requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3175
diff
changeset
|
262 MetricsType_MaxOver10Seconds) |
210
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
263 { |
4378
9e2fc6911ac8
adding option to disable orthance explorer when http server is enabled
Andrew Wallis <andrew.wallis@varian.com>>
parents:
4374
diff
changeset
|
264 RegisterSystem(orthancExplorerEnabled); |
751
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
750
diff
changeset
|
265 |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
750
diff
changeset
|
266 RegisterChanges(); |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
750
diff
changeset
|
267 RegisterResources(); |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
750
diff
changeset
|
268 RegisterModalities(); |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
750
diff
changeset
|
269 RegisterAnonymizeModify(); |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
750
diff
changeset
|
270 RegisterArchive(); |
211 | 271 |
216
e5d5d4a9a326
refactored upload of dicom through http
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
215
diff
changeset
|
272 Register("/instances", UploadDicomFile); |
1063
0332e6e8c679
Fix automated generation of the list of resource children in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1005
diff
changeset
|
273 |
0332e6e8c679
Fix automated generation of the list of resource children in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1005
diff
changeset
|
274 // Auto-generated directories |
0332e6e8c679
Fix automated generation of the list of resource children in the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1005
diff
changeset
|
275 Register("/tools", RestApi::AutoListChildren); |
1103
bec1eccf976c
Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1063
diff
changeset
|
276 Register("/tools/reset", ResetOrthanc); |
1730
bc34c69b594a
New URI "/tools/shutdown" to stop Orthanc from the REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1572
diff
changeset
|
277 Register("/tools/shutdown", ShutdownOrthanc); |
210
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
278 } |
1437
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1288
diff
changeset
|
279 |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1288
diff
changeset
|
280 |
3175
574890d14c92
new metrics: orthanc_store_dicom_duration_ms, orthanc_storage_[create|read|remove]_duration_ms
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3060
diff
changeset
|
281 bool OrthancRestApi::Handle(HttpOutput& output, |
574890d14c92
new metrics: orthanc_store_dicom_duration_ms, orthanc_storage_[create|read|remove]_duration_ms
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3060
diff
changeset
|
282 RequestOrigin origin, |
574890d14c92
new metrics: orthanc_store_dicom_duration_ms, orthanc_storage_[create|read|remove]_duration_ms
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3060
diff
changeset
|
283 const char* remoteIp, |
574890d14c92
new metrics: orthanc_store_dicom_duration_ms, orthanc_storage_[create|read|remove]_duration_ms
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3060
diff
changeset
|
284 const char* username, |
574890d14c92
new metrics: orthanc_store_dicom_duration_ms, orthanc_storage_[create|read|remove]_duration_ms
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3060
diff
changeset
|
285 HttpMethod method, |
574890d14c92
new metrics: orthanc_store_dicom_duration_ms, orthanc_storage_[create|read|remove]_duration_ms
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3060
diff
changeset
|
286 const UriComponents& uri, |
4330
a01b1c9cbef4
moving generic type definitions from IHttpHandler to HttpToolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4294
diff
changeset
|
287 const HttpToolbox::Arguments& headers, |
a01b1c9cbef4
moving generic type definitions from IHttpHandler to HttpToolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4294
diff
changeset
|
288 const HttpToolbox::GetArguments& getArguments, |
3401 | 289 const void* bodyData, |
3175
574890d14c92
new metrics: orthanc_store_dicom_duration_ms, orthanc_storage_[create|read|remove]_duration_ms
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3060
diff
changeset
|
290 size_t bodySize) |
574890d14c92
new metrics: orthanc_store_dicom_duration_ms, orthanc_storage_[create|read|remove]_duration_ms
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3060
diff
changeset
|
291 { |
574890d14c92
new metrics: orthanc_store_dicom_duration_ms, orthanc_storage_[create|read|remove]_duration_ms
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3060
diff
changeset
|
292 MetricsRegistry::Timer timer(context_.GetMetricsRegistry(), "orthanc_rest_api_duration_ms"); |
3176
784bbb03fb54
new metrics: orthanc_rest_api_active_requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3175
diff
changeset
|
293 MetricsRegistry::ActiveCounter counter(activeRequests_); |
3175
574890d14c92
new metrics: orthanc_store_dicom_duration_ms, orthanc_storage_[create|read|remove]_duration_ms
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3060
diff
changeset
|
294 |
574890d14c92
new metrics: orthanc_store_dicom_duration_ms, orthanc_storage_[create|read|remove]_duration_ms
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3060
diff
changeset
|
295 return RestApi::Handle(output, origin, remoteIp, username, method, |
574890d14c92
new metrics: orthanc_store_dicom_duration_ms, orthanc_storage_[create|read|remove]_duration_ms
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3060
diff
changeset
|
296 uri, headers, getArguments, bodyData, bodySize); |
574890d14c92
new metrics: orthanc_store_dicom_duration_ms, orthanc_storage_[create|read|remove]_duration_ms
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3060
diff
changeset
|
297 } |
574890d14c92
new metrics: orthanc_store_dicom_duration_ms, orthanc_storage_[create|read|remove]_duration_ms
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3060
diff
changeset
|
298 |
574890d14c92
new metrics: orthanc_store_dicom_duration_ms, orthanc_storage_[create|read|remove]_duration_ms
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3060
diff
changeset
|
299 |
1437
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1288
diff
changeset
|
300 ServerContext& OrthancRestApi::GetContext(RestApiCall& call) |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1288
diff
changeset
|
301 { |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1288
diff
changeset
|
302 return GetApi(call).context_; |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1288
diff
changeset
|
303 } |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1288
diff
changeset
|
304 |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1288
diff
changeset
|
305 |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1288
diff
changeset
|
306 ServerIndex& OrthancRestApi::GetIndex(RestApiCall& call) |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1288
diff
changeset
|
307 { |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1288
diff
changeset
|
308 return GetContext(call).GetIndex(); |
02f5a3f5c0a0
access to the REST API from Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1288
diff
changeset
|
309 } |
2867 | 310 |
311 | |
312 | |
313 static const char* KEY_PERMISSIVE = "Permissive"; | |
314 static const char* KEY_PRIORITY = "Priority"; | |
315 static const char* KEY_SYNCHRONOUS = "Synchronous"; | |
316 static const char* KEY_ASYNCHRONOUS = "Asynchronous"; | |
2965
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
317 |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
318 |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
319 bool OrthancRestApi::IsSynchronousJobRequest(bool isDefaultSynchronous, |
2966 | 320 const Json::Value& body) |
2965
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
321 { |
2966 | 322 if (body.type() != Json::objectValue) |
323 { | |
324 return isDefaultSynchronous; | |
325 } | |
326 else if (body.isMember(KEY_SYNCHRONOUS)) | |
2965
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
327 { |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
328 return SerializationToolbox::ReadBoolean(body, KEY_SYNCHRONOUS); |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
329 } |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
330 else if (body.isMember(KEY_ASYNCHRONOUS)) |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
331 { |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
332 return !SerializationToolbox::ReadBoolean(body, KEY_ASYNCHRONOUS); |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
333 } |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
334 else |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
335 { |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
336 return isDefaultSynchronous; |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
337 } |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
338 } |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
339 |
2970
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2966
diff
changeset
|
340 |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2966
diff
changeset
|
341 unsigned int OrthancRestApi::GetJobRequestPriority(const Json::Value& body) |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2966
diff
changeset
|
342 { |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2966
diff
changeset
|
343 if (body.type() != Json::objectValue || |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2966
diff
changeset
|
344 !body.isMember(KEY_PRIORITY)) |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2966
diff
changeset
|
345 { |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2966
diff
changeset
|
346 return 0; // Default priority |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2966
diff
changeset
|
347 } |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2966
diff
changeset
|
348 else |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2966
diff
changeset
|
349 { |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2966
diff
changeset
|
350 return SerializationToolbox::ReadInteger(body, KEY_PRIORITY); |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2966
diff
changeset
|
351 } |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2966
diff
changeset
|
352 } |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2966
diff
changeset
|
353 |
2965
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
354 |
2976
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
355 void OrthancRestApi::SubmitGenericJob(RestApiOutput& output, |
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
356 ServerContext& context, |
2965
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
357 IJob* job, |
2976
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
358 bool synchronous, |
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
359 int priority) |
2965
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
360 { |
3712
2a170a8f1faf
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3689
diff
changeset
|
361 std::unique_ptr<IJob> raii(job); |
2965
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
362 |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
363 if (job == NULL) |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
364 { |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
365 throw OrthancException(ErrorCode_NullPointer); |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
366 } |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
367 |
2976
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
368 if (synchronous) |
2965
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
369 { |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
370 Json::Value successContent; |
3240
e44e0127e553
Fix issue #134 (/patient/modify gives 500, should really be 400)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3176
diff
changeset
|
371 context.GetJobsEngine().GetRegistry().SubmitAndWait |
e44e0127e553
Fix issue #134 (/patient/modify gives 500, should really be 400)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3176
diff
changeset
|
372 (successContent, raii.release(), priority); |
e44e0127e553
Fix issue #134 (/patient/modify gives 500, should really be 400)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3176
diff
changeset
|
373 |
e44e0127e553
Fix issue #134 (/patient/modify gives 500, should really be 400)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3176
diff
changeset
|
374 // Success in synchronous execution |
e44e0127e553
Fix issue #134 (/patient/modify gives 500, should really be 400)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3176
diff
changeset
|
375 output.AnswerJson(successContent); |
2965
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
376 } |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
377 else |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
378 { |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
379 // Asynchronous mode: Submit the job, but don't wait for its completion |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
380 std::string id; |
2976
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
381 context.GetJobsEngine().GetRegistry().Submit |
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
382 (id, raii.release(), priority); |
2965
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
383 |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
384 Json::Value v; |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
385 v["ID"] = id; |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
386 v["Path"] = "/jobs/" + id; |
2976
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
387 output.AnswerJson(v); |
2965
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
388 } |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
389 } |
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
390 |
2867 | 391 |
2976
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
392 void OrthancRestApi::SubmitGenericJob(RestApiPostCall& call, |
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
393 IJob* job, |
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
394 bool isDefaultSynchronous, |
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
395 const Json::Value& body) const |
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
396 { |
3712
2a170a8f1faf
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3689
diff
changeset
|
397 std::unique_ptr<IJob> raii(job); |
2976
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
398 |
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
399 if (body.type() != Json::objectValue) |
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
400 { |
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
401 throw OrthancException(ErrorCode_BadFileFormat); |
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
402 } |
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
403 |
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
404 bool synchronous = IsSynchronousJobRequest(isDefaultSynchronous, body); |
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
405 int priority = GetJobRequestPriority(body); |
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
406 |
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
407 SubmitGenericJob(call.GetOutput(), context_, raii.release(), synchronous, priority); |
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
408 } |
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
409 |
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
410 |
2867 | 411 void OrthancRestApi::SubmitCommandsJob(RestApiPostCall& call, |
412 SetOfCommandsJob* job, | |
413 bool isDefaultSynchronous, | |
414 const Json::Value& body) const | |
415 { | |
3712
2a170a8f1faf
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3689
diff
changeset
|
416 std::unique_ptr<SetOfCommandsJob> raii(job); |
2867 | 417 |
418 if (body.type() != Json::objectValue) | |
419 { | |
420 throw OrthancException(ErrorCode_BadFileFormat); | |
421 } | |
422 | |
423 job->SetDescription("REST API"); | |
424 | |
425 if (body.isMember(KEY_PERMISSIVE)) | |
426 { | |
427 job->SetPermissive(SerializationToolbox::ReadBoolean(body, KEY_PERMISSIVE)); | |
428 } | |
429 else | |
430 { | |
431 job->SetPermissive(false); | |
432 } | |
433 | |
2965
9c0b0a6d8b54
MediaArchiveSize configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2908
diff
changeset
|
434 SubmitGenericJob(call, raii.release(), isDefaultSynchronous, body); |
2867 | 435 } |
4419 | 436 |
437 | |
438 void OrthancRestApi::DocumentSubmitGenericJob(RestApiPostCall& call) | |
439 { | |
440 call.GetDocumentation() | |
441 .SetRequestField(KEY_SYNCHRONOUS, RestApiCallDocumentation::Type_Boolean, | |
442 "If `true`, run the job in synchronous mode, which means that the HTTP answer will directly " | |
443 "contain the result of the job. This is the default, easy behavior, but it is *not* desirable for " | |
444 "long jobs, as it might lead to network timeouts.", false) | |
445 .SetRequestField(KEY_ASYNCHRONOUS, RestApiCallDocumentation::Type_Boolean, | |
446 "If `true`, run the job in asynchronous mode, which means that the REST API call will immediately " | |
447 "return, reporting the identifier of a job. Prefer this flavor wherever possible.", false) | |
448 .SetRequestField(KEY_PRIORITY, RestApiCallDocumentation::Type_Number, | |
449 "In asynchronous mode, the priority of the job. The lower the value, the higher the priority.", false) | |
450 .SetAnswerField("ID", RestApiCallDocumentation::Type_String, "In asynchronous mode, identifier of the job") | |
451 .SetAnswerField("Path", RestApiCallDocumentation::Type_String, "In asynchronous mode, path to access the job in the REST API"); | |
452 } | |
453 | |
454 | |
455 void OrthancRestApi::DocumentSubmitCommandsJob(RestApiPostCall& call) | |
456 { | |
457 DocumentSubmitGenericJob(call); | |
458 call.GetDocumentation() | |
459 .SetRequestField(KEY_PERMISSIVE, RestApiCallDocumentation::Type_Boolean, | |
460 "If `true`, ignore errors during the individual steps of the job.", false); | |
461 } | |
4697
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
462 |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
463 |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
464 static const std::string GET_SIMPLIFY = "simplify"; |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
465 static const std::string GET_FULL = "full"; |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
466 static const std::string GET_SHORT = "short"; |
4936
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
467 static const std::string GET_REQUESTED_TAGS = "requestedTags"; |
4697
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
468 |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
469 static const std::string POST_SIMPLIFY = "Simplify"; |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
470 static const std::string POST_FULL = "Full"; |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
471 static const std::string POST_SHORT = "Short"; |
4936
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
472 static const std::string POST_REQUESTED_TAGS = "RequestedTags"; |
4697
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
473 |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
474 static const std::string DOCUMENT_SIMPLIFY = |
4698
d16c3c7f11ef
new route "/tools/bulk-content" to get the content of a set of resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4697
diff
changeset
|
475 "report the DICOM tags in human-readable format (using the symbolic name of the tags)"; |
4697
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
476 |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
477 static const std::string DOCUMENT_SHORT = |
4698
d16c3c7f11ef
new route "/tools/bulk-content" to get the content of a set of resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4697
diff
changeset
|
478 "report the DICOM tags in hexadecimal format"; |
4697
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
479 |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
480 static const std::string DOCUMENT_FULL = |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
481 "report the DICOM tags in full format (tags indexed by their hexadecimal " |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
482 "format, associated with their symbolic name and their value)"; |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
483 |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
484 |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
485 DicomToJsonFormat OrthancRestApi::GetDicomFormat(const RestApiGetCall& call, |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
486 DicomToJsonFormat defaultFormat) |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
487 { |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
488 if (call.HasArgument(GET_SIMPLIFY)) |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
489 { |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
490 return DicomToJsonFormat_Human; |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
491 } |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
492 else if (call.HasArgument(GET_SHORT)) |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
493 { |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
494 return DicomToJsonFormat_Short; |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
495 } |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
496 else if (call.HasArgument(GET_FULL)) |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
497 { |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
498 return DicomToJsonFormat_Full; |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
499 } |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
500 else |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
501 { |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
502 return defaultFormat; |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
503 } |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
504 } |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
505 |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
506 |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
507 DicomToJsonFormat OrthancRestApi::GetDicomFormat(const Json::Value& body, |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
508 DicomToJsonFormat defaultFormat) |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
509 { |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
510 if (body.isMember(POST_SIMPLIFY) && |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
511 SerializationToolbox::ReadBoolean(body, POST_SIMPLIFY)) |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
512 { |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
513 return DicomToJsonFormat_Human; |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
514 } |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
515 else if (body.isMember(POST_SHORT) && |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
516 SerializationToolbox::ReadBoolean(body, POST_SHORT)) |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
517 { |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
518 return DicomToJsonFormat_Short; |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
519 } |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
520 else if (body.isMember(POST_FULL) && |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
521 SerializationToolbox::ReadBoolean(body, POST_FULL)) |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
522 { |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
523 return DicomToJsonFormat_Full; |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
524 } |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
525 else |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
526 { |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
527 return defaultFormat; |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
528 } |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
529 } |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
530 |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
531 void OrthancRestApi::DocumentDicomFormat(RestApiGetCall& call, |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
532 DicomToJsonFormat defaultFormat) |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
533 { |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
534 if (defaultFormat != DicomToJsonFormat_Human) |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
535 { |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
536 call.GetDocumentation().SetHttpGetArgument( |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
537 GET_SIMPLIFY, RestApiCallDocumentation::Type_Boolean, "If present, " + DOCUMENT_SIMPLIFY, false); |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
538 } |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
539 |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
540 if (defaultFormat != DicomToJsonFormat_Short) |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
541 { |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
542 call.GetDocumentation().SetHttpGetArgument( |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
543 GET_SHORT, RestApiCallDocumentation::Type_Boolean, "If present, " + DOCUMENT_SHORT, false); |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
544 } |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
545 |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
546 if (defaultFormat != DicomToJsonFormat_Full) |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
547 { |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
548 call.GetDocumentation().SetHttpGetArgument( |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
549 GET_FULL, RestApiCallDocumentation::Type_Boolean, "If present, " + DOCUMENT_FULL, false); |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
550 } |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
551 } |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
552 |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
553 |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
554 void OrthancRestApi::DocumentDicomFormat(RestApiPostCall& call, |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
555 DicomToJsonFormat defaultFormat) |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
556 { |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
557 if (defaultFormat != DicomToJsonFormat_Human) |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
558 { |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
559 call.GetDocumentation().SetRequestField(POST_SIMPLIFY, RestApiCallDocumentation::Type_Boolean, |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
560 "If set to `true`, " + DOCUMENT_SIMPLIFY, false); |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
561 } |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
562 |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
563 if (defaultFormat != DicomToJsonFormat_Short) |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
564 { |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
565 call.GetDocumentation().SetRequestField(POST_SHORT, RestApiCallDocumentation::Type_Boolean, |
4698
d16c3c7f11ef
new route "/tools/bulk-content" to get the content of a set of resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4697
diff
changeset
|
566 "If set to `true`, " + DOCUMENT_SHORT, false); |
4697
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
567 } |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
568 |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
569 if (defaultFormat != DicomToJsonFormat_Full) |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
570 { |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
571 call.GetDocumentation().SetRequestField(POST_FULL, RestApiCallDocumentation::Type_Boolean, |
4698
d16c3c7f11ef
new route "/tools/bulk-content" to get the content of a set of resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4697
diff
changeset
|
572 "If set to `true`, " + DOCUMENT_FULL, false); |
4697
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
573 } |
569d9ef165b1
Added "short", "simplify" and/or "full" options to control the format of DICOM tags wherever possible
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4519
diff
changeset
|
574 } |
4936
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
575 |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
576 void OrthancRestApi::GetRequestedTags(std::set<DicomTag>& requestedTags, |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
577 const RestApiGetCall& call) |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
578 { |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
579 requestedTags.clear(); |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
580 |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
581 if (call.HasArgument(GET_REQUESTED_TAGS)) |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
582 { |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
583 try |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
584 { |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
585 FromDcmtkBridge::ParseListOfTags(requestedTags, call.GetArgument("requestedTags", "")); |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
586 } |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
587 catch (OrthancException& ex) |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
588 { |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
589 throw OrthancException(ErrorCode_BadRequest, std::string("Invalid requestedTags argument: ") + ex.What() + " " + ex.GetDetails()); |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
590 } |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
591 } |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
592 |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
593 } |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
594 |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
595 void OrthancRestApi::DocumentRequestedTags(RestApiGetCall& call) |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
596 { |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
597 call.GetDocumentation().SetHttpGetArgument(GET_REQUESTED_TAGS, RestApiCallDocumentation::Type_String, |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
598 "If present, list the DICOM Tags you want to list in the response. This argument is a semi-column separated list " |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
599 "of DICOM Tags identifiers; e.g: 'requestedTags=0010,0010;PatientBirthDate'. " |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
600 "The tags requested tags are returned in the 'RequestedTags' field in the response. " |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
601 "Note that, if you are requesting tags that are not listed in the Main Dicom Tags stored in DB, building the response " |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
602 "might be slow since Orthanc will need to access the DICOM files. If not specified, Orthanc will return ", false); |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
603 } |
8422e4f99a18
Handling RequestedTags in ExpandResource -> read parent main dicom tags if required. Not yet getting missing tags from file. Integration tests ok
Alain Mazy <am@osimis.io>
parents:
4892
diff
changeset
|
604 |
210
96b7918a6a18
start of the refactoring of the Orthanc REST API
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
605 } |