Salome HOME
updated copyright message
[modules/shaper.git] / src / Config / Config_XMLReader.cpp
index 0ab7ce325ab49fb54694def552a30ed183b7d54d..a9c56d7de1acb8c18b163c42197791899702ffbc 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2017  CEA/DEN, EDF R&D
+// Copyright (C) 2014-2023  CEA, EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 //
 // You should have received a copy of the GNU Lesser General Public
 // License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-// See http://www.salome-platform.org/ or
-// email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
 #include <Config_XMLReader.h>
     static const char FSEP = '/';
 #endif
 
-Config_XMLReader::Config_XMLReader(const std::string& theXmlFileName)
+Config_XMLReader::Config_XMLReader(const std::string& theXmlFileName, bool isXMLContent)
     : myXmlDoc(NULL), myRootFileName(theXmlFileName)
 {
-  myDocumentPath = findConfigFile(theXmlFileName);
-  if (myDocumentPath.empty()) {
-    Events_InfoMessage("Config_XMLReader", "Unable to open %1").arg(theXmlFileName).send();
+  isFromMemory = isXMLContent;
+  if (!isXMLContent) {
+    myDocumentPath = findConfigFile(theXmlFileName);
+    if (myDocumentPath.empty()) {
+      Events_InfoMessage("Config_XMLReader", "Unable to open %1").arg(theXmlFileName).send();
+    }
   }
 }
 
@@ -60,6 +62,23 @@ Config_XMLReader::~Config_XMLReader()
   xmlFreeDoc(myXmlDoc);
 }
 
+// LCOV_EXCL_START
+std::string Config_XMLReader::resourcesConfigFile()
+{
+  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("CADBUILDER_ROOT_DIR");
+    if (anEnv) {
+      aValue = std::string(anEnv) + FSEP + "resources";
+    }
+  }
+  return aValue;
+}
+
 std::string Config_XMLReader::pluginConfigFile()
 {
   std::string aValue;
@@ -68,13 +87,14 @@ std::string Config_XMLReader::pluginConfigFile()
     aValue = std::string(anEnv) +
       FSEP + "share" + FSEP + "salome" + FSEP + "resources" + FSEP + "shaper";
   } else {
-    anEnv = getenv("OPENPARTS_ROOT_DIR");
+    anEnv = getenv("CADBUILDER_ROOT_DIR");
     if (anEnv) {
       aValue = std::string(anEnv) + FSEP + "plugins";
     }
   }
   return aValue;
 }
+// LCOV_EXCL_STOP
 
 std::string Config_XMLReader::findConfigFile(const std::string theFileName, const int theFindIndex)
 {
@@ -91,14 +111,15 @@ std::string Config_XMLReader::findConfigFile(const std::string theFileName, cons
       if (aSolution == 1)
         anEnvName<<"SHAPER_ROOT_DIR";
       else if (aSolution == 2)
-        anEnvName<<"OPENPARTS_ROOT_DIR";
+        anEnvName<<"CADBUILDER_ROOT_DIR";
       else
-        anEnvName<<"OPENPARTS_PLUGINS_DIR";
+        anEnvName<<"CADBUILDER_ROOT_DIR";
 
       char* anEnv = getenv(anEnvName.str().c_str());
       if (!anEnv)
         continue;
       if (aSolution > 2) { // there may be several paths separated by ";" symbol
+// LCOV_EXCL_START
         std::string anEnvPart = anEnv;
         size_t aPosStart = 0, aPosEnd;
         for(int aSubNum = 0; aSubNum < aSolution - 3; aSubNum++) {
@@ -114,6 +135,7 @@ std::string Config_XMLReader::findConfigFile(const std::string theFileName, cons
         aPosEnd = anEnvPart.find(';', aPosStart);
         aFileName = anEnvPart.substr(aPosStart,
           aPosEnd == std::string::npos ? aPosEnd : aPosEnd - aPosStart) + FSEP;
+// LCOV_EXCL_STOP
       } else {
         aFileName = std::string(anEnv) + FSEP;
       }
@@ -129,7 +151,7 @@ std::string Config_XMLReader::findConfigFile(const std::string theFileName, cons
       if (aResultIndex == theFindIndex)
         return aFileName;
       aResultIndex++;
-      if (aSolution == 1) // don't allow SHAPER and OpenParts paths treated simultaneously
+      if (aSolution == 1) // don't allow SHAPER and CADBuilder paths treated simultaneously
         aSolution++;
     }
   }
@@ -138,6 +160,13 @@ std::string Config_XMLReader::findConfigFile(const std::string theFileName, cons
 
 void Config_XMLReader::readAll()
 {
+  if (isFromMemory) {
+    myXmlDoc = xmlParseMemory(myRootFileName.c_str(), (int)myRootFileName.length());
+    xmlNodePtr aRoot = xmlDocGetRootElement(myXmlDoc);
+    readRecursively(aRoot);
+    return;
+  }
+
   // to load external modules dependencies (like GEOM for Connector Feature)
   Config_ModuleReader::loadScript("salome.shaper.initConfig", false);
 
@@ -173,10 +202,12 @@ void Config_XMLReader::cleanup(xmlNodePtr)
   // do nothing;
 }
 
-bool Config_XMLReader::processChildren(xmlNodePtr aNode)
+// LCOV_EXCL_START
+bool Config_XMLReader::processChildren(xmlNodePtr /*aNode*/)
 {
   return true;
 }
+// LCOV_EXCL_STOP
 
 xmlNodePtr Config_XMLReader::findRoot(const std::string theDocumentPath)
 {
@@ -218,10 +249,12 @@ void Config_XMLReader::readRecursively(xmlNodePtr theParent)
   }
 }
 
+// LCOV_EXCL_START
 xmlNodePtr Config_XMLReader::node(void* theNode)
 {
   return static_cast<xmlNodePtr>(theNode);
 }
+// LCOV_EXCL_STOP
 
 std::string Config_XMLReader::getNodeName(xmlNodePtr theNode)
 {
@@ -242,10 +275,12 @@ void Config_XMLReader::storeAttribute(xmlNodePtr theNode, const char* theAttribu
   }
 }
 
+// LCOV_EXCL_START
 std::string Config_XMLReader::restoreAttribute(xmlNodePtr theNode, const char* theAttribute)
 {
   return restoreAttribute(getNodeName(theNode).c_str(), theAttribute);
 }
+// LCOV_EXCL_STOP
 
 std::string Config_XMLReader::restoreAttribute(const char* theNodeName, const char* theAttribute)
 {
@@ -274,7 +309,9 @@ bool Config_XMLReader::cleanupAttribute(const char* theNodeName, const char* the
   return result;
 }
 
+// LCOV_EXCL_START
 const char* Config_XMLReader::encoding() const
 {
   return (const char*) myXmlDoc->encoding;
-}
\ No newline at end of file
+}
+// LCOV_EXCL_STOP