DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
rwdacc.cpp
Go to the documentation of this file.
1// DUNE DAQ modification notice:
2// This file has been modified from the original ATLAS dbe source for the DUNE DAQ project.
3// Fork baseline commit: dbe-02-12-17 (2022-05-12).
4// Renamed since fork: no.
5
6/************************************************************
7 * rwdacc.cpp
8 *
9 * Created on: Feb 4, 2016
10 * Author: Leonidas Georgopoulos
11 ************************************************************/
12#include "dbe/dbaccessor.hpp"
15#include "dbe/Exceptions.hpp"
16#include "dbe/messenger.hpp"
18#include "dbe/Conversion.hpp"
19
22#include "conffwk/Errors.hpp"
23#include "conffwk/Schema.hpp"
24#include "ers/LocalContext.hpp"
25#include "logging/Logging.hpp"
26
27#include <QString>
28#include <QStringList>
29
30#include <functional>
31#include <map>
32#include <stdexcept>
33#include <string>
34#include <vector>
35
36using namespace dunedaq::conffwk;
37
38namespace dbe
39{
40
41namespace config
42{
43
44namespace api
45{
46//------------------------------------------------------------------------------------------
47ConfigObject rwdacc::create_object(std::string const & fn, std::string const & cn,
48 std::string const & uid)
49{
50 if (info::onclass::definition(cn, false).p_abstract)
51 {
52 ERROR("Create Object: Was not possible to create object ",
53 "Abstract classes cannot hold objects", uid, "for abstract class" , cn);
54
55 throw daq::dbe::ObjectChangeWasNotSuccessful(ERS_HERE);
56 }
57
58 // An empty object, if its creation does not succeed this object will be returned
59 ConfigObject newobj;
60
61 try
62 {
63 dbaccessor::dbptr()->create(fn, cn, uid,newobj);
64 }
65 catch (dunedaq::conffwk::Exception const & ex)
66 {
67 FAIL ( "Object creation failed", dbe::config::errors::parse ( ex ), "\n\nObject UID:",
68 uid );
69
70 throw daq::dbe::ObjectChangeWasNotSuccessful(ERS_HERE);
71 }
72
73 return newobj;
74
75}
76//------------------------------------------------------------------------------------------
77
78//------------------------------------------------------------------------------------------
83template<typename RESTYPE, typename KEYTYPE = std::string>
84using mapreader = std::function< RESTYPE (KEYTYPE const &) >;
85//------------------------------------------------------------------------------------------
86
87//------------------------------------------------------------------------------------------
91{
92 auto relreader = [&relations ]( std::string const & name )
93 {
94 return relations.at(name);
95 };
96
97 auto attreader = [ & attributes ] ( std::string const & name )
98 {
99 return attributes.at(name);
100 };
101
102 if (not newobj.is_null())
103 {
105 newobj.class_name(),
106 false);
107 std::vector<dunedaq::conffwk::attribute_t> AttList = ClassInfo.p_attributes;
108 std::vector<dunedaq::conffwk::relationship_t> RelList = ClassInfo.p_relationships;
109
110 for (dunedaq::conffwk::attribute_t const & att : AttList)
111 {
112 try
113 {
114 if(att.p_is_multi_value) {
115 switch(att.p_type) {
117 {
118 auto data = dbe::convert::to<std::vector<bool>>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
119 set::noactions::attribute(newobj, att, data, true);
120 }
121 break;
123 {
125 set::noactions::anenum(newobj, att, data, true);
126 }
127 break;
129 {
131 set::noactions::adate(newobj, att, data, true);
132 }
133 break;
135 {
137 set::noactions::atime(newobj, att, data, true);
138 }
139 break;
141 {
143 set::noactions::attribute(newobj, att, data, true);
144 }
145 break;
147 {
149 set::noactions::aclass(newobj, att, data, true);
150 }
151 break;
153 {
154 auto data = dbe::convert::to<std::vector<float>>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
155 set::noactions::attribute(newobj, att, data, true);
156 }
157 break;
159 {
160 auto data = dbe::convert::to<std::vector<double>>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
161 set::noactions::attribute(newobj, att, data, true);
162 }
163 break;
165 {
166 auto data = dbe::convert::to<std::vector<int8_t>>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
167 set::noactions::attribute(newobj, att, data, true);
168 }
169 break;
171 {
172 auto data = dbe::convert::to<std::vector<int16_t>>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
173 set::noactions::attribute(newobj, att, data, true);
174 }
175 break;
177 {
178 auto data = dbe::convert::to<std::vector<int32_t>>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
179 set::noactions::attribute(newobj, att, data, true);
180 }
181 break;
183 {
184 auto data = dbe::convert::to<std::vector<int64_t>>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
185 set::noactions::attribute(newobj, att, data, true);
186 }
187 break;
189 {
190 auto data = dbe::convert::to<std::vector<u_int8_t>>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
191 set::noactions::attribute(newobj, att, data, true);
192 }
193 break;
195 {
196 auto data = dbe::convert::to<std::vector<u_int16_t>>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
197 set::noactions::attribute(newobj, att, data, true);
198 }
199 break;
201 {
202 auto data = dbe::convert::to<std::vector<u_int32_t>>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
203 set::noactions::attribute(newobj, att, data, true);
204 }
205 break;
207 {
208 auto data = dbe::convert::to<std::vector<u_int64_t>>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
209 set::noactions::attribute(newobj, att, data, true);
210 }
211 break;
212 default:
213 break;
214 }
215 } else {
216 switch(att.p_type) {
218 {
219 auto data = dbe::convert::to<bool>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
220 set::noactions::attribute(newobj, att, data, true);
221 }
222 break;
224 {
225 auto data = dbe::convert::to<std::string>(dbe::convert::to<QStringList>(attreader(att.p_name)));
226 set::noactions::anenum(newobj, att, data, true);
227 }
228 break;
230 {
231 auto data = dbe::convert::to<std::string>(dbe::convert::to<QStringList>(attreader(att.p_name)));
232 set::noactions::adate(newobj, att, data, true);
233 }
234 break;
236 {
237 auto data = dbe::convert::to<std::string>(dbe::convert::to<QStringList>(attreader(att.p_name)));
238 set::noactions::atime(newobj, att, data, true);
239 }
240 break;
242 {
243 auto data = dbe::convert::to<std::string>(dbe::convert::to<QStringList>(attreader(att.p_name)));
244 set::noactions::attribute(newobj, att, data, true);
245 }
246 break;
248 {
249 auto data = dbe::convert::to<std::string>(dbe::convert::to<QStringList>(attreader(att.p_name)));
250 set::noactions::aclass(newobj, att, data, true);
251 }
252 break;
254 {
255 auto data = dbe::convert::to<float>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
256 set::noactions::attribute(newobj, att, data, true);
257 }
258 break;
260 {
261 auto data = dbe::convert::to<double>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
262 set::noactions::attribute(newobj, att, data, true);
263 }
264 break;
266 {
267 auto data = dbe::convert::to<int8_t>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
268 set::noactions::attribute(newobj, att, data, true);
269 }
270 break;
272 {
273 auto data = dbe::convert::to<int16_t>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
274 set::noactions::attribute(newobj, att, data, true);
275 }
276 break;
278 {
279 auto data = dbe::convert::to<int32_t>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
280 set::noactions::attribute(newobj, att, data, true);
281 }
282 break;
284 {
285 auto data = dbe::convert::to<int64_t>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
286 set::noactions::attribute(newobj, att, data, true);
287 }
288 break;
290 {
291 auto data = dbe::convert::to<u_int8_t>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
292 set::noactions::attribute(newobj, att, data, true);
293 }
294 break;
296 {
297 auto data = dbe::convert::to<u_int16_t>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
298 set::noactions::attribute(newobj, att, data, true);
299 }
300 break;
302 {
303 auto data = dbe::convert::to<u_int32_t>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
304 set::noactions::attribute(newobj, att, data, true);
305 }
306 break;
308 {
309 auto data = dbe::convert::to<u_int64_t>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
310 set::noactions::attribute(newobj, att, data, true);
311 }
312 break;
313 default:
314 break;
315 }
316 }
317 }
318 catch (std::out_of_range const & e)
319 {
320 // nothing to do just ignore this , it might be the case that the attribute was not defined
321 }
322 }
323
324 for (dunedaq::conffwk::relationship_t const & rel : RelList)
325 {
326 try
327 {
328 auto data = relreader(rel.p_name);
329 set::noactions::relation(newobj, rel, data);
330 }
331 catch (std::out_of_range const & e)
332 {
333 // nothing to do just ignore this , it might be the case that the relation was not defined
334 }
335 }
336 }
337
338 return newobj;
339}
340//------------------------------------------------------------------------------------------
341
342//------------------------------------------------------------------------------------------
344{
345 try
346 {
347 dbaccessor::dbptr()->destroy_obj(todelete);
348 }
349 catch (dunedaq::conffwk::Exception const & ex)
350 {
351 WARN("Object deletion did not succeed for object" , errors::parse(ex).c_str(),
352 todelete.UID().c_str());
353
354 throw daq::dbe::ObjectChangeWasNotSuccessful(ERS_HERE);
355 }
356}
357//------------------------------------------------------------------------------------------
358
359//------------------------------------------------------------------------------------------
361 std::string const & objectname)
362{
364 {
365 try
366 {
367 ConfigObject object;
368 dbaccessor::dbptr()->get(classname, objectname, object);
369 return object;
370 }
371 catch (dunedaq::conffwk::NotFound const & e)
372 {
373 TLOG_DEBUG(3) << "Object not found" ;
374 }
375 catch (dunedaq::conffwk::Generic const & e)
376 {
377 ERROR("Generic exception caught", dbe::config::errors::parse(e).c_str());
378 TLOG_DEBUG(3) << "Generic Exception Caught" ;
379 }
380 catch (...)
381 {
382 ERROR("Unknown exception caught", "");
383 TLOG_DEBUG(3) << "Unknown exception caught!" ;
384 }
385 }
386 return
387 {};
388}
389//------------------------------------------------------------------------------------------
390
391//------------------------------------------------------------------------------------------
392std::vector<ConfigObject> rwdacc::query_class(std::string const & classname,
393 std::string const & query)
394{
395 std::vector<ConfigObject> objects;
397 {
398 try
399 {
400 dbaccessor::dbptr()->get(classname, objects, query);
401 }
402 catch (dunedaq::conffwk::NotFound const & e)
403 {
404 TLOG_DEBUG(3) << "Object not found" ;
405 }
406 catch (dunedaq::conffwk::Generic const & e)
407 {
408 ERROR("Generic exception caught", dbe::config::errors::parse(e).c_str());
409 TLOG_DEBUG(3) << "Generic Exception Caught" ;
410 }
411 catch (...)
412 {
413 ERROR("Unknown exception caught", "");
414 TLOG_DEBUG(3) << "Unknown exception caught!" ;
415 }
416 }
417 return objects;
418}
419//------------------------------------------------------------------------------------------
420
421//------------------------------------------------------------------------------------------
422void rwdacc::rename_object(ConfigObject & object, std::string const & newname)
423{
424object.rename(newname);
425}
426//------------------------------------------------------------------------------------------
427
428}// namespace api
429
430} // namespace config
431
432} // namespace dbe
#define ERS_HERE
T * get()
Definition cptr.hpp:88
static dunedaq::conffwk::class_t definition(std::string const &cn, bool direct_only)
static tref set_object(tref newobj, dbe::t_config_object_preimage::type_attrmap const &attributes, dbe::t_config_object_preimage::type_relmap const &relations)
Definition rwdacc.cpp:88
static void destroy_object(dunedaq::conffwk::ConfigObject &)
Definition rwdacc.cpp:343
static dunedaq::conffwk::ConfigObject get_object(std::string const &, std::string const &)
Definition rwdacc.cpp:360
static std::vector< dunedaq::conffwk::ConfigObject > query_class(std::string const &classname, std::string const &query)
Definition rwdacc.cpp:392
static dunedaq::conffwk::ConfigObject create_object(std::string const &fn, std::string const &cn, std::string const &name)
Definition rwdacc.cpp:47
static void rename_object(dunedaq::conffwk::ConfigObject &object, std::string const &newname)
Definition rwdacc.cpp:422
static cptr< dunedaq::conffwk::Configuration > dbptr()
static bool is_loaded()
Represents database objects.
const std::string & UID() const noexcept
Return object identity.
void rename(const std::string &new_id)
Rename object.
conffwk entry point
#define TLOG_DEBUG(lvl,...)
Definition Logging.hpp:112
#define ERROR(...)
Definition messenger.hpp:93
#define WARN(...)
Definition messenger.hpp:85
#define FAIL(...)
void adate(inner::configobject::tref Object, dunedaq::conffwk::attribute_t const &AttributeData, T NewValueData, bool NotEmit=false)
void relation(dbe::inner::configobject::tref src, dunedaq::conffwk::relationship_t const &edge, std::vector< dbe::inner::configobject::tref > const &targets)
void aclass(inner::configobject::tref Object, dunedaq::conffwk::attribute_t const &AttributeData, T NewValueData, bool NotEmit=false)
void anenum(inner::configobject::tref Object, dunedaq::conffwk::attribute_t const &AttributeData, T NewValueData, bool NotEmit=false)
void atime(inner::configobject::tref Object, dunedaq::conffwk::attribute_t const &AttributeData, T NewValueData, bool NotEmit=false)
void attribute(inner::configobject::tref Object, dunedaq::conffwk::attribute_t const &AttributeData, T NewValueData, bool NotEmit=false)
std::function< RESTYPE(KEYTYPE const &) > mapreader
Definition rwdacc.cpp:84
std::string const parse(ers::Issue const &)
int8_t to< int8_t >(QStringList const &DataList, dunedaq::conffwk::int_format_t Format)
u_int64_t to< u_int64_t >(QStringList const &DataList, dunedaq::conffwk::int_format_t Format)
int16_t to< int16_t >(QStringList const &DataList, dunedaq::conffwk::int_format_t Format)
u_int8_t to< u_int8_t >(QStringList const &DataList, dunedaq::conffwk::int_format_t Format)
int64_t to< int64_t >(QStringList const &DataList, dunedaq::conffwk::int_format_t Format)
T to(QStringList const &DataList)
QStringList to< QStringList >(std::vector< std::string > const &x)
std::string to< std::string >(QStringList const &DataList)
int32_t to< int32_t >(QStringList const &DataList, dunedaq::conffwk::int_format_t Format)
u_int32_t to< u_int32_t >(QStringList const &DataList, dunedaq::conffwk::int_format_t Format)
double to< double >(QStringList const &DataList, dunedaq::conffwk::int_format_t Format)
u_int16_t to< u_int16_t >(QStringList const &DataList, dunedaq::conffwk::int_format_t Format)
float to< float >(QStringList const &DataList, dunedaq::conffwk::int_format_t Format)
bool to< bool >(QStringList const &DataList, dunedaq::conffwk::int_format_t Format)
Include QT Headers.
inner::configobject::tref tref
Definition tref.hpp:35
const std::vector< attribute_t > p_attributes
Definition Schema.hpp:170
const std::vector< relationship_t > p_relationships
Definition Schema.hpp:171