Salome HOME
Parameters for the filters are similar to the parameters of validators.
[modules/shaper.git] / src / Config / Config_Common.cpp
1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D\r
2 \r
3 /*\r
4  * Config_Common.cpp\r
5  *\r
6  *  Created on: Apr 17, 2014\r
7  *      Author: sbh\r
8  */\r
9 \r
10 #include "Config_Common.h"\r
11 #include <Config_Keywords.h>\r
12 \r
13 #include <libxml/parser.h>\r
14 #include <libxml/tree.h>\r
15 \r
16 #include <sstream> // for stringstream\r
17 \r
18 #include <string>\r
19 #include <algorithm> // for std::transform\r
20 \r
21 bool isElementNode(xmlNodePtr theNode)\r
22 {\r
23   return theNode->type == XML_ELEMENT_NODE;\r
24 }\r
25 \r
26 bool isNode(xmlNodePtr theNode, const char* theNodeName, ...)\r
27 {\r
28   bool result = false;\r
29   const xmlChar* aName = theNode->name;\r
30   if (!aName || !isElementNode(theNode)) {\r
31     return false;\r
32   }\r
33   if (!xmlStrcmp(aName, (const xmlChar *) theNodeName)) {\r
34     return true;\r
35   }\r
36   va_list args;  // define argument list variable\r
37   va_start(args, theNodeName);  // init list; point to last defined argument\r
38   while (true) {\r
39     char *anArg = va_arg (args, char*);  // get next argument\r
40     if (anArg == NULL)\r
41       break;\r
42     if (!xmlStrcmp(aName, (const xmlChar *) anArg)) {\r
43       va_end(args);  // cleanup the system stack\r
44       return true;\r
45     }\r
46   }\r
47   va_end(args);  // cleanup the system stack\r
48   return false;\r
49 }\r
50 \r
51 bool isWidgetNode(xmlNodePtr theNode)\r
52 {\r
53   if(!isElementNode(theNode))\r
54     return false;\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
58     return false;\r
59 \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
62 }\r
63 \r
64 bool hasChild(xmlNodePtr theNode)\r
65 {\r
66   xmlNodePtr aNode = theNode->children;\r
67   for (; aNode; aNode = aNode->next) {\r
68     if (isElementNode(theNode)) {\r
69       return true;\r
70     }\r
71   }\r
72   return false;\r
73 }\r
74 \r
75 bool getParametersInfo(xmlNodePtr theNode, std::string& outValidatorId,\r
76                       std::list<std::string>& outValidatorParameters)\r
77 {\r
78   //Validator id:\r
79   char* anIdProp = (char*) xmlGetProp(theNode, BAD_CAST _ID);\r
80   if (!anIdProp || anIdProp[0] == 0) {\r
81     return false;\r
82   }\r
83   outValidatorId = std::string(anIdProp);\r
84 \r
85   //Validator 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 aValidatorParameter;\r
92     while (std::getline(aPropStringStream, aValidatorParameter, ',')) {\r
93       outValidatorParameters.push_back(aValidatorParameter);\r
94     }\r
95   }\r
96   return true;\r
97 }\r
98 \r
99 std::string library(const std::string& theLibName)\r
100 {\r
101   if(theLibName.empty())\r
102     return std::string();\r
103   std::string aLibName = theLibName;\r
104 #ifndef WIN32\r
105   static std::string aLibExt( ".so" );\r
106   if (aLibName.size() < 3 || aLibName.substr(0, 3) !="lib") {\r
107     aLibName = "lib" + aLibName;\r
108   }\r
109 #else\r
110   static std::string aLibExt(".dll");\r
111 #endif\r
112   std::string anExt = aLibName.substr(aLibName.size() - 4);\r
113   if (anExt != aLibExt)\r
114     aLibName += aLibExt;\r
115 \r
116   return aLibName;\r
117 }\r
118 \r
119 std::string getProperty(xmlNodePtr theNode, const char* thePropName)\r
120 {\r
121   std::string result = "";\r
122   char* aPropChars = (char*) xmlGetProp(theNode, BAD_CAST thePropName);\r
123   if (!aPropChars || aPropChars[0] == 0)\r
124     return result;\r
125   result = std::string(aPropChars);\r
126   return result;\r
127 }\r
128 \r
129 bool getBooleanAttribute(xmlNodePtr theNode, const char* theAttributeName, bool theDefault)\r
130 {\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
135     result = true;\r
136   } else if (prop == "false" || prop == "0") {\r
137     result = false;\r
138   }\r
139   return result;\r
140 }\r