1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
\r
6 * Created on: Apr 17, 2014
\r
10 #include "Config_Common.h"
\r
11 #include <Config_Keywords.h>
\r
13 #include <libxml/parser.h>
\r
14 #include <libxml/tree.h>
\r
16 #include <sstream> // for stringstream
\r
19 #include <algorithm> // for std::transform
\r
21 bool isElementNode(xmlNodePtr theNode)
\r
23 return theNode->type == XML_ELEMENT_NODE;
\r
26 bool isNode(xmlNodePtr theNode, const char* theNodeName, ...)
\r
28 bool result = false;
\r
29 const xmlChar* aName = theNode->name;
\r
30 if (!aName || !isElementNode(theNode)) {
\r
33 if (!xmlStrcmp(aName, (const xmlChar *) theNodeName)) {
\r
36 va_list args; // define argument list variable
\r
37 va_start(args, theNodeName); // init list; point to last defined argument
\r
39 char *anArg = va_arg (args, char*); // get next argument
\r
42 if (!xmlStrcmp(aName, (const xmlChar *) anArg)) {
\r
43 va_end(args); // cleanup the system stack
\r
47 va_end(args); // cleanup the system stack
\r
51 bool isWidgetNode(xmlNodePtr theNode)
\r
53 if(!isElementNode(theNode))
\r
55 // it's parent is "feature" or "source"
\r
56 xmlNodePtr aParentNode = theNode->parent;
\r
57 if(!isNode(aParentNode, NODE_FEATURE, NODE_SOURCE, NULL))
\r
60 //it should not be a "source" or a "validator" node
\r
61 return !isNode(theNode, NODE_SOURCE, NODE_VALIDATOR, NODE_SELFILTER, NULL);
\r
64 bool hasChild(xmlNodePtr theNode)
\r
66 xmlNodePtr aNode = theNode->children;
\r
67 for (; aNode; aNode = aNode->next) {
\r
68 if (isElementNode(theNode)) {
\r
75 bool getParametersInfo(xmlNodePtr theNode, std::string& outPropertyId,
\r
76 std::list<std::string>& outValidatorParameters)
\r
79 char* anIdProp = (char*) xmlGetProp(theNode, BAD_CAST _ID);
\r
80 if (!anIdProp || anIdProp[0] == 0) {
\r
83 outPropertyId = std::string(anIdProp);
\r
85 //Property parameters:
\r
86 char* aParamProp = (char*) xmlGetProp(theNode, BAD_CAST _PARAMETERS);
\r
87 if (aParamProp && aParamProp[0] != 0) {
\r
88 std::string aPropString = std::string(aParamProp);
\r
89 std::stringstream aPropStringStream(aPropString);
\r
90 char COMMA_DELIM = ',';
\r
91 std::string aParameter;
\r
92 while (std::getline(aPropStringStream, aParameter, ',')) {
\r
93 outValidatorParameters.push_back(aParameter);
\r
99 std::string library(const std::string& theLibName)
\r
101 if(theLibName.empty())
\r
102 return std::string();
\r
103 std::string aLibName = theLibName;
\r
105 static std::string aLibExt( ".so" );
\r
106 if (aLibName.size() < 3 || aLibName.substr(0, 3) !="lib") {
\r
107 aLibName = "lib" + aLibName;
\r
110 static std::string aLibExt(".dll");
\r
112 std::string anExt = aLibName.substr(aLibName.size() - 4);
\r
113 if (anExt != aLibExt)
\r
114 aLibName += aLibExt;
\r
119 std::string getProperty(xmlNodePtr theNode, const char* thePropName)
\r
121 std::string result = "";
\r
122 char* aPropChars = (char*) xmlGetProp(theNode, BAD_CAST thePropName);
\r
123 if (!aPropChars || aPropChars[0] == 0)
\r
125 result = std::string(aPropChars);
\r
129 bool getBooleanAttribute(xmlNodePtr theNode, const char* theAttributeName, bool theDefault)
\r
131 std::string prop = getProperty(theNode, theAttributeName);
\r
132 std::transform(prop.begin(), prop.end(), prop.begin(), ::tolower);
\r
133 bool result = theDefault;
\r
134 if (prop == "true" || prop == "1") {
\r
136 } else if (prop == "false" || prop == "0") {
\r