comparison OrthancServer/Search/LookupIdentifierQuery.cpp @ 1749:99f4a05f39fa db-changes

various types of constraints
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 27 Oct 2015 10:54:51 +0100
parents 92203f713205
children 55d52567bebb
comparison
equal deleted inserted replaced
1748:92203f713205 1749:99f4a05f39fa
68 static const DicomTag instanceIdentifiers[] = 68 static const DicomTag instanceIdentifiers[] =
69 { 69 {
70 DICOM_TAG_SOP_INSTANCE_UID 70 DICOM_TAG_SOP_INSTANCE_UID
71 }; 71 };
72 72
73 static void LoadIdentifiers(const DicomTag*& tags, 73
74 size_t& size, 74 void LookupIdentifierQuery::LoadIdentifiers(const DicomTag*& tags,
75 ResourceType level) 75 size_t& size,
76 ResourceType level)
76 { 77 {
77 switch (level) 78 switch (level)
78 { 79 {
79 case ResourceType_Patient: 80 case ResourceType_Patient:
80 tags = patientIdentifiers; 81 tags = patientIdentifiers;
100 throw OrthancException(ErrorCode_ParameterOutOfRange); 101 throw OrthancException(ErrorCode_ParameterOutOfRange);
101 } 102 }
102 } 103 }
103 104
104 105
105 LookupIdentifierQuery::Union::~Union() 106 LookupIdentifierQuery::Disjunction::~Disjunction()
106 { 107 {
107 for (size_t i = 0; i < union_.size(); i++) 108 for (size_t i = 0; i < disjunction_.size(); i++)
108 { 109 {
109 delete union_[i]; 110 delete disjunction_[i];
110 } 111 }
111 } 112 }
112 113
113 114
114 void LookupIdentifierQuery::Union::Add(const Constraint& constraint) 115 void LookupIdentifierQuery::Disjunction::Add(const DicomTag& tag,
115 { 116 IdentifierConstraintType type,
116 union_.push_back(new Constraint(constraint)); 117 const std::string& value)
118 {
119 disjunction_.push_back(new Constraint(tag, type, value));
117 } 120 }
118 121
119 122
120 LookupIdentifierQuery::~LookupIdentifierQuery() 123 LookupIdentifierQuery::~LookupIdentifierQuery()
121 { 124 {
151 void LookupIdentifierQuery::AddConstraint(DicomTag tag, 154 void LookupIdentifierQuery::AddConstraint(DicomTag tag,
152 IdentifierConstraintType type, 155 IdentifierConstraintType type,
153 const std::string& value) 156 const std::string& value)
154 { 157 {
155 assert(IsIdentifier(tag)); 158 assert(IsIdentifier(tag));
156 159 constraints_.back()->Add(tag, type, value);
157 Constraint constraint(tag, type, NormalizeIdentifier(value)); 160 }
158 constraints_.push_back(new Union); 161
159 constraints_.back()->Add(constraint); 162
160 } 163 LookupIdentifierQuery::Disjunction& LookupIdentifierQuery::AddDisjunction()
161 164 {
162 165 constraints_.push_back(new Disjunction);
163 void LookupIdentifierQuery::AddDisjunction(const std::list<Constraint>& constraints) 166 return *constraints_.back();
164 {
165 constraints_.push_back(new Union);
166
167 for (std::list<Constraint>::const_iterator
168 it = constraints.begin(); it != constraints.end(); ++it)
169 {
170 assert(IsIdentifier(it->GetTag()));
171 constraints_.back()->Add(*it);
172 }
173 } 167 }
174 168
175 169
176 std::string LookupIdentifierQuery::NormalizeIdentifier(const std::string& value) 170 std::string LookupIdentifierQuery::NormalizeIdentifier(const std::string& value)
177 { 171 {