X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FConfig%2FConfig_XMLReader.cpp;h=b6bbc0ecc3cb98a2ea4759f3b3957620541404df;hb=853e0eec6016120b641efa6adf427a239cf203cf;hp=818180e1129bc0705176edb88dd9ed98bdf17b4c;hpb=a7f44a41bdf29e7bd978ff3b8c8bd514d1223be7;p=modules%2Fshaper.git diff --git a/src/Config/Config_XMLReader.cpp b/src/Config/Config_XMLReader.cpp index 818180e11..b6bbc0ecc 100644 --- a/src/Config/Config_XMLReader.cpp +++ b/src/Config/Config_XMLReader.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D + /* * Config_XMLReader.cpp * @@ -8,7 +10,6 @@ #include #include #include -#include #include #include @@ -61,22 +62,12 @@ Config_XMLReader::~Config_XMLReader() xmlFreeDoc(myXmlDoc); } -/* - * Read all nodes in associated xml file, - * recursively if processChildren(xmlNode) is true for the xmlNode. - * For each read node the processNode will be called. - */ void Config_XMLReader::readAll() { xmlNodePtr aRoot = findRoot(); readRecursively(aRoot); } -/* - * Allows to customize reader's behavior for a node. Virtual. - * The default impl does nothing. (In debug mode prints - * some info) - */ void Config_XMLReader::processNode(xmlNodePtr theNode) { if (isNode(theNode, NODE_SOURCE, NULL)) { @@ -84,25 +75,21 @@ void Config_XMLReader::processNode(xmlNodePtr theNode) Config_XMLReader aSourceReader = Config_XMLReader(aSourceFile); readRecursively(aSourceReader.findRoot()); #ifdef _DEBUG - std::cout << "Config_XMLReader::sourced node: " << aSourceFile << std::endl; + //std::cout << "Config_XMLReader::sourced node: " << aSourceFile << std::endl; #endif - } else if (isNode(theNode, NODE_VALIDATOR, NULL)) { - processValidator(theNode); } } -/* - * Defines which nodes should be processed recursively. Virtual. - * The default impl is to read all nodes. - */ +void Config_XMLReader::cleanup(xmlNodePtr) +{ + // do nothing; +} + bool Config_XMLReader::processChildren(xmlNodePtr aNode) { return true; } -/* - * - */ xmlNodePtr Config_XMLReader::findRoot() { if (myXmlDoc == NULL) { @@ -124,11 +111,6 @@ xmlNodePtr Config_XMLReader::findRoot() return aRoot; } -/* - * Calls processNode() for each child (for some - recursively) - * of the given node. - * \sa ReadAll() - */ void Config_XMLReader::readRecursively(xmlNodePtr theParent) { if (!theParent) @@ -143,12 +125,10 @@ void Config_XMLReader::readRecursively(xmlNodePtr theParent) if (processChildren(aNode)) { readRecursively(aNode); } + cleanup(aNode); } } -/* - * void* -> xmlNodePtr - */ xmlNodePtr Config_XMLReader::node(void* theNode) { return static_cast(theNode); @@ -164,23 +144,43 @@ std::string Config_XMLReader::getNodeName(xmlNodePtr theNode) return result; } -void Config_XMLReader::processValidator(xmlNodePtr theNode) +void Config_XMLReader::storeAttribute(xmlNodePtr theNode, const char* theAttribute, bool doClean) { - Events_ID aValidatoEvent = Events_Loop::eventByName(EVENT_VALIDATOR_LOADED); - Events_Loop* aEvLoop = Events_Loop::loop(); - std::shared_ptr - aMessage(new Config_ValidatorMessage(aValidatoEvent, this)); - std::string aValidatorId; - std::list aValidatorParameters; - getValidatorInfo(theNode, aValidatorId, aValidatorParameters); - aMessage->setValidatorId(aValidatorId); - aMessage->setValidatorParameters(aValidatorParameters); - xmlNodePtr aFeatureOrWdgNode = theNode->parent; - if (isNode(aFeatureOrWdgNode, NODE_FEATURE, NULL)) { - aMessage->setFeatureId(getProperty(aFeatureOrWdgNode, _ID)); - } else { - aMessage->setAttributeId(getProperty(aFeatureOrWdgNode, _ID)); - aMessage->setFeatureId(myCurrentFeature); + std::string aKey = getNodeName(theNode) + ":" + std::string(theAttribute); + std::string aValue = getProperty(theNode, theAttribute); + if (doClean || !aValue.empty()) { + myCachedAttributes[aKey] = aValue; } - aEvLoop->send(aMessage); +} + +std::string Config_XMLReader::restoreAttribute(xmlNodePtr theNode, const char* theAttribute) +{ + return restoreAttribute(getNodeName(theNode).c_str(), theAttribute); +} + +std::string Config_XMLReader::restoreAttribute(const char* theNodeName, const char* theAttribute) +{ + std::string aKey = std::string(theNodeName) + ":" + std::string(theAttribute); + std::string result = ""; + if(myCachedAttributes.find(aKey) != myCachedAttributes.end()) { + result = myCachedAttributes[aKey]; + } + 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; }