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/Conversion.hpp"
13#include "dbe/Exceptions.hpp"
17#include "dbe/dbaccessor.hpp"
18#include "dbe/messenger.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
40namespace config {
41
42namespace api {
43//------------------------------------------------------------------------------------------
44ConfigObject
45rwdacc::create_object(std::string const& fn, std::string const& cn, std::string const& uid)
46{
47 if (info::onclass::definition(cn, false).p_abstract) {
48 ERROR("Create Object: Was not possible to create object ",
49 "Abstract classes cannot hold objects",
50 uid,
51 "for abstract class",
52 cn);
53
54 throw daq::dbe::ObjectChangeWasNotSuccessful(ERS_HERE);
55 }
56
57 // An empty object, if its creation does not succeed this object will be returned
58 ConfigObject newobj;
59
60 try {
61 dbaccessor::dbptr()->create(fn, cn, uid, newobj);
62 } catch (dunedaq::conffwk::Exception const& ex) {
63 FAIL("Object creation failed", dbe::config::errors::parse(ex), "\n\nObject UID:", uid);
64
65 throw daq::dbe::ObjectChangeWasNotSuccessful(ERS_HERE);
66 }
67
68 return newobj;
69}
70//------------------------------------------------------------------------------------------
71
72//------------------------------------------------------------------------------------------
77template<typename RESTYPE, typename KEYTYPE = std::string>
78using mapreader = std::function<RESTYPE(KEYTYPE const&)>;
79//------------------------------------------------------------------------------------------
80
81//------------------------------------------------------------------------------------------
82tref
86{
87 auto relreader = [&relations](std::string const& name) { return relations.at(name); };
88
89 auto attreader = [&attributes](std::string const& name) { return attributes.at(name); };
90
91 if (not newobj.is_null()) {
92 dunedaq::conffwk::class_t ClassInfo = dbe::config::api::info::onclass::definition(newobj.class_name(), false);
93 std::vector<dunedaq::conffwk::attribute_t> AttList = ClassInfo.p_attributes;
94 std::vector<dunedaq::conffwk::relationship_t> RelList = ClassInfo.p_relationships;
95
96 for (dunedaq::conffwk::attribute_t const& att : AttList) {
97 try {
98 if (att.p_is_multi_value) {
99 switch (att.p_type) {
101 auto data = dbe::convert::to<std::vector<bool>>(dbe::convert::to<QStringList>(attreader(att.p_name)),
102 att.p_int_format);
103 set::noactions::attribute(newobj, att, data, true);
104 } break;
106 auto data =
108 set::noactions::anenum(newobj, att, data, true);
109 } break;
111 auto data =
113 set::noactions::adate(newobj, att, data, true);
114 } break;
116 auto data =
118 set::noactions::atime(newobj, att, data, true);
119 } break;
121 auto data =
123 set::noactions::attribute(newobj, att, data, true);
124 } break;
126 auto data =
128 set::noactions::aclass(newobj, att, data, true);
129 } break;
131 auto data = dbe::convert::to<std::vector<float>>(dbe::convert::to<QStringList>(attreader(att.p_name)),
132 att.p_int_format);
133 set::noactions::attribute(newobj, att, data, true);
134 } break;
137 att.p_int_format);
138 set::noactions::attribute(newobj, att, data, true);
139 } break;
142 att.p_int_format);
143 set::noactions::attribute(newobj, att, data, true);
144 } break;
147 att.p_int_format);
148 set::noactions::attribute(newobj, att, data, true);
149 } break;
152 att.p_int_format);
153 set::noactions::attribute(newobj, att, data, true);
154 } break;
157 att.p_int_format);
158 set::noactions::attribute(newobj, att, data, true);
159 } break;
162 att.p_int_format);
163 set::noactions::attribute(newobj, att, data, true);
164 } break;
167 att.p_int_format);
168 set::noactions::attribute(newobj, att, data, true);
169 } break;
172 att.p_int_format);
173 set::noactions::attribute(newobj, att, data, true);
174 } break;
177 att.p_int_format);
178 set::noactions::attribute(newobj, att, data, true);
179 } break;
180 default:
181 break;
182 }
183 } else {
184 switch (att.p_type) {
186 auto data =
187 dbe::convert::to<bool>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
188 set::noactions::attribute(newobj, att, data, true);
189 } break;
191 auto data = dbe::convert::to<std::string>(dbe::convert::to<QStringList>(attreader(att.p_name)));
192 set::noactions::anenum(newobj, att, data, true);
193 } break;
195 auto data = dbe::convert::to<std::string>(dbe::convert::to<QStringList>(attreader(att.p_name)));
196 set::noactions::adate(newobj, att, data, true);
197 } break;
199 auto data = dbe::convert::to<std::string>(dbe::convert::to<QStringList>(attreader(att.p_name)));
200 set::noactions::atime(newobj, att, data, true);
201 } break;
203 auto data = dbe::convert::to<std::string>(dbe::convert::to<QStringList>(attreader(att.p_name)));
204 set::noactions::attribute(newobj, att, data, true);
205 } break;
207 auto data = dbe::convert::to<std::string>(dbe::convert::to<QStringList>(attreader(att.p_name)));
208 set::noactions::aclass(newobj, att, data, true);
209 } break;
211 auto data =
212 dbe::convert::to<float>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
213 set::noactions::attribute(newobj, att, data, true);
214 } break;
216 auto data =
217 dbe::convert::to<double>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
218 set::noactions::attribute(newobj, att, data, true);
219 } break;
221 auto data =
222 dbe::convert::to<int8_t>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
223 set::noactions::attribute(newobj, att, data, true);
224 } break;
226 auto data =
227 dbe::convert::to<int16_t>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
228 set::noactions::attribute(newobj, att, data, true);
229 } break;
231 auto data =
232 dbe::convert::to<int32_t>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
233 set::noactions::attribute(newobj, att, data, true);
234 } break;
236 auto data =
237 dbe::convert::to<int64_t>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
238 set::noactions::attribute(newobj, att, data, true);
239 } break;
241 auto data =
242 dbe::convert::to<u_int8_t>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
243 set::noactions::attribute(newobj, att, data, true);
244 } break;
246 auto data =
247 dbe::convert::to<u_int16_t>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
248 set::noactions::attribute(newobj, att, data, true);
249 } break;
251 auto data =
252 dbe::convert::to<u_int32_t>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
253 set::noactions::attribute(newobj, att, data, true);
254 } break;
256 auto data =
257 dbe::convert::to<u_int64_t>(dbe::convert::to<QStringList>(attreader(att.p_name)), att.p_int_format);
258 set::noactions::attribute(newobj, att, data, true);
259 } break;
260 default:
261 break;
262 }
263 }
264 } catch (std::out_of_range const& e) {
265 // nothing to do just ignore this , it might be the case that the attribute was not defined
266 }
267 }
268
269 for (dunedaq::conffwk::relationship_t const& rel : RelList) {
270 try {
271 auto data = relreader(rel.p_name);
272 set::noactions::relation(newobj, rel, data);
273 } catch (std::out_of_range const& e) {
274 // nothing to do just ignore this , it might be the case that the relation was not defined
275 }
276 }
277 }
278
279 return newobj;
280}
281//------------------------------------------------------------------------------------------
282
283//------------------------------------------------------------------------------------------
284void
286{
287 try {
288 dbaccessor::dbptr()->destroy_obj(todelete);
289 } catch (dunedaq::conffwk::Exception const& ex) {
290 WARN("Object deletion did not succeed for object", errors::parse(ex).c_str(), todelete.UID().c_str());
291
292 throw daq::dbe::ObjectChangeWasNotSuccessful(ERS_HERE);
293 }
294}
295//------------------------------------------------------------------------------------------
296
297//------------------------------------------------------------------------------------------
299rwdacc::get_object(std::string const& classname, std::string const& objectname)
300{
301 if (dbaccessor::is_loaded()) {
302 try {
303 ConfigObject object;
304 dbaccessor::dbptr()->get(classname, objectname, object);
305 return object;
306 } catch (dunedaq::conffwk::NotFound const& e) {
307 TLOG_DEBUG(3) << "Object not found";
308 } catch (dunedaq::conffwk::Generic const& e) {
309 ERROR("Generic exception caught", dbe::config::errors::parse(e).c_str());
310 TLOG_DEBUG(3) << "Generic Exception Caught";
311 } catch (...) {
312 ERROR("Unknown exception caught", "");
313 TLOG_DEBUG(3) << "Unknown exception caught!";
314 }
315 }
316 return {};
317}
318//------------------------------------------------------------------------------------------
319
320//------------------------------------------------------------------------------------------
321std::vector<ConfigObject>
322rwdacc::query_class(std::string const& classname, std::string const& query)
323{
324 std::vector<ConfigObject> objects;
325 if (dbaccessor::is_loaded()) {
326 try {
327 dbaccessor::dbptr()->get(classname, objects, query);
328 } catch (dunedaq::conffwk::NotFound const& e) {
329 TLOG_DEBUG(3) << "Object not found";
330 } catch (dunedaq::conffwk::Generic const& e) {
331 ERROR("Generic exception caught", dbe::config::errors::parse(e).c_str());
332 TLOG_DEBUG(3) << "Generic Exception Caught";
333 } catch (...) {
334 ERROR("Unknown exception caught", "");
335 TLOG_DEBUG(3) << "Unknown exception caught!";
336 }
337 }
338 return objects;
339}
340//------------------------------------------------------------------------------------------
341
342//------------------------------------------------------------------------------------------
343void
344rwdacc::rename_object(ConfigObject& object, std::string const& newname)
345{
346 object.rename(newname);
347}
348//------------------------------------------------------------------------------------------
349
350} // namespace api
351
352} // namespace config
353
354} // namespace dbe
#define ERS_HERE
T * get()
Definition cptr.hpp:87
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:83
static void destroy_object(dunedaq::conffwk::ConfigObject &)
Definition rwdacc.cpp:285
static dunedaq::conffwk::ConfigObject get_object(std::string const &, std::string const &)
Definition rwdacc.cpp:299
static std::vector< dunedaq::conffwk::ConfigObject > query_class(std::string const &classname, std::string const &query)
Definition rwdacc.cpp:322
static dunedaq::conffwk::ConfigObject create_object(std::string const &fn, std::string const &cn, std::string const &name)
Definition rwdacc.cpp:45
static void rename_object(dunedaq::conffwk::ConfigObject &object, std::string const &newname)
Definition rwdacc.cpp:344
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:116
#define ERROR(...)
Definition messenger.hpp:90
#define WARN(...)
Definition messenger.hpp:82
#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:78
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:36
const std::vector< attribute_t > p_attributes
Definition Schema.hpp:161
const std::vector< relationship_t > p_relationships
Definition Schema.hpp:162