28 #include <boost/algorithm/string.hpp>
29 #include <boost/scoped_ptr.hpp>
31 #include <drizzled/gettext.h>
32 #include <drizzled/unireg.h>
33 #include <drizzled/errmsg_print.h>
34 #include <drizzled/plugin/plugin.h>
35 #include <drizzled/util/find_ptr.h>
43 typedef std::map<std::string, Library*> LibraryMap;
44 typedef std::map<std::string, Module*> ModuleMap;
45 typedef std::vector<Module*> ModuleList;
47 LibraryMap library_registry_;
48 ModuleMap module_registry_;
49 boost::scoped_ptr<Graph> depend_graph_;
51 plugin::Plugin::map plugin_registry;
67 static void shutdown();
69 Module* find(
const std::string&);
76 const plugin::Plugin::map &getPluginsMap()
const
78 return plugin_registry;
81 const ModuleMap &getModulesMap()
const
83 return module_registry_;
86 Library *addLibrary(
const std::string &plugin_name,
bool builtin=
false);
87 void removeLibrary(
const std::string &plugin_name);
88 Library *findLibrary(
const std::string &plugin_name)
const;
90 void shutdownModules();
96 std::string plugin_type(boost::to_lower_copy(plugin->getTypeName()));
97 std::string plugin_name(boost::to_lower_copy(plugin->getName()));
98 if (find_ptr(plugin_registry, std::make_pair(plugin_type, plugin_name)))
100 std::string error_message;
101 error_message+= _(
"Loading plugin failed, a plugin by that name already exists.");
102 error_message+= plugin->getTypeName();
104 error_message+= plugin->getName();
105 unireg_actual_abort(__FILE__, __LINE__, __func__, error_message);
108 if (T::addPlugin(plugin))
110 std::string error_message;
111 error_message+= _(
"Fatal error: Failed initializing: ");
112 error_message+= plugin->getTypeName();
114 error_message+= plugin->getName();
115 unireg_actual_abort(__FILE__, __LINE__, __func__, error_message);
120 unireg_abort << _(
"Fatal error: Failed initializing: ") << plugin->getTypeName() <<
":" << plugin->getName();
122 plugin_registry.insert(std::make_pair(std::make_pair(plugin_type, plugin_name), plugin));
126 void remove(T *plugin)
128 std::string plugin_type(boost::to_lower_copy(plugin->getTypeName()));
129 std::string plugin_name(boost::to_lower_copy(plugin->getName()));
130 T::removePlugin(plugin);
131 plugin_registry.erase(std::make_pair(plugin_type, plugin_name));