Skip to content

Commit bbdc056

Browse files
committed
Bundle: allow to disable loading of task configuration files
1 parent 5671520 commit bbdc056

File tree

3 files changed

+61
-9
lines changed

3 files changed

+61
-9
lines changed

src/Bundle.cpp

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,14 @@ void Bundle::deleteInstance()
204204
instance = nullptr;
205205
}
206206

207-
bool Bundle::initialize()
207+
void Bundle::loadTaskConfigurations()
208+
{
209+
std::vector<std::string> configs = findFilesByExtension(
210+
(fs::path("config") / "orogen").string(), ".yml");
211+
taskConfigurations.initialize(configs);
212+
}
213+
214+
bool Bundle::initialize(bool loadTaskConfigs)
208215
{
209216
std::clog << "Initializing Bundles" << std::endl;
210217
activeBundles.clear();
@@ -265,10 +272,10 @@ bool Bundle::initialize()
265272
std::clog << std::endl;
266273

267274
//Initialze TaskConfigurations
268-
std::clog << "Loading task configuration files from bundle" << std::endl;
269-
std::vector<std::string> configs = findFilesByExtension(
270-
(fs::path("config") / "orogen").string(), ".yml");
271-
taskConfigurations.initialize(configs);
275+
if(loadTaskConfigs){
276+
std::clog << "Loading task configuration files from bundle" << std::endl;
277+
loadTaskConfigurations();
278+
}
272279
std::clog << "Bundles successfully initialized" << std::endl;
273280

274281
return true;
@@ -459,6 +466,12 @@ std::string Bundle::findBundle(const std::string &bundle_name)
459466
}
460467

461468

469+
TaskConfigurations::TaskConfigurations()
470+
: initialized(false)
471+
{
472+
473+
}
474+
462475
void TaskConfigurations::initialize(const std::vector<std::string> &configFiles)
463476
{
464477
taskConfigurations.clear();
@@ -483,17 +496,24 @@ void TaskConfigurations::initialize(const std::vector<std::string> &configFiles)
483496
taskConfigurations.at(task).mergeConfigFile(cfgFile);
484497
}
485498
}
499+
initialized = true;
486500
}
487501

488502
Configuration TaskConfigurations::getConfig(const std::string &taskModelName,
489503
const std::vector<std::string> &sections)
490504
{
505+
if(!initialized){
506+
throw std::runtime_error("TaskConfiguration::getConfig was called, but TaskConfiguratuion was not initilized.");
507+
}
491508
MultiSectionConfiguration& mcfg = taskConfigurations.at(taskModelName);
492509
Configuration cfg = mcfg.getConfig(sections);
493510
return cfg;
494511
}
495512

496513
const MultiSectionConfiguration &TaskConfigurations::getMultiConfig(const std::string &taskModelName)
497514
{
515+
if(!initialized){
516+
throw std::runtime_error("TaskConfiguration::getMultiConfig was called, but TaskConfiguratuion was not initilized.");
517+
}
498518
return taskConfigurations.at(taskModelName);
499519
}

src/Bundle.hpp

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,12 @@ class SingleBundle
4242

4343
class TaskConfigurations{
4444
private:
45-
//Contains the merged configuration files from all bundles. The string
46-
//ist the task model name
45+
//Contains the merged configuration files from all bundles. The key-string
46+
//is the task model name
4747
std::map<std::string, MultiSectionConfiguration> taskConfigurations;
48+
bool initialized;
4849
public:
49-
TaskConfigurations(){}
50+
TaskConfigurations();
5051
void initialize(const std::vector<std::string>& configFiles);
5152
Configuration getConfig(const std::string& taskModelName,
5253
const std::vector<std::string>& sections);
@@ -95,7 +96,28 @@ class Bundle
9596
*/
9697
static void deleteInstance();
9798

98-
bool initialize();
99+
/**
100+
* @brief Loads task configuration files from the selected bundles into
101+
* memory
102+
*/
103+
void loadTaskConfigurations();
104+
105+
/**
106+
* @brief Initializes the bundle
107+
* Evaluates ROCK_BUNDLE and ROCK_BUNDLE_PATH evironment variables to
108+
* determine burrently active bundle.
109+
* ROCK_BUNDLE: defines the selected bundle.
110+
* ROCK_BUNDLE_PATH: Defines the search path where to look for bundles
111+
* References to other bundles can be specified in config/bundle.yml file
112+
* in the selected bundle.
113+
114+
* @param loadTaskConfigs: Specifiy if task configuration files
115+
* should be loaded. This step is costly and thus can be omitted if
116+
* task configuration files are not needed.
117+
* @return true or false representing wether initialization was successful
118+
* or not
119+
*/
120+
bool initialize(bool loadTaskConfigs=true);
99121

100122
const std::string &getActiveBundleName();
101123

test/bundle.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,16 @@ BOOST_AUTO_TEST_CASE(task_configuration)
199199
inst.deleteInstance();
200200
}
201201

202+
BOOST_AUTO_TEST_CASE(init_without_task_configuration)
203+
{
204+
clear_environment_variables();
205+
setenv("ROCK_BUNDLE_PATH", bundle_path.c_str(), 1);
206+
setenv("ROCK_BUNDLE", "first", 1);
207+
libConfig::Bundle bundle;
208+
bundle.initialize(false);
209+
BOOST_CHECK_THROW(bundle.taskConfigurations.getConfig("my::Task", {"default"}), std::runtime_error);
210+
}
211+
202212
BOOST_AUTO_TEST_CASE(still_working_without_bundle_selected)
203213
{
204214
clear_environment_variables();

0 commit comments

Comments
 (0)