Salome HOME
[bos #37341][CEA] KERNEL_SALOME_COMMAND_TestLauncherSimple. Fixed compilation error...
[modules/kernel.git] / src / Container / SALOME_ContainerManager.cxx
index f56ad70dd98bad263193612e9a7f71ac0a8f54d0..15bc6edec3f2bd24ee520a60455168b13cbba5f8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2022  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2023  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -279,6 +279,27 @@ void SALOME_ContainerManager::ShutdownContainers()
   }
 }
 
+void SALOME_ContainerManager::SetOverrideEnvForContainers(const Engines::KeyValDict& env)
+{
+  this->_override_env.clear();
+  auto sz = env.length();
+  for(auto i = 0 ; i < sz ; ++i)
+    _override_env.emplace_back(env[i].key.in(), env[i].val.in());
+}
+
+Engines::KeyValDict *SALOME_ContainerManager::GetOverrideEnvForContainers()
+{
+  std::unique_ptr<Engines::KeyValDict> ret( new Engines::KeyValDict );
+  auto sz = _override_env.size();
+  ret->length(sz);
+  for(auto i = 0 ; i < sz ; ++i)
+  {
+    (*ret)[i].key = CORBA::string_dup( _override_env[i].first.c_str() );
+    (*ret)[i].val = CORBA::string_dup( _override_env[i].second.c_str() );
+  }
+  return ret.release();
+}
+
 //=============================================================================
 //! Give a suitable Container given constraints
 /*! CORBA Method:
@@ -439,6 +460,20 @@ Engines::Container_ptr SALOME_ContainerManager::GiveContainer(const Engines::Con
       if (!CORBA::is_nil(cont))
       {
         INFOS("[GiveContainer] container " << containerNameInNS << " launched");
+        std::ostringstream envInfo;
+        std::for_each( _override_env.begin(), _override_env.end(), [&envInfo](const std::pair<std::string,std::string>& p) { envInfo << p.first << " = " << p.second << std::endl; } );
+        INFOS("[GiveContainer] container " << containerNameInNS << " override " << envInfo.str());
+        Engines::FieldsDict envCorba;
+        {
+          auto sz = _override_env.size();
+          envCorba.length(sz);
+          for(auto i = 0 ; i < sz ; ++i)
+          {
+            envCorba[i].key = CORBA::string_dup( _override_env[i].first.c_str() );
+            envCorba[i].value <<= CORBA::string_dup( _override_env[i].second.c_str() );
+          }
+        }
+        cont->override_environment_python( envCorba );
         return cont._retn();
       }
       else