comparison OrthancServer/Search/DatabaseLookup.cpp @ 3071:2df061cf2fec db-changes

getting rid of IFindConstraint hierarchy
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 02 Jan 2019 11:26:27 +0100
parents ce272138f15e
children 1b05fd072c57
comparison
equal deleted inserted replaced
3070:1bc4a1bb66e9 3071:2df061cf2fec
34 #include "../PrecompiledHeadersServer.h" 34 #include "../PrecompiledHeadersServer.h"
35 #include "DatabaseLookup.h" 35 #include "DatabaseLookup.h"
36 36
37 #include "../ServerToolbox.h" 37 #include "../ServerToolbox.h"
38 #include "../../Core/DicomParsing/FromDcmtkBridge.h" 38 #include "../../Core/DicomParsing/FromDcmtkBridge.h"
39 #include "../../Core/DicomParsing/ToDcmtkBridge.h"
39 40
40 namespace Orthanc 41 namespace Orthanc
41 { 42 {
42 DatabaseLookup::~DatabaseLookup() 43 DatabaseLookup::~DatabaseLookup()
43 { 44 {
80 { 81 {
81 for (size_t i = 0; i < constraints_.size(); i++) 82 for (size_t i = 0; i < constraints_.size(); i++)
82 { 83 {
83 assert(constraints_[i] != NULL); 84 assert(constraints_[i] != NULL);
84 if (!constraints_[i]->IsMatch(value)) 85 if (!constraints_[i]->IsMatch(value))
86 {
87 return false;
88 }
89 }
90
91 return true;
92 }
93
94
95 bool DatabaseLookup::IsMatch(DcmItem& item,
96 Encoding encoding) const
97 {
98 for (size_t i = 0; i < constraints_.size(); i++)
99 {
100 assert(constraints_[i] != NULL);
101
102 DcmTagKey tag = ToDcmtkBridge::Convert(constraints_[i]->GetTag());
103
104 DcmElement* element = NULL;
105 if (!item.findAndGetElement(tag, element).good())
106 {
107 if (constraints_[i]->IsMandatory())
108 {
109 return false;
110 }
111 else
112 {
113 return true;
114 }
115 }
116
117 if (element == NULL)
118 {
119 return false;
120 }
121
122 std::set<DicomTag> ignoreTagLength;
123 std::auto_ptr<DicomValue> value(FromDcmtkBridge::ConvertLeafElement
124 (*element, DicomToJsonFlags_None,
125 ORTHANC_MAXIMUM_TAG_LENGTH, encoding, ignoreTagLength));
126
127 if (value->IsNull() ||
128 value->IsBinary() ||
129 !constraints_[i]->IsMatch(value->GetContent()))
85 { 130 {
86 return false; 131 return false;
87 } 132 }
88 } 133 }
89 134