1 #include <det/VManagerBuilder.h>
2 #include <utl/ErrorLogger.h>
3 #include <utl/Reader.h>
4 #include <utl/String.h>
5 #include <utl/AugerException.h>
6 #include <det/ManagerRegister.h>
15 ManagerRegister::Configure(
const Branch branch)
22 ManagerRegister::Configure(
const ostringstream& configInstructions)
25 Reader reader(readerInput);
32 ManagerRegister::InterpretXML(
const Branch& topB)
34 fConfiguredManagerList.clear();
39 if (managerB.GetName() !=
"manager")
43 managerB.GetData(managerName);
45 if (fManagerBuilderRegister.empty()) {
47 err <<
"Unable to create manager " << managerName <<
" "
48 "since the list of manager builders is empty.";
52 const ManagerBuilderMap::const_iterator mIt =
53 fManagerBuilderRegister.find(managerName);
55 if (mIt == fManagerBuilderRegister.end()) {
58 err <<
"The requested manager builder '" << managerName <<
"' does not exist. "
70 manager.
Init(managerName);
72 fConfiguredManagerList.push_back(&manager);
75 warn <<
"Manager '" << managerName <<
"' failed to initialize properly!";
85 ManagerRegister::GetManager(
const string& managerName)
94 ManagerRegister::GetManager(
const string& managerName)
97 if (fConfiguredManagerList.empty()) {
99 err <<
"List of initialized managers in '" << GetName() <<
" is empty.";
104 if (it->GetName() == managerName)
108 err <<
"The requested manager '" << managerName
109 <<
"' does not exist or is not initialized. "
110 "Available managers: " << GetConfiguredManagerListString();
118 if (fManagerBuilderRegister.find(name) != fManagerBuilderRegister.end()) {
120 warn <<
"Attempt to register more than one manager builder for manager with "
121 "name '" << name <<
"'. Only the last registered manager builder will be used!";
125 fManagerBuilderRegister.insert(make_pair(name, &builder));
130 ManagerRegister::GetConfiguredManagerListString()
133 if (fConfiguredManagerList.empty())
136 ostringstream managers;
138 managers << it->GetName();
139 for (++it; it != ManagersEnd(); ++it)
140 managers <<
", " << it->GetName();
142 return managers.str();
148 ManagerRegister::NotFoundAndThrow(
const Handle& returnData,
149 const string& component,
150 const string& property,
154 err <<
"Get data failure for "
155 << QueryInfoMessage(returnData, component, property, index);
void SetName(const std::string &name)
Branch GetTopBranch() const
Base class for exceptions trying to access non-existing components.
bool IsInitialized() const
Interface for detector managers.
Exception for errors encountered when parsing XML.
virtual void Init(const std::string &configLink)
Manager Initialization. configLink is the CentralConfig hook for the configuration file...
Branch GetNextSibling() const
Get next sibling of this branch.
Utility for parsing XML files.
Class representing a document branch.
boost::indirect_iterator< InternalManagerIterator, VManager & > ManagerIterator
Iterator over configured managers.
#define WARNING(message)
Macro for logging warning messages.
const VManager & GetManager(const std::string &managerName) const
Get a specific manager by name.
std::map< std::string, std::string > IndexMap
Register for detector description managers.
std::string OfMapKeys(const Map &m, const std::string "e="'", const std::string &separator=", ")
Branch GetFirstChild() const
Get first child of this Branch.
#define ERROR(message)
Macro for logging error messages.