Salome HOME
Porting SALOME KERNEL to CMake
[modules/kernel.git] / src / ResourcesManager / SALOME_ResourcesCatalog_Handler.cxx
index d4faed75c3df3f66f1b2161962a5e65cd6940075..f65db96c038e02206a098dba67123dff16560971 100755 (executable)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2011  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -69,6 +69,8 @@ SALOME_ResourcesCatalog_Handler(MapOfParserResourcesType& resources_list): _reso
   test_user_commands = "userCommands";
   test_use = "use";
   test_members = "members";
+  test_is_cluster_head = "isClusterHead";
+  test_working_directory = "workingDirectory";
 }
 
 //=============================================================================
@@ -522,6 +524,8 @@ SALOME_ResourcesCatalog_Handler::ProcessMachine(xmlNodePtr machine_descr, Parser
       resource.Batch = slurm;
     else if  (aBatch == "ll")
       resource.Batch = ll;
+    else if  (aBatch == "vishnu")
+      resource.Batch = vishnu;
     else
       resource.Batch = none;
   }
@@ -596,6 +600,36 @@ SALOME_ResourcesCatalog_Handler::ProcessMachine(xmlNodePtr machine_descr, Parser
     xmlFree(nb_of_proc_per_node);
   }
 
+  if (xmlHasProp(machine_descr, (const xmlChar*)test_is_cluster_head))
+  {
+    xmlChar* is_cluster_head = xmlGetProp(machine_descr, (const xmlChar*)test_is_cluster_head);
+    std::string str_ich = (const char*)is_cluster_head;
+    if (str_ich == "true")
+    {
+      resource.is_cluster_head = true;
+    }
+    else
+    {
+      resource.is_cluster_head = false;
+    }
+    xmlFree(is_cluster_head);
+  }
+  else
+  {
+    resource.is_cluster_head = false;
+  }
+
+  if (xmlHasProp(machine_descr, (const xmlChar*)test_working_directory))
+  {
+    xmlChar* working_directory = xmlGetProp(machine_descr, (const xmlChar*)test_working_directory);
+    resource.working_directory = (const char*)working_directory;
+    xmlFree(working_directory);
+  }
+  else
+  {
+    resource.working_directory = "";
+  }
+
   // Process children nodes
   xmlNodePtr aCurSubNode = machine_descr->xmlChildrenNode;
   while(aCurSubNode != NULL)
@@ -672,6 +706,11 @@ void SALOME_ResourcesCatalog_Handler::PrepareDocToXmlFile(xmlDocPtr theDoc)
     xmlNewProp(node,
                BAD_CAST test_cluster_internal_protocol,
                BAD_CAST ParserResourcesType::protocolToString((*iter).second.ClusterInternalProtocol).c_str());
+    xmlNewProp(node, BAD_CAST test_working_directory, BAD_CAST (*iter).second.working_directory.c_str());
+    if ((*iter).second.is_cluster_head)
+      xmlNewProp(node, BAD_CAST test_is_cluster_head, BAD_CAST "true");
+    else
+      xmlNewProp(node, BAD_CAST test_is_cluster_head, BAD_CAST "false");
 
     switch ((*iter).second.Mode)
     {
@@ -708,6 +747,9 @@ void SALOME_ResourcesCatalog_Handler::PrepareDocToXmlFile(xmlDocPtr theDoc)
       case ll:
         xmlNewProp(node, BAD_CAST test_batch, BAD_CAST "ll");
         break;
+      case vishnu:
+        xmlNewProp(node, BAD_CAST test_batch, BAD_CAST "vishnu");
+        break;
       default:
         xmlNewProp(node, BAD_CAST test_batch, BAD_CAST "");
     }