comparison OrthancServer/Sources/Database/FindRequest.cpp @ 5592:1e2631b8b9af find-refactoring

GenericFind::Execute() is working for a basic request
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 03 May 2024 21:26:06 +0200
parents 8b32213af23e
children a87f2a56257d
comparison
equal deleted inserted replaced
5591:043c8016ed6a 5592:1e2631b8b9af
27 27
28 #include <cassert> 28 #include <cassert>
29 29
30 namespace Orthanc 30 namespace Orthanc
31 { 31 {
32 bool FindRequest::IsCompatibleLevel(ResourceType levelOfInterest) const
33 {
34 switch (level_)
35 {
36 case ResourceType_Patient:
37 return (levelOfInterest == ResourceType_Patient);
38
39 case ResourceType_Study:
40 return (levelOfInterest == ResourceType_Patient ||
41 levelOfInterest == ResourceType_Study);
42
43 case ResourceType_Series:
44 return (levelOfInterest == ResourceType_Patient ||
45 levelOfInterest == ResourceType_Study ||
46 levelOfInterest == ResourceType_Series);
47
48 case ResourceType_Instance:
49 return (levelOfInterest == ResourceType_Patient ||
50 levelOfInterest == ResourceType_Study ||
51 levelOfInterest == ResourceType_Series ||
52 levelOfInterest == ResourceType_Instance);
53
54 default:
55 throw OrthancException(ErrorCode_ParameterOutOfRange);
56 }
57 }
58
59
60 FindRequest::FindRequest(ResourceType level) : 32 FindRequest::FindRequest(ResourceType level) :
61 level_(level), 33 level_(level),
62 hasLimits_(false), 34 hasLimits_(false),
63 limitsSince_(0), 35 limitsSince_(0),
64 limitsCount_(0), 36 limitsCount_(0),
65 retrievePatientTags_(false), 37 retrieveMainDicomTags_(false),
66 retrieveStudyTags_(false),
67 retrieveSeriesTags_(false),
68 retrieveInstanceTags_(false),
69 retrieveMetadata_(false), 38 retrieveMetadata_(false),
70 retrieveLabels_(false), 39 retrieveLabels_(false),
71 retrieveAttachments_(false), 40 retrieveAttachments_(false),
72 retrieveParentIdentifier_(false), 41 retrieveParentIdentifier_(false),
73 retrieveChildrenIdentifiers_(false), 42 retrieveChildrenIdentifiers_(false),
144 throw OrthancException(ErrorCode_BadSequenceOfCalls); 113 throw OrthancException(ErrorCode_BadSequenceOfCalls);
145 } 114 }
146 } 115 }
147 116
148 117
149 void FindRequest::SetRetrieveTagsAtLevel(ResourceType levelOfInterest,
150 bool retrieve)
151 {
152 if (!IsCompatibleLevel(levelOfInterest))
153 {
154 throw OrthancException(ErrorCode_ParameterOutOfRange);
155 }
156
157 switch (levelOfInterest)
158 {
159 case ResourceType_Patient:
160 retrievePatientTags_ = true;
161 break;
162
163 case ResourceType_Study:
164 retrieveStudyTags_ = true;
165 break;
166
167 case ResourceType_Series:
168 retrieveSeriesTags_ = true;
169 break;
170
171 case ResourceType_Instance:
172 retrieveInstanceTags_ = true;
173 break;
174
175 default:
176 throw OrthancException(ErrorCode_ParameterOutOfRange);
177 }
178 }
179
180
181 bool FindRequest::IsRetrieveTagsAtLevel(ResourceType levelOfInterest) const
182 {
183 switch (levelOfInterest)
184 {
185 case ResourceType_Patient:
186 return retrievePatientTags_;
187
188 case ResourceType_Study:
189 return retrieveStudyTags_;
190
191 case ResourceType_Series:
192 return retrieveSeriesTags_;
193
194 case ResourceType_Instance:
195 return retrieveInstanceTags_;
196
197 default:
198 throw OrthancException(ErrorCode_ParameterOutOfRange);
199 }
200 }
201
202
203 void FindRequest::AddOrdering(const DicomTag& tag, 118 void FindRequest::AddOrdering(const DicomTag& tag,
204 OrderingDirection direction) 119 OrderingDirection direction)
205 { 120 {
206 ordering_.push_back(new Ordering(Key(tag), direction)); 121 ordering_.push_back(new Ordering(Key(tag), direction));
207 } 122 }
123
208 124
209 void FindRequest::AddOrdering(MetadataType metadataType, 125 void FindRequest::AddOrdering(MetadataType metadataType,
210 OrderingDirection direction) 126 OrderingDirection direction)
211 { 127 {
212 ordering_.push_back(new Ordering(Key(metadataType), direction)); 128 ordering_.push_back(new Ordering(Key(metadataType), direction));