15 #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(),
33 m_pluginMgrInitialized(
false),
36 (
"debug",
"switch on debug mode")
37 (
"help,h",
"help message")
39 if(!positionalParameter.empty()) {
41 addOption<std::string>(positionalParameter,
"",positionalParameter);
47 if(m_dbConnection)
delete m_dbConnection;
57 parseCommand( argc, argv );
58 if (m_values.count(
"help")) {
62 if(m_options.find_nothrow(
"dictionary",
false)&& m_values.count(
"dictionary")){
63 std::vector<std::string> dictionaries =
64 m_values[
"dictionary"].as<std::vector<std::string> >();
65 if(!dictionaries.empty()){
66 initializePluginManager();
68 BOOST_FOREACH(std::string
const &
dict, dictionaries)
74 if(m_options.find_nothrow(
"sql",
false) && m_values.count(
"sql")){
76 for(std::set<std::string>::const_iterator iSess = m_dbSessions.begin();
77 iSess != m_dbSessions.end();
95 addOption<std::string>(
"authPath",
"P",
"path to authentication xml");
96 addOption<std::string>(
"user",
"u",
"user name");
97 addOption<std::string>(
"pass",
"p",
"password");
102 addOption<std::string>(
"connect",
"c",
"connection string (required)");
103 m_dbSessions.insert(
"connect");
108 const std::string& shortName,
109 const std::string& helpEntry ){
110 addOption<std::string>(connectionOptionName,shortName,helpEntry);
111 m_dbSessions.insert(connectionOptionName);
117 addConnectOption(
"logDB",
"l",
"logDB(optional");
122 addOption<std::vector<std::string> >(
"dictionary",
"D",
"data dictionaries (required if no plugin available)");
127 addOption<std::string>(
"configFile",
"f",
"configuration file(optional)");
132 addOption<bool>(
"sql",
"S",
"dump the sql output (optional)");
136 boost::program_options::store(boost::program_options::command_line_parser(argc, argv).
options(m_options).positional(m_positionalOptions).
run(), m_values);
137 if(m_options.find_nothrow(
"configFile",
false)){
138 std::string configFileName = getValueIfExists(
"configFile");
139 if (! configFileName.empty()){
142 boost::program_options::store(boost::program_options::parse_config_file(configFile,m_options), m_values);
146 boost::program_options::notify(m_values);
150 return getOptionValue<std::string>(
"authPath");
154 return getOptionValue<std::string>(
"user");
158 return getOptionValue<std::string>(
"pass");
162 return getOptionValue<std::string>(
"connect");
166 return getOptionValue<std::string>(
"logDB");
170 return getOptionValue<std::string>(
"dictionary");
174 return getOptionValue<std::string>(
"configFile");
179 const void*
found = m_options.find_nothrow(fullName,
false);
182 message <<
"Utilities::hasOptionValue: option \"" << fullName <<
"\" is not known by the command.";
183 sendException(message.str());
185 return m_values.count(fullName);
189 return m_values.count(
"debug");
193 if(!m_pluginMgrInitialized){
197 std::vector<edm::ParameterSet> psets;
199 pSet.
addParameter(
"@service_type",std::string(
"SiteLocalConfigService"));
200 psets.push_back(pSet);
204 m_pluginMgrInitialized =
true;
210 initializePluginManager();
213 m_dbConnection->configuration().setMessageLevel(
coral::Debug);
215 m_dbConnection->configuration().setMessageLevel(coral::Error);
217 m_dbConnection->configuration().setPoolAutomaticCleanUp(
false );
218 m_dbConnection->configuration().setConnectionTimeOut(0);
220 if(m_options.find_nothrow(
"authPath",
false) &&
221 m_options.find_nothrow(
"user",
false) &&
222 m_options.find_nothrow(
"pass",
false)){
223 std::string
authPath = getValueIfExists(
"authPath");
224 std::string
user = getValueIfExists(
"user");
225 std::string pass = getValueIfExists(
"pass");
226 if( !authPath.empty() ){
227 m_dbConnection->configuration().setAuthenticationPath(authPath);
229 if( !user.empty() && !pass.empty() ){
230 std::string userenv(std::string(
"CORAL_AUTH_USER=")+user);
231 std::string passenv(std::string(
"CORAL_AUTH_PASSWORD=")+pass);
232 ::putenv(const_cast<char*>(userenv.c_str()));
233 ::putenv(const_cast<char*>(passenv.c_str()));
237 if(m_options.find_nothrow(
"sql",
false)){
238 if(m_values.count(
"sql")) {
239 m_dbConnection->configuration().setSQLMonitoring(
true );
242 m_dbConnection->configure();
249 const std::string& role,
251 initializeForDbConnection();
252 std::string connectionString = getOptionValue<std::string>( connectionParameterName );
254 session.open( connectionString, role, readOnly );
260 initializeForDbConnection();
261 std::string connectionString = getOptionValue<std::string>( connectionParameterName );
263 session.open( connectionString, readOnly );
269 if(m_values.count(fullName)){
270 val = m_values[
fullName].as<std::string>();
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 &)
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(""))
boost::program_options::options_description m_options
void initializeForDbConnection()
boost::program_options::positional_options_description m_positionalOptions