Mercurial > hg > orthanc
comparison OrthancServer/Sources/Database/Compatibility/GenericFind.cpp @ 5619:1864b16bc7b1 find-refactoring
added FindRequest::ParentRetrieveSpecification
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Sat, 11 May 2024 12:13:31 +0200 |
parents | 8905ffa45fc2 |
children | 732ec9feeea8 |
comparison
equal
deleted
inserted
replaced
5618:824a5fb0774e | 5619:1864b16bc7b1 |
---|---|
237 { | 237 { |
238 case ResourceType_Patient: | 238 case ResourceType_Patient: |
239 return ResourceType_Patient; | 239 return ResourceType_Patient; |
240 | 240 |
241 case ResourceType_Study: | 241 case ResourceType_Study: |
242 if (request.IsRetrieveMainDicomTags(ResourceType_Patient) || | 242 if (request.GetParentRetrieveSpecification(ResourceType_Patient).IsRetrieveMainDicomTags() || |
243 request.IsRetrieveMetadata(ResourceType_Patient)) | 243 request.GetParentRetrieveSpecification(ResourceType_Patient).IsRetrieveMetadata()) |
244 { | 244 { |
245 return ResourceType_Patient; | 245 return ResourceType_Patient; |
246 } | 246 } |
247 else | 247 else |
248 { | 248 { |
249 return ResourceType_Study; | 249 return ResourceType_Study; |
250 } | 250 } |
251 | 251 |
252 case ResourceType_Series: | 252 case ResourceType_Series: |
253 if (request.IsRetrieveMainDicomTags(ResourceType_Patient) || | 253 if (request.GetParentRetrieveSpecification(ResourceType_Patient).IsRetrieveMainDicomTags() || |
254 request.IsRetrieveMetadata(ResourceType_Patient)) | 254 request.GetParentRetrieveSpecification(ResourceType_Patient).IsRetrieveMetadata()) |
255 { | 255 { |
256 return ResourceType_Patient; | 256 return ResourceType_Patient; |
257 } | 257 } |
258 else if (request.IsRetrieveMainDicomTags(ResourceType_Study) || | 258 else if (request.GetParentRetrieveSpecification(ResourceType_Study).IsRetrieveMainDicomTags() || |
259 request.IsRetrieveMetadata(ResourceType_Study)) | 259 request.GetParentRetrieveSpecification(ResourceType_Study).IsRetrieveMetadata()) |
260 { | 260 { |
261 return ResourceType_Study; | 261 return ResourceType_Study; |
262 } | 262 } |
263 else | 263 else |
264 { | 264 { |
265 return ResourceType_Series; | 265 return ResourceType_Series; |
266 } | 266 } |
267 | 267 |
268 case ResourceType_Instance: | 268 case ResourceType_Instance: |
269 if (request.IsRetrieveMainDicomTags(ResourceType_Patient) || | 269 if (request.GetParentRetrieveSpecification(ResourceType_Patient).IsRetrieveMainDicomTags() || |
270 request.IsRetrieveMetadata(ResourceType_Patient)) | 270 request.GetParentRetrieveSpecification(ResourceType_Patient).IsRetrieveMetadata()) |
271 { | 271 { |
272 return ResourceType_Patient; | 272 return ResourceType_Patient; |
273 } | 273 } |
274 else if (request.IsRetrieveMainDicomTags(ResourceType_Study) || | 274 else if (request.GetParentRetrieveSpecification(ResourceType_Study).IsRetrieveMainDicomTags() || |
275 request.IsRetrieveMetadata(ResourceType_Study)) | 275 request.GetParentRetrieveSpecification(ResourceType_Study).IsRetrieveMetadata()) |
276 { | 276 { |
277 return ResourceType_Study; | 277 return ResourceType_Study; |
278 } | 278 } |
279 else if (request.IsRetrieveMainDicomTags(ResourceType_Series) || | 279 else if (request.GetParentRetrieveSpecification(ResourceType_Series).IsRetrieveMainDicomTags() || |
280 request.IsRetrieveMetadata(ResourceType_Series)) | 280 request.GetParentRetrieveSpecification(ResourceType_Series).IsRetrieveMetadata()) |
281 { | 281 { |
282 return ResourceType_Series; | 282 return ResourceType_Series; |
283 } | 283 } |
284 else | 284 else |
285 { | 285 { |
341 { | 341 { |
342 assert(!parent.empty()); | 342 assert(!parent.empty()); |
343 resource->SetParentIdentifier(parent); | 343 resource->SetParentIdentifier(parent); |
344 } | 344 } |
345 | 345 |
346 { | 346 if (request.IsRetrieveMainDicomTags()) |
347 { | |
348 RetrieveMainDicomTags(*resource, level, internalId); | |
349 } | |
350 | |
351 if (request.IsRetrieveMetadata()) | |
352 { | |
353 transaction_.GetAllMetadata(resource->GetMetadata(level), internalId); | |
354 } | |
355 | |
356 { | |
357 const ResourceType topLevel = GetTopLevelOfInterest(request); | |
358 | |
347 int64_t currentId = internalId; | 359 int64_t currentId = internalId; |
348 ResourceType currentLevel = level; | 360 ResourceType currentLevel = level; |
349 const ResourceType topLevel = GetTopLevelOfInterest(request); | 361 |
350 | 362 while (currentLevel != topLevel) |
351 for (;;) | 363 { |
352 { | 364 int64_t parentId; |
353 if (request.IsRetrieveMainDicomTags(currentLevel)) | 365 if (transaction_.LookupParent(parentId, currentId)) |
366 { | |
367 currentId = parentId; | |
368 currentLevel = GetParentResourceType(currentLevel); | |
369 } | |
370 else | |
371 { | |
372 throw OrthancException(ErrorCode_DatabasePlugin); | |
373 } | |
374 | |
375 if (request.GetParentRetrieveSpecification(currentLevel).IsRetrieveMainDicomTags()) | |
354 { | 376 { |
355 RetrieveMainDicomTags(*resource, currentLevel, currentId); | 377 RetrieveMainDicomTags(*resource, currentLevel, currentId); |
356 } | 378 } |
357 | 379 |
358 if (request.IsRetrieveMetadata(currentLevel)) | 380 if (request.GetParentRetrieveSpecification(currentLevel).IsRetrieveMetadata()) |
359 { | 381 { |
360 transaction_.GetAllMetadata(resource->GetMetadata(currentLevel), currentId); | 382 transaction_.GetAllMetadata(resource->GetMetadata(currentLevel), currentId); |
361 } | |
362 | |
363 if (currentLevel == topLevel) | |
364 { | |
365 break; | |
366 } | |
367 else | |
368 { | |
369 int64_t parentId; | |
370 if (transaction_.LookupParent(parentId, currentId)) | |
371 { | |
372 currentId = parentId; | |
373 currentLevel = GetParentResourceType(currentLevel); | |
374 } | |
375 else | |
376 { | |
377 throw OrthancException(ErrorCode_DatabasePlugin); | |
378 } | |
379 } | 383 } |
380 } | 384 } |
381 } | 385 } |
382 | 386 |
383 if (request.IsRetrieveLabels()) | 387 if (request.IsRetrieveLabels()) |