X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FConfig%2FConfig_XMLReader.cpp;h=4cd1149f8db927c8669506b1507e5b22cebbcb33;hb=b5893b0a30fac08134c24de4565cb513a43affa6;hp=ab15f3621e1a43ea35caf6a4a9e9ad298a3f85c4;hpb=1d92b37c3a412e565c82b8dce640a035d9f554c2;p=modules%2Fshaper.git diff --git a/src/Config/Config_XMLReader.cpp b/src/Config/Config_XMLReader.cpp index ab15f3621..4cd1149f8 100644 --- a/src/Config/Config_XMLReader.cpp +++ b/src/Config/Config_XMLReader.cpp @@ -11,9 +11,10 @@ #include #include #include +#include #include -#include +#include #include #include @@ -27,10 +28,16 @@ #include #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(); @@ -40,20 +47,13 @@ Config_XMLReader::Config_XMLReader(const std::string& theXmlFileName) * 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(); } @@ -62,8 +62,27 @@ Config_XMLReader::~Config_XMLReader() 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); } @@ -80,6 +99,11 @@ void Config_XMLReader::processNode(xmlNodePtr theNode) } } +void Config_XMLReader::cleanup(xmlNodePtr) +{ + // do nothing; +} + bool Config_XMLReader::processChildren(xmlNodePtr aNode) { return true; @@ -120,6 +144,7 @@ void Config_XMLReader::readRecursively(xmlNodePtr theParent) if (processChildren(aNode)) { readRecursively(aNode); } + cleanup(aNode); } } @@ -138,11 +163,11 @@ std::string Config_XMLReader::getNodeName(xmlNodePtr theNode) 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; } } @@ -161,3 +186,25 @@ std::string Config_XMLReader::restoreAttribute(const char* theNodeName, const ch } return result; } + +bool Config_XMLReader::cleanupAttribute(xmlNodePtr theNode, const char* theNodeAttribute) +{ + return cleanupAttribute(getNodeName(theNode).c_str(), theNodeAttribute); +} + +bool Config_XMLReader::cleanupAttribute(const char* theNodeName, const char* theNodeAttribute) +{ + std::string aKey = std::string(theNodeName) + ":" + std::string(theNodeAttribute); + bool result = false; + std::map::iterator anEntry = myCachedAttributes.find(aKey); + if( anEntry != myCachedAttributes.end()) { + myCachedAttributes.erase(anEntry); + result = true; + } + return result; +} + +const char* Config_XMLReader::encoding() const +{ + return (const char*) myXmlDoc->encoding; +} \ No newline at end of file