]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
Merge from V6_main
authorbarate <barate>
Mon, 6 Feb 2012 10:20:59 +0000 (10:20 +0000)
committerbarate <barate>
Mon, 6 Feb 2012 10:20:59 +0000 (10:20 +0000)
23 files changed:
bin/launchConfigureParser.py
bin/runSalome.py
bin/server.py
salome_adm/cmake_files/FindSPHINX.cmake [new file with mode: 0755]
salome_adm/cmake_files/Makefile.am
salome_adm/cmake_files/am2cmake.py
salome_adm/cmake_files/prepare_generating_doc.py [new file with mode: 0755]
src/Container/SALOME_ContainerManager.cxx
src/Container/SALOME_ContainerManager.hxx
src/Container/SALOME_ContainerPy.py
src/KERNEL_PY/__init__.py
src/KERNEL_PY/kernel/parametric/study_exchange_vars.py
src/KERNEL_PY/kernel/services.py
src/Launcher/Launcher_Job.cxx
src/Launcher/Launcher_Job_SALOME.cxx
src/Launcher/Makefile.am
src/ResourcesManager/Makefile.am
src/ResourcesManager/SALOME_ResourcesCatalog_Handler.cxx
src/ResourcesManager/SALOME_ResourcesCatalog_Parser.cxx
src/ResourcesManager/SALOME_ResourcesCatalog_Parser.hxx
src/ResourcesManager/SALOME_ResourcesManager.cxx
src/SALOMEDSImpl/SALOMEDSImpl_StudyManager.cxx
src/SALOMEDSImpl/SALOMEDSImpl_Tool.cxx

index caf138cd1e02e91dfdc8839616bc583d3f94d3c8..f273e73647f01221ff1f42a5b88892072fd0fb8f 100755 (executable)
@@ -746,13 +746,14 @@ def CreateOptionParser (theAdditionalOptions=[]):
                                 dest="wake_up_session", default=False,
                                 help=help_str)
 
-    # Launch server processes with a specific command. Default: False.
-    help_str = "Launch server processes with a specific command."
-    o_slc = optparse.Option("--server-launch-cmd",
-                            metavar="<server_launch_cmd>",
-                            type="string",
+    # server launch mode
+    help_str = "Mode used to launch server processes (daemon or fork)."
+    o_slm = optparse.Option("--server-launch-mode",
+                            metavar="<server_launch_mode>",
+                            type="choice",
+                            choices=["daemon","fork"],
                             action="store",
-                            dest="server_launch_cmd",
+                            dest="server_launch_mode",
                             help=help_str)
 
     # All options
@@ -783,7 +784,7 @@ def CreateOptionParser (theAdditionalOptions=[]):
                 o_shutdown,
                 o_foreground,
                 o_wake_up,
-                o_slc,   # Server launch command
+                o_slm,   # Server launch mode
                 ]
 
     #std_options = ["gui", "desktop", "log_file", "py_scripts", "resources",
@@ -1133,8 +1134,8 @@ def get_env(theAdditionalOptions=[], appname=salomeappname, cfgname=salomecfgnam
         args[play_nam] += re.split( "[:;,]", filename )
 
     # Server launch command
-    if cmd_opts.server_launch_cmd is not None:
-      args["server_launch_cmd"] = cmd_opts.server_launch_cmd
+    if cmd_opts.server_launch_mode is not None:
+      args["server_launch_mode"] = cmd_opts.server_launch_mode
 
     # return arguments
     os.environ[config_var] = separator.join(dirs)
index 5dd6137c6d22c49b405c529485d4535ab5841e80..9f52819dbcb3382b0cf015e490d5114ac3222f8a 100755 (executable)
@@ -418,8 +418,8 @@ def startSalome(args, modules_list, modules_root_dir):
     #
     # Set server launch command
     #
-    if args.has_key('server_launch_cmd'):
-        Server.set_server_launch_cmd(args['server_launch_cmd'])
+    if args.has_key('server_launch_mode'):
+        Server.set_server_launch_mode(args['server_launch_mode'])
     
     #
     # Wake up session option
index 3fde06b40c362b49397f0d9c5ae5cf8306b3e041..1f6d95c4465f861155e1899e1ebf6ab51b7df45f 100755 (executable)
@@ -34,7 +34,7 @@ process_id = {}
 class Server:
     """Generic class for CORBA server launch"""
     
-    server_launch_args = []
+    server_launch_mode = "daemon"
 
     def initArgs(self):
         self.PID=None
@@ -51,12 +51,11 @@ class Server:
         self.initArgs()
 
     @staticmethod
-    def set_server_launch_cmd(cmd):
-        if cmd == "srun":
-            Server.server_launch_args = ["srun", "-n", "1", "-N", "1"]
-            Server.server_launch_args += ["--share", "--nodelist=%s" % getHostName()]
-        else:
-            print >>sys.stderr, "Unknown server launch command:%s" % cmd
+    def set_server_launch_mode(mode):
+      if mode == "daemon" or mode == "fork":
+        Server.server_launch_mode = mode
+      else:
+        raise Exception("Unsupported server launch mode: %s" % mode)
 
     def run(self):
         global process_id
@@ -76,8 +75,9 @@ class Server:
           #pid = win32pm.spawnpid( cmd_str )
           pid = win32pm.spawnpid( string.join(command, " "), '-nc' )
           #pid = win32pm.spawnpid( string.join(command, " ") )
-        else:
-          #pid = os.spawnvp(os.P_NOWAIT, command[0], command)
+        elif Server.server_launch_mode == "fork":
+          pid = os.spawnvp(os.P_NOWAIT, command[0], command)
+        else: # Server launch mode is daemon
           pid=self.daemonize(command)
         if pid is not None:
           #store process pid if it really exists
@@ -134,9 +134,8 @@ class Server:
         #I am a daemon
         os.close(0) #close stdin
         os.open("/dev/null", os.O_RDWR)  # redirect standard input (0) to /dev/null
-        all_args = Server.server_launch_args + args
         try:
-          os.execvp(all_args[0], all_args)
+          os.execvp(args[0], args)
         except OSError, e:
           if args[0] != "notifd":
             print >>sys.stderr, "(%s) launch failed: %d (%s)" % (args[0],e.errno, e.strerror)
diff --git a/salome_adm/cmake_files/FindSPHINX.cmake b/salome_adm/cmake_files/FindSPHINX.cmake
new file mode 100755 (executable)
index 0000000..b116631
--- /dev/null
@@ -0,0 +1,98 @@
+# Copyright (C) 2007-2011  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
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# 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
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+# ------
+MESSAGE(STATUS "Check for sphinx ...")
+# ------
+
+IF(SPHINX_IS_MANDATORY STREQUAL 0)
+  SET(SPHINX_IS_MANDATORY 0)
+  SET(SPHINX_IS_OPTIONAL 1)
+ENDIF(SPHINX_IS_MANDATORY STREQUAL 0)
+IF(SPHINX_IS_OPTIONAL STREQUAL 0)
+  SET(SPHINX_IS_MANDATORY 1)
+  SET(SPHINX_IS_OPTIONAL 0)
+ENDIF(SPHINX_IS_OPTIONAL STREQUAL 0)
+IF(NOT SPHINX_IS_MANDATORY AND NOT SPHINX_IS_OPTIONAL)
+  SET(SPHINX_IS_MANDATORY 0)
+  SET(SPHINX_IS_OPTIONAL 1)
+ENDIF(NOT SPHINX_IS_MANDATORY AND NOT SPHINX_IS_OPTIONAL)
+
+# ------
+
+SET(SPHINX_STATUS 1)
+IF(WITHOUT_SPHINX OR WITH_SPHINX STREQUAL 0)
+  SET(SPHINX_STATUS 0)
+  MESSAGE(STATUS "sphinx disabled from command line.")
+ENDIF(WITHOUT_SPHINX OR WITH_SPHINX STREQUAL 0)
+
+# ------
+
+IF(SPHINX_STATUS)
+  IF(WITH_SPHINX)
+    SET(SPHINX_ROOT_USER ${WITH_SPHINX})
+  ENDIF(WITH_SPHINX)
+  IF(NOT SPHINX_ROOT_USER)
+    SET(SPHINX_ROOT_USER $ENV{SPHINX_ROOT})
+  ENDIF(NOT SPHINX_ROOT_USER)
+  IF(NOT SPHINX_ROOT_USER)
+    SET(SPHINX_ROOT_USER $ENV{SPHINXHOME})
+  ENDIF(NOT SPHINX_ROOT_USER)
+ENDIF(SPHINX_STATUS)
+
+# ------
+
+IF(SPHINX_STATUS)
+  SET(SPHINX_EXECUTABLE_TO_FIND sphinx-build)
+  IF(SPHINX_ROOT_USER)
+    SET(BINDIR)
+    IF(WINDOWS)
+  SET(BINDIR ${SPHINX_ROOT_USER}/Scripts)
+    ELSE(WINDOWS)
+  SET(BINDIR ${SPHINX_ROOT_USER}/bin)
+    ENDIF(WINDOWS)
+    FIND_PROGRAM(SPHINX_EXECUTABLE ${SPHINX_EXECUTABLE_TO_FIND} PATHS ${BINDIR} NO_DEFAULT_PATH)
+  ELSE(SPHINX_ROOT_USER)
+    FIND_PROGRAM(SPHINX_EXECUTABLE ${SPHINX_EXECUTABLE_TO_FIND})
+  ENDIF(SPHINX_ROOT_USER)
+  IF(SPHINX_EXECUTABLE)
+    MESSAGE(STATUS "${SPHINX_EXECUTABLE_TO_FIND} found: ${SPHINX_EXECUTABLE}")
+  ELSE(SPHINX_EXECUTABLE)
+    MESSAGE(STATUS "${SPHINX_EXECUTABLE_TO_FIND} not found, try to use WITH_SPHINX option or SPHINX_ROOT (or SPHINXHOME) environment variable")
+    SET(SPHINX_STATUS 0)
+  ENDIF(SPHINX_EXECUTABLE)
+ENDIF(SPHINX_STATUS)
+
+# ----
+
+IF(SPHINX_STATUS)
+  SET(SPHINX_IS_OK 1)
+ELSE(SPHINX_STATUS)
+  SET(SPHINX_IS_OK 0)
+  IF(SPHINX_IS_MANDATORY)
+    MESSAGE(FATAL_ERROR "sphinx not found ... mandatory ... abort")
+  ELSE(SPHINX_IS_MANDATORY)
+    MESSAGE(STATUS "sphinx not found ... optional ... disabled")
+  ENDIF(SPHINX_IS_MANDATORY)
+ENDIF(SPHINX_STATUS)
+
+# ----
index 4d2ef90bbace075870ca3c58cdd3d79cb1c28d87..50d715e454c26bb17a244e6699dca81cf8c2aec4 100644 (file)
@@ -38,5 +38,8 @@ FindPLATFORM.cmake \
 FindPTHREADS.cmake \
 FindPYTHON.cmake \
 FindSWIG.cmake \
+FindSPHINX.cmake \
 install_python_from_idl.cmake \
 install_and_compile_python_file.cmake
+
+bin_SCRIPTS = prepare_generating_doc.py
index b93e4bfaf2dabc574602fa1829a4ed4d29a62e94..8c1da811480540d5414eb7c550d5ccbc3b2c936d 100644 (file)
@@ -286,6 +286,8 @@ class CMakeFile(object):
             "ToolsGUI",
             "ViewerTools",
             "VTKViewer",
+            "vtkEDFOverloads",
+            "vtkTools"
             ]
         geom_list = [
             "AdvancedGUI",
@@ -316,6 +318,7 @@ class CMakeFile(object):
             "IGESExport",
             "IGESImport",
             "MeasureGUI",
+           "Material",
             "NMTDS",
             "NMTTools",
             "OCC2VTK",
@@ -394,6 +397,7 @@ class CMakeFile(object):
         # --
         for key in full_list:
             content = content.replace("-l%s"%(key), "${%s}"%(key))
+         
             pass
         
         # --
@@ -493,6 +497,7 @@ class CMakeFile(object):
                     INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindDOXYGEN.cmake)
                     INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindMPI.cmake)
                     INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindLIBBATCH.cmake)
+                    INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindSPHINX.cmake)
                     """)
                     pass
                 else:
@@ -573,8 +578,15 @@ class CMakeFile(object):
                             INCLUDE(${GEOM_ROOT_DIR}/adm_local/cmake_files/FindGEOM.cmake)
                             INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMEDFILE.cmake)
                             INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMED.cmake)
+                            INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindSPHINX.cmake)
                             """)
                             pass
+                        if self.module == "geom":
+                            newlines.append("""
+                            INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindSPHINX.cmake)
+                            """)
+                            pass
+
                         if self.module == "netgenplugin":
                             newlines.append("""
                             SET(GEOM_ROOT_DIR $ENV{GEOM_ROOT_DIR})
@@ -628,6 +640,7 @@ class CMakeFile(object):
                             newlines.append("""
                             INCLUDE(${CMAKE_SOURCE_DIR}/adm/cmake/FindEXPAT.cmake)
                             INCLUDE(${CMAKE_SOURCE_DIR}/adm/cmake/FindGRAPHVIZ.cmake)
+                            INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindSPHINX.cmake)
                             """)
                             pass
                         if self.module == "hxx2salome":
@@ -772,6 +785,7 @@ class CMakeFile(object):
             # --
             newlines.append("""
             set(VERSION 6.4.0)
+            set(SHORT_VERSION 6.4)
             set(XVERSION 0x060400)
             """)
             pass
@@ -1021,13 +1035,6 @@ class CMakeFile(object):
         
         # --
         fields = value.split()
-
-        #rnv: Temporary solution for windows platform:
-        #rnv: To remove GUI_SRC/tools directory, because it contains shell scripts
-        #rnv: Will be fixed in the future
-        from sys import platform
-        if platform == "win32" and self.module == 'gui' and self.root[-len('GUI_SRC'):] == 'GUI_SRC' and key.endswith("SUBDIRS"): 
-          fields.remove("tools")
         
         for i in range(len(fields)):
             newlines.append("%s    %s"%(spaces, fields[i]))
@@ -1120,6 +1127,14 @@ class CMakeFile(object):
                 self.files.append("resources/SalomeApp.xml.in")
                 pass
             pass
+            from os import path
+            if operator.contains(self.root, 'YACS_SRC'+path.sep+'doc'):
+                newlines.append(r'''
+                SET(srcdir 
+                  ${CMAKE_CURRENT_SOURCE_DIR}
+                )
+                ''')
+            
         if self.module == "jobmanager":
             key = "salomegui"
             if self.root[-len(key):] == key:
@@ -1185,7 +1200,7 @@ class CMakeFile(object):
             VERBATIM 
             WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}             
             )"""%(input, copytree_src, doc_gui_destination, doc_source, doc_gui_destination, head_source, doc_gui_destination))
-                
+        from os import path
         if mod in ['geom', 'smesh', 'visu'] and self.root[-len(mod):] == upmod and operator.contains(self.root, 'doc'):
             ign = r"""'tempfile', '*usr_docs*', '*CMakeFiles*', '*.cmake', 'doxyfile*', '*.vcproj', 'static', 'Makefile*'"""
             if mod in ['geom', 'smesh']:
@@ -1212,6 +1227,42 @@ class CMakeFile(object):
                 VERBATIM 
                 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}             
                 )"""%(copytree_src, doc_gui_destination, doc_gui_destination, ign, head_source, doc_gui_destination))
+        elif mod == 'yacs' and operator.contains(self.root, upmod + '_SRC'+path.sep+'doc'):
+            from sys import platform
+            params = '';
+            if platform == "win32":
+                params = '-Q';
+            newlines.append(r"""
+            ADD_CUSTOM_TARGET(html_docs ${SPHINX_EXECUTABLE} %s -c ${CMAKE_BINARY_DIR}/doc -b html ${ALLSPHINXOPTS} html
+            COMMAND ${PYTHON_EXECUTABLE} -c \"import shutil\;shutil.rmtree('''%s''', True)\;shutil.copytree('''${CMAKE_CURRENT_BINARY_DIR}/html''', '''%s''')\"
+            WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})"""%(params, doc_gui_destination, doc_gui_destination))              
+       elif mod in ['kernel', 'smesh', 'geom'] and operator.contains(self.root, upmod + '_SRC'+path.sep+'doc'+path.sep+'docutils'):
+            from sys import platform
+            params = ""
+            ext = ""
+            prf = ""
+            if platform == "win32":
+                params = '-Q';
+                ext = "bat"
+                prf = "call"
+            else:
+                ext = "sh"
+                prf = ". "
+            doc_gui_destination = "${CMAKE_INSTALL_PREFIX}/share/doc/salome/tui/%s/docutils"%(upmod)
+            scr = self.writeEnvScript(upmod)                   
+            newlines.append(r"""
+            IF(WINDOWS)
+               STRING(REPLACE "/" "\\" SCR "%s")
+            ELSE(WINDOWS)
+               SET(SCR "%s")
+            ENDIF(WINDOWS)
+            FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/env_s.%s "${SCR}")
+            ADD_CUSTOM_TARGET(html_docs %s ${CMAKE_CURRENT_BINARY_DIR}/env_s.%s && ${SPHINX_EXECUTABLE} %s -c ${CMAKE_BINARY_DIR}/doc/docutils -W -b html ${ALLSPHINXOPTS} html
+            COMMAND ${PYTHON_EXECUTABLE} -c \"import shutil\;shutil.rmtree('''%s''', True)\;shutil.copytree('''${CMAKE_CURRENT_BINARY_DIR}/html''', '''%s''')\"
+            WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})"""%(scr,scr,ext,prf,ext,params, doc_gui_destination, doc_gui_destination))
+
+
+
 
   # --
   # add commands for generating of developer's documentation
@@ -1268,7 +1319,7 @@ class CMakeFile(object):
         
         # --
         # --
-        for key in ["lib_LTLIBRARIES", "noinst_LTLIBRARIES", "salomepyexec_LTLIBRARIES"]:
+        for key in ["lib_LTLIBRARIES", "noinst_LTLIBRARIES", "salomepyexec_LTLIBRARIES", "libparaview_LTLIBRARIES"] :
             if self.__thedict__.has_key(key):
                 self.addLibTarget(key, newlines)
                 pass
@@ -1596,14 +1647,14 @@ class CMakeFile(object):
             
             ADD_CUSTOM_COMMAND(
             OUTPUT QDialogTest.ui QDialogTest.hxx QDialogTest.cxx
-            COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/dlgfactory.sh -n QDialogTest -t qdialog
-            DEPENDS __QDIALOG__.ui __QDIALOG__.hxx __QDIALOG__.cxx dlgfactory.sh
+            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/dlgfactory.py -n QDialogTest -t qdialog
+            DEPENDS __QDIALOG__.ui __QDIALOG__.hxx __QDIALOG__.cxx dlgfactory.py
             )
             
             ADD_CUSTOM_COMMAND(
             OUTPUT GDialogTest.ui GDialogTest.hxx GDialogTest.cxx
-            COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/dlgfactory.sh -n GDialogTest -t gdialog
-            DEPENDS __GDIALOG__.ui __GDIALOG__.hxx __GDIALOG__.cxx dlgfactory.sh
+            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/dlgfactory.py -n GDialogTest -t gdialog
+            DEPENDS __GDIALOG__.ui __GDIALOG__.hxx __GDIALOG__.cxx dlgfactory.py
             )
             ''')
             pass
@@ -2092,6 +2143,10 @@ class CMakeFile(object):
                 newlines.append(r'''
                 SET(DEST lib)
                 ''')
+            elif key == "libparaview_LTLIBRARIES":
+                newlines.append(r'''
+                SET(DEST lib/paraview)
+                ''')                
             else:
                 newlines.append(r'''
                 SET(DEST lib/salome)
@@ -2365,7 +2420,72 @@ class CMakeFile(object):
         f.write(self.content)
         f.close()
         return
-    
+
+    def writeEnvScript(self, upmod):
+        from sys import platform, version_info
+        p_version = """%s.%s"""%(version_info[0],version_info[1])
+        python_path ="PYTHONPATH"
+        path = ""
+        begin = ""
+        end = ""
+        delim = ""
+        cmd = ""
+        pdir = ""
+        omni = ""
+       omni_py = ""
+        if platform == "win32" :               
+            path = "PATH"
+            begin = "%"
+            end = "%"
+            delim = ";"
+            cmd = "@SET "
+            omni = "/x86_win32"
+            omni_py = "/python"
+            pdir = "PDIR"
+        else:
+            path = "LD_LIBRARY_PATH"
+            begin = "\${"
+            end = "}"
+            delim = ":"
+            cmd = "export "
+            omni_py = "/python" + p_version + "/" + "site-packages"
+            pdir = "INST_ROOT"
+
+            
+        path_ = begin + path + end
+        root_dir_ = begin + upmod + "_ROOT_DIR" + end  
+        python_path_ = begin + python_path + end
+        _python_path_ = delim + python_path_+ "\n"
+        _path_ = delim + path_+ "\n" 
+        _pdir = begin + pdir + end 
+           
+        
+        script = cmd + " " + python_path + "=" + root_dir_+"/lib/python" + p_version \
+        + "/site-packages/salome" + _python_path_ 
+        
+        script = script + cmd + " " + python_path + "=" + root_dir_+"/bin/salome" + \
+        _python_path_
+
+        script = script + cmd + " "+ path + "=" + root_dir_+"/lib/salome"+ _path_
+
+       if upmod == "KERNEL" :
+            script = script + cmd + " " +  python_path + "=" + _pdir + \
+            "/omniORB-4.1.5/lib" + omni + _python_path_
+        
+            script = script + cmd + " " + python_path + "=" + _pdir + \
+            "/omniORB-4.1.5/lib" + omni_py + _python_path_
+        
+            script = script + cmd + " "+ path + "=" + _pdir+ "/omniORB-4.1.5/lib" + \
+            omni + _path_
+
+        if upmod == "GEOM" :
+            script = self.writeEnvScript("KERNEL") + script
+            script = self.writeEnvScript("GUI") + script
+
+        if upmod == "SMESH" :
+            script = self.writeEnvScript("GEOM") + script
+
+        return script    
     pass
 
 def convertAmFile(the_root, root, dirs, files, f, module):
diff --git a/salome_adm/cmake_files/prepare_generating_doc.py b/salome_adm/cmake_files/prepare_generating_doc.py
new file mode 100755 (executable)
index 0000000..5992979
--- /dev/null
@@ -0,0 +1,25 @@
+#!/usr/bin/env python
+
+import sys, re
+outfile = open(sys.argv[1], 'wb')
+isCom = False
+for line in open(sys.argv[2], 'rb').readlines():
+    if re.match('class '+sys.argv[3]+'DC', line): 
+        continue
+    n = line.find('"""')
+    n1 = line[(n+2):].find('"""')
+    if (n > -1) and (n1 > -1):
+        continue
+    if isCom:
+        if n > -1:
+            isCom = False
+        continue
+    else:
+        if n > -1:
+            isCom = True
+            continue       
+    line = re.sub(r'^\s+#', '#', line) 
+    line = re.sub(r'^\s+def', 'def', line) 
+    line = re.sub(sys.argv[3]+'DC', sys.argv[3], line)
+    outfile.write(line)
+outfile.close()
\ No newline at end of file
index 8ad253294df2c64edc3fdf6e57b9863222531ba8..f8fde37597ea2cba33e0d7fd8c978ec5c3563bc5 100644 (file)
@@ -444,10 +444,10 @@ SALOME_ContainerManager::GiveContainer(const Engines::ContainerParameters& param
   std::string command;
   // if a parallel container is launched in batch job, command is: "mpirun -np nbproc -machinefile nodesfile SALOME_MPIContainer"
   if( getenv("LIBBATCH_NODEFILE") != NULL && params.isMPI )
-    command = BuildCommandToLaunchLocalContainer(resource_selected, params, machFile, container_exe);
+    command = BuildCommandToLaunchLocalContainer(params, machFile, container_exe);
   // if a container is launched on localhost, command is "SALOME_Container" or "mpirun -np nbproc SALOME_MPIContainer"
   else if(hostname == Kernel_Utils::GetHostname())
-    command = BuildCommandToLaunchLocalContainer(resource_selected, params, machFile, container_exe);
+    command = BuildCommandToLaunchLocalContainer(params, machFile, container_exe);
   // if a container is launched in remote mode, command is "ssh resource_selected SALOME_Container" or "ssh resource_selected mpirun -np nbproc SALOME_MPIContainer"
   else
     command = BuildCommandToLaunchRemoteContainer(resource_selected, params, container_exe);
@@ -652,7 +652,7 @@ SALOME_ContainerManager::BuildCommandToLaunchRemoteContainer
 
     // "ssh -l user machine distantPath/runRemote.sh hostNS portNS WORKINGDIR workingdir \
     //  SALOME_Container containerName &"
-    command = getCommandToRunProcess(resInfo.Protocol, resInfo.HostName, resInfo.UserName);
+    command = getCommandToRunRemoteProcess(resInfo.Protocol, resInfo.HostName, resInfo.UserName);
 
     if (resInfo.AppliPath != "")
       command += resInfo.AppliPath; // path relative to user@machine $HOME
@@ -722,7 +722,7 @@ SALOME_ContainerManager::BuildCommandToLaunchRemoteContainer
 //=============================================================================
 std::string
 SALOME_ContainerManager::BuildCommandToLaunchLocalContainer
-(const std::string & resource_name, const Engines::ContainerParameters& params, const std::string& machinesFile, const std::string& container_exe)
+(const Engines::ContainerParameters& params, const std::string& machinesFile, const std::string& container_exe)
 {
   _TmpFileName = BuildTemporaryFileName();
   std::string command;
@@ -793,9 +793,6 @@ SALOME_ContainerManager::BuildCommandToLaunchLocalContainer
             }
         }
 
-      const ParserResourcesType& resInfo = _ResManager->GetImpl()->GetResourcesDescr(resource_name);
-      o << getCommandToRunProcess(resInfo.Protocol);
-
       if (isPythonContainer(params.container_name))
         o << "SALOME_ContainerPy.py ";
       else
@@ -1167,48 +1164,39 @@ std::set<pid_t> SALOME_ContainerManager::getpidofprogram(const std::string progr
   return thepids;
 }
 
-std::string SALOME_ContainerManager::getCommandToRunProcess(AccessProtocolType protocol,
-                                                            const std::string & hostname,
-                                                            const std::string & username)
+std::string SALOME_ContainerManager::getCommandToRunRemoteProcess(AccessProtocolType protocol,
+                                                                  const std::string & hostname,
+                                                                  const std::string & username)
 {
-  std::string hostRealName = hostname;
-  std::string localHostRealName = Kernel_Utils::GetHostname();
-  bool isLocal = false;
-  if (hostname == "localhost" || hostname == localHostRealName)
-  {
-    isLocal = true;
-    hostRealName = localHostRealName;
-  }
-
   std::ostringstream command;
   switch (protocol)
   {
   case rsh:
-    if (!isLocal)
+    command << "rsh ";
+    if (username != "")
     {
-      command << "rsh ";
-      if (username != "")
-      {
-        command << "-l " << username << " ";
-      }
-      command << hostRealName << " ";
+      command << "-l " << username << " ";
     }
+    command << hostname << " ";
     break;
   case ssh:
-    if (!isLocal)
+    command << "ssh ";
+    if (username != "")
     {
-      command << "ssh ";
-      if (username != "")
-      {
-        command << "-l " << username << " ";
-      }
-      command << hostRealName << " ";
+      command << "-l " << username << " ";
     }
+    command << hostname << " ";
     break;
   case srun:
     // no need to redefine the user with srun, the job user is taken by default
     // (note: for srun, user id can be specified with " --uid=<user>")
-    command << "srun -n 1 -N 1 --share --nodelist=" << hostRealName << " ";
+    command << "srun -n 1 -N 1 --share --nodelist=" << hostname << " ";
+    break;
+  case pbsdsh:
+    command << "pbsdsh -o -h " << hostname << " ";
+    break;
+  case blaunch:
+    command << "blaunch " << hostname << " ";
     break;
   default:
     throw SALOME_Exception("Unknown protocol");
index 3aa218c2a1835a401f2eda3a1eab449e718304ad..ef5729d201e750601c0bff38adc33a1426e23312 100644 (file)
@@ -69,8 +69,7 @@ protected:
                                                   const Engines::ContainerParameters& params, 
                                                   const std::string& container_exe="SALOME_Container");
 
-  std::string BuildCommandToLaunchLocalContainer(const std::string & resource_name,
-                                                 const Engines::ContainerParameters& params,
+  std::string BuildCommandToLaunchLocalContainer(const Engines::ContainerParameters& params,
                                                  const std::string& machinesFile,
                                                  const std::string& container_exe="SALOME_Container");
 
@@ -93,9 +92,9 @@ protected:
 
   std::set<pid_t> getpidofprogram(const std::string program);
 
-  std::string getCommandToRunProcess(AccessProtocolType protocol,
-                                     const std::string & hostname = "localhost",
-                                     const std::string & username = "");
+  std::string getCommandToRunRemoteProcess(AccessProtocolType protocol,
+                                           const std::string & hostname,
+                                           const std::string & username);
 
   CORBA::ORB_var _orb;
   PortableServer::POA_var _poa;
index ffdc6b08febbe975c737f0dbda3ec2f8ae7df13b..a51ddc4184a4736aaad35b11425394623954bd99 100755 (executable)
@@ -168,17 +168,24 @@ class SALOME_ContainerPy_i (Engines__POA.Container):
     
     def import_component(self, componentName):
         MESSAGE( "SALOME_Container_i::import_component" )
-        ret=0
+        reason = ""
         try:
-            if verbose(): print "try import ",componentName
+            if verbose(): print "try import %s" % componentName
+            # try import component
             module=__import__(componentName)
-            if verbose(): print "import ",componentName," successful"
-            ret=1
+            if verbose(): print "import %s is done successfully" % componentName
+            # if import successfully, check that component is loadable
+            if not hasattr(module, componentName):
+                reason = "module %s is not loadable" % componentName
+                print reason
+                pass
+            pass
         except:
             import traceback
+            print "cannot import %s" % componentName
             traceback.print_exc()
-            print "import ",componentName," not possible"
-        return ret
+            reason = "cannot import %s" % componentName
+        return reason
 
     #-------------------------------------------------------------------------
 
@@ -187,7 +194,8 @@ class SALOME_ContainerPy_i (Engines__POA.Container):
         ret = 0
         instanceName = componentName + "_inst_" + `self._numInstance`
         interfaceName = componentName
-        return self.import_component(componentName), ""
+        reason = self.import_component(componentName)
+        return reason == "", reason
     
     #-------------------------------------------------------------------------
 
index bf19736efe67e4d8fca127ce15aad3c68f9cc975..9f30547734dac04c3430b9a506fc7aba7d2c240d 100644 (file)
@@ -105,7 +105,9 @@ ROOT_PYTHONPACKAGE_NAME="salome"
 #
 import os, sys
 from salome_utils import verbose
-MATCH_ENDING_PATTERN="site-packages/salome"
+
+MATCH_ENDING_PATTERN="site-packages" + os.path.sep + "salome"
+
 def extend_path(pname):
     for dir in sys.path:
         if not isinstance(dir, basestring) or not os.path.isdir(dir) or not dir.endswith(MATCH_ENDING_PATTERN):
index ca9ec36ef8aa9c79fb9c1f704d141d5a39390240..8d1588960ebb880b9ffe426449fba51881c302ce 100644 (file)
@@ -24,6 +24,7 @@ computation code. These Exchange Variables can be stored in a SObject in
 Salome study.
 """
 
+from xml.dom.minidom import getDOMImplementation, parse
 from salome.kernel.studyedit import getStudyEditor
 
 DEFAULT_NAME = "Variables"
@@ -79,6 +80,32 @@ class ExchangeVariables:
         self.outputVarList = outputVarList
         self.refEntry = refEntry
 
+    def saveToXmlFile(self, filepath):
+        """
+        Save this object to an XML file.
+    
+        :type  filepath: string
+        :param filepath: path of the XML file.
+    
+        """
+        doc = getDOMImplementation().createDocument(None, "variables", None)
+        top_el = doc.documentElement
+        top_el.setAttribute("version", "6.4")
+        input_variables_el = doc.createElement("input_variables")
+        top_el.appendChild(input_variables_el)
+        output_variables_el = doc.createElement("output_variables")
+        top_el.appendChild(output_variables_el)
+        for input_var in self.inputVarList:
+            input_var_el = doc.createElement("variable")
+            input_var_el.setAttribute("name", input_var.name)
+            input_variables_el.appendChild(input_var_el)
+        for output_var in self.outputVarList:
+            output_var_el = doc.createElement("variable")
+            output_var_el.setAttribute("name", output_var.name)
+            output_variables_el.appendChild(output_var_el)
+        f = open(filepath, "w")
+        f.write(doc.toprettyxml(indent = "  "))
+        f.close()
 
 def createSObjectForExchangeVariables(fatherSobj, exchangeVariables,
                                       name = DEFAULT_NAME,
@@ -162,3 +189,29 @@ def getExchangeVariablesFromSObject(sobj):
             [Variable(name) for name in attr.GetStrArray(INPUT_VAR_NAMES)],
             [Variable(name) for name in attr.GetStrArray(OUTPUT_VAR_NAMES)],
             refEntry)
+
+def loadExchangeVariablesFromXmlFile(filepath):
+    """
+    Load an :class:`ExchangeVariables` instance from an XML file.
+
+    :type  filepath: string
+    :param filepath: path of the XML file to load.
+
+    :return: the newly created :class:`ExchangeVariables` instance.
+
+    """
+    doc = parse(filepath)
+    top_el = doc.documentElement
+    # Check version
+    version = top_el.getAttribute("version")
+    if version != "6.4":
+        raise Exception(self.tr("Unsupported version: %s" % version))
+    input_variables_el = top_el.getElementsByTagName("input_variables")[0]
+    input_var_list = [Variable(input_var_el.getAttribute("name"))
+                      for input_var_el
+                      in input_variables_el.getElementsByTagName("variable")]
+    output_variables_el = top_el.getElementsByTagName("output_variables")[0]
+    output_var_list = [Variable(output_var_el.getAttribute("name"))
+                       for output_var_el
+                       in output_variables_el.getElementsByTagName("variable")]
+    return ExchangeVariables(input_var_list, output_var_list)
index 8ccc81335e6ea15eb0cefa065e43f410c69913fa..d5ed21e035e41da09fbfd7648e1aa7e666b38bdc 100644 (file)
@@ -33,7 +33,8 @@
 # SALOME development).
 
 import salome
-if salome.lcc is None:
+from deprecation import is_called_by_sphinx
+if not is_called_by_sphinx() and salome.lcc is None:
     try:
         salome.salome_init()
     except Exception, e:
index 6e62fb5d7257e5944e26ef2a453fe4691982e10a..aee3751d04630d934e82af3d394c37738595f9cc 100644 (file)
@@ -339,6 +339,9 @@ Launcher::Job::checkMaximumDuration(const std::string & maximum_duration)
   std::size_t pos = edt_value.find(":");
 
   if (edt_value != "") {
+    if (pos == edt_value.npos) {
+      throw LauncherException("[Launcher::Job::checkMaximumDuration] Error on definition: " + edt_value);
+    }
     std::string begin_edt_value = edt_value.substr(0, pos);
     std::string mid_edt_value = edt_value.substr(pos, 1);
     std::string end_edt_value = edt_value.substr(pos + 1, edt_value.npos);
index b9005c2e6825237ba15aff5eace01d627818036b..f50f12da0e4ca9a1ebf996fd687c4efb0a49785c 100644 (file)
@@ -81,12 +81,7 @@ Launcher::Job_SALOME::buildSalomeScript(Batch::Parametre params)
   launch_script_stream << "export SALOME_TMP_DIR=" << work_directory << "/logs" << std::endl;
 
   // -- Generates Catalog Resources
-  std::string resource_protocol = "ssh";
-  if (_resource_definition.ClusterInternalProtocol == rsh)
-    resource_protocol = "rsh";
-  else if (_resource_definition.ClusterInternalProtocol == srun)
-    resource_protocol = "srun";
-
+  std::string resource_protocol = ParserResourcesType::protocolToString(_resource_definition.ClusterInternalProtocol);
   launch_script_stream << "if [ \"x$LIBBATCH_NODEFILE\" != \"x\" ]; then " << std::endl;
   launch_script_stream << "CATALOG_FILE=" << "CatalogResources_" << _launch_date << ".xml" << std::endl;
   launch_script_stream << "export USER_CATALOG_RESOURCES_FILE=" << "$CATALOG_FILE" << std::endl;
@@ -111,12 +106,7 @@ Launcher::Job_SALOME::buildSalomeScript(Batch::Parametre params)
   launch_script_stream << "NS_PORT_FILE_NAME=`basename $NS_PORT_FILE_PATH` &&\n";
 
   // Launch SALOME with an appli
-  launch_script_stream << _resource_definition.AppliPath << "/runAppli --terminal --ns-port-log=$NS_PORT_FILE_NAME ";
-  if (_resource_definition.ClusterInternalProtocol != rsh &&
-      _resource_definition.ClusterInternalProtocol != ssh)
-  {
-    launch_script_stream << "--server-launch-cmd=" << resource_protocol << " ";
-  }
+  launch_script_stream << _resource_definition.AppliPath << "/runAppli --terminal --ns-port-log=$NS_PORT_FILE_NAME --server-launch-mode=fork ";
   launch_script_stream << "> logs/salome_" << _launch_date << ".log 2>&1 &&" << std::endl;
   launch_script_stream << "current=0 &&\n"
                        << "stop=20 &&\n"
index fdf3ce7d39e5982cda11a05489d2159d7249f861..cf702075b6dc512c671a2451736a966188f2163d 100644 (file)
@@ -184,4 +184,9 @@ if WITH_LIBBATCH
   TestLauncher_CPPFLAGS += -DWITH_LIBBATCH
 endif
 
-TestLauncher_LDADD = @LIBXML_LIBS@ ../ResourcesManager/libResourcesManager.la libLauncher.la @LIBBATCH_LIBS@
+TestLauncher_LDADD = \
+  @LIBXML_LIBS@ \
+  ../ResourcesManager/libResourcesManager.la \
+  libLauncher.la \
+  ../Utils/libOpUtil.la \
+  @LIBBATCH_LIBS@
index c915a4896721613cc7e3b04f62888437048c1319..e63b036d6b863c0e07dd52539b99f6fc65ac83ff 100755 (executable)
@@ -101,4 +101,5 @@ libResourcesManager_la_CPPFLAGS =\
 libResourcesManager_la_LDFLAGS = -no-undefined -version-info=0:0:0
 libResourcesManager_la_LIBADD  =\
        ../Basics/libSALOMEBasics.la \
+       ../Utils/libOpUtil.la \
        @LIBXML_LIBS@
index db3f42d16d9793fc2e904c00b54c52a892456a6e..758fcec93a282038ca8f5e7ff292c0a5d9fb9d0c 100755 (executable)
@@ -28,6 +28,7 @@
 //
 #include "SALOME_ResourcesCatalog_Handler.hxx"
 #include "Basics_Utils.hxx"
+#include "Utils_SALOME_Exception.hxx"
 #include <iostream>
 #include <sstream>
 #include <map>
@@ -304,21 +305,15 @@ SALOME_ResourcesCatalog_Handler::ProcessMember(xmlNodePtr member_descr, ParserRe
   if (xmlHasProp(member_descr, (const xmlChar*)test_protocol))
   {
     xmlChar* protocol= xmlGetProp(member_descr, (const xmlChar*)test_protocol);
-    switch (protocol[0])
+    try
     {
-      case 'r':
-        resource.Protocol = rsh;
-        break;
-      case 's':
-        if (protocol[1] == 's')
-          resource.Protocol = ssh;
-        else
-          resource.Protocol = srun;
-        break;
-      default:
-        std::cerr << "SALOME_ResourcesCatalog_Handler::ProcessMember : Warning found a machine with a bad protocol" << std::endl;
-        std::cerr << "SALOME_ResourcesCatalog_Handler::ProcessMember : Warning this machine will not be added" << std::endl;
-        return false;
+      resource.Protocol = ParserResourcesType::stringToProtocol((const char *)protocol);
+    }
+    catch (SALOME_Exception e)
+    {
+      std::cerr << "SALOME_ResourcesCatalog_Handler::ProcessMember : Warning found a machine with a bad protocol" << std::endl;
+      std::cerr << "SALOME_ResourcesCatalog_Handler::ProcessMember : Warning this machine will not be added" << std::endl;
+      return false;
     }
     xmlFree(protocol);
   }
@@ -332,21 +327,15 @@ SALOME_ResourcesCatalog_Handler::ProcessMember(xmlNodePtr member_descr, ParserRe
   if (xmlHasProp(member_descr, (const xmlChar*)test_cluster_internal_protocol))
   {
     xmlChar* iprotocol= xmlGetProp(member_descr, (const xmlChar*)test_cluster_internal_protocol);
-    switch (iprotocol[0])
+    try
     {
-      case 'r':
-        resource.ClusterInternalProtocol = rsh;
-        break;
-      case 's':
-        if (iprotocol[1] == 's')
-          resource.ClusterInternalProtocol = ssh;
-        else
-          resource.ClusterInternalProtocol = srun;
-        break;
-      default:
-        std::cerr << "SALOME_ResourcesCatalog_Handler::ProcessMember : Warning found a machine with a bad protocol" << std::endl;
-        std::cerr << "SALOME_ResourcesCatalog_Handler::ProcessMember : Warning this machine will not be added" << std::endl;
-        return false;
+      resource.ClusterInternalProtocol = ParserResourcesType::stringToProtocol((const char *)iprotocol);
+    }
+    catch (SALOME_Exception e)
+    {
+      std::cerr << "SALOME_ResourcesCatalog_Handler::ProcessMember : Warning found a machine with a bad protocol" << std::endl;
+      std::cerr << "SALOME_ResourcesCatalog_Handler::ProcessMember : Warning this machine will not be added" << std::endl;
+      return false;
     }
     xmlFree(iprotocol);
   }
@@ -462,21 +451,14 @@ SALOME_ResourcesCatalog_Handler::ProcessMachine(xmlNodePtr machine_descr, Parser
   if (xmlHasProp(machine_descr, (const xmlChar*)test_protocol))
   {
     xmlChar* protocol= xmlGetProp(machine_descr, (const xmlChar*)test_protocol);
-    switch ( protocol[0])
+    try
     {
-      case 'r':
-        resource.Protocol = rsh;
-        break;
-      case 's':
-        if (protocol[1] == 's')
-          resource.Protocol = ssh;
-        else
-          resource.Protocol = srun;
-        break;
-      default:
-        // If it'not in all theses cases, the protocol is affected to rsh
-        resource.Protocol = rsh;
-        break;
+      resource.Protocol = ParserResourcesType::stringToProtocol((const char *)protocol);
+    }
+    catch (SALOME_Exception e)
+    {
+      // If it'not in all theses cases, the protocol is affected to rsh
+      resource.Protocol = rsh;
     }
     xmlFree(protocol);
   }
@@ -486,21 +468,14 @@ SALOME_ResourcesCatalog_Handler::ProcessMachine(xmlNodePtr machine_descr, Parser
   if (xmlHasProp(machine_descr, (const xmlChar*)test_cluster_internal_protocol))
   {
     xmlChar* iprotocol= xmlGetProp(machine_descr, (const xmlChar*)test_cluster_internal_protocol);
-    switch ( iprotocol[0])
+    try
     {
-      case 'r':
-        resource.ClusterInternalProtocol = rsh;
-        break;
-      case 's':
-        if (iprotocol[1] == 's')
-          resource.ClusterInternalProtocol = ssh;
-        else
-          resource.ClusterInternalProtocol = srun;
-        break;
-      default:
-        // If it'not in all theses cases, the protocol is affected to rsh
-        resource.ClusterInternalProtocol = rsh;
-        break;
+      resource.ClusterInternalProtocol = ParserResourcesType::stringToProtocol((const char *)iprotocol);
+    }
+    catch (SALOME_Exception e)
+    {
+      // If it'not in all theses cases, the protocol is affected to rsh
+      resource.ClusterInternalProtocol = rsh;
     }
     xmlFree(iprotocol);
   }
@@ -693,36 +668,12 @@ void SALOME_ResourcesCatalog_Handler::PrepareDocToXmlFile(xmlDocPtr theDoc)
     xmlNewProp(node, BAD_CAST test_appli_path, BAD_CAST (*iter).second.AppliPath.c_str());
     xmlNewProp(node, BAD_CAST test_batch_queue, BAD_CAST (*iter).second.batchQueue.c_str());
     xmlNewProp(node, BAD_CAST test_user_commands, BAD_CAST (*iter).second.userCommands.c_str());
-
-    switch ((*iter).second.Protocol)
-    {
-      case rsh:
-        xmlNewProp(node, BAD_CAST test_protocol, BAD_CAST "rsh");
-        break;
-      case ssh:
-        xmlNewProp(node, BAD_CAST test_protocol, BAD_CAST "ssh");
-        break;
-      case srun:
-        xmlNewProp(node, BAD_CAST test_protocol, BAD_CAST "srun");
-        break;
-      default:
-        xmlNewProp(node, BAD_CAST test_protocol, BAD_CAST "rsh");
-    }
-
-    switch ((*iter).second.ClusterInternalProtocol)
-    {
-      case rsh:
-        xmlNewProp(node, BAD_CAST test_cluster_internal_protocol, BAD_CAST "rsh");
-        break;
-      case ssh:
-        xmlNewProp(node, BAD_CAST test_cluster_internal_protocol, BAD_CAST "ssh");
-        break;
-      case srun:
-        xmlNewProp(node, BAD_CAST test_cluster_internal_protocol, BAD_CAST "srun");
-        break;
-      default:
-        xmlNewProp(node, BAD_CAST test_cluster_internal_protocol, BAD_CAST "rsh");
-    }
+    xmlNewProp(node,
+               BAD_CAST test_protocol,
+               BAD_CAST ParserResourcesType::protocolToString((*iter).second.Protocol).c_str());
+    xmlNewProp(node,
+               BAD_CAST test_cluster_internal_protocol,
+               BAD_CAST ParserResourcesType::protocolToString((*iter).second.ClusterInternalProtocol).c_str());
 
     switch ((*iter).second.Mode)
     {
index b3b2057fff8feeb15edc0e0da98c4378e42eb650..258837b72ba337a446c05a389a47e5861f5168d9 100644 (file)
@@ -21,6 +21,7 @@
 //
 
 #include "SALOME_ResourcesCatalog_Parser.hxx"
+#include "Utils_SALOME_Exception.hxx"
 #include <iostream>
 #include <sstream>
 
@@ -128,6 +129,42 @@ void ResourceDataToSort::Print() const
     std::cout << _memInMB << std::endl;
   }
 
+
+std::string ParserResourcesType::protocolToString(AccessProtocolType protocol)
+{
+  switch (protocol)
+  {
+  case rsh:
+    return "rsh";
+  case ssh:
+    return "ssh";
+  case srun:
+    return "srun";
+  case pbsdsh:
+    return "pbsdsh";
+  case blaunch:
+    return "blaunch";
+  default:
+    throw SALOME_Exception("Unknown protocol");
+  }
+}
+
+AccessProtocolType ParserResourcesType::stringToProtocol(const std::string & protocolStr)
+{
+  if (protocolStr == "rsh")
+    return rsh;
+  else if (protocolStr == "ssh")
+    return ssh;
+  else if (protocolStr == "srun")
+    return srun;
+  else if (protocolStr == "pbsdsh")
+    return pbsdsh;
+  else if (protocolStr == "blaunch")
+    return blaunch;
+  else
+    throw SALOME_Exception("Unknown protocol");
+}
+
 void ParserResourcesType::Print()
 {
   std::ostringstream oss;
@@ -138,8 +175,8 @@ void ParserResourcesType::Print()
     "NbOfProcPerNode : " << DataForSort._nbOfProcPerNode << std::endl <<
     "CPUFreqMHz : " << DataForSort._CPUFreqMHz << std::endl <<
     "MemInMB : " << DataForSort._memInMB << std::endl <<
-    "Protocol : " << Protocol << std::endl <<
-    "ClusterInternalProtocol : " << ClusterInternalProtocol << std::endl <<
+    "Protocol : " << protocolToString(Protocol) << std::endl <<
+    "ClusterInternalProtocol : " << protocolToString(ClusterInternalProtocol) << std::endl <<
     "Mode : " << Mode << std::endl <<
     "Batch : " << Batch << std::endl <<
     "mpi : " << mpi << std::endl <<
@@ -170,23 +207,13 @@ void ParserResourcesType::Print()
 std::string
 ParserResourcesType::PrintAccessProtocolType() const
 {
-  if (Protocol == rsh)
-    return "rsh";
-  else if (Protocol == srun)
-    return "srun";
-  else
-    return "ssh";
+  return protocolToString(Protocol);
 }
 
 std::string
 ParserResourcesType::PrintClusterInternalProtocol() const
 {
-  if (ClusterInternalProtocol == rsh)
-    return "rsh";
-  else if (ClusterInternalProtocol == srun)
-    return "srun";
-  else
-    return "ssh";
+  return protocolToString(ClusterInternalProtocol);
 }
 
 std::string 
index 48800da409532c7092d47cfef2ab9b41b83b48ef..9d6cb999f8bfe8f69b52b4099f879b964e7a2281 100755 (executable)
@@ -41,7 +41,7 @@
 #pragma warning(disable:4251) // Warning DLL Interface ...
 #endif
 
-enum AccessProtocolType {rsh, ssh, srun};
+enum AccessProtocolType {rsh, ssh, srun, pbsdsh, blaunch};
 
 enum AccessModeType {interactive, batch};
 
@@ -112,6 +112,9 @@ struct RESOURCESMANAGER_EXPORT ParserResourcesType
   void Print();
   void Clear();
 
+  static std::string protocolToString(AccessProtocolType protocol);
+  static AccessProtocolType stringToProtocol(const std::string & protocolStr);
+
   std::string PrintAccessProtocolType() const;
   std::string PrintAccessModeType() const;
   std::string PrintBatchType() const;
index ff499c6cc23697d4a9db06d0d85a46967e7551d5..144e1ffa81a8fdf94014dbb312cbdf464c6c1470 100644 (file)
@@ -214,18 +214,8 @@ SALOME_ResourcesManager::GetResourceDefinition(const char * name)
 
   p_ptr->name = CORBA::string_dup(resource.Name.c_str());
   p_ptr->hostname = CORBA::string_dup(resource.HostName.c_str());
-  if( resource.Protocol == rsh )
-    p_ptr->protocol = "rsh";
-  else if( resource.Protocol == ssh )
-    p_ptr->protocol = "ssh";
-  else if( resource.Protocol == srun )
-    p_ptr->protocol = "srun";
-  if( resource.ClusterInternalProtocol == rsh )
-    p_ptr->iprotocol = "rsh";
-  else if( resource.ClusterInternalProtocol == ssh )
-    p_ptr->iprotocol = "ssh";
-  else if( resource.ClusterInternalProtocol == srun )
-    p_ptr->iprotocol = "srun";
+  p_ptr->protocol = ParserResourcesType::protocolToString(resource.Protocol).c_str();
+  p_ptr->iprotocol = ParserResourcesType::protocolToString(resource.ClusterInternalProtocol).c_str();
   p_ptr->username = CORBA::string_dup(resource.UserName.c_str());
   p_ptr->applipath = CORBA::string_dup(resource.AppliPath.c_str());
   p_ptr->componentList.length(resource.ComponentsList.size());
@@ -349,15 +339,12 @@ SALOME_ResourcesManager::AddResource(const Engines::ResourceDefinition& new_reso
   }
   
   std::string protocol = new_resource.protocol.in();
-  if (protocol == "rsh")
-    resource.Protocol = rsh;
-  else if (protocol == "ssh")
-    resource.Protocol = ssh;
-  else if (protocol == "srun")
-    resource.Protocol = srun;
-  else if (protocol == "")
-    resource.Protocol = rsh;
-  else {
+  try
+  {
+    resource.Protocol = ParserResourcesType::stringToProtocol(protocol);
+  }
+  catch (SALOME_Exception e)
+  {
     INFOS("Bad protocol definition in AddResource: " << protocol);
     std::string message("Bad protocol definition in AddResource: ");
     message += protocol;
@@ -365,15 +352,12 @@ SALOME_ResourcesManager::AddResource(const Engines::ResourceDefinition& new_reso
   }
 
   std::string iprotocol = new_resource.iprotocol.in();
-  if (iprotocol == "rsh")
-    resource.ClusterInternalProtocol = rsh;
-  else if (iprotocol == "ssh")
-    resource.ClusterInternalProtocol = ssh;
-  else if (iprotocol == "srun")
-    resource.ClusterInternalProtocol = srun;
-  else if (iprotocol == "")
-    resource.ClusterInternalProtocol = rsh;
-  else {
+  try
+  {
+    resource.ClusterInternalProtocol = ParserResourcesType::stringToProtocol(iprotocol);
+  }
+  catch (SALOME_Exception e)
+  {
     INFOS("Bad iprotocol definition in AddResource: " << iprotocol);
     std::string message("Bad iprotocol definition in AddResource: ");
     message += iprotocol;
index 67f16053a61f2ca95b7064e9b35f751c6865e4e5..6460eb4b6874131e0cbf64f896b59d228fa09f6e 100644 (file)
@@ -568,8 +568,7 @@ bool SALOMEDSImpl_StudyManager::Impl_SaveAs(const std::string& aStudyUrl,
           }
         }
 
-      std::string anOldName = aStudy->Name();
-      aStudy->URL(aStudyUrl);
+      //std::string anOldName = aStudy->Name();
 
       // To change for Save
       // Do not have to do a new file but just a Open??? Rewrite all informations after erasing evrything??
@@ -766,7 +765,6 @@ bool SALOMEDSImpl_StudyManager::Impl_SaveAs(const std::string& aStudyUrl,
       hdf_group_study_structure->CloseOnDisk();
       hdf_file->CloseOnDisk();
 
-      aStudy->IsSaved(true);
       hdf_group_study_structure =0; // will be deleted by hdf_file destructor
       delete hdf_file; // recursively deletes all hdf objects...
     }
@@ -808,7 +806,8 @@ bool SALOMEDSImpl_StudyManager::Impl_SaveAs(const std::string& aStudyUrl,
   FILE* fp = fopen(aTmpFile.c_str(), "rb");
   if(!fp) return false;
   char* buffer = new char[2047];
-  while(!feof(fp)) {
+  int errors = 0;
+  while(!feof(fp) && !errors) {
     if((fgets(buffer, 2046, fp)) == NULL) break;
     size_t aLen = strlen(buffer);
     if(buffer[aLen-1] == '\n') buffer[aLen-1] = char(0);
@@ -817,7 +816,7 @@ bool SALOMEDSImpl_StudyManager::Impl_SaveAs(const std::string& aStudyUrl,
 #else 
     aCmd = "mv -f \"" + aStudyTmpDir + std::string(buffer) + "\" \"" + SALOMEDSImpl_Tool::GetDirFromPath(aStudyUrl)+"\"";
 #endif
-    system(aCmd.c_str());    
+    errors = system(aCmd.c_str());
   }
 
   delete []buffer;
@@ -838,7 +837,13 @@ bool SALOMEDSImpl_StudyManager::Impl_SaveAs(const std::string& aStudyUrl,
   rmdir(aStudyTmpDir.c_str());
 #endif
 
-  return true;
+  if ( !errors ) {
+    // and finally, if all is done without errors, store new URL and mark study as Saved
+    aStudy->URL(aStudyUrl);
+    aStudy->IsSaved(true);
+  }
+
+  return !errors;
 }
 
 //============================================================================
index 89e9559377992955df9f4d85186a419f86ae8a0c..bf4461a843a8425f3852b8cda3cce6c567fd1f78 100644 (file)
@@ -171,11 +171,11 @@ void SALOMEDSImpl_Tool::RemoveTemporaryFiles(const std::string& theDirectory,
 std::string SALOMEDSImpl_Tool::GetNameFromPath(const std::string& thePath) {
   if (thePath.empty()) return "";
   int pos = thePath.rfind('/');
-  if(pos > 0) return thePath.substr(pos+1, thePath.size());
+  if(pos >= 0) return thePath.substr(pos+1, thePath.size());
   pos = thePath.rfind('\\'); 
-  if(pos > 0) return thePath.substr(pos+1, thePath.size()); 
+  if(pos >= 0) return thePath.substr(pos+1, thePath.size()); 
   pos = thePath.rfind('|');
-  if(pos > 0) return thePath.substr(pos+1, thePath.size()); 
+  if(pos >= 0) return thePath.substr(pos+1, thePath.size()); 
   return thePath;
 }
 
@@ -196,7 +196,7 @@ std::string SALOMEDSImpl_Tool::GetDirFromPath(const std::string& thePath) {
     if (pos < 0) pos = thePath.rfind('\\');
     if (pos < 0) pos = thePath.rfind('|');
     
-    if (pos > 0)
+    if (pos >= 0)
       path = thePath.substr(0, pos+1);
     else
       path = std::string(".") + separator;