annotate OrthancServer/Sources/ResourceFinder.cpp @ 5788:61c9e5df64d7 find-refactoring

handling of sequences from DB in RequestedTags
author Alain Mazy <am@orthanc.team>
date Tue, 17 Sep 2024 16:17:53 +0200
parents 42ef98bb3c13
children 40ad08b75d84
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 /**
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2 * Orthanc - A Lightweight, RESTful DICOM Store
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
4 * Department, University Hospital of Liege, Belgium
5641
3f13db27b399 integration mainline->find-refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5621
diff changeset
5 * Copyright (C) 2017-2023 Osimis S.A., Belgium
3f13db27b399 integration mainline->find-refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5621
diff changeset
6 * Copyright (C) 2024-2024 Orthanc Team SRL, Belgium
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
7 * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8 *
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 * This program is free software: you can redistribute it and/or
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 * modify it under the terms of the GNU General Public License as
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 * published by the Free Software Foundation, either version 3 of the
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 * License, or (at your option) any later version.
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 *
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful, but
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17 * General Public License for more details.
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18 *
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20 * along with this program. If not, see <http://www.gnu.org/licenses/>.
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21 **/
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
22
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
24 #include "PrecompiledHeadersServer.h"
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
25 #include "ResourceFinder.h"
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
26
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
27 #include "../../OrthancFramework/Sources/DicomParsing/FromDcmtkBridge.h"
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
28 #include "../../OrthancFramework/Sources/Logging.h"
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
29 #include "../../OrthancFramework/Sources/OrthancException.h"
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
30 #include "../../OrthancFramework/Sources/SerializationToolbox.h"
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
31 #include "OrthancConfiguration.h"
5682
fd4c5e064cbe started refactoring of ServerContext::Apply()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5676
diff changeset
32 #include "Search/DatabaseLookup.h"
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
33 #include "ServerContext.h"
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
34 #include "ServerIndex.h"
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
35
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
36
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
37 namespace Orthanc
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
38 {
5686
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
39 static bool IsComputedTag(const DicomTag& tag)
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
40 {
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
41 return (tag == DICOM_TAG_NUMBER_OF_PATIENT_RELATED_STUDIES ||
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
42 tag == DICOM_TAG_NUMBER_OF_PATIENT_RELATED_SERIES ||
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
43 tag == DICOM_TAG_NUMBER_OF_PATIENT_RELATED_INSTANCES ||
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
44 tag == DICOM_TAG_NUMBER_OF_STUDY_RELATED_SERIES ||
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
45 tag == DICOM_TAG_NUMBER_OF_STUDY_RELATED_INSTANCES ||
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
46 tag == DICOM_TAG_NUMBER_OF_SERIES_RELATED_INSTANCES ||
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
47 tag == DICOM_TAG_SOP_CLASSES_IN_STUDY ||
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
48 tag == DICOM_TAG_MODALITIES_IN_STUDY ||
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
49 tag == DICOM_TAG_INSTANCE_AVAILABILITY);
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
50 }
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
51
5666
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
52 void ResourceFinder::ConfigureChildrenCountComputedTag(DicomTag tag,
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
53 ResourceType parentLevel,
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
54 ResourceType childLevel)
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
55 {
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
56 if (request_.GetLevel() == parentLevel)
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
57 {
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
58 requestedComputedTags_.insert(tag);
5676
b744a2cf408a shorten ParentRetrieveSpecification/ChildrenRetrieveSpecification as ParentSpecification/ChildrenSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5674
diff changeset
59 request_.GetChildrenSpecification(childLevel).SetRetrieveIdentifiers(true);
5666
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
60 }
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
61 }
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
62
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
63
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
64 void ResourceFinder::InjectChildrenCountComputedTag(DicomMap& requestedTags,
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
65 DicomTag tag,
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
66 const FindResponse::Resource& resource,
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
67 ResourceType level) const
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
68 {
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
69 if (IsRequestedComputedTag(tag))
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
70 {
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
71 const std::set<std::string>& children = resource.GetChildrenIdentifiers(level);
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
72 requestedTags.SetValue(tag, boost::lexical_cast<std::string>(children.size()), false);
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
73 }
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
74 }
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
75
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
76
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
77 void ResourceFinder::InjectComputedTags(DicomMap& requestedTags,
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
78 const FindResponse::Resource& resource) const
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
79 {
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
80 switch (resource.GetLevel())
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
81 {
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
82 case ResourceType_Patient:
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
83 InjectChildrenCountComputedTag(requestedTags, DICOM_TAG_NUMBER_OF_PATIENT_RELATED_STUDIES, resource, ResourceType_Study);
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
84 InjectChildrenCountComputedTag(requestedTags, DICOM_TAG_NUMBER_OF_PATIENT_RELATED_SERIES, resource, ResourceType_Series);
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
85 InjectChildrenCountComputedTag(requestedTags, DICOM_TAG_NUMBER_OF_PATIENT_RELATED_INSTANCES, resource, ResourceType_Instance);
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
86 break;
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
87
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
88 case ResourceType_Study:
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
89 InjectChildrenCountComputedTag(requestedTags, DICOM_TAG_NUMBER_OF_STUDY_RELATED_SERIES, resource, ResourceType_Series);
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
90 InjectChildrenCountComputedTag(requestedTags, DICOM_TAG_NUMBER_OF_STUDY_RELATED_INSTANCES, resource, ResourceType_Instance);
5672
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
91
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
92 if (IsRequestedComputedTag(DICOM_TAG_MODALITIES_IN_STUDY))
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
93 {
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
94 std::set<std::string> modalities;
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
95 resource.GetChildrenMainDicomTagValues(modalities, ResourceType_Series, DICOM_TAG_MODALITY);
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
96
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
97 std::string s;
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
98 Toolbox::JoinStrings(s, modalities, "\\");
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
99
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
100 requestedTags.SetValue(DICOM_TAG_MODALITIES_IN_STUDY, s, false);
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
101 }
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
102
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
103 if (IsRequestedComputedTag(DICOM_TAG_SOP_CLASSES_IN_STUDY))
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
104 {
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
105 std::set<std::string> classes;
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
106 resource.GetChildrenMetadataValues(classes, ResourceType_Instance, MetadataType_Instance_SopClassUid);
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
107
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
108 std::string s;
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
109 Toolbox::JoinStrings(s, classes, "\\");
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
110
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
111 requestedTags.SetValue(DICOM_TAG_SOP_CLASSES_IN_STUDY, s, false);
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
112 }
e300f22a46f0 implemented computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5668
diff changeset
113
5666
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
114 break;
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
115
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
116 case ResourceType_Series:
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
117 InjectChildrenCountComputedTag(requestedTags, DICOM_TAG_NUMBER_OF_SERIES_RELATED_INSTANCES, resource, ResourceType_Instance);
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
118 break;
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
119
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
120 case ResourceType_Instance:
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
121 if (IsRequestedComputedTag(DICOM_TAG_INSTANCE_AVAILABILITY))
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
122 {
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
123 requestedTags.SetValue(DICOM_TAG_INSTANCE_AVAILABILITY, "ONLINE", false);
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
124 }
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
125 break;
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
126
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
127 default:
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
128 throw OrthancException(ErrorCode_InternalError);
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
129 }
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
130 }
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
131
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
132
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
133 SeriesStatus ResourceFinder::GetSeriesStatus(uint32_t& expectedNumberOfInstances,
5689
c14776d25491 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5688
diff changeset
134 const FindResponse::Resource& resource)
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
135 {
5689
c14776d25491 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5688
diff changeset
136 if (resource.GetLevel() != ResourceType_Series)
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
137 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
138 throw OrthancException(ErrorCode_BadParameterType);
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
139 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
140
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
141 std::string s;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
142 if (!resource.LookupMetadata(s, ResourceType_Series, MetadataType_Series_ExpectedNumberOfInstances) ||
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
143 !SerializationToolbox::ParseUnsignedInteger32(expectedNumberOfInstances, s))
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
144 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
145 return SeriesStatus_Unknown;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
146 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
147
5674
74f3aab95886 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5672
diff changeset
148 std::set<std::string> values;
74f3aab95886 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5672
diff changeset
149 resource.GetChildrenMetadataValues(values, ResourceType_Instance, MetadataType_Instance_IndexInSeries);
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
150
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
151 std::set<int64_t> instances;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
152
5674
74f3aab95886 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5672
diff changeset
153 for (std::set<std::string>::const_iterator
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
154 it = values.begin(); it != values.end(); ++it)
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
155 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
156 int64_t index;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
157
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
158 if (!SerializationToolbox::ParseInteger64(index, *it))
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
159 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
160 return SeriesStatus_Unknown;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
161 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
162
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
163 if (index <= 0 ||
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
164 index > static_cast<int64_t>(expectedNumberOfInstances))
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
165 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
166 // Out-of-range instance index
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
167 return SeriesStatus_Inconsistent;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
168 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
169
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
170 if (instances.find(index) != instances.end())
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
171 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
172 // Twice the same instance index
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
173 return SeriesStatus_Inconsistent;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
174 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
175
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
176 instances.insert(index);
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
177 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
178
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
179 if (instances.size() == static_cast<size_t>(expectedNumberOfInstances))
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
180 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
181 return SeriesStatus_Complete;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
182 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
183 else
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
184 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
185 return SeriesStatus_Missing;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
186 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
187 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
188
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
189 static void GetMainDicomSequencesFromMetadata(DicomMap& target, const FindResponse::Resource& resource, ResourceType level)
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
190 {
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
191 // read all main sequences from DB
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
192 std::string serializedSequences;
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
193 if (resource.LookupMetadata(serializedSequences, resource.GetLevel(), MetadataType_MainDicomSequences))
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
194 {
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
195 Json::Value jsonMetadata;
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
196 Toolbox::ReadJson(jsonMetadata, serializedSequences);
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
197
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
198 if (jsonMetadata["Version"].asInt() == 1)
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
199 {
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
200 target.FromDicomAsJson(jsonMetadata["Sequences"], true /* append */, true /* parseSequences */);
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
201 }
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
202 else
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
203 {
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
204 throw OrthancException(ErrorCode_NotImplemented);
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
205 }
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
206 }
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
207 }
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
208
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
209
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
210 void ResourceFinder::Expand(Json::Value& target,
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
211 const FindResponse::Resource& resource,
5709
476b1db52110 removed the "format_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5702
diff changeset
212 ServerIndex& index,
5713
d851a54e49b7 removed "includeAllMetadata_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5709
diff changeset
213 DicomToJsonFormat format,
d851a54e49b7 removed "includeAllMetadata_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5709
diff changeset
214 bool includeAllMetadata) const
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
215 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
216 /**
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
217 * This method closely follows "SerializeExpandedResource()" in
5689
c14776d25491 simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5688
diff changeset
218 * "ServerContext.cpp" from Orthanc 1.12.4.
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
219 **/
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
220
5713
d851a54e49b7 removed "includeAllMetadata_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5709
diff changeset
221 if (!expand_)
d851a54e49b7 removed "includeAllMetadata_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5709
diff changeset
222 {
d851a54e49b7 removed "includeAllMetadata_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5709
diff changeset
223 throw OrthancException(ErrorCode_BadSequenceOfCalls);
d851a54e49b7 removed "includeAllMetadata_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5709
diff changeset
224 }
d851a54e49b7 removed "includeAllMetadata_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5709
diff changeset
225
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
226 if (resource.GetLevel() != request_.GetLevel())
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
227 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
228 throw OrthancException(ErrorCode_InternalError);
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
229 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
230
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
231 target = Json::objectValue;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
232
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
233 target["Type"] = GetResourceTypeText(resource.GetLevel(), false, true);
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
234 target["ID"] = resource.GetIdentifier();
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
235
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
236 switch (resource.GetLevel())
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
237 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
238 case ResourceType_Patient:
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
239 break;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
240
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
241 case ResourceType_Study:
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
242 target["ParentPatient"] = resource.GetParentIdentifier();
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
243 break;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
244
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
245 case ResourceType_Series:
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
246 target["ParentStudy"] = resource.GetParentIdentifier();
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
247 break;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
248
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
249 case ResourceType_Instance:
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
250 target["ParentSeries"] = resource.GetParentIdentifier();
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
251 break;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
252
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
253 default:
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
254 throw OrthancException(ErrorCode_InternalError);
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
255 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
256
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
257 if (resource.GetLevel() != ResourceType_Instance)
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
258 {
5666
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
259 const std::set<std::string>& children = resource.GetChildrenIdentifiers(GetChildResourceType(resource.GetLevel()));
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
260
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
261 Json::Value c = Json::arrayValue;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
262 for (std::set<std::string>::const_iterator
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
263 it = children.begin(); it != children.end(); ++it)
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
264 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
265 c.append(*it);
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
266 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
267
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
268 switch (resource.GetLevel())
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
269 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
270 case ResourceType_Patient:
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
271 target["Studies"] = c;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
272 break;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
273
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
274 case ResourceType_Study:
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
275 target["Series"] = c;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
276 break;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
277
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
278 case ResourceType_Series:
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
279 target["Instances"] = c;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
280 break;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
281
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
282 default:
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
283 throw OrthancException(ErrorCode_InternalError);
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
284 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
285 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
286
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
287 switch (resource.GetLevel())
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
288 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
289 case ResourceType_Patient:
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
290 case ResourceType_Study:
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
291 break;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
292
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
293 case ResourceType_Series:
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
294 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
295 uint32_t expectedNumberOfInstances;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
296 SeriesStatus status = GetSeriesStatus(expectedNumberOfInstances, resource);
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
297
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
298 target["Status"] = EnumerationToString(status);
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
299
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
300 static const char* const EXPECTED_NUMBER_OF_INSTANCES = "ExpectedNumberOfInstances";
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
301
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
302 if (status == SeriesStatus_Unknown)
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
303 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
304 target[EXPECTED_NUMBER_OF_INSTANCES] = Json::nullValue;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
305 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
306 else
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
307 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
308 target[EXPECTED_NUMBER_OF_INSTANCES] = expectedNumberOfInstances;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
309 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
310
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
311 break;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
312 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
313
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
314 case ResourceType_Instance:
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
315 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
316 FileInfo info;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
317 if (resource.LookupAttachment(info, FileContentType_Dicom))
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
318 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
319 target["FileSize"] = static_cast<Json::UInt64>(info.GetUncompressedSize());
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
320 target["FileUuid"] = info.GetUuid();
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
321 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
322 else
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
323 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
324 throw OrthancException(ErrorCode_InternalError);
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
325 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
326
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
327 static const char* const INDEX_IN_SERIES = "IndexInSeries";
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
328
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
329 std::string s;
5702
359a8adb3802 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5701
diff changeset
330 uint32_t indexInSeries;
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
331 if (resource.LookupMetadata(s, ResourceType_Instance, MetadataType_Instance_IndexInSeries) &&
5702
359a8adb3802 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5701
diff changeset
332 SerializationToolbox::ParseUnsignedInteger32(indexInSeries, s))
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
333 {
5702
359a8adb3802 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5701
diff changeset
334 target[INDEX_IN_SERIES] = indexInSeries;
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
335 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
336 else
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
337 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
338 target[INDEX_IN_SERIES] = Json::nullValue;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
339 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
340
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
341 break;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
342 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
343
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
344 default:
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
345 throw OrthancException(ErrorCode_InternalError);
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
346 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
347
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
348 std::string s;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
349 if (resource.LookupMetadata(s, resource.GetLevel(), MetadataType_AnonymizedFrom))
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
350 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
351 target["AnonymizedFrom"] = s;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
352 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
353
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
354 if (resource.LookupMetadata(s, resource.GetLevel(), MetadataType_ModifiedFrom))
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
355 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
356 target["ModifiedFrom"] = s;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
357 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
358
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
359 if (resource.GetLevel() == ResourceType_Patient ||
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
360 resource.GetLevel() == ResourceType_Study ||
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
361 resource.GetLevel() == ResourceType_Series)
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
362 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
363 target["IsStable"] = !index.IsUnstableResource(resource.GetLevel(), resource.GetInternalId());
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
364
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
365 if (resource.LookupMetadata(s, resource.GetLevel(), MetadataType_LastUpdate))
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
366 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
367 target["LastUpdate"] = s;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
368 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
369 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
370
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
371 {
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
372 DicomMap allMainDicomTags;
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
373 resource.GetMainDicomTags(allMainDicomTags, resource.GetLevel());
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
374
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
375 // read all main sequences from DB
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
376 GetMainDicomSequencesFromMetadata(allMainDicomTags, resource, resource.GetLevel());
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
377
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
378 static const char* const MAIN_DICOM_TAGS = "MainDicomTags";
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
379 static const char* const PATIENT_MAIN_DICOM_TAGS = "PatientMainDicomTags";
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
380
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
381 // TODO-FIND : Ignore "null" values
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
382
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
383 DicomMap levelMainDicomTags;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
384 allMainDicomTags.ExtractResourceInformation(levelMainDicomTags, resource.GetLevel());
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
385
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
386 target[MAIN_DICOM_TAGS] = Json::objectValue;
5709
476b1db52110 removed the "format_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5702
diff changeset
387 FromDcmtkBridge::ToJson(target[MAIN_DICOM_TAGS], levelMainDicomTags, format);
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
388
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
389 if (resource.GetLevel() == ResourceType_Study)
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
390 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
391 DicomMap patientMainDicomTags;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
392 allMainDicomTags.ExtractPatientInformation(patientMainDicomTags);
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
393
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
394 target[PATIENT_MAIN_DICOM_TAGS] = Json::objectValue;
5709
476b1db52110 removed the "format_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5702
diff changeset
395 FromDcmtkBridge::ToJson(target[PATIENT_MAIN_DICOM_TAGS], patientMainDicomTags, format);
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
396 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
397 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
398
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
399 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
400 Json::Value labels = Json::arrayValue;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
401
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
402 for (std::set<std::string>::const_iterator
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
403 it = resource.GetLabels().begin(); it != resource.GetLabels().end(); ++it)
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
404 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
405 labels.append(*it);
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
406 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
407
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
408 target["Labels"] = labels;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
409 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
410
5713
d851a54e49b7 removed "includeAllMetadata_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5709
diff changeset
411 if (includeAllMetadata) // new in Orthanc 1.12.4
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
412 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
413 const std::map<MetadataType, std::string>& m = resource.GetMetadata(resource.GetLevel());
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
414
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
415 Json::Value metadata = Json::objectValue;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
416
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
417 for (std::map<MetadataType, std::string>::const_iterator it = m.begin(); it != m.end(); ++it)
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
418 {
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
419 metadata[EnumerationToString(it->first)] = it->second;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
420 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
421
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
422 target["Metadata"] = metadata;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
423 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
424 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
425
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
426
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
427 void ResourceFinder::UpdateRequestLimits()
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
428 {
5690
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
429 // By default, use manual paging
5693
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
430 pagingMode_ = PagingMode_FullManual;
5690
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
431
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
432 if (databaseLimits_ != 0)
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
433 {
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
434 request_.SetLimits(0, databaseLimits_ + 1);
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
435 }
5692
7c11a71927a9 improved handling of limits
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5690
diff changeset
436 else
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
437 {
5692
7c11a71927a9 improved handling of limits
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5690
diff changeset
438 request_.ClearLimits();
7c11a71927a9 improved handling of limits
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5690
diff changeset
439 }
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
440
5693
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
441 if (lookup_.get() == NULL &&
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
442 (hasLimitsSince_ || hasLimitsCount_))
5692
7c11a71927a9 improved handling of limits
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5690
diff changeset
443 {
5693
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
444 pagingMode_ = PagingMode_FullDatabase;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
445 request_.SetLimits(limitsSince_, limitsCount_);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
446 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
447
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
448 if (lookup_.get() != NULL &&
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
449 isSimpleLookup_ &&
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
450 (hasLimitsSince_ || hasLimitsCount_))
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
451 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
452 /**
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
453 * TODO-FIND: "IDatabaseWrapper::ApplyLookupResources()" only
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
454 * accept the "limit" argument. The "since" must be implemented
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
455 * manually.
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
456 **/
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
457
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
458 if (hasLimitsSince_ &&
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
459 limitsSince_ != 0)
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
460 {
5693
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
461 pagingMode_ = PagingMode_ManualSkip;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
462 request_.SetLimits(0, limitsCount_ + limitsSince_);
5692
7c11a71927a9 improved handling of limits
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5690
diff changeset
463 }
5693
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
464 else
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
465 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
466 pagingMode_ = PagingMode_FullDatabase;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
467 request_.SetLimits(0, limitsCount_);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
468 }
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
469 }
5690
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
470
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
471 // TODO-FIND: More cases could be added, depending on "GetDatabaseCapabilities()"
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
472 }
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
473
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
474
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
475 ResourceFinder::ResourceFinder(ResourceType level,
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
476 bool expand) :
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
477 request_(level),
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
478 databaseLimits_(0),
5693
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
479 isSimpleLookup_(true),
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
480 pagingMode_(PagingMode_FullManual),
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
481 hasLimitsSince_(false),
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
482 hasLimitsCount_(false),
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
483 limitsSince_(0),
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
484 limitsCount_(0),
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
485 expand_(expand),
5617
8905ffa45fc2 started listing of children resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5616
diff changeset
486 allowStorageAccess_(true),
5713
d851a54e49b7 removed "includeAllMetadata_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5709
diff changeset
487 hasRequestedTags_(false)
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
488 {
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
489 UpdateRequestLimits();
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
490
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
491 if (expand)
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
492 {
5619
1864b16bc7b1 added FindRequest::ParentRetrieveSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5617
diff changeset
493 request_.SetRetrieveMainDicomTags(true);
1864b16bc7b1 added FindRequest::ParentRetrieveSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5617
diff changeset
494 request_.SetRetrieveMetadata(true);
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
495 request_.SetRetrieveLabels(true);
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
496
5621
732ec9feeea8 introduction of FindRequest::ChildrenRetrieveSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5620
diff changeset
497 switch (level)
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
498 {
5621
732ec9feeea8 introduction of FindRequest::ChildrenRetrieveSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5620
diff changeset
499 case ResourceType_Patient:
5676
b744a2cf408a shorten ParentRetrieveSpecification/ChildrenRetrieveSpecification as ParentSpecification/ChildrenSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5674
diff changeset
500 request_.GetChildrenSpecification(ResourceType_Study).SetRetrieveIdentifiers(true);
5621
732ec9feeea8 introduction of FindRequest::ChildrenRetrieveSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5620
diff changeset
501 break;
732ec9feeea8 introduction of FindRequest::ChildrenRetrieveSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5620
diff changeset
502
732ec9feeea8 introduction of FindRequest::ChildrenRetrieveSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5620
diff changeset
503 case ResourceType_Study:
5676
b744a2cf408a shorten ParentRetrieveSpecification/ChildrenRetrieveSpecification as ParentSpecification/ChildrenSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5674
diff changeset
504 request_.GetChildrenSpecification(ResourceType_Series).SetRetrieveIdentifiers(true);
5621
732ec9feeea8 introduction of FindRequest::ChildrenRetrieveSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5620
diff changeset
505 request_.SetRetrieveParentIdentifier(true);
732ec9feeea8 introduction of FindRequest::ChildrenRetrieveSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5620
diff changeset
506 break;
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
507
5621
732ec9feeea8 introduction of FindRequest::ChildrenRetrieveSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5620
diff changeset
508 case ResourceType_Series:
5676
b744a2cf408a shorten ParentRetrieveSpecification/ChildrenRetrieveSpecification as ParentSpecification/ChildrenSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5674
diff changeset
509 request_.GetChildrenSpecification(ResourceType_Instance).AddMetadata(MetadataType_Instance_IndexInSeries); // required for the SeriesStatus
b744a2cf408a shorten ParentRetrieveSpecification/ChildrenRetrieveSpecification as ParentSpecification/ChildrenSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5674
diff changeset
510 request_.GetChildrenSpecification(ResourceType_Instance).SetRetrieveIdentifiers(true);
5621
732ec9feeea8 introduction of FindRequest::ChildrenRetrieveSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5620
diff changeset
511 request_.SetRetrieveParentIdentifier(true);
732ec9feeea8 introduction of FindRequest::ChildrenRetrieveSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5620
diff changeset
512 break;
732ec9feeea8 introduction of FindRequest::ChildrenRetrieveSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5620
diff changeset
513
732ec9feeea8 introduction of FindRequest::ChildrenRetrieveSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5620
diff changeset
514 case ResourceType_Instance:
732ec9feeea8 introduction of FindRequest::ChildrenRetrieveSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5620
diff changeset
515 request_.SetRetrieveAttachments(true); // for FileSize & FileUuid
732ec9feeea8 introduction of FindRequest::ChildrenRetrieveSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5620
diff changeset
516 request_.SetRetrieveParentIdentifier(true);
732ec9feeea8 introduction of FindRequest::ChildrenRetrieveSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5620
diff changeset
517 break;
732ec9feeea8 introduction of FindRequest::ChildrenRetrieveSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5620
diff changeset
518
732ec9feeea8 introduction of FindRequest::ChildrenRetrieveSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5620
diff changeset
519 default:
732ec9feeea8 introduction of FindRequest::ChildrenRetrieveSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5620
diff changeset
520 throw OrthancException(ErrorCode_ParameterOutOfRange);
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
521 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
522 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
523 }
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
524
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
525
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
526 void ResourceFinder::SetDatabaseLimits(uint64_t limits)
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
527 {
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
528 databaseLimits_ = limits;
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
529 UpdateRequestLimits();
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
530 }
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
531
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
532
5693
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
533 void ResourceFinder::SetLimitsSince(uint64_t since)
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
534 {
5693
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
535 if (hasLimitsSince_)
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
536 {
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
537 throw OrthancException(ErrorCode_BadSequenceOfCalls);
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
538 }
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
539 else
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
540 {
5693
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
541 hasLimitsSince_ = true;
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
542 limitsSince_ = since;
5693
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
543 UpdateRequestLimits();
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
544 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
545 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
546
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
547
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
548 void ResourceFinder::SetLimitsCount(uint64_t count)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
549 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
550 if (hasLimitsCount_)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
551 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
552 throw OrthancException(ErrorCode_BadSequenceOfCalls);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
553 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
554 else
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
555 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
556 hasLimitsCount_ = true;
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
557 limitsCount_ = count;
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
558 UpdateRequestLimits();
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
559 }
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
560 }
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
561
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
562
5682
fd4c5e064cbe started refactoring of ServerContext::Apply()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5676
diff changeset
563 void ResourceFinder::SetDatabaseLookup(const DatabaseLookup& lookup)
fd4c5e064cbe started refactoring of ServerContext::Apply()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5676
diff changeset
564 {
5694
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5693
diff changeset
565 MainDicomTagsRegistry registry;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5693
diff changeset
566
5686
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
567 lookup_.reset(lookup.Clone());
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
568
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
569 for (size_t i = 0; i < lookup.GetConstraintsCount(); i++)
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
570 {
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
571 DicomTag tag = lookup.GetConstraint(i).GetTag();
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
572 if (IsComputedTag(tag))
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
573 {
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
574 AddRequestedTag(tag);
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
575 }
5694
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5693
diff changeset
576 else
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5693
diff changeset
577 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5693
diff changeset
578 ResourceType level;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5693
diff changeset
579 DicomTagType tagType;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5693
diff changeset
580 registry.LookupTag(level, tagType, tag);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5693
diff changeset
581 if (tagType == DicomTagType_Generic)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5693
diff changeset
582 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5693
diff changeset
583 AddRequestedTag(tag);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5693
diff changeset
584 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5693
diff changeset
585 }
5686
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
586 }
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
587
5693
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
588 isSimpleLookup_ = registry.NormalizeLookup(request_.GetDicomTagConstraints(), lookup, request_.GetLevel());
5686
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
589
5690
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
590 // "request_.GetDicomTagConstraints()" only contains constraints on main DICOM tags
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
591
5686
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
592 for (size_t i = 0; i < request_.GetDicomTagConstraints().GetSize(); i++)
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
593 {
5690
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
594 const DatabaseConstraint& constraint = request_.GetDicomTagConstraints().GetConstraint(i);
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
595 if (constraint.GetLevel() == request_.GetLevel())
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
596 {
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
597 request_.SetRetrieveMainDicomTags(true);
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
598 }
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
599 else if (IsResourceLevelAboveOrEqual(constraint.GetLevel(), request_.GetLevel()))
5686
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
600 {
5690
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
601 request_.GetParentSpecification(constraint.GetLevel()).SetRetrieveMainDicomTags(true);
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
602 }
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
603 else
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
604 {
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
605 LOG(WARNING) << "Executing a database lookup at level " << EnumerationToString(request_.GetLevel())
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
606 << " on main DICOM tag " << constraint.GetTag().Format() << " from an inferior level ("
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
607 << EnumerationToString(constraint.GetLevel()) << "), this will return no result";
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
608 }
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
609
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
610 if (IsComputedTag(constraint.GetTag()))
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
611 {
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
612 // Sanity check
5686
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
613 throw OrthancException(ErrorCode_InternalError);
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
614 }
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
615 }
5692
7c11a71927a9 improved handling of limits
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5690
diff changeset
616
7c11a71927a9 improved handling of limits
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5690
diff changeset
617 UpdateRequestLimits();
5682
fd4c5e064cbe started refactoring of ServerContext::Apply()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5676
diff changeset
618 }
fd4c5e064cbe started refactoring of ServerContext::Apply()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5676
diff changeset
619
fd4c5e064cbe started refactoring of ServerContext::Apply()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5676
diff changeset
620
5686
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
621 void ResourceFinder::AddRequestedTag(const DicomTag& tag)
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
622 {
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
623 requestedTags_.insert(tag);
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
624 hasRequestedTags_ = true;
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
625
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
626 if (DicomMap::IsMainDicomTag(tag, ResourceType_Patient))
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
627 {
5620
4bfd885fb45f optimization as patient-level tags are copied at study level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5619
diff changeset
628 if (request_.GetLevel() == ResourceType_Patient)
4bfd885fb45f optimization as patient-level tags are copied at study level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5619
diff changeset
629 {
5697
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
630 request_.SetRetrieveMainDicomTags(true);
5620
4bfd885fb45f optimization as patient-level tags are copied at study level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5619
diff changeset
631 requestedPatientTags_.insert(tag);
4bfd885fb45f optimization as patient-level tags are copied at study level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5619
diff changeset
632 }
4bfd885fb45f optimization as patient-level tags are copied at study level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5619
diff changeset
633 else
4bfd885fb45f optimization as patient-level tags are copied at study level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5619
diff changeset
634 {
4bfd885fb45f optimization as patient-level tags are copied at study level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5619
diff changeset
635 /**
4bfd885fb45f optimization as patient-level tags are copied at study level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5619
diff changeset
636 * This comes from the fact that patient-level tags are copied
4bfd885fb45f optimization as patient-level tags are copied at study level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5619
diff changeset
637 * at the study level, as implemented by "ResourcesContent::AddResource()".
4bfd885fb45f optimization as patient-level tags are copied at study level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5619
diff changeset
638 **/
5697
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
639 requestedStudyTags_.insert(tag);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
640
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
641 if (request_.GetLevel() == ResourceType_Study)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
642 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
643 request_.SetRetrieveMainDicomTags(true);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
644 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
645 else
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
646 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
647 request_.GetParentSpecification(ResourceType_Study).SetRetrieveMainDicomTags(true);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
648 }
5620
4bfd885fb45f optimization as patient-level tags are copied at study level
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5619
diff changeset
649 }
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
650 }
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
651 else if (DicomMap::IsMainDicomTag(tag, ResourceType_Study))
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
652 {
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
653 if (request_.GetLevel() == ResourceType_Patient)
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
654 {
5612
599ce5ed126c added more tolerance to behave like previous releases
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5610
diff changeset
655 LOG(WARNING) << "Requested tag " << tag.Format()
599ce5ed126c added more tolerance to behave like previous releases
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5610
diff changeset
656 << " should only be read at the study, series, or instance level";
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
657 request_.SetRetrieveOneInstanceMetadataAndAttachments(true); // we might need to get it from one instance
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
658 }
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
659 else
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
660 {
5697
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
661 if (request_.GetLevel() == ResourceType_Study)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
662 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
663 request_.SetRetrieveMainDicomTags(true);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
664 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
665 else
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
666 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
667 request_.GetParentSpecification(ResourceType_Study).SetRetrieveMainDicomTags(true);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
668 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
669
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
670 requestedStudyTags_.insert(tag);
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
671 }
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
672 }
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
673 else if (DicomMap::IsMainDicomTag(tag, ResourceType_Series))
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
674 {
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
675 if (request_.GetLevel() == ResourceType_Patient ||
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
676 request_.GetLevel() == ResourceType_Study)
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
677 {
5612
599ce5ed126c added more tolerance to behave like previous releases
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5610
diff changeset
678 LOG(WARNING) << "Requested tag " << tag.Format()
599ce5ed126c added more tolerance to behave like previous releases
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5610
diff changeset
679 << " should only be read at the series or instance level";
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
680 request_.SetRetrieveOneInstanceMetadataAndAttachments(true); // we might need to get it from one instance
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
681 }
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
682 else
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
683 {
5697
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
684 if (request_.GetLevel() == ResourceType_Series)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
685 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
686 request_.SetRetrieveMainDicomTags(true);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
687 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
688 else
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
689 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
690 request_.GetParentSpecification(ResourceType_Series).SetRetrieveMainDicomTags(true);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
691 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5696
diff changeset
692
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
693 requestedSeriesTags_.insert(tag);
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
694 }
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
695 }
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
696 else if (DicomMap::IsMainDicomTag(tag, ResourceType_Instance))
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
697 {
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
698 if (request_.GetLevel() == ResourceType_Patient ||
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
699 request_.GetLevel() == ResourceType_Study ||
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
700 request_.GetLevel() == ResourceType_Series)
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
701 {
5612
599ce5ed126c added more tolerance to behave like previous releases
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5610
diff changeset
702 LOG(WARNING) << "Requested tag " << tag.Format()
599ce5ed126c added more tolerance to behave like previous releases
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5610
diff changeset
703 << " should only be read at the instance level";
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
704 request_.SetRetrieveOneInstanceMetadataAndAttachments(true); // we might need to get it from one instance
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
705 }
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
706 else
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
707 {
5699
e8e028aed89f c-find tests pass using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5697
diff changeset
708 request_.SetRetrieveMainDicomTags(true);
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
709 requestedInstanceTags_.insert(tag);
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
710 }
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
711 }
5666
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
712 else if (tag == DICOM_TAG_NUMBER_OF_PATIENT_RELATED_STUDIES)
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
713 {
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
714 ConfigureChildrenCountComputedTag(tag, ResourceType_Patient, ResourceType_Study);
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
715 }
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
716 else if (tag == DICOM_TAG_NUMBER_OF_PATIENT_RELATED_SERIES)
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
717 {
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
718 ConfigureChildrenCountComputedTag(tag, ResourceType_Patient, ResourceType_Series);
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
719 }
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
720 else if (tag == DICOM_TAG_NUMBER_OF_PATIENT_RELATED_INSTANCES)
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
721 {
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
722 ConfigureChildrenCountComputedTag(tag, ResourceType_Patient, ResourceType_Instance);
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
723 }
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
724 else if (tag == DICOM_TAG_NUMBER_OF_STUDY_RELATED_SERIES)
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
725 {
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
726 ConfigureChildrenCountComputedTag(tag, ResourceType_Study, ResourceType_Series);
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
727 }
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
728 else if (tag == DICOM_TAG_NUMBER_OF_STUDY_RELATED_INSTANCES)
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
729 {
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
730 ConfigureChildrenCountComputedTag(tag, ResourceType_Study, ResourceType_Instance);
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
731 }
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
732 else if (tag == DICOM_TAG_NUMBER_OF_SERIES_RELATED_INSTANCES)
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
733 {
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
734 ConfigureChildrenCountComputedTag(tag, ResourceType_Series, ResourceType_Instance);
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
735 }
5668
bd1352bd9d82 configuring requests for ModalitiesInStudy and SOPClassesInStudy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5667
diff changeset
736 else if (tag == DICOM_TAG_SOP_CLASSES_IN_STUDY)
bd1352bd9d82 configuring requests for ModalitiesInStudy and SOPClassesInStudy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5667
diff changeset
737 {
bd1352bd9d82 configuring requests for ModalitiesInStudy and SOPClassesInStudy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5667
diff changeset
738 requestedComputedTags_.insert(tag);
5676
b744a2cf408a shorten ParentRetrieveSpecification/ChildrenRetrieveSpecification as ParentSpecification/ChildrenSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5674
diff changeset
739 request_.GetChildrenSpecification(ResourceType_Instance).AddMetadata(MetadataType_Instance_SopClassUid);
5668
bd1352bd9d82 configuring requests for ModalitiesInStudy and SOPClassesInStudy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5667
diff changeset
740 }
bd1352bd9d82 configuring requests for ModalitiesInStudy and SOPClassesInStudy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5667
diff changeset
741 else if (tag == DICOM_TAG_MODALITIES_IN_STUDY)
bd1352bd9d82 configuring requests for ModalitiesInStudy and SOPClassesInStudy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5667
diff changeset
742 {
bd1352bd9d82 configuring requests for ModalitiesInStudy and SOPClassesInStudy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5667
diff changeset
743 requestedComputedTags_.insert(tag);
5752
717acb0ea546 fix DICOMWeb integration tests
Alain Mazy <am@orthanc.team>
parents: 5714
diff changeset
744 if (request_.GetLevel() < ResourceType_Series)
717acb0ea546 fix DICOMWeb integration tests
Alain Mazy <am@orthanc.team>
parents: 5714
diff changeset
745 {
717acb0ea546 fix DICOMWeb integration tests
Alain Mazy <am@orthanc.team>
parents: 5714
diff changeset
746 request_.GetChildrenSpecification(ResourceType_Series).AddMainDicomTag(DICOM_TAG_MODALITY);
717acb0ea546 fix DICOMWeb integration tests
Alain Mazy <am@orthanc.team>
parents: 5714
diff changeset
747 }
717acb0ea546 fix DICOMWeb integration tests
Alain Mazy <am@orthanc.team>
parents: 5714
diff changeset
748 else if (request_.GetLevel() == ResourceType_Instance) // this happens in QIDO-RS when searching for instances without specifying a StudyInstanceUID -> all Study level tags must be included in the response
717acb0ea546 fix DICOMWeb integration tests
Alain Mazy <am@orthanc.team>
parents: 5714
diff changeset
749 {
717acb0ea546 fix DICOMWeb integration tests
Alain Mazy <am@orthanc.team>
parents: 5714
diff changeset
750 request_.GetParentSpecification(ResourceType_Series).SetRetrieveMainDicomTags(true);
717acb0ea546 fix DICOMWeb integration tests
Alain Mazy <am@orthanc.team>
parents: 5714
diff changeset
751 }
5668
bd1352bd9d82 configuring requests for ModalitiesInStudy and SOPClassesInStudy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5667
diff changeset
752 }
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
753 else if (tag == DICOM_TAG_INSTANCE_AVAILABILITY)
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
754 {
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
755 requestedComputedTags_.insert(tag);
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
756 }
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
757 else
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
758 {
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
759 // This is neither a main DICOM tag, nor a computed DICOM tag:
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
760 // We might need to access the DICOM file
5610
d4b570834d3a adding safeguards around FindRequest::SetRetrieveOneInstanceIdentifier()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5609
diff changeset
761 if (request_.GetLevel() != ResourceType_Instance)
d4b570834d3a adding safeguards around FindRequest::SetRetrieveOneInstanceIdentifier()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5609
diff changeset
762 {
5772
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
763 request_.SetRetrieveOneInstanceMetadataAndAttachments(true);
5610
d4b570834d3a adding safeguards around FindRequest::SetRetrieveOneInstanceIdentifier()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5609
diff changeset
764 }
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
765 }
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
766 }
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
767
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
768
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
769 void ResourceFinder::AddRequestedTags(const std::set<DicomTag>& tags)
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
770 {
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
771 for (std::set<DicomTag>::const_iterator it = tags.begin(); it != tags.end(); ++it)
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
772 {
5686
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
773 AddRequestedTag(*it);
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
774 }
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
775 }
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
776
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
777
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
778 static void InjectRequestedTags(DicomMap& target,
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
779 std::set<DicomTag>& remainingRequestedTags /* in & out */,
5666
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
780 const FindResponse::Resource& resource,
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
781 ResourceType level/*,
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
782 const std::set<DicomTag>& tags*/)
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
783 {
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
784 if (!remainingRequestedTags.empty())
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
785 {
5666
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
786 DicomMap m;
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
787 resource.GetAllMainDicomTags(m); // DicomTags from DB
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
788 GetMainDicomSequencesFromMetadata(m, resource, resource.GetLevel()); // DicomSequences from metadata
5787
42ef98bb3c13 Do not read from disk when not required
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
789
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
790 // check which tags have been saved in DB; that's the way to know if they are missing because they were not saved or because they have no value
5787
42ef98bb3c13 Do not read from disk when not required
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
791 std::set<DicomTag> savedMainDicomTags;
42ef98bb3c13 Do not read from disk when not required
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
792 std::string signature = DicomMap::GetDefaultMainDicomTagsSignature(ResourceType_Study); // default signature in case it's not in the metadata (= the signature for 1.11.0)
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
793 if (resource.LookupMetadata(signature, resource.GetLevel(), MetadataType_MainDicomTagsSignature))
5787
42ef98bb3c13 Do not read from disk when not required
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
794 {
42ef98bb3c13 Do not read from disk when not required
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
795 if (level == ResourceType_Study) // when we retrieve the study tags, we actually also get the patient tags that are also saved at study level but not included in the signature
42ef98bb3c13 Do not read from disk when not required
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
796 {
42ef98bb3c13 Do not read from disk when not required
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
797 signature += ";" + DicomMap::GetDefaultMainDicomTagsSignature(ResourceType_Patient); // append the default signature (from before 1.11.0)
42ef98bb3c13 Do not read from disk when not required
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
798 }
42ef98bb3c13 Do not read from disk when not required
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
799
42ef98bb3c13 Do not read from disk when not required
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
800 FromDcmtkBridge::ParseListOfTags(savedMainDicomTags, signature);
42ef98bb3c13 Do not read from disk when not required
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
801 }
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
802
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
803 std::set<DicomTag> copiedTags;
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
804 for (std::set<DicomTag>::const_iterator it = remainingRequestedTags.begin(); it != remainingRequestedTags.end(); ++it)
5666
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
805 {
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
806 if (target.CopyTagIfExists(m, *it))
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
807 {
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
808 copiedTags.insert(*it);
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
809 }
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
810 else if (savedMainDicomTags.find(*it) != savedMainDicomTags.end()) // the tag should have been saved in DB but has no value so we consider it has been copied
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
811 {
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
812 copiedTags.insert(*it);
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
813 }
5666
aa231c18b9d2 adding computed tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5665
diff changeset
814 }
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
815
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
816 Toolbox::RemoveSets(remainingRequestedTags, copiedTags);
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
817 }
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
818 }
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
819
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
820
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
821 static void ReadMissingTagsFromStorageArea(DicomMap& requestedTags,
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
822 ServerContext& context,
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
823 const FindRequest& request,
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
824 const FindResponse::Resource& resource,
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
825 const std::set<DicomTag>& missingTags)
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
826 {
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
827 OrthancConfiguration::ReaderLock lock;
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
828 if (lock.GetConfiguration().IsWarningEnabled(Warnings_001_TagsBeingReadFromStorage))
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
829 {
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
830 std::string missings;
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
831 FromDcmtkBridge::FormatListOfTags(missings, missingTags);
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
832
5699
e8e028aed89f c-find tests pass using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5697
diff changeset
833 LOG(WARNING) << "W001: Accessing DICOM tags from storage when accessing "
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
834 << Orthanc::GetResourceTypeText(resource.GetLevel(), false, false)
5764
db4bd2f9e8d2 re-enable W002 again
Alain Mazy <am@orthanc.team>
parents: 5752
diff changeset
835 << " " << resource.GetIdentifier()
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
836 << ": " << missings;
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
837 }
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
838
5772
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
839 // TODO-FIND: What do we do if the DICOM has been removed since the request?
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
840 // Do we fail, or do we skip the resource?
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
841
5772
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
842 Json::Value tmpDicomAsJson;
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
843
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
844 if (request.GetLevel() == ResourceType_Instance &&
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
845 request.IsRetrieveMetadata() &&
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
846 request.IsRetrieveAttachments())
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
847 {
5772
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
848 LOG(INFO) << "Will retrieve missing DICOM tags from instance: " << resource.GetIdentifier();
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
849
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
850 context.ReadDicomAsJson(tmpDicomAsJson, resource.GetIdentifier(), resource.GetMetadata(ResourceType_Instance),
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
851 resource.GetAttachments(), missingTags /* ignoreTagLength */);
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
852 }
5772
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
853 else if (request.GetLevel() != ResourceType_Instance &&
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
854 request.IsRetrieveOneInstanceMetadataAndAttachments())
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
855 {
5772
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
856 LOG(INFO) << "Will retrieve missing DICOM tags from instance: " << resource.GetOneInstancePublicId();
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
857
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
858 context.ReadDicomAsJson(tmpDicomAsJson, resource.GetOneInstancePublicId(), resource.GetOneInstanceMetadata(),
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
859 resource.GetOneInstanceAttachments(), missingTags /* ignoreTagLength */);
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
860 }
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
861 else
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
862 {
5772
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
863 // TODO-FIND: This fallback shouldn't be necessary
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
864
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
865 FindRequest requestDicomAttachment(request.GetLevel());
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
866 requestDicomAttachment.SetOrthancId(request.GetLevel(), resource.GetIdentifier());
5772
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
867
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
868 if (request.GetLevel() == ResourceType_Instance)
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
869 {
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
870 requestDicomAttachment.SetRetrieveMetadata(true);
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
871 requestDicomAttachment.SetRetrieveAttachments(true);
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
872 }
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
873 else
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
874 {
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
875 requestDicomAttachment.SetRetrieveOneInstanceMetadataAndAttachments(true);
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
876 }
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
877
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
878 FindResponse responseDicomAttachment;
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
879 context.GetIndex().ExecuteFind(responseDicomAttachment, requestDicomAttachment);
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
880
5772
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
881 if (responseDicomAttachment.GetSize() != 1)
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
882 {
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
883 throw OrthancException(ErrorCode_InexistentFile);
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
884 }
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
885 else
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
886 {
5772
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
887 const FindResponse::Resource& response = responseDicomAttachment.GetResourceByIndex(0);
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
888 const std::string instancePublicId = response.GetIdentifier();
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
889 LOG(INFO) << "Will retrieve missing DICOM tags from instance: " << instancePublicId;
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
890
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
891 if (request.GetLevel() == ResourceType_Instance)
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
892 {
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
893 context.ReadDicomAsJson(tmpDicomAsJson, response.GetIdentifier(), response.GetMetadata(ResourceType_Instance),
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
894 response.GetAttachments(), missingTags /* ignoreTagLength */);
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
895 }
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
896 else
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
897 {
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
898 context.ReadDicomAsJson(tmpDicomAsJson, response.GetOneInstancePublicId(), response.GetOneInstanceMetadata(),
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
899 response.GetOneInstanceAttachments(), missingTags /* ignoreTagLength */);
093a8693ba16 replaced SetRetrieveOneInstanceIdentifier() by SetRetrieveOneInstanceMetadataAndAttachments()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5764
diff changeset
900 }
5665
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
901 }
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
902 }
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
903
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
904 DicomMap tmpDicomMap;
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
905 tmpDicomMap.FromDicomAsJson(tmpDicomAsJson, false /* append */, true /* parseSequences*/);
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
906
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
907 for (std::set<DicomTag>::const_iterator it = missingTags.begin(); it != missingTags.end(); ++it)
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
908 {
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
909 assert(!requestedTags.HasTag(*it));
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
910 if (tmpDicomMap.HasTag(*it))
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
911 {
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
912 requestedTags.SetValue(*it, tmpDicomMap.GetValue(*it));
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
913 }
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
914 else
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
915 {
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
916 requestedTags.SetNullValue(*it); // TODO-FIND: Is this compatible with Orthanc <= 1.12.3?
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
917 }
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
918 }
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
919 }
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
920
d8c86698110c implemented computed tag: Instance Availability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5641
diff changeset
921
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
922 void ResourceFinder::Execute(IVisitor& visitor,
5621
732ec9feeea8 introduction of FindRequest::ChildrenRetrieveSpecification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5620
diff changeset
923 ServerContext& context) const
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
924 {
5764
db4bd2f9e8d2 re-enable W002 again
Alain Mazy <am@orthanc.team>
parents: 5752
diff changeset
925 bool isWarning002Enabled = false;
5787
42ef98bb3c13 Do not read from disk when not required
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
926 bool isWarning004Enabled = false;
5764
db4bd2f9e8d2 re-enable W002 again
Alain Mazy <am@orthanc.team>
parents: 5752
diff changeset
927
db4bd2f9e8d2 re-enable W002 again
Alain Mazy <am@orthanc.team>
parents: 5752
diff changeset
928 {
db4bd2f9e8d2 re-enable W002 again
Alain Mazy <am@orthanc.team>
parents: 5752
diff changeset
929 OrthancConfiguration::ReaderLock lock;
db4bd2f9e8d2 re-enable W002 again
Alain Mazy <am@orthanc.team>
parents: 5752
diff changeset
930 isWarning002Enabled = lock.GetConfiguration().IsWarningEnabled(Warnings_002_InconsistentDicomTagsInDb);
5787
42ef98bb3c13 Do not read from disk when not required
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
931 isWarning004Enabled = lock.GetConfiguration().IsWarningEnabled(Warnings_004_NoMainDicomTagsSignature);
5764
db4bd2f9e8d2 re-enable W002 again
Alain Mazy <am@orthanc.team>
parents: 5752
diff changeset
932 }
db4bd2f9e8d2 re-enable W002 again
Alain Mazy <am@orthanc.team>
parents: 5752
diff changeset
933
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
934 FindResponse response;
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
935 context.GetIndex().ExecuteFind(response, request_);
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
936
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
937 bool complete;
5693
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
938
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
939 switch (pagingMode_)
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
940 {
5693
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
941 case PagingMode_FullDatabase:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
942 case PagingMode_ManualSkip:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
943 complete = true;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
944 break;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
945
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
946 case PagingMode_FullManual:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
947 complete = (databaseLimits_ == 0 ||
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
948 response.GetSize() <= databaseLimits_);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
949 break;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
950
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
951 default:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
952 throw OrthancException(ErrorCode_InternalError);
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
953 }
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
954
5690
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
955 if (lookup_.get() != NULL)
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
956 {
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
957 LOG(INFO) << "Number of candidate resources after fast DB filtering on main DICOM tags: " << response.GetSize();
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
958 }
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
959
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
960 size_t countResults = 0;
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
961 size_t skipped = 0;
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
962
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
963 for (size_t i = 0; i < response.GetSize(); i++)
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
964 {
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
965 const FindResponse::Resource& resource = response.GetResourceByIndex(i);
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
966
5774
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
967 #if 0
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
968 {
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
969 Json::Value v;
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
970 resource.DebugExport(v, request_);
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
971 std::cout << v.toStyledString();
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
972 }
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
973 #endif
f96abfe08946 implementation of specialized SQL commands in SQLiteDatabaseWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5772
diff changeset
974
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
975 DicomMap outRequestedTags;
5686
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
976
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
977 if (hasRequestedTags_)
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
978 {
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
979 std::set<DicomTag> remainingRequestedTags = requestedTags_; // at this point, all requested tags are "missing"
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
980
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
981 InjectComputedTags(outRequestedTags, resource);
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
982 Toolbox::RemoveSets(remainingRequestedTags, requestedComputedTags_);
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
983
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
984 InjectRequestedTags(outRequestedTags, remainingRequestedTags, resource, ResourceType_Patient /*, requestedPatientTags_*/);
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
985 InjectRequestedTags(outRequestedTags, remainingRequestedTags, resource, ResourceType_Study /*, requestedStudyTags_*/);
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
986 InjectRequestedTags(outRequestedTags, remainingRequestedTags, resource, ResourceType_Series /*, requestedSeriesTags_*/);
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
987 InjectRequestedTags(outRequestedTags, remainingRequestedTags, resource, ResourceType_Instance /*, requestedInstanceTags_*/);
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
988
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
989 if (!remainingRequestedTags.empty())
5686
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
990 {
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
991 if (!allowStorageAccess_)
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
992 {
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
993 throw OrthancException(ErrorCode_BadSequenceOfCalls,
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
994 "Cannot add missing requested tags, as access to file storage is disallowed");
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
995 }
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
996 else
5610
d4b570834d3a adding safeguards around FindRequest::SetRetrieveOneInstanceIdentifier()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5609
diff changeset
997 {
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
998 ReadMissingTagsFromStorageArea(outRequestedTags, context, request_, resource, remainingRequestedTags);
5686
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
999 }
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1000 }
5764
db4bd2f9e8d2 re-enable W002 again
Alain Mazy <am@orthanc.team>
parents: 5752
diff changeset
1001
db4bd2f9e8d2 re-enable W002 again
Alain Mazy <am@orthanc.team>
parents: 5752
diff changeset
1002 std::string mainDicomTagsSignature;
db4bd2f9e8d2 re-enable W002 again
Alain Mazy <am@orthanc.team>
parents: 5752
diff changeset
1003 if (isWarning002Enabled &&
db4bd2f9e8d2 re-enable W002 again
Alain Mazy <am@orthanc.team>
parents: 5752
diff changeset
1004 resource.LookupMetadata(mainDicomTagsSignature, resource.GetLevel(), MetadataType_MainDicomTagsSignature) &&
db4bd2f9e8d2 re-enable W002 again
Alain Mazy <am@orthanc.team>
parents: 5752
diff changeset
1005 mainDicomTagsSignature != DicomMap::GetMainDicomTagsSignature(resource.GetLevel()))
db4bd2f9e8d2 re-enable W002 again
Alain Mazy <am@orthanc.team>
parents: 5752
diff changeset
1006 {
db4bd2f9e8d2 re-enable W002 again
Alain Mazy <am@orthanc.team>
parents: 5752
diff changeset
1007 LOG(WARNING) << "W002: " << Orthanc::GetResourceTypeText(resource.GetLevel(), false , false)
db4bd2f9e8d2 re-enable W002 again
Alain Mazy <am@orthanc.team>
parents: 5752
diff changeset
1008 << " has been stored with another version of Main Dicom Tags list, you should POST to /"
db4bd2f9e8d2 re-enable W002 again
Alain Mazy <am@orthanc.team>
parents: 5752
diff changeset
1009 << Orthanc::GetResourceTypeText(resource.GetLevel(), true, false)
db4bd2f9e8d2 re-enable W002 again
Alain Mazy <am@orthanc.team>
parents: 5752
diff changeset
1010 << "/" << resource.GetIdentifier()
db4bd2f9e8d2 re-enable W002 again
Alain Mazy <am@orthanc.team>
parents: 5752
diff changeset
1011 << "/reconstruct to update the list of tags saved in DB or run the Housekeeper plugin. Some MainDicomTags might be missing from this answer.";
db4bd2f9e8d2 re-enable W002 again
Alain Mazy <am@orthanc.team>
parents: 5752
diff changeset
1012 }
5787
42ef98bb3c13 Do not read from disk when not required
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
1013 else if (isWarning004Enabled &&
42ef98bb3c13 Do not read from disk when not required
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
1014 !resource.LookupMetadata(mainDicomTagsSignature, resource.GetLevel(), MetadataType_MainDicomTagsSignature))
42ef98bb3c13 Do not read from disk when not required
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
1015 {
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
1016 // LOG(WARNING) << "W004: " << Orthanc::GetResourceTypeText(resource.GetLevel(), false , false)
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
1017 // << " has been stored a while ago and does not have a MainDicomTagsSignature, you should POST to /"
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
1018 // << Orthanc::GetResourceTypeText(resource.GetLevel(), true, false)
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
1019 // << "/" << resource.GetIdentifier()
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
1020 // << "/reconstruct to update the list of tags saved in DB or run the Housekeeper plugin. Some MainDicomTags might be missing from this answer.";
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
1021 // TODO: sometimes, we do not read the metadata at all !
5787
42ef98bb3c13 Do not read from disk when not required
Alain Mazy <am@orthanc.team>
parents: 5774
diff changeset
1022 }
5764
db4bd2f9e8d2 re-enable W002 again
Alain Mazy <am@orthanc.team>
parents: 5752
diff changeset
1023
5686
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1024 }
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1025
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1026 bool match = true;
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1027
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1028 if (lookup_.get() != NULL)
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1029 {
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1030 DicomMap tags;
5690
708952bd869c integration tests are passing with ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5689
diff changeset
1031 resource.GetAllMainDicomTags(tags);
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
1032 tags.Merge(outRequestedTags);
5686
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1033 match = lookup_->IsMatch(tags);
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1034 }
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1035
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1036 if (match)
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1037 {
5693
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
1038 if (pagingMode_ == PagingMode_FullDatabase)
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1039 {
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
1040 visitor.Apply(resource, outRequestedTags);
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1041 }
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1042 else
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1043 {
5693
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
1044 if (hasLimitsSince_ &&
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1045 skipped < limitsSince_)
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1046 {
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1047 skipped++;
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1048 }
5693
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5692
diff changeset
1049 else if (hasLimitsCount_ &&
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1050 countResults >= limitsCount_)
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1051 {
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1052 // Too many results, don't mark as complete
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1053 complete = false;
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1054 break;
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1055 }
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1056 else
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1057 {
5788
61c9e5df64d7 handling of sequences from DB in RequestedTags
Alain Mazy <am@orthanc.team>
parents: 5787
diff changeset
1058 visitor.Apply(resource, outRequestedTags);
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1059 countResults++;
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1060 }
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1061 }
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1062 }
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1063 }
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1064
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1065 if (complete)
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1066 {
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1067 visitor.MarkAsComplete();
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1068 }
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1069 }
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1070
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1071
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1072 void ResourceFinder::Execute(Json::Value& target,
5709
476b1db52110 removed the "format_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5702
diff changeset
1073 ServerContext& context,
5713
d851a54e49b7 removed "includeAllMetadata_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5709
diff changeset
1074 DicomToJsonFormat format,
d851a54e49b7 removed "includeAllMetadata_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5709
diff changeset
1075 bool includeAllMetadata) const
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1076 {
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1077 class Visitor : public IVisitor
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1078 {
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1079 private:
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1080 const ResourceFinder& that_;
5709
476b1db52110 removed the "format_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5702
diff changeset
1081 ServerIndex& index_;
476b1db52110 removed the "format_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5702
diff changeset
1082 Json::Value& target_;
476b1db52110 removed the "format_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5702
diff changeset
1083 DicomToJsonFormat format_;
476b1db52110 removed the "format_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5702
diff changeset
1084 bool hasRequestedTags_;
5713
d851a54e49b7 removed "includeAllMetadata_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5709
diff changeset
1085 bool includeAllMetadata_;
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1086
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1087 public:
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1088 Visitor(const ResourceFinder& that,
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1089 ServerIndex& index,
5696
0f8b6214308a preparing to use ResourceFinder in OrthancFindRequestHandler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5694
diff changeset
1090 Json::Value& target,
5709
476b1db52110 removed the "format_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5702
diff changeset
1091 DicomToJsonFormat format,
5713
d851a54e49b7 removed "includeAllMetadata_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5709
diff changeset
1092 bool hasRequestedTags,
d851a54e49b7 removed "includeAllMetadata_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5709
diff changeset
1093 bool includeAllMetadata) :
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1094 that_(that),
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1095 index_(index),
5696
0f8b6214308a preparing to use ResourceFinder in OrthancFindRequestHandler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5694
diff changeset
1096 target_(target),
5709
476b1db52110 removed the "format_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5702
diff changeset
1097 format_(format),
5713
d851a54e49b7 removed "includeAllMetadata_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5709
diff changeset
1098 hasRequestedTags_(hasRequestedTags),
d851a54e49b7 removed "includeAllMetadata_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5709
diff changeset
1099 includeAllMetadata_(includeAllMetadata)
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1100 {
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1101 }
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1102
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1103 virtual void Apply(const FindResponse::Resource& resource,
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1104 const DicomMap& requestedTags) ORTHANC_OVERRIDE
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1105 {
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1106 if (that_.expand_)
5686
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1107 {
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1108 Json::Value item;
5713
d851a54e49b7 removed "includeAllMetadata_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5709
diff changeset
1109 that_.Expand(item, resource, index_, format_, includeAllMetadata_);
5686
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1110
5696
0f8b6214308a preparing to use ResourceFinder in OrthancFindRequestHandler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5694
diff changeset
1111 if (hasRequestedTags_)
5686
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1112 {
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1113 static const char* const REQUESTED_TAGS = "RequestedTags";
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1114 item[REQUESTED_TAGS] = Json::objectValue;
5709
476b1db52110 removed the "format_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5702
diff changeset
1115 FromDcmtkBridge::ToJson(item[REQUESTED_TAGS], requestedTags, format_);
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
1116 }
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
1117
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1118 target_.append(item);
5609
4690a0d2b01e preliminary support of requestedTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5608
diff changeset
1119 }
5686
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1120 else
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1121 {
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1122 target_.append(resource.GetIdentifier());
5686
11575590e493 integrating DatabaseLookup into ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5682
diff changeset
1123 }
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1124 }
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1125
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1126 virtual void MarkAsComplete() ORTHANC_OVERRIDE
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1127 {
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1128 }
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1129 };
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1130
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1131 target = Json::arrayValue;
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1132
5713
d851a54e49b7 removed "includeAllMetadata_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5709
diff changeset
1133 Visitor visitor(*this, context.GetIndex(), target, format, hasRequestedTags_, includeAllMetadata);
5688
d0a264b803f1 first implementation of database paging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5686
diff changeset
1134 Execute(visitor, context);
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1135 }
5615
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1136
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1137
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1138 bool ResourceFinder::ExecuteOneResource(Json::Value& target,
5709
476b1db52110 removed the "format_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5702
diff changeset
1139 ServerContext& context,
5713
d851a54e49b7 removed "includeAllMetadata_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5709
diff changeset
1140 DicomToJsonFormat format,
d851a54e49b7 removed "includeAllMetadata_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5709
diff changeset
1141 bool includeAllMetadata) const
5615
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1142 {
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1143 Json::Value answer;
5713
d851a54e49b7 removed "includeAllMetadata_" member from ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5709
diff changeset
1144 Execute(answer, context, format, includeAllMetadata);
5615
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1145
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1146 if (answer.type() != Json::arrayValue)
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1147 {
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1148 throw OrthancException(ErrorCode_InternalError);
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1149 }
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1150 else if (answer.size() > 1)
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1151 {
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1152 throw OrthancException(ErrorCode_DatabasePlugin);
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1153 }
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1154 else if (answer.empty())
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1155 {
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1156 // Inexistent resource (or was deleted between the first and second phases)
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1157 return false;
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1158 }
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1159 else
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1160 {
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1161 target = answer[0];
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1162 return true;
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1163 }
a10978a5e65c expansion of single resources using ResourceFinder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5612
diff changeset
1164 }
5608
3d0aa94b44b3 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1165 }