93{
94
95
96 const char * db_name = nullptr;
97 const char * object_id = nullptr;
98 const char * query = "";
99 std::string class_name;
100 bool init_children = false;
101
102 for(int i = 1; i < argc; i++) {
103 const char * cp = argv[i];
104 if(!strcmp(cp, "-h") || !strcmp(cp, "--help")) {
106 return 0;
107 }
108 if(!strcmp(cp, "-t") || !strcmp(cp, "--init-children")) {
109 init_children = true;
110 }
111 else if(!strcmp(cp, "-d") || !strcmp(cp, "--data")) {
112 if(++i == argc || argv[i][0] ==
'-') {
no_param(cp); }
else { db_name = argv[i]; }
113 }
114 else if(!strcmp(cp, "-c") || !strcmp(cp, "--class-name")) {
115 if(++i == argc || argv[i][0] ==
'-') {
no_param(cp); }
else { class_name = argv[i]; }
116 }
117 else if(!strcmp(cp, "-i") || !strcmp(cp, "--object-id")) {
118 if(++i == argc || argv[i][0] ==
'-') {
no_param(cp); }
else { object_id = argv[i]; }
119 }
120 else if(!strcmp(cp, "-q") || !strcmp(cp, "--query")) {
121 if(++i == argc || argv[i][0] ==
'-') {
no_param(cp); }
else { query = argv[i]; }
122 }
123 else {
124 std::cerr << "ERROR: bad parameter " << cp << std::endl;
126 return (EXIT_FAILURE);
127 }
128 }
129
130 if(db_name == nullptr) {
131 std::cerr << "ERROR: no database name provided\n";
132 return (EXIT_FAILURE);
133 }
134
135 if(class_name.empty()) {
136 std::cerr << "ERROR: no class name provided\n";
137 return (EXIT_FAILURE);
138 }
139
140 if(*query != 0 && object_id != nullptr) {
141 std::cerr << "ERROR: only one parameter -i or -q can be provided\n";
142 return (EXIT_FAILURE);
143 }
144
145
146std::cout << std::boolalpha;
147
148 try {
150
151 if(!conf.loaded()) {
152 std::cerr << "Can not load database: " << db_name << std::endl;
153 return (EXIT_FAILURE);
154 }
155
156 std::vector< dunedaq::conffwk::ConfigObject > objects;
157
158 if(object_id) {
160 try {
161 conf.get(class_name, object_id, obj, 1);
162 }
163 catch (dunedaq::conffwk::NotFound & ex) {
164 std::cerr << "Can not get object \'" << object_id << "\' of class \'" << class_name << "\':\n" << ex << std::endl;
165 return (EXIT_FAILURE);
166 }
167 objects.push_back(obj);
168 }
169 else {
170 try {
171 conf.get(class_name, objects, query, 1);
172 }
173 catch (dunedaq::conffwk::NotFound & ex) {
174 std::cerr << "Can not get objects of class \'" << class_name << "\':\n" << ex << std::endl;
175 return (EXIT_FAILURE);
176 }
177 }
178
179 struct SortByUId {
180 bool operator() (const dunedaq::conffwk::ConfigObject * o1, const dunedaq::conffwk::ConfigObject * o2) const {
181 return (o1->
UID() < o2->
UID());
182 };
183 };
184
185 std::set< dunedaq::conffwk::ConfigObject *, SortByUId > sorted_objects;
186
187 for(auto& i : objects)
188 sorted_objects.insert(&i);
189
190 for(auto& i : sorted_objects) {
191 if(class_name == "ActionPlan") {
193 }
194 else if(class_name == "Application") {
196 }
197 else if(class_name == "Connection") {
199 }
200 else if(class_name == "ConnectionService") {
202 }
203 else if(class_name == "ConnectivityService") {
205 }
206 else if(class_name == "DaqApplication") {
208 }
209 else if(class_name == "DaqModule") {
211 }
212 else if(class_name == "DaqModulesGroup") {
214 }
215 else if(class_name == "DaqModulesGroupById") {
217 }
218 else if(class_name == "DaqModulesGroupByType") {
220 }
221 else if(class_name == "DetDataReceiver") {
223 }
224 else if(class_name == "DetDataSender") {
226 }
227 else if(class_name == "DetectorConfig") {
229 }
230 else if(class_name == "DetectorStream") {
232 }
233 else if(class_name == "DetectorToDaqConnection") {
235 }
236 else if(class_name == "DummyApplication") {
238 }
239 else if(class_name == "DummyD2D") {
241 }
242 else if(class_name == "DummyReceiver") {
244 }
245 else if(class_name == "DummyResource") {
247 }
248 else if(class_name == "DummyResourceSet") {
250 }
251 else if(class_name == "DummyResourceSetAND") {
253 }
254 else if(class_name == "DummySender") {
256 }
257 else if(class_name == "DummySmartResource") {
259 }
260 else if(class_name == "DummyStream") {
262 }
263 else if(class_name == "FSMCommand") {
265 }
266 else if(class_name == "FSMaction") {
268 }
269 else if(class_name == "FSMconfiguration") {
271 }
272 else if(class_name == "FSMsequence") {
274 }
275 else if(class_name == "FSMtransition") {
277 }
278 else if(class_name == "FSMxTransition") {
280 }
281 else if(class_name == "GeoId") {
283 }
284 else if(class_name == "HostComponent") {
286 }
287 else if(class_name == "Jsonable") {
289 }
290 else if(class_name == "JsonableTest") {
292 }
293 else if(class_name == "NetworkConnection") {
295 }
296 else if(class_name == "NetworkDevice") {
298 }
299 else if(class_name == "NetworkInterface") {
301 }
302 else if(class_name == "OpMonConf") {
304 }
305 else if(class_name == "OpMonURI") {
307 }
308 else if(class_name == "PhysicalHost") {
310 }
311 else if(class_name == "ProcessingResource") {
313 }
314 else if(class_name == "Queue") {
316 }
317 else if(class_name == "QueueWithSourceId") {
319 }
320 else if(class_name == "RCApplication") {
322 }
323 else if(class_name == "RCBroadcaster") {
325 }
326 else if(class_name == "Resource") {
328 }
329 else if(class_name == "ResourceSet") {
331 }
332 else if(class_name == "ResourceSetDisableAND") {
334 }
335 else if(class_name == "ResourceSetDisableOR") {
337 }
338 else if(class_name == "ResourceTree") {
340 }
341 else if(class_name == "Segment") {
343 }
344 else if(class_name == "Service") {
346 }
347 else if(class_name == "Session") {
349 }
350 else if(class_name == "StorageDevice") {
352 }
353 else if(class_name == "Variable") {
355 }
356 else if(class_name == "VariableBase") {
358 }
359 else if(class_name == "VariableSet") {
361 }
362 else if(class_name == "VirtualHost") {
364 }
365 else {
366 std::cerr << "ERROR: do not know how to dump object of " << class_name << " class\n";
367 return (EXIT_FAILURE);
368 }
369 }
370 }
371 catch (dunedaq::conffwk::Exception & ex) {
372 std::cerr << "Caught " << ex << std::endl;
373 return (EXIT_FAILURE);
374 }
375
376 return 0;
377}
Represents database objects.
const std::string & UID() const noexcept
Return object identity.
Defines base class for cache of template objects.
static void no_param(const char *s)