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())