DDS  ver. 2.0
dds-commander/src/Options.h
Go to the documentation of this file.
1 // Copyright 2014 GSI, Inc. All rights reserved.
2 //
3 //
4 //
5 #ifndef DDSOPTIONS_H
6 #define DDSOPTIONS_H
7 //=============================================================================
8 // BOOST
9 #include <boost/program_options/options_description.hpp>
10 #include <boost/program_options/parsers.hpp>
11 // DDS
12 #include "ProtocolCommands.h"
13 #include "Res.h"
14 #include "SubmitCmd.h"
15 #include "version.h"
16 //=============================================================================
17 namespace bpo = boost::program_options;
18 //=============================================================================
19 namespace dds
20 {
21  namespace commander_cmd
22  {
24  typedef struct SOptions
25  {
26  enum ECommands
27  {
32  };
35  , m_sid(boost::uuids::nil_uuid())
36  {
37  }
38 
39  static ECommands getCommandByName(const std::string& _name)
40  {
41  if ("start" == _name)
42  return cmd_start;
43  if ("stop" == _name)
44  return cmd_stop;
45  if ("prep-session" == _name)
46  return cmd_prep_session;
47 
48  return cmd_unknown;
49  }
50 
52  std::string m_sTopoFile;
54  std::string m_sRMS;
55  std::string m_sCfgFile;
56  boost::uuids::uuid m_sid;
57  } SOptions_t;
58  //=============================================================================
59  inline void PrintVersion()
60  {
61  LOG(MiscCommon::log_stdout) << " v" << PROJECT_VERSION_STRING << "\n"
62  << "DDS configuration"
63  << " v" << USER_DEFAULTS_CFG_VERSION << "\n"
65  }
66  //=============================================================================
67  // Command line parser
68  inline bool ParseCmdLine(int _argc, char* _argv[], SOptions* _options)
69  {
70  if (nullptr == _options)
71  throw std::runtime_error("Internal error: options' container is empty.");
72 
73  // Generic options
74  bpo::options_description options("dds-commander options");
75  options.add_options()("help,h", "Produce help message");
76  options.add_options()("version,v", "Version information");
77  options.add_options()(
78  "command",
79  bpo::value<std::string>(),
80  "The command is a name of a dds-commander command."
81  " Can be one of the following: start, stop, and prep-session.\n"
82  "For user's convenience it is allowed to call dds-commander without \"--command\" option"
83  " by just specifying the command name directly, like:\ndds-commander start or dds-commander stop.\n\n"
84  "Commands:\n"
85  " start: \tStart dds-commander daemon\n"
86  " stop: \tStop dds-commander daemon\n"
87  " prep-session: \tPrepares a DDS session and returns new session ID\n");
88  options.add_options()("session,s", bpo::value<std::string>(), "DDS Session ID");
89 
90  //...positional
91  bpo::positional_options_description pd;
92  pd.add("command", 1);
93 
94  // Parsing command-line
95  bpo::variables_map vm;
96  bpo::store(bpo::command_line_parser(_argc, _argv).options(options).positional(pd).run(), vm);
97  bpo::notify(vm);
98 
99  if (vm.count("help") || vm.empty())
100  {
101  LOG(MiscCommon::log_stdout) << options;
102  return false;
103  }
104  if (vm.count("version"))
105  {
106  PrintVersion();
107  return false;
108  }
109 
110  // Command
111  if (vm.count("command"))
112  {
113  if (SOptions::cmd_unknown == SOptions::getCommandByName(vm["command"].as<std::string>()))
114  {
115  LOG(MiscCommon::log_stderr) << "unknown command: " << vm["command"].as<std::string>() << "\n\n"
116  << options;
117  return false;
118  }
119  }
120  else
121  {
122  LOG(MiscCommon::log_stderr) << "Nothing to do\n\n" << options;
123  return false;
124  }
125 
126  if (vm.count("session"))
127  {
128  _options->m_sid = boost::uuids::string_generator()(vm["session"].as<std::string>());
129  }
130 
131  _options->m_Command = SOptions::getCommandByName(vm["command"].as<std::string>());
132 
133  return true;
134  }
135  }
136 }
137 #endif
Definition: def.h:156
Definition: def.h:154
boost::uuids::uuid m_sid
Definition: dds-commander/src/Options.h:56
SOptions()
Definition: dds-commander/src/Options.h:33
ECommands
Definition: dds-commander/src/Options.h:26
bool ParseCmdLine(int _argc, char *_argv[], SOptions *_options)
Definition: dds-commander/src/Options.h:68
#define LOG(severity)
Definition: Logger.h:54
std::string m_sRMS
Definition: dds-commander/src/Options.h:54
std::string m_sTopoFile
Definition: dds-commander/src/Options.h:52
const LPCSTR g_cszReportBugsAddr("Report bugs/comments to fairroot@gsi.de")
struct dds::commander_cmd::SOptions SOptions_t
dds-commander&#39;s container of options
Definition: dds-agent/src/AgentConnectionManager.h:18
Definition: dds-commander/src/Options.h:30
dds-commander&#39;s container of options
Definition: dds-commander/src/Options.h:24
void PrintVersion()
Definition: dds-commander/src/Options.h:59
std::string m_sCfgFile
Definition: dds-commander/src/Options.h:55
bool m_needCommanderPid
Definition: dds-commander/src/Options.h:53
ECommands m_Command
Definition: dds-commander/src/Options.h:51
static ECommands getCommandByName(const std::string &_name)
Definition: dds-commander/src/Options.h:39
Definition: dds-commander/src/Options.h:29
Definition: dds-commander/src/Options.h:31
Definition: dds-commander/src/Options.h:28