14 #include <boost/foreach.hpp>
26 std::string positionalParameter):m_name(commandName),
27 m_options(std::
string(
"Usage: ")+m_name+
28 std::
string(
" [options] ")+positionalParameter
30 m_positionalOptions(),
35 (
"debug",
"switch on debug mode")
36 (
"help,h",
"help message")
38 if(!positionalParameter.empty()) {
40 addOption<std::string>(positionalParameter,
"",positionalParameter);
46 if(m_dbConnection)
delete m_dbConnection;
57 std::vector<edm::ParameterSet> psets;
60 psets.push_back(pSet);
62 m_currentToken = &servToken;
67 parseCommand( argc, argv );
68 if (m_values.count(
"help")) {
72 if(m_options.find_nothrow(
"dictionary",
false)&& m_values.count(
"dictionary")){
73 std::vector<std::string> dictionaries =
74 m_values[
"dictionary"].as<std::vector<std::string> >();
75 if(!dictionaries.empty()){
83 if(m_options.find_nothrow(
"sql",
false) && m_values.count(
"sql")){
85 for(std::set<std::string>::const_iterator iSess = m_dbSessions.begin();
86 iSess != m_dbSessions.end();
99 m_currentToken =
nullptr;
105 addOption<std::string>(
"authPath",
"P",
"path to authentication xml");
106 addOption<std::string>(
"user",
"u",
"user name");
107 addOption<std::string>(
"pass",
"p",
"password");
112 addOption<std::string>(
"connect",
"c",
"connection string (required)");
113 m_dbSessions.insert(
"connect");
120 addOption<std::string>(connectionOptionName,shortName,helpEntry);
121 m_dbSessions.insert(connectionOptionName);
127 addConnectOption(
"logDB",
"l",
"logDB(optional");
132 addOption<std::vector<std::string> >(
"dictionary",
"D",
"data dictionaries (required if no plugin available)");
137 addOption<std::string>(
"configFile",
"f",
"configuration file(optional)");
142 addOption<bool>(
"sql",
"S",
"dump the sql output (optional)");
146 boost::program_options::store(boost::program_options::command_line_parser(argc, argv).
options(m_options).positional(m_positionalOptions).
run(), m_values);
147 if(m_options.find_nothrow(
"configFile",
false)){
148 std::string configFileName = getValueIfExists(
"configFile");
149 if (! configFileName.empty()){
152 boost::program_options::store(boost::program_options::parse_config_file(configFile,m_options), m_values);
156 boost::program_options::notify(m_values);
160 return getOptionValue<std::string>(
"authPath");
164 return getOptionValue<std::string>(
"user");
168 return getOptionValue<std::string>(
"pass");
172 return getOptionValue<std::string>(
"connect");
176 return getOptionValue<std::string>(
"logDB");
180 return getOptionValue<std::string>(
"dictionary");
184 return getOptionValue<std::string>(
"configFile");
189 const void*
found = m_options.find_nothrow(fullName,
false);
192 message <<
"Utilities::hasOptionValue: option \"" << fullName <<
"\" is not known by the command.";
193 sendException(message.str());
195 return m_values.count(fullName);
199 return m_values.count(
"debug");
210 m_dbConnection->configuration().setMessageLevel(
coral::Debug);
212 m_dbConnection->configuration().setMessageLevel(coral::Error);
214 m_dbConnection->configuration().setPoolAutomaticCleanUp(
false );
215 m_dbConnection->configuration().setConnectionTimeOut(0);
217 if(m_options.find_nothrow(
"authPath",
false) &&
218 m_options.find_nothrow(
"user",
false) &&
219 m_options.find_nothrow(
"pass",
false)){
223 if( !authPath.empty() ){
224 m_dbConnection->configuration().setAuthenticationPath(authPath);
226 if( !user.empty() && !pass.empty() ){
229 ::putenv(const_cast<char*>(userenv.c_str()));
230 ::putenv(const_cast<char*>(passenv.c_str()));
234 if(m_options.find_nothrow(
"sql",
false)){
235 if(m_values.count(
"sql")) {
236 m_dbConnection->configuration().setSQLMonitoring(
true );
239 m_dbConnection->configure();
247 initializeForDbConnection();
249 session.
open( connectionString, readOnly );
255 initializeForDbConnection();
257 session.
open( connectionString, role, readOnly );
264 return newDbSession( connectionString, role, readOnly );
270 return newDbSession( connectionString, readOnly );
275 if(m_values.count(fullName)){
std::string getUserValue()
void parseCommand(int argc, char **argv)
virtual char const * what() const
virtual ~UtilitiesError()
int run(int argc, char **argv)
static PluginManager & configure(const Config &)
void open(const std::string &connectionString, bool readOnly=false)
std::string getValueIfExists(const std::string &fullName)
UtilitiesError(const std::string &message)
std::string getPasswordValue()
std::string getDictionaryValue()
std::string getConfigFileValue()
std::string getAuthenticationPathValue()
PluginManager::Config config()
void addAuthenticationOptions()
void addParameter(std::string const &name, T const &value)
void addSQLOutputOption()
void addConfigFileOption()
static ServiceToken createSet(std::vector< ParameterSet > &)
std::string getConnectValue()
void reportForConnection(const std::string &connectionString)
void initializePluginManager()
void addDictionaryOption()
Utilities(const std::string &commandName, std::string positionalParameter=std::string(""))
std::string getLogDBValue()
bool hasOptionValue(const std::string &fullName)
void sendError(const std::string &message)
cond::DbSession openDbSession(const std::string &connectionParameterName, bool readOnly=false)
void sendException(const std::string &message)
bool putOnFile(std::string fileName=std::string(""))
cond::DbSession newDbSession(const std::string &connectionString, bool readOnly=false)
boost::program_options::options_description m_options
void initializeForDbConnection()
boost::program_options::positional_options_description m_positionalOptions