/* -*- Base: 10 ; Mode: C++ -*- */
/*------------------------------------------------------------------------
**
FOST project
**
--------------------------------------------------------------------------
--------------------------------------------------------------------------
FILE LOG
$Revision: 1.3 $ $Date: 2012-06-15 13:04:40 $
--------------------------------------------------------------------------
CREATION
F.CASIMIR
SUMMARY
DESCRIPTION
The main function performs the following actions :
------------------------------------------------------------------------*/
//=============================================================================
//
// History of code
//
// creation
//
// modification
//=============================================================================
/**
*/
//=============================================================================
// Include section
//=============================================================================
// Standard libraries include files
//-----------------------------------------------------------------------------
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "log4cxx/logger.h"
#include "Helper.hh"
// Module Kernel include files
//-----------------------------------------------------------------------------
#include
namespace AMDA {
namespace Plugins {
log4cxx::LoggerPtr gLogger = log4cxx::Logger::getLogger("AMDA-Kernel.Plugins");
//=============================================================================
// Methods of Class PluginManager
//=============================================================================
//=============================================================================
// Other Methods
void PluginManager::registerPlugin(const std::string &pluginName, const std::string &pluginPath) {
if (_loadedPlugins.count(pluginName) == 1) {
LOG4CXX_DEBUG(gLogger, "PluginManager::registerPlugin :: Plugin is already loaded: " << pluginPath << pluginName);
return;
}
try {
LOG4CXX_DEBUG(gLogger, "PluginManager::registerPlugin :: attempt to load: " << pluginPath << pluginName);
Plugin plugin(pluginPath + "/" + pluginName);
_currentPluginPath = pluginPath + "/" + pluginName;
_loadedPlugins.insert(PluginMap::value_type(pluginName, plugin)).first->second.registerPlugin(*this);
//PluginWatcher::getInstance()->addPluginToWatch(pluginPath);
LOG4CXX_INFO(gLogger, "PluginManager::loadPlugin :: " << pluginName << " plugin load successfully");
} catch (AMDA::AMDA_exception & e) {
LOG4CXX_WARN(gLogger, "PluginManager::registerPlugin exception resume: " << boost::diagnostic_information(e));
} catch (...) {
LOG4CXX_WARN(gLogger, "Problem in loadPlugin " << pluginPath);
}
}
/**
*/
void PluginManager::loadPlugin(const std::string &sPluginName) {
if (_loadedPlugins.find(sPluginName) == _loadedPlugins.end()) {
registerPlugin(sPluginName + ".so", std::string(getenv(sPluginName.c_str())) + "/lib/");
}
}
void PluginManager::loadPlugin(const std::string &path, const std::string &sPluginName) {
int soPos = sPluginName.find(".so");
if (soPos > 1) {
registerPlugin(sPluginName, path);
}
}
void PluginManager::loadPluginFromPath(const std::string& pluginPath) {
if (!pluginPath.empty()) {
const char *myDir = pluginPath.c_str();
struct stat myStat;
if ((stat(myDir, &myStat) == 0) && (((myStat.st_mode) & S_IFMT) == S_IFDIR)) {
// myDir exists and is a directory.
std::vector files = std::vector();
AMDA::Helpers::Helper::getMatchFiles(pluginPath.c_str(), files, ".*.so$");
for (unsigned int i = 0; i < files.size(); i++) {
loadPlugin(std::string(pluginPath), files[i]);
}
files.clear();
}
}
}
/**
void PluginManager::loadNeededPlugins(std::listpluginList , const std::string& pluginsPath){
for (auto pluginName : lPlungList){
if(_loadedPlugins.find(pluginName) == _loadedPlugins.end())
{
registerPlugin(pluginsPath, pluginName);
}
}
}
*/
} // namespace Plugins
} // namespace AMDA