-// Copyright (C) 2014-2021 CEA/DEN, EDF R&D
+// Copyright (C) 2014-2024 CEA, EDF
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
return myFeaturesInFiles;
}
+const std::map<std::string, std::string>& Config_ModuleReader::proprietaryFeatures() const
+{
+ return myProprietaryFeatures;
+}
+
+const std::set<std::string>& Config_ModuleReader::proprietaryPlugins() const
+{
+ return myProprietaryPlugins;
+}
+
const std::set<std::string>& Config_ModuleReader::modulePluginFiles() const
{
return myPluginFiles;
void Config_ModuleReader::addFeature(const std::string& theFeatureName,
const std::string& thePluginConfig)
{
+ if (myProprietaryFeatures.count(theFeatureName)) {
+ myProprietaryFeatures.erase(theFeatureName);
+ }
+
if (myFeaturesInFiles.count(theFeatureName)) {
std::string anErrorMsg = "Can not register feature '%1' in plugin '%2'."
" There is a feature with the same ID.";
myFeaturesInFiles[theFeatureName] = thePluginConfig;
}
+void Config_ModuleReader::addFeatureRequireLicense(const std::string& theFeatureName,
+ const std::string& thePluginConfig)
+{
+ if (myFeaturesInFiles.count(theFeatureName) ||
+ myProprietaryFeatures.count(theFeatureName)) {
+ std::string anErrorMsg = "Can not register feature '%1' in plugin '%2'."
+ " There is a feature with the same ID.";
+ Events_InfoMessage("Config_ModuleReader", anErrorMsg)
+ .arg(theFeatureName).arg(thePluginConfig).send();
+ return;
+ }
+
+ myProprietaryFeatures[theFeatureName] = thePluginConfig;
+}
+
void Config_ModuleReader::processNode(xmlNodePtr theNode)
{
if (isNode(theNode, NODE_PLUGIN, NULL)) {
std::string aPluginLibrary = getProperty(theNode, PLUGIN_LIBRARY);
std::string aPluginScript = getProperty(theNode, PLUGIN_SCRIPT);
std::string aPluginName = addPlugin(aPluginLibrary, aPluginScript, aPluginConf);
+ std::string aPluginDocSection = getProperty(theNode, PLUGIN_DOCSECTION);
std::string aUsesPlugin = getProperty(theNode, PLUGIN_USES);
if (!aUsesPlugin.empty()) { // send information about the plugin dependencies
std::shared_ptr<Config_PluginMessage> aMess(new Config_PluginMessage(
Events_Loop::loop()->send(aMess);
}
- std::list<std::string> aFeatures = importPlugin(aPluginName, aPluginConf);
+ std::string aLicense = getProperty(theNode, PLUGIN_LICENSE);
+ std::transform(aLicense.begin(), aLicense.end(), aLicense.begin(), ::tolower);
+ bool isLicensed = aLicense == "true";
+ if (isLicensed)
+ myProprietaryPlugins.insert(aPluginName);
+
+ std::list<std::string> aFeatures = importPlugin(aPluginName, aPluginConf, aPluginDocSection);
std::list<std::string>::iterator it = aFeatures.begin();
for (; it != aFeatures.end(); it++) {
- addFeature(*it, aPluginConf);
+ if (isLicensed)
+ addFeatureRequireLicense(*it, aPluginConf);
+ else
+ addFeature(*it, aPluginConf);
}
}
}
}
std::list<std::string> Config_ModuleReader::importPlugin(const std::string& thePluginLibrary,
- const std::string& thePluginXmlConf)
+ const std::string& thePluginXmlConf,
+ const std::string& thePluginDocSection)
{
if (thePluginXmlConf.empty()) { //probably a third party library
loadLibrary(thePluginLibrary);
Config_FeatureReader aReader = Config_FeatureReader(thePluginXmlConf,
thePluginLibrary,
+ thePluginDocSection,
myEventGenerated);
aReader.readAll();
return aReader.features();