DDS  ver. 3.6
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 //=============================================================================
16 namespace bpo = boost::program_options;
17 //=============================================================================
18 namespace dds
19 {
20  namespace commander_cmd
21  {
23  typedef struct SOptions
24  {
25  enum ECommands
26  {
31  };
34  , m_sid(boost::uuids::nil_uuid())
35  {
36  }
37 
38  static ECommands getCommandByName(const std::string& _name)
39  {
40  if ("start" == _name)
41  return cmd_start;
42  if ("stop" == _name)
43  return cmd_stop;
44  if ("prep-session" == _name)
45  return cmd_prep_session;
46 
47  return cmd_unknown;
48  }
49 
51  std::string m_sTopoFile;
52  std::string m_sRMS;
53  std::string m_sCfgFile;
54  boost::uuids::uuid m_sid;
55  } SOptions_t;
56 
57  // Command line parser
58  inline bool ParseCmdLine(int _argc, char* _argv[], SOptions* _options)
59  {
60  if (nullptr == _options)
61  throw std::runtime_error("Internal error: options' container is empty.");
62 
63  // Generic options
64  bpo::options_description options("dds-commander options");
65  options.add_options()("help,h", "Produce help message");
66  options.add_options()("version,v", "Version information");
67  options.add_options()(
68  "command",
69  bpo::value<std::string>(),
70  "The command is a name of a dds-commander command."
71  " Can be one of the following: start, stop, and prep-session.\n"
72  "For user's convenience it is allowed to call dds-commander without \"--command\" option"
73  " by just specifying the command name directly, like:\ndds-commander start or dds-commander stop.\n\n"
74  "Commands:\n"
75  " start: \tStart dds-commander daemon\n"
76  " stop: \tStop dds-commander daemon\n"
77  " prep-session: \tPrepares a DDS session and returns new session ID\n");
78  options.add_options()("session,s", bpo::value<std::string>(), "DDS Session ID");
79 
80  //...positional
81  bpo::positional_options_description pd;
82  pd.add("command", 1);
83 
84  // Parsing command-line
85  bpo::variables_map vm;
86  bpo::store(bpo::command_line_parser(_argc, _argv).options(options).positional(pd).run(), vm);
87  bpo::notify(vm);
88 
89  if (vm.count("help") || vm.empty())
90  {
91  LOG(dds::misc::log_stdout) << options;
92  return false;
93  }
94  if (vm.count("version"))
95  {
96  LOG(dds::misc::log_stdout) << dds::misc::DDSVersionInfoString();
97  return false;
98  }
99 
100  // Command
101  if (vm.count("command"))
102  {
103  if (SOptions::cmd_unknown == SOptions::getCommandByName(vm["command"].as<std::string>()))
104  {
105  LOG(dds::misc::log_stderr) << "unknown command: " << vm["command"].as<std::string>() << "\n\n"
106  << options;
107  return false;
108  }
109  }
110  else
111  {
112  LOG(dds::misc::log_stderr) << "Nothing to do\n\n" << options;
113  return false;
114  }
115 
116  if (vm.count("session"))
117  {
118  _options->m_sid = boost::uuids::string_generator()(vm["session"].as<std::string>());
119  }
120 
121  _options->m_Command = SOptions::getCommandByName(vm["command"].as<std::string>());
122 
123  return true;
124  }
125  } // namespace commander_cmd
126 } // namespace dds
127 #endif
boost::uuids::uuid m_sid
Definition: dds-commander/src/Options.h:54
SOptions()
Definition: dds-commander/src/Options.h:32
ECommands
Definition: dds-commander/src/Options.h:25
bool ParseCmdLine(int _argc, char *_argv[], SOptions *_options)
Definition: dds-commander/src/Options.h:58
#define LOG(severity)
Definition: Logger.h:34
Definition: def.h:151
std::string m_sRMS
Definition: dds-commander/src/Options.h:52
std::string m_sTopoFile
Definition: dds-commander/src/Options.h:51
struct dds::commander_cmd::SOptions SOptions_t
dds-commander's container of options
Miscellaneous functions and helpers are located here.
Definition: AgentConnectionManager.h:13
Definition: dds-commander/src/Options.h:29
dds-commander's container of options
Definition: dds-commander/src/Options.h:23
Definition: def.h:153
std::string m_sCfgFile
Definition: dds-commander/src/Options.h:53
ECommands m_Command
Definition: dds-commander/src/Options.h:50
static ECommands getCommandByName(const std::string &_name)
Definition: dds-commander/src/Options.h:38
Definition: dds-commander/src/Options.h:28
Definition: dds-commander/src/Options.h:30
Definition: dds-commander/src/Options.h:27