DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
config_ui_info.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 * configuration.cpp
8 *
9 * Created on: Mar 22, 2016
10 * Author: Leonidas Georgopoulos
11 */
12
14#include "dbe/Conversion.hpp"
17#include "dbe/messenger.hpp"
18
21
22#include <QStringList>
23
24#include <map>
25#include <vector>
26
27using namespace dunedaq::conffwk;
28
29dbe::ui::config::info::info(std::vector<std::string> const& full_file_name)
30 : this_full_filenames(full_file_name)
31{
32 parse();
33}
34
36dbe::ui::config::info::graphical(std::string const& name) const
37{
38 std::map<std::string, GraphicalClass>::const_iterator it = this_graphical.find(name);
39
40 if (it != this_graphical.end()) {
41 return it->second;
42 } else {
43 return {};
44 }
45}
46
48dbe::ui::config::info::view(std::string const& name) const
49{
50 std::map<std::string, ViewConfiguration>::const_iterator it = this_views.find(name);
51
52 if (it != this_views.end()) {
53 return it->second;
54 } else {
55 return {};
56 }
57}
58
60dbe::ui::config::info::window(std::string const& name) const
61{
62 std::map<std::string, Window>::const_iterator it = this_windows.find(name);
63
64 if (it != this_windows.end()) {
65 return it->second;
66 } else {
67 return {};
68 }
69}
70
71void
73{
74 for (std::string const& fname : this_full_filenames) {
75 std::string Implementation = "oksconflibs:" + fname;
76
77 try {
78 std::shared_ptr<Configuration> ConfigFile(new Configuration(Implementation));
79 std::vector<ConfigObject> objects;
80
81 ConfigFile->get("Class", objects);
82
83 for (ConfigObject& aclass : objects) {
84 parse_graphical(ConfigFile, aclass);
85 }
86
87 objects.clear();
88 ConfigFile->get("Window", objects);
89
90 for (ConfigObject& awindow : objects) {
91 parse_window(ConfigFile, awindow);
92 }
93 } catch (dunedaq::conffwk::Exception const& ex) {
94 ERROR("Configuration database load did not succeed", dbe::config::errors::parse(ex).c_str());
95 }
96 }
97}
98
99void
100dbe::ui::config::info::parse_graphical(std::shared_ptr<Configuration> ConfigFile, ConfigObject& Object)
101{
102 GraphicalClass GraphicalClassObject;
103
104 GraphicalClassObject.GraphicalUID = QString(Object.UID().c_str());
105 dunedaq::conffwk::class_t cinfo = ConfigFile->get_class_info(Object.class_name(), false);
106
107 std::vector<dunedaq::conffwk::attribute_t> const& attributes = cinfo.p_attributes;
108 std::vector<dunedaq::conffwk::relationship_t> const& relations = cinfo.p_relationships;
109
110 for (dunedaq::conffwk::attribute_t const& attr : attributes) {
111 QStringList data = dbe::config::api::get::direct::attribute<QStringList>(Object, attr);
112
113 if (attr.p_name == "Name") {
114 GraphicalClassObject.DatabaseClassName = data.at(0);
115 } else if (attr.p_name == "Generic Pixmap File") {
116 GraphicalClassObject.GenericPixmapFile = data.at(0);
117 } else if (attr.p_name == "Used Pixmap File") {
118 GraphicalClassObject.UsedPixmapFile = data.at(0);
119 } else if (attr.p_name == "Icon Bitmap File") {
120 GraphicalClassObject.BitmapFile = data.at(0);
121 } else if (attr.p_name == "Icon Mask Bitmap File") {
122 GraphicalClassObject.BitmapMaskFile = data.at(0);
123 } else if (attr.p_name == "Show All Attributes") {
124 GraphicalClassObject.ShowAllAttributes = convert::to<bool>(data, attr.p_int_format);
125 } else if (attr.p_name == "Attributes") {
126 GraphicalClassObject.Attributes = data;
127 } else if (attr.p_name == "Show All Relationships") {
128 GraphicalClassObject.ShowAllRelationships = convert::to<bool>(data, attr.p_int_format);
129 } else if (attr.p_name == "Relationships") {
130 GraphicalClassObject.Relationships = data;
131
132 } else if (attr.p_name == "Icon Title") {
133 GraphicalClassObject.IconTitle = data.at(0);
134 }
135 }
136
137 for (dunedaq::conffwk::relationship_t const& relation : relations) {
138 QStringList data;
139 std::vector<ConfigObject> neighboring{};
140
142 neighboring.push_back(dbe::config::api::graph::direct::linked<ConfigObject>(Object, relation));
143 } else {
144 std::vector<ConfigObject> objects =
146 neighboring.insert(std::end(neighboring), std::begin(objects), std::end(objects));
147 }
148
149 for (ConfigObject& RelObject : neighboring) {
150 dunedaq::conffwk::class_t RelClassInfo = ConfigFile->get_class_info(RelObject.class_name(), false);
151 std::vector<dunedaq::conffwk::attribute_t> AttributeRelList = RelClassInfo.p_attributes;
152
153 if (RelObject.class_name() == "Dual Relationship") {
154 DualRelationship DRel;
155
156 for (dunedaq::conffwk::attribute_t& Attribute : AttributeRelList) {
158
159 if (Attribute.p_name == "Direct") {
160 DRel.Direct = data.at(0);
161 } else if (Attribute.p_name == "Reverse") {
162 DRel.Reverse = data.at(0);
163 }
164 }
165
166 GraphicalClassObject.DualRelationships.push_back(DRel);
167 } else if (RelObject.class_name() == "Init Attribute Value") {
169
170 for (dunedaq::conffwk::attribute_t& Attribute : AttributeRelList) {
172
173 if (Attribute.p_name == "Attribute Name") {
174 IRel.AttributeName = data.at(0);
175 } else if (Attribute.p_name == "Environment Variables") {
176 IRel.EnvNames = data;
177 }
178 }
179
180 GraphicalClassObject.NeedToInitialize.push_back(IRel);
181 }
182 }
183 }
184
185 this_graphical.emplace(GraphicalClassObject.GraphicalUID.toStdString(), GraphicalClassObject);
186}
187
188void
189dbe::ui::config::info::parse_window(std::shared_ptr<Configuration> database, ConfigObject& object)
190{
191 Window WindowObject;
192 dunedaq::conffwk::class_t ClassInfo = database->get_class_info(object.class_name(), false);
193 std::vector<dunedaq::conffwk::attribute_t> const& attributes = ClassInfo.p_attributes;
194 std::vector<dunedaq::conffwk::relationship_t> const& relations = ClassInfo.p_relationships;
195
196 for (dunedaq::conffwk::attribute_t const& attribute : attributes) {
197 if (attribute.p_name == "Title") {
198 WindowObject.Title = dbe::config::api::get::direct::attribute<QStringList>(object, attribute).at(0);
199 }
200 }
201
202 for (dunedaq::conffwk::relationship_t const& relation : relations) {
203 std::vector<ConfigObject> linkedobjects;
204
206 linkedobjects.push_back(dbe::config::api::graph::direct::linked<ConfigObject>(object, relation));
207 } else {
208 std::vector<ConfigObject> voisins =
210
211 if (not voisins.empty()) {
212 linkedobjects.insert(std::end(linkedobjects), std::begin(voisins), std::end(voisins));
213 }
214 }
215
216 for (ConfigObject& neighbor : linkedobjects) {
217 dunedaq::conffwk::class_t classinfo = database->get_class_info(neighbor.class_name(), false);
218 std::vector<dunedaq::conffwk::attribute_t> const& AttributeRelList = classinfo.p_attributes;
219 std::vector<dunedaq::conffwk::relationship_t> const& RelationshipRelList = classinfo.p_relationships;
220
221 if (neighbor.class_name() != "Window Separator") {
222 for (dunedaq::conffwk::attribute_t const& Attribute : AttributeRelList) {
223 if (Attribute.p_name == "Shown with children") {
224 QStringList neighbor_names{ dbe::config::api::get::direct::attribute<QStringList>(neighbor, Attribute) };
225
226 if (neighbor_names.at(0) != "none") {
227 WindowObject.ShowChildren = true;
228 } else {
229 WindowObject.ShowChildren = false;
230 }
231 }
232 }
233
234 for (dunedaq::conffwk::relationship_t const& RelationshipRel : RelationshipRelList) {
235 QStringList RelDataList;
236 std::vector<ConfigObject> neighboring_nodes;
237
238 if (dbe::config::api::info::relation::is_simple(RelationshipRel)) {
239 neighboring_nodes.push_back(
241 } else {
242
243 std::vector<ConfigObject> neighbors =
245
246 neighboring_nodes.insert(std::end(neighboring_nodes), std::begin(neighbors), std::end(neighbors));
247 }
248
249 for (ConfigObject& RelDataObject : neighboring_nodes) {
250 RelDataList.push_back(QString(RelDataObject.UID().c_str()));
251 }
252
253 WindowObject.GraphicalClassesList.push_back(RelDataList.at(0));
254 }
255 }
256 }
257 }
258
259 this_windows.emplace(WindowObject.Title.toStdString(), WindowObject);
260}
261
262std::vector<dbe::Window>
264{
265 std::vector<dbe::Window> windows;
266
267 for (auto const& x : this_windows) {
268 windows.push_back(x.second);
269 }
270
271 return windows;
272}
273
274std::vector<dbe::ViewConfiguration>
276{
277 std::vector<dbe::ViewConfiguration> views;
278
279 for (auto const& x : this_views) {
280 views.push_back(x.second);
281 }
282
283 return views;
284}
285
286std::vector<dbe::GraphicalClass>
288{
289 std::vector<dbe::GraphicalClass> the_graphicals;
290
291 for (auto const& x : this_graphical) {
292 the_graphicals.push_back(x.second);
293 }
294
295 return the_graphicals;
296}
friend class dbe::config::api::get::attribute
static T linked(dunedaq::conffwk::ConfigObject &item, dunedaq::conffwk::relationship_t const &relation)
std::vector< std::string > this_full_filenames
void parse_graphical(std::shared_ptr< dunedaq::conffwk::Configuration >, dunedaq::conffwk::ConfigObject &)
std::vector< Window > windows() const
Window window(std::string const &) const
std::map< std::string, Window > this_windows
std::map< std::string, GraphicalClass > this_graphical
void parse_window(std::shared_ptr< dunedaq::conffwk::Configuration >, dunedaq::conffwk::ConfigObject &)
GraphicalClass graphical(std::string const &) const
std::vector< GraphicalClass > graphicals() const
ViewConfiguration view(std::string const &) const
info(std::vector< std::string > const &file)
std::map< std::string, ViewConfiguration > this_views
std::vector< ViewConfiguration > views() const
Represents database objects.
const std::string & UID() const noexcept
Return object identity.
const std::string & class_name() const noexcept
Return object's class name.
#define ERROR(...)
Definition messenger.hpp:90
bool is_simple(dunedaq::conffwk::relationship_t const &)
std::string const parse(ers::Issue const &)
bool to< bool >(QStringList const &DataList, dunedaq::conffwk::int_format_t Format)
QList< DualRelationship > DualRelationships
QList< InitAttributeFromEnv > NeedToInitialize
QStringList GraphicalClassesList
const std::vector< attribute_t > p_attributes
Definition Schema.hpp:161
const std::vector< relationship_t > p_relationships
Definition Schema.hpp:162