X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FConfig%2FConfig_ModuleReader.cpp;h=2fd33f6cda947d90b50a1a065d6902ede4152340;hb=33c5fdce3cd63dd95a738439a0399dd982abcd73;hp=ff9ba1f4d61decdce2c94f4aaf72d421baa4948d;hpb=a731f82dccbfdb67cbf8e8d617222a4d3e32018a;p=modules%2Fshaper.git diff --git a/src/Config/Config_ModuleReader.cpp b/src/Config/Config_ModuleReader.cpp index ff9ba1f4d..2fd33f6cd 100644 --- a/src/Config/Config_ModuleReader.cpp +++ b/src/Config/Config_ModuleReader.cpp @@ -7,6 +7,8 @@ * Author: sbh */ +#include + #include #include #include @@ -63,13 +65,28 @@ std::string Config_ModuleReader::getModuleName() return getProperty(aRoot, PLUGINS_MODULE); } + +void Config_ModuleReader::addFeature(const std::string& theFeatureName, + const std::string& thePluginConfig) +{ + if (myFeaturesInFiles.count(theFeatureName)) { + std::string anErrorMsg = "Can not register feature '" + theFeatureName + "' in plugin '" + + thePluginConfig + "'. There is a feature with the same ID."; + Events_Error::send(anErrorMsg); + return; + } + + myFeaturesInFiles[theFeatureName] = thePluginConfig; +} + void Config_ModuleReader::processNode(xmlNodePtr theNode) { if (isNode(theNode, NODE_PLUGIN, NULL)) { if (!hasRequiredModules(theNode)) return; std::string aPluginConf = getProperty(theNode, PLUGIN_CONFIG); - if (!aPluginConf.empty()) myPluginFiles.insert(aPluginConf); + if (!aPluginConf.empty()) + myPluginFiles.insert(aPluginConf); std::string aPluginLibrary = getProperty(theNode, PLUGIN_LIBRARY); std::string aPluginScript = getProperty(theNode, PLUGIN_SCRIPT); std::string aPluginName = addPlugin(aPluginLibrary, aPluginScript, aPluginConf); @@ -77,7 +94,7 @@ void Config_ModuleReader::processNode(xmlNodePtr theNode) std::list aFeatures = importPlugin(aPluginName, aPluginConf); std::list::iterator it = aFeatures.begin(); for (; it != aFeatures.end(); it++) { - myFeaturesInFiles[*it] = aPluginConf; + addFeature(*it, aPluginConf); } } } @@ -156,12 +173,12 @@ void Config_ModuleReader::loadPlugin(const std::string& thePluginName) void Config_ModuleReader::loadScript(const std::string& theFileName) { - /* aquire python thread */ + /* acquire python thread */ PyGILState_STATE gstate = PyGILState_Ensure(); PyObject* module = PyImport_ImportModule(theFileName.c_str()); if (!module) { - std::string anErrorMsg = "An error occured while importing " + theFileName; + std::string anErrorMsg = "An error occurred while importing " + theFileName; //Get detailed error message: if (PyErr_Occurred()) { PyObject *pstr, *ptype, *pvalue, *ptraceback;