Line data Source code
1 : //
2 : // DUNE DAQ modification notice:
3 : // This file has been modified from the original ATLAS oks_utils source for the DUNE DAQ project.
4 : // Fork baseline commit: c2e7dfc7 (2022-03-30).
5 : // Renamed since fork: yes (from src/bin/oks_report_no_descriptions.cpp to apps/oks_report_no_descriptions.cxx).
6 : //
7 :
8 : /**
9 : * \file oks_dump.cpp
10 : *
11 : * This file is part of the OKS package.
12 : * https://gitlab.cern.ch/atlas-tdaq-software/oks
13 : *
14 : * Report classes without descriptions.
15 : */
16 :
17 : #include <stdlib.h>
18 :
19 : #include "oks/attribute.hpp"
20 : #include "oks/relationship.hpp"
21 : #include "oks/class.hpp"
22 : #include "oks/kernel.hpp"
23 : #include "oks/file.hpp"
24 : #include "oks/exceptions.hpp"
25 :
26 : using namespace dunedaq;
27 : using namespace dunedaq::oks;
28 :
29 : static void
30 0 : printUsage(std::ostream& s)
31 : {
32 0 : s << "Usage: oks_report_bad_classes [--help] database-file [database-file(s)]\n"
33 : "\n"
34 : "Options:\n"
35 : " -h | --help print this text\n"
36 : "\n"
37 : "Description:\n"
38 : " Report classes, attributes and relationships without description.\n"
39 0 : "\n";
40 0 : }
41 :
42 : static void
43 0 : report_class(const OksClass * c, bool no_description)
44 : {
45 0 : std::cout << " * class \"" << c->get_name() << '\"';
46 :
47 0 : if (no_description)
48 0 : std::cout << " has no description";
49 :
50 0 : std::cout << " (from \"" << c->get_file()->get_short_file_name() << "\")\n";
51 0 : }
52 :
53 : int
54 0 : main(int argc, char **argv)
55 : {
56 0 : OksKernel kernel;
57 0 : kernel.set_silence_mode(true);
58 :
59 0 : try
60 : {
61 0 : for (int i = 1; i < argc; i++)
62 : {
63 0 : const char *cp = argv[i];
64 :
65 0 : if (!strcmp(cp, "-h") || !strcmp(cp, "--help"))
66 : {
67 0 : printUsage(std::cout);
68 : return EXIT_SUCCESS;
69 : }
70 : else
71 : {
72 0 : if (kernel.load_file(cp) == 0)
73 : {
74 0 : Oks::error_msg("oks_dump") << "\tCan not load file \"" << cp << "\", exiting...\n";
75 : return EXIT_FAILURE;
76 : }
77 : }
78 : }
79 :
80 0 : if (kernel.schema_files().empty())
81 : {
82 0 : Oks::error_msg("oks_dump") << "\tAt least one oks file have to be provided, exiting...\n";
83 : return EXIT_FAILURE;
84 : }
85 : }
86 0 : catch (oks::exception &ex)
87 : {
88 0 : std::cerr << "Caught oks exception:\n" << ex << std::endl;
89 0 : return EXIT_FAILURE;
90 0 : }
91 0 : catch (std::exception &e)
92 : {
93 0 : std::cerr << "Caught standard C++ exception: " << e.what() << std::endl;
94 0 : return EXIT_FAILURE;
95 0 : }
96 0 : catch (...)
97 : {
98 0 : std::cerr << "Caught unknown exception" << std::endl;
99 0 : return EXIT_FAILURE;
100 0 : }
101 :
102 0 : std::cout << "Processed schema files:\n";
103 0 : for (const auto &i : kernel.schema_files())
104 0 : std::cout << i.second->get_short_file_name() << std::endl;
105 :
106 0 : for (const auto i : kernel.classes())
107 : {
108 0 : bool printed(false);
109 :
110 0 : if (i.second->get_description().empty())
111 : {
112 0 : report_class(i.second, true);
113 : printed = true;
114 : }
115 :
116 0 : if (const std::list<OksAttribute*> *attrs = i.second->direct_attributes())
117 0 : for (const auto &j : *attrs)
118 :
119 0 : if (j->get_description().empty())
120 : {
121 0 : if (!printed)
122 : {
123 0 : report_class(i.second, false);
124 : printed = true;
125 : }
126 0 : std::cout << " - attribute \"" << j->get_name() << "\" has no description\n";
127 : }
128 :
129 0 : if (const std::list<OksRelationship*> *rels = i.second->direct_relationships())
130 0 : for (const auto &j : *rels)
131 0 : if (j->get_description().empty())
132 : {
133 0 : if (!printed)
134 : {
135 0 : report_class(i.second, false);
136 : printed = true;
137 : }
138 0 : std::cout << " - relationship \"" << j->get_name() << "\" has no description\n";
139 : }
140 : }
141 :
142 0 : return EXIT_SUCCESS;
143 0 : }
|