92{
93
94
95 const char * db_name = nullptr;
96 const char * object_id = nullptr;
97 const char * query = "";
98 std::string class_name;
99 bool init_children = false;
100
101 for(int i = 1; i < argc; i++) {
102 const char * cp = argv[i];
103 if(!strcmp(cp, "-h") || !strcmp(cp, "--help")) {
105 return 0;
106 }
107 if(!strcmp(cp, "-t") || !strcmp(cp, "--init-children")) {
108 init_children = true;
109 }
110 else if(!strcmp(cp, "-d") || !strcmp(cp, "--data")) {
111 if(++i == argc || argv[i][0] ==
'-') {
no_param(cp); }
else { db_name = argv[i]; }
112 }
113 else if(!strcmp(cp, "-c") || !strcmp(cp, "--class-name")) {
114 if(++i == argc || argv[i][0] ==
'-') {
no_param(cp); }
else { class_name = argv[i]; }
115 }
116 else if(!strcmp(cp, "-i") || !strcmp(cp, "--object-id")) {
117 if(++i == argc || argv[i][0] ==
'-') {
no_param(cp); }
else { object_id = argv[i]; }
118 }
119 else if(!strcmp(cp, "-q") || !strcmp(cp, "--query")) {
120 if(++i == argc || argv[i][0] ==
'-') {
no_param(cp); }
else { query = argv[i]; }
121 }
122 else {
123 std::cerr << "ERROR: bad parameter " << cp << std::endl;
125 return (EXIT_FAILURE);
126 }
127 }
128
129 if(db_name == nullptr) {
130 std::cerr << "ERROR: no database name provided\n";
131 return (EXIT_FAILURE);
132 }
133
134 if(class_name.empty()) {
135 std::cerr << "ERROR: no class name provided\n";
136 return (EXIT_FAILURE);
137 }
138
139 if(*query != 0 && object_id != nullptr) {
140 std::cerr << "ERROR: only one parameter -i or -q can be provided\n";
141 return (EXIT_FAILURE);
142 }
143
144
145std::cout << std::boolalpha;
146
147 try {
149
150 if(!conf.loaded()) {
151 std::cerr << "Can not load database: " << db_name << std::endl;
152 return (EXIT_FAILURE);
153 }
154
155 std::vector< dunedaq::conffwk::ConfigObject > objects;
156
157 if(object_id) {
159 try {
160 conf.get(class_name, object_id, obj, 1);
161 }
163 std::cerr << "Can not get object \'" << object_id << "\' of class \'" << class_name << "\':\n" << ex << std::endl;
164 return (EXIT_FAILURE);
165 }
166 objects.push_back(obj);
167 }
168 else {
169 try {
170 conf.get(class_name, objects, query, 1);
171 }
173 std::cerr << "Can not get objects of class \'" << class_name << "\':\n" << ex << std::endl;
174 return (EXIT_FAILURE);
175 }
176 }
177
178 struct SortByUId {
180 return (o1->
UID() < o2->
UID());
181 };
182 };
183
184 std::set< dunedaq::conffwk::ConfigObject *, SortByUId > sorted_objects;
185
186 for(auto& i : objects)
187 sorted_objects.insert(&i);
188
189 for(auto& i : sorted_objects) {
190 if(class_name == "ActionPlan") {
192 }
193 else if(class_name == "Application") {
195 }
196 else if(class_name == "Connection") {
198 }
199 else if(class_name == "ConnectionService") {
201 }
202 else if(class_name == "ConnectivityService") {
204 }
205 else if(class_name == "DaqApplication") {
207 }
208 else if(class_name == "DaqModule") {
210 }
211 else if(class_name == "DaqModulesGroup") {
213 }
214 else if(class_name == "DaqModulesGroupById") {
216 }
217 else if(class_name == "DaqModulesGroupByType") {
219 }
220 else if(class_name == "DetDataReceiver") {
222 }
223 else if(class_name == "DetDataSender") {
225 }
226 else if(class_name == "DetectorConfig") {
228 }
229 else if(class_name == "DetectorStream") {
231 }
232 else if(class_name == "DetectorToDaqConnection") {
234 }
235 else if(class_name == "DummyApplication") {
237 }
238 else if(class_name == "DummyD2D") {
240 }
241 else if(class_name == "DummyReceiver") {
243 }
244 else if(class_name == "DummyResource") {
246 }
247 else if(class_name == "DummyResourceSet") {
249 }
250 else if(class_name == "DummyResourceSetAND") {
252 }
253 else if(class_name == "DummySender") {
255 }
256 else if(class_name == "DummyStream") {
258 }
259 else if(class_name == "FSMCommand") {
261 }
262 else if(class_name == "FSMaction") {
264 }
265 else if(class_name == "FSMconfiguration") {
267 }
268 else if(class_name == "FSMsequence") {
270 }
271 else if(class_name == "FSMtransition") {
273 }
274 else if(class_name == "FSMxTransition") {
276 }
277 else if(class_name == "GeoId") {
279 }
280 else if(class_name == "HostComponent") {
282 }
283 else if(class_name == "Jsonable") {
285 }
286 else if(class_name == "JsonableTest") {
288 }
289 else if(class_name == "NetworkConnection") {
291 }
292 else if(class_name == "NetworkDevice") {
294 }
295 else if(class_name == "NetworkInterface") {
297 }
298 else if(class_name == "OpMonConf") {
300 }
301 else if(class_name == "OpMonURI") {
303 }
304 else if(class_name == "PhysicalHost") {
306 }
307 else if(class_name == "ProcessingResource") {
309 }
310 else if(class_name == "Queue") {
312 }
313 else if(class_name == "QueueWithSourceId") {
315 }
316 else if(class_name == "RCApplication") {
318 }
319 else if(class_name == "RCBroadcaster") {
321 }
322 else if(class_name == "Resource") {
324 }
325 else if(class_name == "ResourceSet") {
327 }
328 else if(class_name == "ResourceSetDisableAND") {
330 }
331 else if(class_name == "ResourceSetDisableOR") {
333 }
334 else if(class_name == "ResourceTree") {
336 }
337 else if(class_name == "Segment") {
339 }
340 else if(class_name == "Service") {
342 }
343 else if(class_name == "Session") {
345 }
346 else if(class_name == "StorageDevice") {
348 }
349 else if(class_name == "Variable") {
351 }
352 else if(class_name == "VariableBase") {
354 }
355 else if(class_name == "VariableSet") {
357 }
358 else if(class_name == "VirtualHost") {
360 }
361 else {
362 std::cerr << "ERROR: do not know how to dump object of " << class_name << " class\n";
363 return (EXIT_FAILURE);
364 }
365 }
366 }
367 catch (dunedaq::conffwk::Exception & ex) {
368 std::cerr << "Caught " << ex << std::endl;
369 return (EXIT_FAILURE);
370 }
371
372 return 0;
373}
Represents database objects.
const std::string & UID() const noexcept
Return object identity.
Defines base class for cache of template objects.
Try to access non-existent object or class.
static void no_param(const char *s)