#include <Config_Keywords.h>
#include <Config_Common.h>
#include <Config_PropManager.h>
+#include <Config_ModuleReader.h>
#include <Events_Loop.h>
-#include <Events_Error.h>
+#include <Events_InfoMessage.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <iostream>
#endif
+#ifdef WIN32
+ static const char FSEP = '\\';
+#else
+ static const char FSEP = '/';
+#endif
+
Config_XMLReader::Config_XMLReader(const std::string& theXmlFileName)
: myXmlDoc(NULL)
{
- std::string prefix = "";
+ std::string prefix = "";
Config_Prop* aProp = Config_PropManager::findProp("Plugins", "default_path");
if (aProp)
prefix = aProp->value();
* the problem: application may be launched using python executable,
* to use environment variable (at least for the current moment)
*/
- if (prefix.empty()) {
- char* anEnv = getenv("NEW_GEOM_CONFIG_FILE");
- if (anEnv) {
- prefix = std::string(anEnv);
- }
- }
-#ifdef WIN32
- prefix += "\\";
-#else
- prefix += "/";
-#endif
- myDocumentPath = prefix + theXmlFileName;
+ if (prefix.empty())
+ prefix = pluginConfigFile();
+
+ myDocumentPath = prefix + FSEP + theXmlFileName;
std::ifstream aTestFile(myDocumentPath);
- if (!aTestFile) Events_Error::send("Unable to open " + myDocumentPath);
+ if (!aTestFile)
+ Events_InfoMessage("Config_XMLReader", "Unable to open %1").arg(myDocumentPath).send();
aTestFile.close();
}
xmlFreeDoc(myXmlDoc);
}
+std::string Config_XMLReader::pluginConfigFile()
+{
+ std::string aValue;
+ char* anEnv = getenv("SHAPER_ROOT_DIR");
+ if (anEnv) {
+ aValue = std::string(anEnv) +
+ FSEP + "share" + FSEP + "salome" + FSEP + "resources" + FSEP + "shaper";
+ } else {
+ anEnv = getenv("OPENPARTS_ROOT_DIR");
+ if (anEnv) {
+ aValue = std::string(anEnv) + FSEP + "plugins";
+ }
+ }
+ return aValue;
+}
+
void Config_XMLReader::readAll()
{
+ // to load external modules dependencies (like GEOm for Connector Feature
+ Config_ModuleReader::loadScript("salome.shaper.initConfig", false);
+
xmlNodePtr aRoot = findRoot();
readRecursively(aRoot);
}
return result;
}
-void Config_XMLReader::storeAttribute(xmlNodePtr theNode, const char* theAttribute)
+void Config_XMLReader::storeAttribute(xmlNodePtr theNode, const char* theAttribute, bool doClean)
{
std::string aKey = getNodeName(theNode) + ":" + std::string(theAttribute);
std::string aValue = getProperty(theNode, theAttribute);
- if(!aValue.empty()) {
+ if (doClean || !aValue.empty()) {
myCachedAttributes[aKey] = aValue;
}
}
}
return result;
}
+
+const char* Config_XMLReader::encoding() const
+{
+ return (const char*) myXmlDoc->encoding;
+}
\ No newline at end of file