Mercurial > hg > orthanc
comparison OrthancServer/Sources/Database/Compatibility/GenericFind.cpp @ 5617:8905ffa45fc2 find-refactoring
started listing of children resources
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 09 May 2024 14:59:17 +0200 |
parents | 1e92fb051fd7 |
children | 1864b16bc7b1 |
comparison
equal
deleted
inserted
replaced
5616:1e92fb051fd7 | 5617:8905ffa45fc2 |
---|---|
38 request.GetMetadataConstraintsCount() == 0 && | 38 request.GetMetadataConstraintsCount() == 0 && |
39 request.GetLabels().empty() && | 39 request.GetLabels().empty() && |
40 request.GetOrdering().empty()); | 40 request.GetOrdering().empty()); |
41 } | 41 } |
42 | 42 |
43 static void GetChildren(std::list<int64_t>& target, | |
44 IDatabaseWrapper::ITransaction& transaction, | |
45 const std::list<int64_t>& resources) | |
46 { | |
47 target.clear(); | |
48 | |
49 for (std::list<int64_t>::const_iterator it = resources.begin(); it != resources.end(); ++it) | |
50 { | |
51 std::list<int64_t> tmp; | |
52 transaction.GetChildrenInternalId(tmp, *it); | |
53 target.splice(target.begin(), tmp); | |
54 } | |
55 } | |
56 | |
57 static void GetChildren(std::list<std::string>& target, | |
58 IDatabaseWrapper::ITransaction& transaction, | |
59 const std::list<int64_t>& resources) | |
60 { | |
61 target.clear(); | |
62 | |
63 for (std::list<int64_t>::const_iterator it = resources.begin(); it != resources.end(); ++it) | |
64 { | |
65 std::list<std::string> tmp; | |
66 transaction.GetChildrenPublicId(tmp, *it); | |
67 target.splice(target.begin(), tmp); | |
68 } | |
69 } | |
70 | |
71 static void GetChildrenIdentifiers(std::list<std::string>& children, | |
72 IDatabaseWrapper::ITransaction& transaction, | |
73 const OrthancIdentifiers& identifiers, | |
74 ResourceType topLevel, | |
75 ResourceType bottomLevel) | |
76 { | |
77 if (!IsResourceLevelAboveOrEqual(topLevel, bottomLevel) || | |
78 topLevel == bottomLevel) | |
79 { | |
80 throw OrthancException(ErrorCode_InternalError); | |
81 } | |
82 | |
83 std::list<int64_t> currentResources; | |
84 ResourceType currentLevel; | |
85 | |
86 { | |
87 int64_t id; | |
88 if (!transaction.LookupResource(id, currentLevel, identifiers.GetLevel(topLevel)) || | |
89 currentLevel != topLevel) | |
90 { | |
91 throw OrthancException(ErrorCode_InexistentItem); | |
92 } | |
93 | |
94 currentResources.push_back(id); | |
95 } | |
96 | |
97 while (currentLevel != bottomLevel) | |
98 { | |
99 ResourceType nextLevel = GetChildResourceType(currentLevel); | |
100 if (nextLevel == bottomLevel) | |
101 { | |
102 GetChildren(children, transaction, currentResources); | |
103 } | |
104 else | |
105 { | |
106 std::list<int64_t> nextResources; | |
107 GetChildren(nextResources, transaction, currentResources); | |
108 currentResources.swap(nextResources); | |
109 } | |
110 | |
111 currentLevel = nextLevel; | |
112 } | |
113 } | |
114 | |
43 void GenericFind::ExecuteFind(std::list<std::string>& identifiers, | 115 void GenericFind::ExecuteFind(std::list<std::string>& identifiers, |
44 const FindRequest& request) | 116 const FindRequest& request) |
45 { | 117 { |
46 if (IsRequestWithoutContraint(request) && | 118 if (IsRequestWithoutContraint(request) && |
47 !request.GetOrthancIdentifiers().HasPatientId() && | 119 !request.GetOrthancIdentifiers().HasPatientId() && |
63 request.GetOrthancIdentifiers().HasPatientId() && | 135 request.GetOrthancIdentifiers().HasPatientId() && |
64 !request.GetOrthancIdentifiers().HasStudyId() && | 136 !request.GetOrthancIdentifiers().HasStudyId() && |
65 !request.GetOrthancIdentifiers().HasSeriesId() && | 137 !request.GetOrthancIdentifiers().HasSeriesId() && |
66 !request.GetOrthancIdentifiers().HasInstanceId()) | 138 !request.GetOrthancIdentifiers().HasInstanceId()) |
67 { | 139 { |
140 // TODO-FIND: This is a trivial case for which no transaction is needed | |
68 identifiers.push_back(request.GetOrthancIdentifiers().GetPatientId()); | 141 identifiers.push_back(request.GetOrthancIdentifiers().GetPatientId()); |
69 } | 142 } |
70 else if (IsRequestWithoutContraint(request) && | 143 else if (IsRequestWithoutContraint(request) && |
71 request.GetLevel() == ResourceType_Study && | 144 request.GetLevel() == ResourceType_Study && |
72 !request.GetOrthancIdentifiers().HasPatientId() && | 145 !request.GetOrthancIdentifiers().HasPatientId() && |
73 request.GetOrthancIdentifiers().HasStudyId() && | 146 request.GetOrthancIdentifiers().HasStudyId() && |
74 !request.GetOrthancIdentifiers().HasSeriesId() && | 147 !request.GetOrthancIdentifiers().HasSeriesId() && |
75 !request.GetOrthancIdentifiers().HasInstanceId()) | 148 !request.GetOrthancIdentifiers().HasInstanceId()) |
76 { | 149 { |
150 // TODO-FIND: This is a trivial case for which no transaction is needed | |
77 identifiers.push_back(request.GetOrthancIdentifiers().GetStudyId()); | 151 identifiers.push_back(request.GetOrthancIdentifiers().GetStudyId()); |
78 } | 152 } |
79 else if (IsRequestWithoutContraint(request) && | 153 else if (IsRequestWithoutContraint(request) && |
80 request.GetLevel() == ResourceType_Series && | 154 request.GetLevel() == ResourceType_Series && |
81 !request.GetOrthancIdentifiers().HasPatientId() && | 155 !request.GetOrthancIdentifiers().HasPatientId() && |
82 !request.GetOrthancIdentifiers().HasStudyId() && | 156 !request.GetOrthancIdentifiers().HasStudyId() && |
83 request.GetOrthancIdentifiers().HasSeriesId() && | 157 request.GetOrthancIdentifiers().HasSeriesId() && |
84 !request.GetOrthancIdentifiers().HasInstanceId()) | 158 !request.GetOrthancIdentifiers().HasInstanceId()) |
85 { | 159 { |
160 // TODO-FIND: This is a trivial case for which no transaction is needed | |
86 identifiers.push_back(request.GetOrthancIdentifiers().GetSeriesId()); | 161 identifiers.push_back(request.GetOrthancIdentifiers().GetSeriesId()); |
87 } | 162 } |
88 else if (IsRequestWithoutContraint(request) && | 163 else if (IsRequestWithoutContraint(request) && |
89 request.GetLevel() == ResourceType_Instance && | 164 request.GetLevel() == ResourceType_Instance && |
90 !request.GetOrthancIdentifiers().HasPatientId() && | 165 !request.GetOrthancIdentifiers().HasPatientId() && |
91 !request.GetOrthancIdentifiers().HasStudyId() && | 166 !request.GetOrthancIdentifiers().HasStudyId() && |
92 !request.GetOrthancIdentifiers().HasSeriesId() && | 167 !request.GetOrthancIdentifiers().HasSeriesId() && |
93 request.GetOrthancIdentifiers().HasInstanceId()) | 168 request.GetOrthancIdentifiers().HasInstanceId()) |
94 { | 169 { |
170 // TODO-FIND: This is a trivial case for which no transaction is needed | |
95 identifiers.push_back(request.GetOrthancIdentifiers().GetInstanceId()); | 171 identifiers.push_back(request.GetOrthancIdentifiers().GetInstanceId()); |
172 } | |
173 else if (IsRequestWithoutContraint(request) && | |
174 (request.GetLevel() == ResourceType_Study || | |
175 request.GetLevel() == ResourceType_Series || | |
176 request.GetLevel() == ResourceType_Instance) && | |
177 request.GetOrthancIdentifiers().HasPatientId() && | |
178 !request.GetOrthancIdentifiers().HasStudyId() && | |
179 !request.GetOrthancIdentifiers().HasSeriesId() && | |
180 !request.GetOrthancIdentifiers().HasInstanceId()) | |
181 { | |
182 GetChildrenIdentifiers(identifiers, transaction_, request.GetOrthancIdentifiers(), ResourceType_Patient, request.GetLevel()); | |
183 } | |
184 else if (IsRequestWithoutContraint(request) && | |
185 (request.GetLevel() == ResourceType_Series || | |
186 request.GetLevel() == ResourceType_Instance) && | |
187 !request.GetOrthancIdentifiers().HasPatientId() && | |
188 request.GetOrthancIdentifiers().HasStudyId() && | |
189 !request.GetOrthancIdentifiers().HasSeriesId() && | |
190 !request.GetOrthancIdentifiers().HasInstanceId()) | |
191 { | |
192 GetChildrenIdentifiers(identifiers, transaction_, request.GetOrthancIdentifiers(), ResourceType_Study, request.GetLevel()); | |
193 } | |
194 else if (IsRequestWithoutContraint(request) && | |
195 request.GetLevel() == ResourceType_Instance && | |
196 !request.GetOrthancIdentifiers().HasPatientId() && | |
197 !request.GetOrthancIdentifiers().HasStudyId() && | |
198 request.GetOrthancIdentifiers().HasSeriesId() && | |
199 !request.GetOrthancIdentifiers().HasInstanceId()) | |
200 { | |
201 GetChildrenIdentifiers(identifiers, transaction_, request.GetOrthancIdentifiers(), ResourceType_Series, request.GetLevel()); | |
96 } | 202 } |
97 else | 203 else |
98 { | 204 { |
99 throw OrthancException(ErrorCode_NotImplemented); // Not supported | 205 throw OrthancException(ErrorCode_NotImplemented); // Not supported |
100 } | 206 } |