Mercurial > hg > orthanc
comparison OrthancServer/Sources/Search/HierarchicalMatcher.cpp @ 5294:e0e2aee4453e
Modality worklists plugin: allow searching on private tags (exact match only)
author | Alain Mazy <am@osimis.io> |
---|---|
date | Wed, 10 May 2023 12:52:35 +0200 |
parents | 0ea402b4d901 |
children | 48b8dae6dc77 |
comparison
equal
deleted
inserted
replaced
5293:ef6d4e794401 | 5294:e0e2aee4453e |
---|---|
246 Encoding encoding, | 246 Encoding encoding, |
247 bool hasCodeExtensions) const | 247 bool hasCodeExtensions) const |
248 { | 248 { |
249 std::unique_ptr<DcmDataset> target(new DcmDataset); | 249 std::unique_ptr<DcmDataset> target(new DcmDataset); |
250 | 250 |
251 std::string currentPrivateCreator = ""; | |
252 | |
251 for (std::set<DicomTag>::const_iterator it = flatTags_.begin(); | 253 for (std::set<DicomTag>::const_iterator it = flatTags_.begin(); |
252 it != flatTags_.end(); ++it) | 254 it != flatTags_.end(); ++it) |
253 { | 255 { |
254 DcmTagKey tag = ToDcmtkBridge::Convert(*it); | 256 DcmTagKey tag = ToDcmtkBridge::Convert(*it); |
255 | 257 |
256 DcmElement* element = NULL; | 258 DcmElement* element = NULL; |
257 if (source.findAndGetElement(tag, element).good() && | 259 if (source.findAndGetElement(tag, element).good() && |
258 element != NULL) | 260 element != NULL) |
259 { | 261 { |
260 if (it->IsPrivate()) | 262 if (tag.isPrivateReservation()) |
261 { | 263 { |
262 throw OrthancException(ErrorCode_NotImplemented, | 264 OFString privateCreator; |
263 "Not applicable to private tags: " + it->Format()); | 265 element->getOFString(privateCreator, 0, false); |
264 } | 266 currentPrivateCreator = privateCreator.c_str(); |
265 | 267 } |
266 std::unique_ptr<DcmElement> cloned(FromDcmtkBridge::CreateElementForTag(*it, "" /* no private creator */)); | 268 else if (!it->IsPrivate()) |
269 { | |
270 // reset the private creator as soon as we reach the end of the current private block | |
271 currentPrivateCreator = ""; | |
272 } | |
273 | |
274 std::unique_ptr<DcmElement> cloned(FromDcmtkBridge::CreateElementForTag(*it, currentPrivateCreator.c_str())); | |
267 cloned->copyFrom(*element); | 275 cloned->copyFrom(*element); |
268 target->insert(cloned.release()); | 276 target->insert(cloned.release()); |
269 } | 277 } |
270 } | 278 } |
271 | 279 |