OpenRTM-aist  1.2.1
ConfigAdmin.h
Go to the documentation of this file.
1 // -*- C++ -*-
19 #ifndef RTC_CONFIGADMIN_H
20 #define RTC_CONFIGADMIN_H
21 
22 #include <string>
23 #include <vector>
24 #include <iostream>
25 #include <coil/Properties.h>
26 #include <coil/stringutil.h>
28 
43 namespace RTC
44 {
57 
70 
83 
96 
109 
122 
123  // forward decl
124  class ConfigAdmin;
125 
126  //============================================================
127  // ConfigBase class
128  //============================================================
159  struct ConfigBase
160  {
182  ConfigBase(const char* name_, const char* def_val)
183  : name(name_), default_value(def_val),
184  string_value(""), m_admin(NULL), m_callback(NULL)
185  {}
186 
202  virtual ~ConfigBase(void){};
203 
204  // typedef of ConfigAdmin's member function
205  typedef void (ConfigAdmin::*CallbackFunc)(const char*, const char*);
206 
223  void setCallback(ConfigAdmin* cadmin, CallbackFunc cbf);
224 
240  void notifyUpdate(const char* key, const char* val);
241 
267  virtual bool update(const char* val) = 0;
268 
276  const char* name;
277 
285  const char* default_value;
286 
287  protected:
295  std::string string_value;
312  };
313 
314  //============================================================
315  // Config template class
316  //============================================================
349  template <typename VarType,
350  typename TransFunc = bool (*)(VarType&, const char*)>
351  class Config
352  : public ConfigBase
353  {
354  public:
380  Config(const char* name, VarType& var, const char* def_val,
381  TransFunc trans = coil::stringTo)
382  : ConfigBase(name, def_val), m_var(var), m_trans(trans)
383  {
384  }
385 
401  virtual ~Config(void){}
402 
426  virtual bool update(const char* val)
427  {
428  if (string_value == val) { return true; }
429  string_value = val;
430  // value changed
431  if ((*m_trans)(m_var, val))
432  {
433  notifyUpdate(name, val);
434  return true;
435  }
436  (*m_trans)(m_var, default_value);
437  notifyUpdate(name, val);
438  return false;
439  }
440 
441  protected:
449  VarType& m_var;
450 
459  TransFunc m_trans;
460  };
461 
462  //============================================================
463  // ConfigAdmin class
464  //============================================================
611  {
612  public:
633 
649  ~ConfigAdmin(void);
650 
691  template <typename VarType>
692  bool bindParameter(const char* param_name, VarType& var,
693  const char* def_val,
694  bool (*trans)(VarType&, const char*) = coil::stringTo)
695  {
696  if (param_name == 0) { return false; }
697  if (def_val == 0) { return false; }
698  if (isExist(param_name)) { return false; }
699  if (!trans(var, def_val)) { return false; }
700  Config<VarType>* c = new Config<VarType>(param_name, var, def_val, trans);
701  m_params.push_back(c);
703  update(getActiveId(), param_name);
704  return true;
705  }
706 
732  bool unbindParameter(const char* param_name);
733 
760  void update(void);
761 
796  void update(const char* config_set);
797 
835  void update(const char* config_set, const char* config_param);
836 
863  bool isExist(const char* name);
864 
885  bool isChanged(void) {return m_changed;}
886 
906  coil::vstring& changedParameters() { return m_changedParam; }
907 
927  const char* getActiveId(void) {return m_activeId.c_str();}
928 
953  bool haveConfig(const char* config_id)
954  {
955  return (m_configsets.hasKey(config_id) == NULL) ? false : true;
956  }
957 
978  bool isActive(void)
979  {
980  return m_active;
981  }
982  // const std::vector<Properties*>* getConfigurationParameterValues();
983  // const Properties* getConfigurationParameterValue(const char* name);
984  // bool setConfigurationParameter(const char* name, const char* value);
985 
1005  const std::vector<coil::Properties*>& getConfigurationSets(void);
1006 
1034  const coil::Properties& getConfigurationSet(const char* config_id);
1035 
1065  bool setConfigurationSetValues(const coil::Properties& configuration_set);
1066 
1090  const coil::Properties& getActiveConfigurationSet(void);
1091 
1115  bool addConfigurationSet(const coil::Properties& configuration_set);
1116 
1171  bool removeConfigurationSet(const char* config_id);
1172 
1200  bool activateConfigurationSet(const char* config_id);
1201 
1202  //------------------------------------------------------------
1203  // obsolete functions
1204  //
1205  void setOnUpdate(OnUpdateCallback* cb);
1206 
1207  void setOnUpdateParam(OnUpdateParamCallback* cb);
1208 
1209  void setOnSetConfigurationSet(OnSetConfigurationSetCallback* cb);
1210 
1211  void setOnAddConfigurationSet(OnAddConfigurationAddCallback* cb);
1212 
1213  void setOnRemoveConfigurationSet(OnRemoveConfigurationSetCallback* cb);
1214 
1215  void setOnActivateSet(OnActivateSetCallback* cb);
1216  //
1217  // end of obsolete functions
1218  //------------------------------------------------------------
1219 
1252  void addConfigurationParamListener(ConfigurationParamListenerType type,
1253  ConfigurationParamListener* listener,
1254  bool autoclean = true);
1255 
1280  void removeConfigurationParamListener(ConfigurationParamListenerType type,
1281  ConfigurationParamListener* listener);
1282 
1314  void addConfigurationSetListener(ConfigurationSetListenerType type,
1315  ConfigurationSetListener* listener,
1316  bool autoclean = true);
1317 
1340  void removeConfigurationSetListener(ConfigurationSetListenerType type,
1341  ConfigurationSetListener* listener);
1342 
1377  void
1378  addConfigurationSetNameListener(ConfigurationSetNameListenerType type,
1379  ConfigurationSetNameListener* listener,
1380  bool autoclean = true);
1381 
1408  void
1409  removeConfigurationSetNameListener(ConfigurationSetNameListenerType type,
1410  ConfigurationSetNameListener* listener);
1411 
1412  protected:
1432  void onUpdate(const char* config_set);
1433 
1455  void onUpdateParam(const char* config_set, const char* config_param);
1456 
1476  void onSetConfigurationSet(const coil::Properties& config_set);
1477 
1497  void onAddConfigurationSet(const coil::Properties& config_set);
1498 
1518  void onRemoveConfigurationSet(const char* config_id);
1519 
1539  void onActivateSet(const char* config_id);
1540 
1541  private:
1542  ConfigAdmin(const ConfigAdmin& ca);
1543  ConfigAdmin& operator=(const ConfigAdmin& ca);
1544 
1545  struct find_conf
1546  {
1547  std::string m_name;
1548  find_conf(const char* name) : m_name(name) {};
1549  bool operator()(ConfigBase* conf)
1550  {
1551  if (conf == 0) { return false; }
1552  return (m_name == conf->name);
1553  }
1554  };
1555 
1556  coil::Properties& m_configsets;
1557  coil::Properties m_emptyconf;
1558  std::vector<ConfigBase*> m_params;
1559  std::string m_activeId;
1560  bool m_active;
1561  bool m_changed;
1562  coil::vstring m_changedParam;
1563  coil::vstring m_newConfig;
1564  ConfigurationListeners m_listeners;
1565 
1566  };
1567 }; // namespace RTC
1568 #endif // RTC_CONFIGADMIN_H
void onUpdateParam(const char *config_set, const char *config_param)
When the configuration parameter is updated, it is called.
ConfigBase abstract class.
Definition: ConfigAdmin.h:159
ConfigurationSetNameListener OnActivateSetCallback
Definition: ConfigAdmin.h:121
std::string string_value
Current value in string format.
Definition: ConfigAdmin.h:295
ConfigurationParamListener OnUpdateParamCallback
Definition: ConfigAdmin.h:69
RT-Component.
void setCallback(ConfigAdmin *cadmin, CallbackFunc cbf)
Setting callback.
bool stringTo(To &val, const char *str)
Convert the given std::string to object.
Definition: stringutil.h:633
ConfigBase(const char *name_, const char *def_val)
Constructer.
Definition: ConfigAdmin.h:182
ConfigAdmin * m_admin
A pointer to the ConfigAdmin object.
Definition: ConfigAdmin.h:303
ConfigurationSetNameListener OnRemoveConfigurationSetCallback
Definition: ConfigAdmin.h:108
bool isActive(void)
Confirm to activate configuration set.
Definition: ConfigAdmin.h:978
ConfigAdmin class.
Definition: ConfigAdmin.h:610
ConfigurationSetListener class.
Definition: ConfigurationListener.h:188
ConfigurationSetNameListener class.
Definition: ConfigurationListener.h:298
ConfigurationParamListener class.
Definition: ConfigurationListener.h:72
ConfigurationSetNameListenerType
The types of ConfigurationSetNameListener.
Definition: ConfigurationListener.h:266
Definition: ConfigurationListener.h:701
coil::vstring & changedParameters()
Changed parameters list.
Definition: ConfigAdmin.h:906
VarType & m_var
Configuration parameter variable.
Definition: ConfigAdmin.h:449
void notifyUpdate(const char *key, const char *val)
Observer function to notify variable changed.
std::vector< std::string > vstring
Definition: stringutil.h:45
ConfigurationSetListener OnAddConfigurationAddCallback
Definition: ConfigAdmin.h:95
bool isChanged(void)
Confirm to change configuration parameters.
Definition: ConfigAdmin.h:885
virtual bool update(const char *val)=0
Pure virtual function to update configuration parameter values.
TransFunc m_trans
Transformation function to convert configuration parameter type into string format.
Definition: ConfigAdmin.h:459
const char * name
Configuration name.
Definition: ConfigAdmin.h:276
CallbackFunc m_callback
A member function pointer to the callback function.
Definition: ConfigAdmin.h:311
virtual ~ConfigBase(void)
Virtual Destructor.
Definition: ConfigAdmin.h:202
Class represents a set of properties.
Definition: Properties.h:101
Property list class (derived from Java Properties)
virtual bool update(const char *val)
Update a bind parameter value.
Definition: ConfigAdmin.h:426
const char * getActiveId(void)
Get ID of active configuration set.
Definition: ConfigAdmin.h:927
void(ConfigAdmin::* CallbackFunc)(const char *, const char *)
Definition: ConfigAdmin.h:205
ConfigurationSetNameListener OnUpdateCallback
Definition: ConfigAdmin.h:56
bool bindParameter(const char *param_name, VarType &var, const char *def_val, bool(*trans)(VarType &, const char *)=coil::stringTo)
Setup for configuration parameters.
Definition: ConfigAdmin.h:692
virtual ~Config(void)
Virtual Destructor.
Definition: ConfigAdmin.h:401
Config class.
Definition: ConfigAdmin.h:351
ConfigurationSetListenerType
The types of ConfigurationSetListener.
Definition: ConfigurationListener.h:158
Config(const char *name, VarType &var, const char *def_val, TransFunc trans=coil::stringTo)
Constructor.
Definition: ConfigAdmin.h:380
bool haveConfig(const char *config_id)
Check the existence of configuration set.
Definition: ConfigAdmin.h:953
const char * default_value
Default value in string format.
Definition: ConfigAdmin.h:285
ConfigurationParamListenerType
The types of ConnectorDataListener.
Definition: ConfigurationListener.h:43
ConfigurationSetListener OnSetConfigurationSetCallback
Definition: ConfigAdmin.h:82
Configuration related event listener classes.