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