85{
86
87
88 const char * db_name = nullptr;
89 const char * object_id = nullptr;
90 const char * query = "";
91 std::string class_name;
92 bool init_children = false;
93
94 for(int i = 1; i < argc; i++) {
95 const char * cp = argv[i];
96 if(!strcmp(cp, "-h") || !strcmp(cp, "--help")) {
98 return 0;
99 }
100 if(!strcmp(cp, "-t") || !strcmp(cp, "--init-children")) {
101 init_children = true;
102 }
103 else if(!strcmp(cp, "-d") || !strcmp(cp, "--data")) {
104 if(++i == argc || argv[i][0] ==
'-') {
no_param(cp); }
else { db_name = argv[i]; }
105 }
106 else if(!strcmp(cp, "-c") || !strcmp(cp, "--class-name")) {
107 if(++i == argc || argv[i][0] ==
'-') {
no_param(cp); }
else { class_name = argv[i]; }
108 }
109 else if(!strcmp(cp, "-i") || !strcmp(cp, "--object-id")) {
110 if(++i == argc || argv[i][0] ==
'-') {
no_param(cp); }
else { object_id = argv[i]; }
111 }
112 else if(!strcmp(cp, "-q") || !strcmp(cp, "--query")) {
113 if(++i == argc || argv[i][0] ==
'-') {
no_param(cp); }
else { query = argv[i]; }
114 }
115 else {
116 std::cerr << "ERROR: bad parameter " << cp << std::endl;
118 return (EXIT_FAILURE);
119 }
120 }
121
122 if(db_name == nullptr) {
123 std::cerr << "ERROR: no database name provided\n";
124 return (EXIT_FAILURE);
125 }
126
127 if(class_name.empty()) {
128 std::cerr << "ERROR: no class name provided\n";
129 return (EXIT_FAILURE);
130 }
131
132 if(*query != 0 && object_id != nullptr) {
133 std::cerr << "ERROR: only one parameter -i or -q can be provided\n";
134 return (EXIT_FAILURE);
135 }
136
137
138std::cout << std::boolalpha;
139
140 try {
142
143 if(!conf.loaded()) {
144 std::cerr << "Can not load database: " << db_name << std::endl;
145 return (EXIT_FAILURE);
146 }
147
148 std::vector< dunedaq::conffwk::ConfigObject > objects;
149
150 if(object_id) {
152 try {
153 conf.get(class_name, object_id, obj, 1);
154 }
156 std::cerr << "Can not get object \'" << object_id << "\' of class \'" << class_name << "\':\n" << ex << std::endl;
157 return (EXIT_FAILURE);
158 }
159 objects.push_back(obj);
160 }
161 else {
162 try {
163 conf.get(class_name, objects, query, 1);
164 }
166 std::cerr << "Can not get objects of class \'" << class_name << "\':\n" << ex << std::endl;
167 return (EXIT_FAILURE);
168 }
169 }
170
171 struct SortByUId {
173 return (o1->
UID() < o2->
UID());
174 };
175 };
176
177 std::set< dunedaq::conffwk::ConfigObject *, SortByUId > sorted_objects;
178
179 for(auto& i : objects)
180 sorted_objects.insert(&i);
181
182 for(auto& i : sorted_objects) {
183 if(class_name == "ActionPlan") {
185 }
186 else if(class_name == "Application") {
188 }
189 else if(class_name == "Component") {
191 }
192 else if(class_name == "Connection") {
194 }
195 else if(class_name == "ConnectionService") {
197 }
198 else if(class_name == "ConnectivityService") {
200 }
201 else if(class_name == "DaqApplication") {
203 }
204 else if(class_name == "DaqModule") {
206 }
207 else if(class_name == "DaqModulesGroup") {
209 }
210 else if(class_name == "DaqModulesGroupById") {
212 }
213 else if(class_name == "DaqModulesGroupByType") {
215 }
216 else if(class_name == "DetDataReceiver") {
218 }
219 else if(class_name == "DetDataSender") {
221 }
222 else if(class_name == "DetectorConfig") {
224 }
225 else if(class_name == "DetectorStream") {
227 }
228 else if(class_name == "DetectorToDaqConnection") {
230 }
231 else if(class_name == "FSMCommand") {
233 }
234 else if(class_name == "FSMaction") {
236 }
237 else if(class_name == "FSMconfiguration") {
239 }
240 else if(class_name == "FSMsequence") {
242 }
243 else if(class_name == "FSMtransition") {
245 }
246 else if(class_name == "FSMxTransition") {
248 }
249 else if(class_name == "GeoId") {
251 }
252 else if(class_name == "HostComponent") {
254 }
255 else if(class_name == "Jsonable") {
257 }
258 else if(class_name == "JsonableTest") {
260 }
261 else if(class_name == "NetworkConnection") {
263 }
264 else if(class_name == "NetworkDevice") {
266 }
267 else if(class_name == "NetworkInterface") {
269 }
270 else if(class_name == "OpMonConf") {
272 }
273 else if(class_name == "OpMonURI") {
275 }
276 else if(class_name == "PhysicalHost") {
278 }
279 else if(class_name == "ProcessingResource") {
281 }
282 else if(class_name == "Queue") {
284 }
285 else if(class_name == "QueueWithSourceId") {
287 }
288 else if(class_name == "RCApplication") {
290 }
291 else if(class_name == "RCBroadcaster") {
293 }
294 else if(class_name == "Resource") {
296 }
297 else if(class_name == "ResourceBase") {
299 }
300 else if(class_name == "ResourceSet") {
302 }
303 else if(class_name == "ResourceSetAND") {
305 }
306 else if(class_name == "ResourceSetOR") {
308 }
309 else if(class_name == "Segment") {
311 }
312 else if(class_name == "Service") {
314 }
315 else if(class_name == "Session") {
317 }
318 else if(class_name == "StorageDevice") {
320 }
321 else if(class_name == "Variable") {
323 }
324 else if(class_name == "VariableBase") {
326 }
327 else if(class_name == "VariableSet") {
329 }
330 else if(class_name == "VirtualHost") {
332 }
333 else {
334 std::cerr << "ERROR: do not know how to dump object of " << class_name << " class\n";
335 return (EXIT_FAILURE);
336 }
337 }
338 }
339 catch (dunedaq::conffwk::Exception & ex) {
340 std::cerr << "Caught " << ex << std::endl;
341 return (EXIT_FAILURE);
342 }
343
344 return 0;
345}
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)