comparison OrthancServer/Sources/Search/DatabaseConstraint.cpp @ 5809:023a99146dd0 attach-custom-data

merged find-refactoring -> attach-custom-data
author Alain Mazy <am@orthanc.team>
date Tue, 24 Sep 2024 12:53:43 +0200
parents e2771185dad6
children
comparison
equal deleted inserted replaced
5808:63c025cf6958 5809:023a99146dd0
19 * You should have received a copy of the GNU General Public License 19 * You should have received a copy of the GNU General Public License
20 * along with this program. If not, see <http://www.gnu.org/licenses/>. 20 * along with this program. If not, see <http://www.gnu.org/licenses/>.
21 **/ 21 **/
22 22
23 23
24 #if !defined(ORTHANC_BUILDING_SERVER_LIBRARY) 24 #include "../PrecompiledHeadersServer.h"
25 # error Macro ORTHANC_BUILDING_SERVER_LIBRARY must be defined 25 #include "DatabaseConstraint.h"
26
27 #include "../../../OrthancFramework/Sources/OrthancException.h"
28
29 #if ORTHANC_ENABLE_PLUGINS == 1
30 # include "../../Plugins/Engine/PluginsEnumerations.h"
26 #endif 31 #endif
27 32
28 #if ORTHANC_BUILDING_SERVER_LIBRARY == 1 33 #include <boost/lexical_cast.hpp>
29 # include "../PrecompiledHeadersServer.h"
30 #endif
31
32 #include "DatabaseConstraint.h"
33
34 #if ORTHANC_BUILDING_SERVER_LIBRARY == 1
35 # include "../../../OrthancFramework/Sources/OrthancException.h"
36 #else
37 # include <OrthancException.h>
38 #endif
39
40 #include <cassert> 34 #include <cassert>
41 35
42 36
43 namespace Orthanc 37 namespace Orthanc
44 { 38 {
45 namespace Plugins
46 {
47 #if ORTHANC_ENABLE_PLUGINS == 1
48 OrthancPluginResourceType Convert(ResourceType type)
49 {
50 switch (type)
51 {
52 case ResourceType_Patient:
53 return OrthancPluginResourceType_Patient;
54
55 case ResourceType_Study:
56 return OrthancPluginResourceType_Study;
57
58 case ResourceType_Series:
59 return OrthancPluginResourceType_Series;
60
61 case ResourceType_Instance:
62 return OrthancPluginResourceType_Instance;
63
64 default:
65 throw OrthancException(ErrorCode_ParameterOutOfRange);
66 }
67 }
68 #endif
69
70
71 #if ORTHANC_ENABLE_PLUGINS == 1
72 ResourceType Convert(OrthancPluginResourceType type)
73 {
74 switch (type)
75 {
76 case OrthancPluginResourceType_Patient:
77 return ResourceType_Patient;
78
79 case OrthancPluginResourceType_Study:
80 return ResourceType_Study;
81
82 case OrthancPluginResourceType_Series:
83 return ResourceType_Series;
84
85 case OrthancPluginResourceType_Instance:
86 return ResourceType_Instance;
87
88 default:
89 throw OrthancException(ErrorCode_ParameterOutOfRange);
90 }
91 }
92 #endif
93
94
95 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1
96 OrthancPluginConstraintType Convert(ConstraintType constraint)
97 {
98 switch (constraint)
99 {
100 case ConstraintType_Equal:
101 return OrthancPluginConstraintType_Equal;
102
103 case ConstraintType_GreaterOrEqual:
104 return OrthancPluginConstraintType_GreaterOrEqual;
105
106 case ConstraintType_SmallerOrEqual:
107 return OrthancPluginConstraintType_SmallerOrEqual;
108
109 case ConstraintType_Wildcard:
110 return OrthancPluginConstraintType_Wildcard;
111
112 case ConstraintType_List:
113 return OrthancPluginConstraintType_List;
114
115 default:
116 throw OrthancException(ErrorCode_ParameterOutOfRange);
117 }
118 }
119 #endif
120
121
122 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1
123 ConstraintType Convert(OrthancPluginConstraintType constraint)
124 {
125 switch (constraint)
126 {
127 case OrthancPluginConstraintType_Equal:
128 return ConstraintType_Equal;
129
130 case OrthancPluginConstraintType_GreaterOrEqual:
131 return ConstraintType_GreaterOrEqual;
132
133 case OrthancPluginConstraintType_SmallerOrEqual:
134 return ConstraintType_SmallerOrEqual;
135
136 case OrthancPluginConstraintType_Wildcard:
137 return ConstraintType_Wildcard;
138
139 case OrthancPluginConstraintType_List:
140 return ConstraintType_List;
141
142 default:
143 throw OrthancException(ErrorCode_ParameterOutOfRange);
144 }
145 }
146 #endif
147 }
148
149 DatabaseConstraint::DatabaseConstraint(ResourceType level, 39 DatabaseConstraint::DatabaseConstraint(ResourceType level,
150 const DicomTag& tag, 40 const DicomTag& tag,
151 bool isIdentifier, 41 bool isIdentifier,
152 ConstraintType type, 42 ConstraintType type,
153 const std::vector<std::string>& values, 43 const std::vector<std::string>& values,
167 throw OrthancException(ErrorCode_ParameterOutOfRange); 57 throw OrthancException(ErrorCode_ParameterOutOfRange);
168 } 58 }
169 } 59 }
170 60
171 61
172 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1
173 DatabaseConstraint::DatabaseConstraint(const OrthancPluginDatabaseConstraint& constraint) :
174 level_(Plugins::Convert(constraint.level)),
175 tag_(constraint.tagGroup, constraint.tagElement),
176 isIdentifier_(constraint.isIdentifierTag),
177 constraintType_(Plugins::Convert(constraint.type)),
178 caseSensitive_(constraint.isCaseSensitive),
179 mandatory_(constraint.isMandatory)
180 {
181 if (constraintType_ != ConstraintType_List &&
182 constraint.valuesCount != 1)
183 {
184 throw OrthancException(ErrorCode_ParameterOutOfRange);
185 }
186
187 values_.resize(constraint.valuesCount);
188
189 for (uint32_t i = 0; i < constraint.valuesCount; i++)
190 {
191 assert(constraint.values[i] != NULL);
192 values_[i].assign(constraint.values[i]);
193 }
194 }
195 #endif
196
197
198 const std::string& DatabaseConstraint::GetValue(size_t index) const 62 const std::string& DatabaseConstraint::GetValue(size_t index) const
199 { 63 {
200 if (index >= values_.size()) 64 if (index >= values_.size())
201 { 65 {
202 throw OrthancException(ErrorCode_ParameterOutOfRange); 66 throw OrthancException(ErrorCode_ParameterOutOfRange);
219 return values_[0]; 83 return values_[0];
220 } 84 }
221 } 85 }
222 86
223 87
224 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1 88 #if ORTHANC_ENABLE_PLUGINS == 1
225 void DatabaseConstraint::EncodeForPlugins(OrthancPluginDatabaseConstraint& constraint, 89 void DatabaseConstraint::EncodeForPlugins(OrthancPluginDatabaseConstraint& constraint,
226 std::vector<const char*>& tmpValues) const 90 std::vector<const char*>& tmpValues) const
227 { 91 {
228 memset(&constraint, 0, sizeof(constraint)); 92 memset(&constraint, 0, sizeof(constraint));
229 93
243 constraint.type = Plugins::Convert(constraintType_); 107 constraint.type = Plugins::Convert(constraintType_);
244 constraint.valuesCount = values_.size(); 108 constraint.valuesCount = values_.size();
245 constraint.values = (tmpValues.empty() ? NULL : &tmpValues[0]); 109 constraint.values = (tmpValues.empty() ? NULL : &tmpValues[0]);
246 } 110 }
247 #endif 111 #endif
248
249
250 void DatabaseConstraints::Clear()
251 {
252 for (size_t i = 0; i < constraints_.size(); i++)
253 {
254 assert(constraints_[i] != NULL);
255 delete constraints_[i];
256 }
257
258 constraints_.clear();
259 }
260
261
262 void DatabaseConstraints::AddConstraint(DatabaseConstraint* constraint)
263 {
264 if (constraint == NULL)
265 {
266 throw OrthancException(ErrorCode_NullPointer);
267 }
268 else
269 {
270 constraints_.push_back(constraint);
271 }
272 }
273
274
275 const DatabaseConstraint& DatabaseConstraints::GetConstraint(size_t index) const
276 {
277 if (index >= constraints_.size())
278 {
279 throw OrthancException(ErrorCode_ParameterOutOfRange);
280 }
281 else
282 {
283 assert(constraints_[index] != NULL);
284 return *constraints_[index];
285 }
286 }
287 } 112 }