Salome HOME
Merge 'master' branch into 'V9_dev' branch
authorrnv <rnv@opencascade.com>
Thu, 18 Jan 2018 17:26:12 +0000 (20:26 +0300)
committerrnv <rnv@opencascade.com>
Thu, 18 Jan 2018 17:26:12 +0000 (20:26 +0300)
287 files changed:
bin/NSparam.py
bin/ORBConfigFile.py
bin/PortManager.py
bin/addToKillList.py
bin/appli_gen.py
bin/appliskel/.salome_run
bin/appliskel/getAppliPath.py
bin/appliskel/kill_remote_containers.py
bin/appliskel/salome
bin/appliskel/salome_starter.py
bin/appliskel/salome_tester/salome_instance.py
bin/appliskel/salome_tester/salome_test_driver.py
bin/appliskel/salome_tester/salome_test_driver_gui.py
bin/appliskel/tests/concurrentSession/TestConcurrentSession.py
bin/appliskel/tests/concurrentSession/TestMinimalExample.py
bin/appliskel/tests/concurrentSession/hello.py
bin/appliskel/tests/concurrentSession/usecase_concurrent.sh
bin/appliskel/tests/salomeCommand/TestLauncherSessionArgs.py
bin/appliskel/tests/salomeCommand/TestLauncherSimple.py
bin/appliskel/tests/salomeInstance/instances.py
bin/appliskel/update_catalogs.py
bin/envSalome.py
bin/killSalome.py
bin/killSalomeWithPort.py
bin/launchConfigureParser.py
bin/nameserver.py
bin/orbmodule.py
bin/parseConfigFile.py
bin/runConsole.py
bin/runIDLparser
bin/runSalome.py
bin/runSession.py
bin/runTests.py
bin/salomeContext.py
bin/salomeContextUtils.py.in
bin/salome_utils.py
bin/searchFreePort.py
bin/server.py
bin/setenv.py
bin/showNS.py
bin/virtual_salome.py
bin/waitContainers.py
bin/waitNS.py
doc/salome/examples/example1
doc/salome/examples/example10
doc/salome/examples/example11
doc/salome/examples/example12
doc/salome/examples/example13
doc/salome/examples/example14
doc/salome/examples/example15
doc/salome/examples/example16
doc/salome/examples/example17
doc/salome/examples/example18
doc/salome/examples/example19
doc/salome/examples/example20
doc/salome/examples/example21
doc/salome/examples/example22
doc/salome/examples/example23
doc/salome/examples/example3
doc/salome/examples/example4
doc/salome/examples/example5
doc/salome/examples/example6
doc/salome/examples/example7
doc/salome/examples/example8
doc/salome/examples/example9
doc/salome/kernel_salome.dox
doc/salome/kernel_services.dox
doc/salome/python_doc_compl.dox
doc/salome/salome_command.dox
doc/salome/tui/pythfilter.py
idl/SALOMEDS.idl
idl/SALOME_Component.idl
idl/SALOME_ModuleCatalog.idl
idl/SALOME_PACOExtension.idl
idl/SALOME_Session.idl
resources/KERNELCatalog.xml.in
salome_adm/prepare_generating_doc.py
salome_adm/unix/config_files/check_swig.m4
salome_adm/unix/config_files/pyembed.m4
salome_adm/unix/config_files/python.m4
src/AppQuickStart/app-quickstart.py
src/AppQuickStart/app-template/src/tests/helloWorld.py
src/Basics/Basics_DirUtils.cxx
src/Basics/Basics_DirUtils.hxx
src/Basics/Basics_Utils.cxx
src/Basics/Basics_Utils.hxx
src/Communication_SWIG/CMakeLists.txt
src/Container/Component_i.cxx
src/Container/Container_i.cxx
src/Container/Container_init_python.cxx
src/Container/Container_init_python.hxx
src/Container/SALOME_ComponentPy.py
src/Container/SALOME_Component_i.hxx
src/Container/SALOME_Container.py
src/Container/SALOME_ContainerPy.py
src/Container/SALOME_Container_i.hxx
src/Container/SALOME_PyNode.py
src/DF/DF_Document.cxx
src/DSC/DSC_Python/CMakeLists.txt
src/DSC/DSC_Python/calcium.i
src/HDFPersist/HDFfile.cc
src/KERNEL_PY/Help.py
src/KERNEL_PY/PyInterp.py
src/KERNEL_PY/__init__.py
src/KERNEL_PY/batchmode_salome.py
src/KERNEL_PY/iparameters.py
src/KERNEL_PY/kernel/__init__.py
src/KERNEL_PY/kernel/datamodeler.py
src/KERNEL_PY/kernel/diclookup.py
src/KERNEL_PY/kernel/enumerate.py
src/KERNEL_PY/kernel/parametric/study_exchange_vars.py
src/KERNEL_PY/kernel/pyunittester.py
src/KERNEL_PY/kernel/services.py
src/KERNEL_PY/kernel/studyedit.py
src/KERNEL_PY/kernel/syshelper.py
src/KERNEL_PY/kernel/termcolor.py
src/KERNEL_PY/kernel/testdata.py
src/KERNEL_PY/kernel/threadhelper.py
src/KERNEL_PY/kernel/uiexception.py
src/KERNEL_PY/kernel/unittester.py
src/KERNEL_PY/omnipatch.py
src/KERNEL_PY/salome_ComponentGUI.py
src/KERNEL_PY/salome_iapp.py
src/KERNEL_PY/salome_notebook.py
src/KERNEL_PY/salome_pynode.py
src/KERNEL_PY/salome_study.py
src/KERNEL_PY/salome_test.py
src/KERNEL_PY/salome_version.py
src/KernelHelpers/KernelHelpersUseCases.cxx
src/KernelHelpers/SALOMEDS_DriverDefaultImpl.cxx
src/KernelHelpers/SALOMEDS_DriverDefaultImpl.hxx
src/KernelHelpers/SALOME_KernelServices.cxx
src/KernelHelpers/SALOME_KernelServices.hxx
src/KernelHelpers/SALOME_StudyEditor.cxx
src/KernelHelpers/SALOME_StudyEditor.hxx
src/KernelHelpers/Test/KernelHelpersUnitTests.cxx
src/KernelHelpers/Test/KernelHelpersUnitTests.hxx
src/KernelHelpers/Test/TestKernelHelpers.py
src/Launcher/Test/test_launcher.py
src/LifeCycleCORBA/SALOME_LifeCycleCORBA.cxx
src/LifeCycleCORBA/SALOME_LifeCycleCORBA.hxx
src/LifeCycleCORBA/Test/TestLifeCycleCORBA.py
src/LifeCycleCORBA_SWIG/CMakeLists.txt
src/LifeCycleCORBA_SWIG/Test/LifeCycleCORBA_SWIGTest.py
src/LifeCycleCORBA_SWIG/Test/TestLifeCycleCORBA_SWIG.py
src/LifeCycleCORBA_SWIG/TestLifeCycleCORBA.py
src/LifeCycleCORBA_SWIG/libSALOME_LifeCycleCORBA.i
src/Logger/SALOME_Trace.py
src/Logger/Test/TestKiller.py
src/MPIContainer/MPIContainer_i.cxx
src/MPIContainer/MPIContainer_i.hxx
src/ModuleCatalog/SALOME_ModuleCatalog_Acomponent_impl.cxx
src/ModuleCatalog/SALOME_ModuleCatalog_Acomponent_impl.hxx
src/ModuleCatalog/SALOME_ModuleCatalog_Client.cxx
src/ModuleCatalog/SALOME_ModuleCatalog_Handler.cxx
src/ModuleCatalog/SALOME_ModuleCatalog_Handler.hxx
src/ModuleCatalog/SALOME_ModuleCatalog_Parser.hxx
src/ModuleCatalog/SALOME_ModuleCatalog_Parser_IO.cxx
src/ModuleCatalog/SALOME_ModuleCatalog_impl.cxx
src/ModuleCatalog/TestModuleCatalog.py
src/ModuleGenerator/IDLparser.py
src/NOTIFICATION_SWIG/CMakeLists.txt
src/NamingService/SALOME_NamingServicePy.py
src/NamingService/Test/TestNamingService.py
src/ParallelContainer/SALOME_ParallelComponent_i.cxx
src/ParallelContainer/SALOME_ParallelComponent_i.hxx
src/ParallelContainer/SALOME_ParallelContainerProxy_i.cxx
src/ParallelContainer/SALOME_ParallelContainerProxy_i.hxx
src/ParallelContainer/SALOME_ParallelContainer_i.cxx
src/ParallelContainer/SALOME_ParallelContainer_i.hxx
src/SALOMEDS/CMakeLists.txt
src/SALOMEDS/SALOMEDS.cxx
src/SALOMEDS/SALOMEDS_Client.cxx
src/SALOMEDS/SALOMEDS_Driver_i.cxx
src/SALOMEDS/SALOMEDS_Driver_i.hxx
src/SALOMEDS/SALOMEDS_IParameters.cxx
src/SALOMEDS/SALOMEDS_IParameters.hxx
src/SALOMEDS/SALOMEDS_SObject.cxx
src/SALOMEDS/SALOMEDS_SObject.hxx
src/SALOMEDS/SALOMEDS_SObject_i.cxx
src/SALOMEDS/SALOMEDS_SObject_i.hxx
src/SALOMEDS/SALOMEDS_Server.cxx
src/SALOMEDS/SALOMEDS_Study.cxx
src/SALOMEDS/SALOMEDS_Study.hxx
src/SALOMEDS/SALOMEDS_StudyBuilder.cxx
src/SALOMEDS/SALOMEDS_StudyBuilder.hxx
src/SALOMEDS/SALOMEDS_StudyBuilder_i.cxx
src/SALOMEDS/SALOMEDS_StudyBuilder_i.hxx
src/SALOMEDS/SALOMEDS_StudyManager.cxx [deleted file]
src/SALOMEDS/SALOMEDS_StudyManager.hxx [deleted file]
src/SALOMEDS/SALOMEDS_StudyManager_i.cxx [deleted file]
src/SALOMEDS/SALOMEDS_StudyManager_i.hxx [deleted file]
src/SALOMEDS/SALOMEDS_Study_i.cxx
src/SALOMEDS/SALOMEDS_Study_i.hxx
src/SALOMEDS/SALOME_DriverPy.py
src/SALOMEDS/Test/CMakeLists.txt
src/SALOMEDS/Test/SALOMEDSTest.cxx
src/SALOMEDS/Test/SALOMEDSTest.hxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeComment.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeDrawable.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeExpandable.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeExternalFileDef.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeFileType.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeFlags.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeGraphic.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeIOR.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeInteger.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeLocalID.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeName.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeOpened.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeParameter.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributePersistentRef.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributePixMap.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributePythonObject.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeReal.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeSelectable.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeSequenceOfInteger.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeSequenceOfReal.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeStudyProperties.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeTableOfInteger.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeTableOfReal.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeTableOfString.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeTarget.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeTextColor.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeTextHighlightColor.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeTreeNode.cxx
src/SALOMEDS/Test/SALOMEDSTest_AttributeUserID.cxx
src/SALOMEDS/Test/SALOMEDSTest_ChildIterator.cxx
src/SALOMEDS/Test/SALOMEDSTest_SComponent.cxx
src/SALOMEDS/Test/SALOMEDSTest_SComponentIterator.cxx
src/SALOMEDS/Test/SALOMEDSTest_SObject.cxx
src/SALOMEDS/Test/SALOMEDSTest_Study.cxx
src/SALOMEDS/Test/SALOMEDSTest_StudyBuilder.cxx
src/SALOMEDS/Test/SALOMEDSTest_StudyManager.cxx [deleted file]
src/SALOMEDS/Test/SALOMEDSTest_UseCase.cxx
src/SALOMEDS/Test/TestSALOMEDS.cxx
src/SALOMEDS/Test/TestSALOMEDS.py
src/SALOMEDSClient/SALOMEDSClient.hxx
src/SALOMEDSClient/SALOMEDSClient_ClientFactory.cxx
src/SALOMEDSClient/SALOMEDSClient_ClientFactory.hxx
src/SALOMEDSClient/SALOMEDSClient_IParameters.hxx
src/SALOMEDSClient/SALOMEDSClient_SObject.hxx
src/SALOMEDSClient/SALOMEDSClient_Study.hxx
src/SALOMEDSClient/SALOMEDSClient_StudyBuilder.hxx
src/SALOMEDSClient/SALOMEDSClient_StudyManager.hxx [deleted file]
src/SALOMEDSImpl/CMakeLists.txt
src/SALOMEDSImpl/SALOMEDSImpl_AttributeIOR.cxx
src/SALOMEDSImpl/SALOMEDSImpl_Driver.hxx
src/SALOMEDSImpl/SALOMEDSImpl_GenericAttribute.cxx
src/SALOMEDSImpl/SALOMEDSImpl_IParameters.cxx
src/SALOMEDSImpl/SALOMEDSImpl_IParameters.hxx
src/SALOMEDSImpl/SALOMEDSImpl_SObject.cxx
src/SALOMEDSImpl/SALOMEDSImpl_SObject.hxx
src/SALOMEDSImpl/SALOMEDSImpl_Study.cxx
src/SALOMEDSImpl/SALOMEDSImpl_Study.hxx
src/SALOMEDSImpl/SALOMEDSImpl_StudyBuilder.cxx
src/SALOMEDSImpl/SALOMEDSImpl_StudyBuilder.hxx
src/SALOMEDSImpl/SALOMEDSImpl_StudyManager.cxx [deleted file]
src/SALOMEDSImpl/SALOMEDSImpl_StudyManager.hxx [deleted file]
src/SALOMEDSImpl/SALOMEDSImpl_UseCaseBuilder.cxx
src/SALOMEDSImpl/Test/SALOMEDSImplTest.cxx
src/SALOMEDSImpl/Test/TestSALOMEDSImpl.py
src/SALOMEDSImpl/testDS.cxx
src/SALOMELocalTrace/Test/TestSALOMELocalTrace.py
src/SALOMESDS/SALOMEGlobalVarHelper.py
src/SALOMESDS/SALOMESDS_DataScopeServer.cxx
src/SALOMESDS/SALOMESDS_DataScopeServer.hxx
src/SALOMESDS/SALOMESDS_PickelizedPyObjRdExtServer.cxx
src/SALOMESDS/SALOMESDS_PickelizedPyObjRdWrServer.cxx
src/SALOMESDS/SALOMESDS_PickelizedPyObjServer.cxx
src/SALOMESDS/SALOMEWrappedStdType.py
src/SALOMESDS/SalomeSDSClt.py
src/SALOMESDS/TestSalomeSDS.py
src/SALOMESDS/TestSalomeSDS1.py
src/SALOMESDS/TestSalomeSDSHelper0.py
src/SALOMETraceCollector/Test/TestSALOMETraceCollector.py
src/TOOLSDS/SALOMEDS_Tool.cxx
src/TOOLSDS/SALOMEDS_Tool.hxx
src/TestContainer/SALOME_TestComponentPy.py
src/TestContainer/TestComponentPy.py
src/TestContainer/TestContainer.cxx
src/UnitTests/UnitTests.py
src/UnitTests/prepare_test.py
src/Utils/CMakeLists.txt
src/Utils/Test/TestUtils.py
src/Utils/Utils_Identity.py
src/Utils/capsulethunk.h [new file with mode: 0644]

index 3cb3cf9cd4da95209569a2f2a17d0df8262172db..612a0cff1464f5b54c065cc1fe232ae4c893b4c2 100755 (executable)
@@ -1,4 +1,4 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
 #  -*- coding: iso-8859-1 -*-
 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
@@ -56,12 +56,12 @@ if __name__ == "__main__":
         if sys.argv[1]=='host':
             my_host = getNSparams('host')
             # keep print, stdout used in shell
-            print my_host
+            print(my_host)
             pass
         elif sys.argv[1]=='port':
             my_port = getNSparams('port')
             # keep print, stdout used in shell
-            print my_port
+            print(my_port)
             pass
         else:
             my_host, my_port = getNSparams()
@@ -70,7 +70,7 @@ if __name__ == "__main__":
     else:
         getNSparams()
         # keep print, stdout used in shell
-        print my_host, my_port
+        print(my_host, my_port)
         pass
     pass
 #
index 19a9647f44e57417b2c575eca00f15d47ed6c951..0769cd6c1846cf280b05f2a60c4d2894a9ed95fd 100644 (file)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 #  -*- coding: iso-8859-1 -*-
 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
@@ -98,4 +98,4 @@ if __name__ == "__main__":
   # RETURN_VALUE_2=$(echo ${RETURN_VALUES} | cut -d' ' -f2)
   # ...
   # IMPORTANT NOTE: this print call MUST BE the first one!!
-  print filename, msgSize
+  print(filename, msgSize)
index ced2ad296a56f28f7c2f388c0e63bb196362eaea..c842c7e71ae1c0d8e8786c181e8bc88f792f9893 100644 (file)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 #  -*- coding: iso-8859-1 -*-
 # Copyright (C) 2007-2017  CEA/DEN, EDF R&D, OPEN CASCADE
 #
@@ -111,14 +111,14 @@ def __isNetworkConnectionActiveOnPort(port):
     p = Popen(cmd, stdout=PIPE, stderr=STDOUT)
     out, err = p.communicate()
   except:
-    print "Error when trying to access active network connections."
-    if err: print err
+    print("Error when trying to access active network connections.")
+    if err: print(err)
     import traceback
     traceback.print_exc()
     return False
 
-  import StringIO
-  buf = StringIO.StringIO(out)
+  from io import StringIO
+  buf = StringIO(out.decode())
   ports = buf.readlines()
   # search for TCP - LISTEN connections
   import re
@@ -137,7 +137,7 @@ def getPort(preferedPort=None):
 
   config_file, lock_file = _getConfigurationFilename()
   oldmask = os.umask(0)
-  with open(lock_file, 'w') as lock:
+  with open(lock_file, 'wb') as lock:
     # acquire lock
     __acquire_lock(lock)
 
@@ -145,7 +145,7 @@ def getPort(preferedPort=None):
     config = {}
     logger.debug("read configuration file")
     try:
-      with open(config_file, 'r') as f:
+      with open(config_file, 'rb') as f:
         config = pickle.load(f)
     except:
       logger.info("Problem loading PortManager file: %s"%config_file)
@@ -167,7 +167,7 @@ def getPort(preferedPort=None):
           msg  = "\n"
           msg += "Can't find a free port to launch omniNames\n"
           msg += "Try to kill the running servers and then launch SALOME again.\n"
-          raise RuntimeError, msg
+          raise RuntimeError(msg)
         logger.debug("Port %s seems to be busy"%str(port))
         port = port + 1
     logger.debug("found free port: %s"%str(port))
@@ -176,8 +176,8 @@ def getPort(preferedPort=None):
     # write config
     logger.debug("write config: %s"%str(config))
     try:
-      with open(config_file, 'w') as f:
-        pickle.dump(config, f)
+      with open(config_file, 'wb') as f:
+        pickle.dump(config, f, protocol=0)
     except IOError:
       pass
 
@@ -196,7 +196,7 @@ def releasePort(port):
 
   config_file, lock_file = _getConfigurationFilename()
   oldmask = os.umask(0)
-  with open(lock_file, 'w') as lock:
+  with open(lock_file, 'wb') as lock:
     # acquire lock
     __acquire_lock(lock)
 
@@ -204,7 +204,7 @@ def releasePort(port):
     config = {}
     logger.debug("read configuration file")
     try:
-      with open(config_file, 'r') as f:
+      with open(config_file, 'rb') as f:
         config = pickle.load(f)
     except IOError: # empty file
       pass
@@ -223,8 +223,8 @@ def releasePort(port):
     # write config
     logger.debug("write config: %s"%str(config))
     try:
-      with open(config_file, 'w') as f:
-        pickle.dump(config, f)
+      with open(config_file, 'wb') as f:
+        pickle.dump(config, f, protocol=0)
     except IOError:
       pass
 
@@ -239,7 +239,7 @@ def releasePort(port):
 def getBusyPorts():
   config_file, lock_file = _getConfigurationFilename()
   oldmask = os.umask(0)
-  with open(lock_file, 'w') as lock:
+  with open(lock_file, 'wb') as lock:
     # acquire lock
     __acquire_lock(lock)
 
@@ -247,7 +247,7 @@ def getBusyPorts():
     config = {}
     logger.debug("read configuration file")
     try:
-      with open(config_file, 'r') as f:
+      with open(config_file, 'rb') as f:
         config = pickle.load(f)
     except IOError: # empty file
       pass
index ca2abd93412ec2f67940379ce0158d5314c564f4..d9b580d8f76ce3f4c49b5f6780945febb42fc9df 100755 (executable)
@@ -1,4 +1,4 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
 #  -*- coding: iso-8859-1 -*-
 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
@@ -34,7 +34,7 @@ def findFileDict():
     """
     from salome_utils import getPortNumber
     port = getPortNumber()
-    if verbose(): print "myport = ", port
+    if verbose(): print("myport = ", port)
     return port
 
 def addToKillList(command_pid, command, port=None):
@@ -50,9 +50,10 @@ def addToKillList(command_pid, command, port=None):
     from killSalomeWithPort import getPiDict
     if port is None: port=findFileDict()
     filedict = getPiDict(port)
+    #filedict = getPiDict(port).encode()
 
     try:
-        with open(filedict, 'r') as fpid:
+        with open(filedict, 'rb') as fpid:
             process_ids=pickle.load(fpid)
     except:
         process_ids=[]
@@ -60,7 +61,7 @@ def addToKillList(command_pid, command, port=None):
     # check if PID is already in dictionary
     already_in=False
     for process_id in process_ids:
-        for pid in process_id.keys():
+        for pid in process_id:
             if int(pid) == int(command_pid):
                 already_in=True
                 break
@@ -71,17 +72,17 @@ def addToKillList(command_pid, command, port=None):
     # add process to the dictionary
     if not already_in:
         import types
-        if type(command) == types.ListType: command=" ".join([str(c) for c in command])
+        if isinstance(command, list): command=" ".join([str(c) for c in command])
         command=command.split()[0]
         try:
-            if verbose(): print "addToKillList: %s : %s" % ( str(command_pid), command )
+            if verbose(): print("addToKillList: %s : %s" % ( str(command_pid), command ))
             process_ids.append({int(command_pid): [command]})
             dir = os.path.dirname(filedict)
-            if not os.path.exists(dir): os.makedirs(dir, 0777)
-            with open(filedict,'w') as fpid:
+            if not os.path.exists(dir): os.makedirs(dir, 0o777)
+            with open(filedict,'wb') as fpid:
                 pickle.dump(process_ids, fpid)
         except:
-            if verbose(): print "addToKillList: can not add command %s : %s to the kill list" % ( str(command_pid), command )
+            if verbose(): print("addToKillList: can not add command %s : %s to the kill list" % ( str(command_pid), command ))
             pass
         pass
     pass
@@ -102,19 +103,19 @@ def killList(port=None):
     if not os.path.exists(filedict): filedict = getPiDict(port, hidden=False)
 
     try:
-        with open(filedict, 'r') as fpid:
+        with open(filedict, 'rb') as fpid:
             process_ids=pickle.load(fpid)
     except:
         process_ids=[]
         pass
     # kill processes
     for process_id in process_ids:
-        #print process_id
-        for pid, cmd in process_id.items():
+        # print(process_id)
+        for pid, cmd in list(process_id.items()):
             try:
                 os.kill(int(pid),signal.SIGKILL)
             except:
-                print "  ------------------ process %s : %s inexistant"% (pid, cmd[0])
+                print("  ------------------ process %s : %s inexistant"% (pid, cmd[0]))
                 pass
             pass
         pass
@@ -123,6 +124,6 @@ def killList(port=None):
     pass
 
 if __name__ == "__main__":
-    if verbose(): print sys.argv
+    if verbose(): print(sys.argv)
     addToKillList(sys.argv[1], sys.argv[2])
     pass
index 0dbab540b9ae0f182816b42465a0eda63b38e301..f63b631424eaa0a28fcf5a32d341e75b88c41750 100755 (executable)
@@ -1,5 +1,4 @@
-#! /usr/bin/env python
-#  -*- coding: iso-8859-1 -*-
+#! /usr/bin/env python3
 # Copyright (C) 2007-2017  CEA/DEN, EDF R&D, OPEN CASCADE
 #
 # Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
@@ -65,7 +64,7 @@ gui_att  = "gui"
 
 class xml_parser:
     def __init__(self, fileName ):
-        print "Configure parser: processing %s ..." % fileName
+        print("Configure parser: processing %s ..." % fileName)
         self.space = []
         self.config = {}
         self.config["modules"] = []
@@ -191,22 +190,21 @@ def install(prefix, config_file, verbose=0):
     try:
         parser = xml_parser(filename)
         _config = parser.config
-    except xml.sax.SAXParseException, inst:
-        print inst.getMessage()
-        print "Configure parser: parse error in configuration file %s" % filename
+    except xml.sax.SAXParseException as inst:
+        print(inst.getMessage())
+        print("Configure parser: parse error in configuration file %s" % filename)
         pass
-    except xml.sax.SAXException, inst:
-        print inst.args
-        print "Configure parser: error in configuration file %s" % filename
+    except xml.sax.SAXException as inst:
+        print(inst.args)
+        print("Configure parser: error in configuration file %s" % filename)
         pass
-    except Exception as e:
-        print "Configure parser: Error : can not read configuration file %s, check existence and rights" % filename
-        print(e)
+    except:
+        print("Configure parser: Error : can not read configuration file %s, check existence and rights" % filename)
         pass
 
     if verbose:
         for cle,val in _config.items():
-            print cle, val
+            print(cle, val)
             pass
 
     # Remove CTestTestfile.cmake; this file will be filled by successive calls to link_module and link_extra_test
@@ -217,8 +215,8 @@ def install(prefix, config_file, verbose=0):
       pass
 
     for module in _config.get("modules", []):
-        if _config.has_key(module):
-            print "--- add module ", module, _config[module]
+        if module in _config:
+            print("--- add module ", module, _config[module])
             options = params()
             options.verbose = verbose
             options.clear = 0
@@ -230,8 +228,8 @@ def install(prefix, config_file, verbose=0):
         pass
 
     for extra_test in _config.get("extra_tests", []):
-        if _config.has_key(extra_test):
-            print "--- add extra test ", extra_test, _config[extra_test]
+        if extra_test in _config:
+            print("--- add extra test ", extra_test, _config[extra_test])
             options = params()
             options.verbose = verbose
             options.clear = 0
@@ -287,31 +285,31 @@ def install(prefix, config_file, verbose=0):
     # Creation of env.d directory
     virtual_salome.mkdir(os.path.join(home_dir,'env.d'))
 
-    if _config.has_key("prereq_path") and os.path.isfile(_config["prereq_path"]):
+    if "prereq_path" in _config and os.path.isfile(_config["prereq_path"]):
         shutil.copyfile(_config["prereq_path"],
                         os.path.join(home_dir, 'env.d', 'envProducts.sh'))
         pass
     else:
-        print "WARNING: prerequisite file does not exist"
+        print("WARNING: prerequisite file does not exist")
         pass
 
-    if _config.has_key("context_path") and os.path.isfile(_config["context_path"]):
+    if "context_path" in _config and os.path.isfile(_config["context_path"]):
         shutil.copyfile(_config["context_path"],
                         os.path.join(home_dir, 'env.d', 'envProducts.cfg'))
         pass
     else:
-        print "WARNING: context file does not exist"
+        print("WARNING: context file does not exist")
         pass
 
-    if _config.has_key("sha1_collect_path") and os.path.isfile(_config["sha1_collect_path"]):
+    if "sha1_collect_path" in _config and os.path.isfile(_config["sha1_collect_path"]):
         shutil.copyfile(_config["sha1_collect_path"],
                         os.path.join(home_dir, 'sha1_collections.txt'))
         pass
     else:
-        print "WARNING: sha1 collections file does not exist"
+        print("WARNING: sha1 collections file does not exist")
         pass
 
-    if _config.has_key("system_conf_path") and os.path.isfile(_config["system_conf_path"]):
+    if "system_conf_path" in _config and os.path.isfile(_config["system_conf_path"]):
         shutil.copyfile(_config["system_conf_path"],
                         os.path.join(home_dir, 'env.d', 'envConfSystem.sh'))
         pass
@@ -322,11 +320,11 @@ def install(prefix, config_file, verbose=0):
             command = 'export '+ module + '_ROOT_DIR=${HOME}/${APPLI}\n'
             f.write(command)
             pass
-        if _config.has_key("samples_path"):
+        if "samples_path" in _config:
             command = 'export DATA_DIR=' + _config["samples_path"] +'\n'
             f.write(command)
             pass
-        if _config.has_key("resources_path") and os.path.isfile(_config["resources_path"]):
+        if "resources_path" in _config and os.path.isfile(_config["resources_path"]):
             command = 'export USER_CATALOG_RESOURCES_FILE=' + os.path.abspath(_config["resources_path"]) +'\n'
             f.write(command)
 
@@ -338,11 +336,11 @@ def install(prefix, config_file, verbose=0):
             command = module + '_ROOT_DIR=${HOME}/${APPLI}\n'
             f.write(command)
             pass
-        if _config.has_key("samples_path"):
+        if "samples_path" in _config:
             command = 'DATA_DIR=' + _config["samples_path"] +'\n'
             f.write(command)
             pass
-        if _config.has_key("resources_path") and os.path.isfile(_config["resources_path"]):
+        if "resources_path" in _config and os.path.isfile(_config["resources_path"]):
             command = 'USER_CATALOG_RESOURCES_FILE=' + os.path.abspath(_config["resources_path"]) +'\n'
             f.write(command)
 
@@ -399,7 +397,7 @@ MMGT_REENTRANT=1
     #Add USERS directory with 777 permission to store users configuration files
     users_dir = os.path.join(home_dir,'USERS')
     makedirs(users_dir)
-    os.chmod(users_dir, 0777)
+    os.chmod(users_dir, 0o777)
 
 def main():
     parser = optparse.OptionParser(usage=usage)
@@ -415,7 +413,7 @@ def main():
 
     options, args = parser.parse_args()
     if not os.path.exists(options.config):
-        print "ERROR: config file %s does not exist. It is mandatory." % options.config
+        print("ERROR: config file %s does not exist. It is mandatory." % options.config)
         sys.exit(1)
 
     install(prefix=options.prefix, config_file=options.config, verbose=options.verbose)
index 171036b0e1e041a36aa0069af4c5490c113e907a..1eaeb95414e9a485c2cb251cbf2ef1fb64700bc0 100755 (executable)
@@ -1,4 +1,4 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
 
 # Copyright (C) 2013-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
@@ -23,51 +23,50 @@ import os
 import sys
 
 def main(args):
-  # Identify application path then locate configuration files
-  currentPath = os.path.realpath(os.path.dirname(os.path.abspath(__file__)))
-  launcherFile = os.path.basename(__file__)
-  from salome_starter import initialize
-  initialize(currentPath, launcherFile)
-
-  if len(args) == 1 and args[0] in ['--help', 'help', '-h', '--h']:
-    from salomeContext import usage
-    usage()
-    sys.exit(0)
-
-  from salomeContextUtils import getConfigFileNames
-  configFileNames, args, unexisting = getConfigFileNames(args, checkExistence=True)
-
-  if len(unexisting) > 0:
-    print "ERROR: unexisting configuration/environment file(s): " + ', '.join(unexisting)
-    sys.exit(1)
-
-  # Create a SalomeContext which parses configFileNames to initialize environment
-  from salomeContextUtils import SalomeContextException
-  try:
-    from salomeContext import SalomeContext
-    context = SalomeContext(configFileNames)
-
-    # Here set specific variables, if needed
-    # context.addToPath('mypath')
-    # context.addToLdLibraryPath('myldlibrarypath')
-    # context.addToPythonPath('mypythonpath')
-    # context.setVariable('myvarname', 'value')
-
-    # Start SALOME, parsing command line arguments
-    out, err, returncode = context.runSalome(args)
-    if out:
-      sys.stdout.write(out)
-    if err:
-      sys.stderr.write(err)
-    #print 'Thank you for using SALOME!'
-    sys.exit(returncode)
-  except SalomeContextException, e:
-    import logging
-    logging.getLogger("salome").error(e)
-    sys.exit(1)
+    # Identify application path then locate configuration files
+    currentPath = os.path.realpath(os.path.dirname(os.path.abspath(__file__)))
+    launcherFile = os.path.basename(__file__)
+    from salome_starter import initialize
+    initialize(currentPath, launcherFile)
+    
+    if len(args) == 1 and args[0] in ['--help', 'help', '-h', '--h']:
+        from salomeContext import usage
+        usage()
+        sys.exit(0)
+    
+    from salomeContextUtils import getConfigFileNames
+    configFileNames, args, unexisting = getConfigFileNames(args, checkExistence=True)
+    
+    if len(unexisting) > 0:
+        print("ERROR: unexisting configuration/environment file(s): " + ', '.join(unexisting))
+        sys.exit(1)
+    
+    # Create a SalomeContext which parses configFileNames to initialize environment
+    from salomeContextUtils import SalomeContextException
+    try:
+        from salomeContext import SalomeContext
+        context = SalomeContext(configFileNames)
+        
+        # Here set specific variables, if needed
+        # context.addToPath('mypath')
+        # context.addToLdLibraryPath('myldlibrarypath')
+        # context.addToPythonPath('mypythonpath')
+        # context.setVariable('myvarname', 'value')
+        
+        # Start SALOME, parsing command line arguments
+        out, err, returncode = context.runSalome(args)
+        if out:
+          sys.stdout.write(out)
+        if err:
+          sys.stderr.write(err)
+        #print('Thank you for using SALOME!')
+        sys.exit(returncode)
+    except SalomeContextException as e:
+        import logging
+        logging.getLogger("salome").error(e)
+        sys.exit(1)
 #
 
 if __name__ == "__main__":
-  args = sys.argv[1:]
-  main(args)
-#
+    args = sys.argv[1:]
+    main(args)
index b17367163ccba92bdf973aef1d45e823dcc379af..460f5c592dc4a8f5890c212b5f5636f6cc1bc5b2 100755 (executable)
@@ -36,7 +36,7 @@ def relpath(target, base):
     """
     target=target.split(os.path.sep)
     base=base.split(os.path.sep)
-    for i in xrange(len(base)):
+    for i in range(len(base)):
       if base[i] != target[i]:
         i=i-1
         #not in base
@@ -61,5 +61,5 @@ if __name__ == "__main__":
         applipath = relpath(os.path.realpath(os.path.dirname(__file__)),os.path.realpath(os.getenv('HOME')))
     else:
         applipath = get_appli_path()
-    print applipath
+    print(applipath)
 #
index 06bcffb4a418b649b8ac9f252fc8c4752e38d319..39bb933976f004645b663e86d822f26d67274840 100755 (executable)
 """
 """
 import sys,os,shutil,glob,socket
-import optparse
+import argparse
 from salome_utils import getUserName
 
 import getAppliPath
 appli_local=os.path.realpath(os.path.dirname(__file__))
 APPLI=getAppliPath.relpath(appli_local,os.path.realpath(os.getenv('HOME')))
 
-usage="""usage: %prog [options]
+usage="""%(prog)s [options]
 
 This procedure kill all containers that have been launched in a SALOME session on remote machines.
 A SALOME session is identified by a machine name and a port number.
@@ -110,15 +110,14 @@ class Resource:
     return appliPath
 
 def main():
-  parser = optparse.OptionParser(usage=usage)
-  parser.add_option('-p','--port', dest="port",
-                            help="The SALOME session port (default NSPORT or 2810)")
+  parser = argparse.ArgumentParser(usage=usage)
+  parser.add_argument('-p','--port', dest="port",
+                      help="The SALOME session port (default NSPORT or 2810)")
 
-
-  options, args = parser.parse_args()
+  args = parser.parse_args()
 
   if not os.path.exists(catalog_file):
-    print "ERROR: the catalog file %s is mandatory" % catalog_file_base
+    print("ERROR: the catalog file %s is mandatory" % catalog_file)
     sys.exit(1)
 
   #Parse CatalogResource.xml
@@ -142,13 +141,14 @@ def main():
     if resource.get_host() in local_names:continue
     command=resource.get_rsh() +" -l "+resource.get_user()+" "+resource.get_host()
     command=command+ " " + os.path.join(resource.get_appliPath(),"runRemote.sh")
-    if options.port:
-      port=options.port
+    if args.port:
+      port=args.port
     else:
       port=os.getenv("NSPORT") or "2810"
     command=command+ " " + get_hostname() + " " + port +" killSalomeWithPort.py " + port
-    print command
-    os.system(command)
+    print(command)
+    return subprocess.call(command, shell=True)
+
 
 if __name__ == '__main__':
   main()
index 37430157e53cbb61bdf70a6172c84e08fe3eb741..3bd95d620358848b8f3421dd74db4fe8e579cb42 100755 (executable)
@@ -1,4 +1,4 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
 
 import os
 import subprocess
@@ -15,8 +15,8 @@ def main(args):
         env_modules_option = "--with-env-modules="
         env_modules_l = [x for x in args if x.startswith(env_modules_option)]
         if env_modules_l:
-          env_modules += env_modules_l[-1][len(env_modules_option):].split(',')
-          args = [x for x in args if not x.startswith(env_modules_option)]
+            env_modules += env_modules_l[-1][len(env_modules_option):].split(',')
+            args = [x for x in args if not x.startswith(env_modules_option)]
         env_modules_option += "%s" % ','.join(env_modules)
         args.append(env_modules_option)
 
@@ -27,5 +27,3 @@ def main(args):
 
 if __name__ == "__main__":
     main(sys.argv[1:])
-#
-
index 795803d408da1eae96165d06d999acdb554565a8..737b4c15d1a837bdeca62fa4d9da9634499ee4a4 100644 (file)
@@ -53,7 +53,7 @@ def initialize(launcherPath, launcherFile):
   appliPath = __detectAppliPath(launcherPath, launcherFile)
 
   if appliPath is None:
-    print "ERROR: Unable to find application folder"
+    print("ERROR: Unable to find application folder")
     sys.exit(1)
 
   appliPath = os.path.relpath(appliPath, homePath)
@@ -68,7 +68,7 @@ def initialize(launcherPath, launcherFile):
   try:
     from salomeContextUtils import setOmniOrbUserPath
     setOmniOrbUserPath()
-  except Exception, e:
-    print e
+  except Exception as e:
+    print(e)
     sys.exit(1)
 # End of preliminary work
index 23bb9c3971bb1f681b201f0b96a6cb4ebb806d55..3653d14a94e0c11d89ec52ac20508c169ebe9a3f 100644 (file)
@@ -103,11 +103,11 @@ class SalomeInstance(object):
 #
 
 if __name__ == "__main__":
-  print "##### Start instance..."
+  print("##### Start instance...")
   salome_instance = SalomeInstance.start()
   port = salome_instance.get_port()
-  print "#####    ...instance started on port %s"%port
+  print("#####    ...instance started on port %s"%port)
 
-  print "##### Terminate instance running on port %s"%port
+  print("##### Terminate instance running on port %s"%port)
   salome_instance.stop()
 #
index c167e97f6452f586f721ae2f6258e6bc425e018a..6bc8b97712929ccd1806113f16f12638fbd5e584 100644 (file)
@@ -26,6 +26,32 @@ import os
 import subprocess
 import signal
 
+# Run test
+def runTest(command):
+  print("Running:", " ".join(command))
+  p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+  out, err = p.communicate()
+  res = p.returncode
+  # About res value:
+  # A negative value -N indicates that the child was terminated by signal N (Unix only).
+  # On Unix, the value 11 generally corresponds to a segmentation fault.
+  return res, out, err
+#
+
+# Display output and errors
+def processResult(res, out, err):
+  if out:
+    print(out)
+    pass
+  if err:
+    print("    ** Detected error **")
+    print("Error code: ", res)
+    print(err, end=' ')
+    print("    ** end of message **")
+    pass
+  return res
+#
+
 # Timeout management
 class TimeoutException(Exception):
   """Exception raised when test timeout is reached."""
@@ -41,7 +67,7 @@ if __name__ == "__main__":
   # Add explicit call to python executable if a Python script is passed as
   # first argument
   if not args:
-    print "Invalid arguments for salome_test_driver.py. No command defined."
+    print("Invalid arguments for salome_test_driver.py. No command defined.")
     sys.exit(1)
   _, ext = os.path.splitext(args[0])
   if ext == ".py":
@@ -54,7 +80,7 @@ if __name__ == "__main__":
   setOmniOrbUserPath()
 
   # Set timeout handler
-  print "Test timeout explicitly set to: %s seconds"%timeout_delay
+  print("Test timeout explicitly set to: %s seconds"%timeout_delay)
   timeout_sec = abs(int(timeout_delay)-10)
   if sys.platform == 'win32':
     from threading import Timer
@@ -70,17 +96,10 @@ if __name__ == "__main__":
   try:
     salome_instance = SalomeInstance.start(shutdown_servers=True)
     port = salome_instance.get_port()
-    # Run the test
-    print "Running:", " ".join(test_and_args)
-    p = subprocess.Popen(test_and_args)
-    pid = p.pid
-    p.communicate()
-    res = p.returncode
-    # About res value:
-    # A negative value -N indicates that the child was terminated by signal N (Unix only).
-    # On Unix, the value 11 generally corresponds to a segmentation fault.
+    res, out, err = runTest(test_and_args)
+    res = processResult(res, out, err)
   except TimeoutException:
-    print "FAILED : timeout(%s) is reached"%timeout_delay
+    print("FAILED : timeout(%s) is reached"%timeout_delay)
   except:
     import traceback
     traceback.print_exc()
@@ -92,6 +111,6 @@ if __name__ == "__main__":
     pass
   if sys.platform == 'win32':
     timer.cancel()
-  print "Exit test with status code:", res
+  print("Exit test with status code:", res)
   sys.exit(res)
 #
index 1e99d312dc28df3c99bf4815fa7538de7dbd4e16..9d4940d955530a9c62007c707dfe2691f75ff57f 100644 (file)
@@ -41,7 +41,7 @@ if __name__ == "__main__":
   # Add explicit call to python executable if a Python script is passed as
   # first argument
   if not args:
-    print "Invalid arguments for salome_test_driver_gui.py. No command defined."
+    print("Invalid arguments for salome_test_driver_gui.py. No command defined.")
     sys.exit(1)
   _, ext = os.path.splitext(args[0])
   test_and_args = args
@@ -51,7 +51,7 @@ if __name__ == "__main__":
   setOmniOrbUserPath()
 
   # Set timeout handler
-  print "Test timeout explicitly set to: %s seconds"%timeout_delay
+  print("Test timeout explicitly set to: %s seconds"%timeout_delay)
   timeout_sec = abs(int(timeout_delay)-10)
   if sys.platform == 'win32':
     from threading import Timer
@@ -66,7 +66,7 @@ if __name__ == "__main__":
   try:
     salome_instance = SalomeInstance.start(with_gui=True, args=test_and_args)
   except TimeoutException:
-    print "FAILED : timeout(%s) is reached"%timeout_delay
+    print("FAILED : timeout(%s) is reached"%timeout_delay)
   except:
     import traceback
     traceback.print_exc()
@@ -77,6 +77,6 @@ if __name__ == "__main__":
     pass
   if sys.platform == 'win32':
     timer.cancel()
-#  print "Exit test with status code:", res
+#  print("Exit test with status code:", res)
 #  sys.exit(res)
 #
index 110a5d52f356cb9fa1c4676bc699b553293b1d54..59ff65c806fb0f5e814bc92714e4c08deb665d60 100644 (file)
@@ -23,14 +23,14 @@ import tempfile
 import os
 import sys
 import imp
-from cStringIO import StringIO
+from io import StringIO
 import multiprocessing
 import logging
 
 def new_instance(running_instances):
   from salome_instance import SalomeInstance
   instance = SalomeInstance.start()
-  print "Instance created and now running on port", instance.get_port()
+  print("Instance created and now running on port", instance.get_port())
   running_instances.put(instance)
 #
 
@@ -46,7 +46,7 @@ class TestConcurrentLaunch(unittest.TestCase):
   def __terminateInstances(self, running_instances):
     while not running_instances.empty():
       instance = running_instances.get()
-      print "Terminate instance running on port", instance.get_port()
+      print("Terminate instance running on port", instance.get_port())
       instance.stop()
   #
 
@@ -59,7 +59,7 @@ class TestConcurrentLaunch(unittest.TestCase):
       setenv.main(True, exeName="salome start")
       import runSalome
       runSalome.runSalome()
-    except SystemExit, e:
+    except SystemExit as e:
       if str(e) != '0':
         logging.error(e)
       pass
@@ -73,17 +73,17 @@ class TestConcurrentLaunch(unittest.TestCase):
       import runSession
       params, args = runSession.configureSession(args, exe="salome shell")
       return runSession.runSession(params, args)
-    except SystemExit, e:
+    except SystemExit as e:
       if str(e) != '0':
         logging.error(e)
       pass
   #
   def test01_SingleSession(self):
-    print "** Testing single session **"
+    print("** Testing single session **")
     self.session(["hello.py"])
   #
   def test02_MultiSession(self):
-    print "** Testing multi sessions **"
+    print("** Testing multi sessions **")
     jobs = []
     for i in range(9):
       p = multiprocessing.Process(target=self.session, args=(["hello.py"],))
@@ -94,7 +94,7 @@ class TestConcurrentLaunch(unittest.TestCase):
       j.join()
   #
   def test03_SingleAppli(self):
-    print "** Testing single appli **"
+    print("** Testing single appli **")
     running_instances, processes = self.__createInstances(1)
     for p in processes:
       p.start()
@@ -107,7 +107,7 @@ class TestConcurrentLaunch(unittest.TestCase):
     self.__terminateInstances(running_instances)
   #
   def test04_MultiAppli(self):
-    print "** Testing multi appli **"
+    print("** Testing multi appli **")
     running_instances, processes = self.__createInstances(9)
     for p in processes:
       p.start()
index 4498d6934cd86da8c1ab721c93339d270745c073..9771f9a2722202f5b4fe7a3a2467003007a83fad 100644 (file)
@@ -30,7 +30,7 @@ def port_reservation(obtained_ports, prefered=None, test=None, expected=None):
     port = getPort(prefered)
   else:
     port = getPort()
-  print "obtained port = %s"%port
+  print("obtained port = %s"%port)
 
   obtained_ports.put(port)
 
@@ -41,8 +41,8 @@ def port_reservation(obtained_ports, prefered=None, test=None, expected=None):
 class TestMinimalExample(unittest.TestCase):
   def testSequential(self):
     from PortManager import releasePort, getBusyPorts
-    print "\nBEGIN testSequential"
-    print "Busy ports", getBusyPorts()
+    print("\nBEGIN testSequential")
+    print("Busy ports", getBusyPorts())
     obtained_ports = multiprocessing.Queue()
 
     processes = [
@@ -56,7 +56,7 @@ class TestMinimalExample(unittest.TestCase):
     for p in processes:
       p.join()
 
-    print "Busy ports", getBusyPorts()
+    print("Busy ports", getBusyPorts())
     # Try to get specific port number
     p = multiprocessing.Process(target=port_reservation, args=(obtained_ports, 2872, self, 2872,))
     p.start()
@@ -73,7 +73,7 @@ class TestMinimalExample(unittest.TestCase):
     p.join()
 
     # Release port
-    print "release port 2899"
+    print ("release port 2899")
     p = multiprocessing.Process(target=releasePort, args=(2899,))
     p.start()
     p.join()
@@ -84,21 +84,21 @@ class TestMinimalExample(unittest.TestCase):
     p.join()
 
     # Release ports
-    print "Busy ports", getBusyPorts()
+    print("Busy ports", getBusyPorts())
     while not obtained_ports.empty():
       port = obtained_ports.get()
-      print "release port", port
+      print("release port", port)
       p = multiprocessing.Process(target=releasePort, args=(port,))
       p.start()
       p.join()
 
-    print "END testSequential"
+    print("END testSequential")
   #
 
   def testConcurrent(self):
     from PortManager import releasePort, getBusyPorts
-    print "\nBEGIN testConcurrent"
-    print "Busy ports", getBusyPorts()
+    print("\nBEGIN testConcurrent")
+    print("Busy ports", getBusyPorts())
     obtained_ports = multiprocessing.Queue()
     processes = [
       multiprocessing.Process(target=port_reservation, args=(obtained_ports,))
@@ -125,15 +125,15 @@ class TestMinimalExample(unittest.TestCase):
       p.join()
 
     # Release ports
-    print "Busy ports", getBusyPorts()
+    print("Busy ports", getBusyPorts())
     while not obtained_ports.empty():
       port = obtained_ports.get()
-      print "release port", port
+      print("release port", port)
       p = multiprocessing.Process(target=releasePort, args=(port,))
       p.start()
       p.join()
 
-    print "END testConcurrent"
+    print("END testConcurrent")
   #
 #
 
index 54ec0a01f3981e9165d8084e4544ee6e4ff91b32..12d3639502e3a3f4a721563b9aee5910d6cd5cda 100644 (file)
@@ -1 +1 @@
-print 'Hello!'
+print('Hello!')
index a078fa166d3752881ae5f4c1c5c6bfcb98915336..b3a03180c7854f65f43bd44e61c3b65c021d3a66 100755 (executable)
@@ -64,7 +64,7 @@ run_command() {
 # make hello.py
 echo "
 #!/usr/bin/env python
-print 'Hello\!'
+print('Hello\!')
 " > ${BASE_DIR}/hello.py
 
 # Build output folders
index d6cd97541554e773ed1bb037057d3899e835f69f..4a9f365a003578df01aef538f9cb92f3ec7aa072 100644 (file)
@@ -22,7 +22,7 @@ import unittest
 import os
 import sys
 import imp
-from cStringIO import StringIO
+from io import StringIO
 import logging
 
 logger = logging.getLogger("TestLauncherLogger")
@@ -71,7 +71,7 @@ class TestSessionArgs(unittest.TestCase):
       import runSession
       params, args = runSession.configureSession(args, exe="salome shell")
       return runSession.runSession(params, args)
-    except SystemExit, e:
+    except SystemExit as e:
       if str(e) != '0':
         logger.error(e)
       import traceback
index f235a0a1eb1f47ce57a2ff34663a0efc0a0c8282..a684a6cddc0405d03599540c07ec5b51586bee9e 100644 (file)
@@ -25,11 +25,11 @@ class TestLauncher(unittest.TestCase):
   def setUp(self):
     from salome_instance import SalomeInstance
     self.instance = SalomeInstance.start()
-    print "Instance created and now running on port", self.instance.get_port()
+    print("Instance created and now running on port", self.instance.get_port())
    #
 
   def tearDown(self):
-    print "Terminate instance running on port", self.instance.get_port()
+    print("Terminate instance running on port", self.instance.get_port())
     self.instance.stop()
   #
 
@@ -41,7 +41,7 @@ class TestLauncher(unittest.TestCase):
       args = ["hello.py"]
       params, args = runSession.configureSession(args, exe="salome shell")
       return runSession.runSession(params, args)
-    except SystemExit, e:
+    except SystemExit as e:
       if str(e) != '0':
         logging.error(e)
   #
index 8184677366a75cee31980cca03471ec67daac7a1..02a52cc2e80ead9c0872a34db1abd3944801d1d4 100644 (file)
@@ -23,7 +23,7 @@ import multiprocessing
 def new_instance(running_instances):
   from salome_instance import SalomeInstance
   instance = SalomeInstance.start()
-  print "Instance created and now running on port", instance.get_port()
+  print("Instance created and now running on port", instance.get_port())
   running_instances.put(instance)
 #
 
@@ -41,7 +41,7 @@ class TestLauncher(unittest.TestCase):
   def __terminateInstances(self, running_instances):
     while not running_instances.empty():
       instance = running_instances.get()
-      print "Terminate instance running on port", instance.get_port()
+      print("Terminate instance running on port", instance.get_port())
       instance.stop()
   #
 
@@ -91,19 +91,19 @@ class TestLauncher(unittest.TestCase):
 
     # Connect to one instance
     import runConsole
-    port = all_instances[len(all_instances)/2].get_port()
-    print "Connect to instance running on port", port
+    port = all_instances[len(all_instances)//2].get_port()
+    print("Connect to instance running on port", port)
     self.__connectToInstance(port)
 
     # Connect to another instance
     import runConsole
-    port = all_instances[len(all_instances)/4].get_port()
-    print "Connect to instance running on port", port
+    port = all_instances[len(all_instances)//4].get_port()
+    print("Connect to instance running on port", port)
     self.__connectToInstance(port)
 
     # Terminate instances
     for instance in all_instances:
-      print "Terminate instance running on port", instance.get_port()
+      print("Terminate instance running on port", instance.get_port())
       instance.stop()
   #
 
index 82fce4834b27535c44b801276b905f6a677eead5..e9981d662fcae5d72f454139802af87a0ae8aa68 100644 (file)
 """
 """
 import sys,os,shutil,glob,socket
-import optparse
+import argparse
 from salome_utils import getUserName
 
 import getAppliPath
 appli_local=os.path.realpath(os.path.dirname(__file__))
 APPLI=getAppliPath.relpath(appli_local,os.path.realpath(os.getenv('HOME')))
 
-usage="""usage: %prog [options]
+usage="""%(prog)s [options]
 Typical use is:
   python update_catalogs.py
 
@@ -155,11 +155,11 @@ class Resource:
       os.mkdir(resource_dir)
       cata_path=os.path.join(appliPath,"share","salome","resources","*Catalog.xml")
       cmd="cp %s %s" % (cata_path,resource_dir)
-      print cmd
+      print(cmd)
       os.system(cmd)
       cata_path=os.path.join(appliPath,"share","salome","resources","*","*Catalog.xml")
       cmd="cp %s %s" % (cata_path,resource_dir)
-      print cmd
+      print(cmd)
       os.system(cmd)
     else:
       #remote machine, use rcopy
@@ -167,12 +167,12 @@ class Resource:
       cata_path=os.path.join(appliPath,"share","salome","resources","*Catalog.xml")
       cmd="%s %s@%s:%s %s"
       cmd= cmd%(rcopy,userName,hostname,cata_path,resource_dir)
-      print cmd
+      print(cmd)
       os.system(cmd)
       cata_path=os.path.join(appliPath,"share","salome","resources","*","*Catalog.xml")
       cmd="%s %s@%s:%s %s"
       cmd= cmd%(rcopy,userName,hostname,cata_path,resource_dir)
-      print cmd
+      print(cmd)
       os.system(cmd)
 
     schema_cata=os.path.join(resource_dir,"*SchemaCatalog.xml")
@@ -207,12 +207,11 @@ class Resource:
 
 
 def main():
-  parser = optparse.OptionParser(usage=usage)
-
-  options, args = parser.parse_args()
+  parser = argparse.ArgumentParser(usage=usage)
+  args = parser.parse_args()
 
   if not os.path.exists(catalog_file_base):
-    print "ERROR: the base catalog file %s is mandatory" % catalog_file_base
+    print("ERROR: the base catalog file %s is mandatory" % catalog_file_base)
     sys.exit(1)
 
   #Parse CatalogResource.xml
@@ -251,12 +250,11 @@ def main():
     mach.update()
 
   #dump new CatalogResources.xml
-  f=open(catalog_file,'w')
-  f.write('<?xml version="1.0" ?>\n')
-  doc.write(f)
-  f.write('\n')
-  f.close()
-  print "%s updated" % catalog_file
+  with open(catalog_file,'w') as f:
+      f.write('<?xml version="1.0" ?>\n')
+      doc.write(f)
+      f.write('\n')
+  print("%s updated" % catalog_file)
 
   #update configRemote.sh in env.d directory (environment variable SALOME_CATALOGS_PATH)
   path=[]
@@ -264,9 +262,8 @@ def main():
     if mach.resource_dir:
       path.append(mach.resource_dir)
 
-  f=open(os.path.join(appli_local,"env.d","configRemote.sh"),'w')
-  f.write("export SALOME_CATALOGS_PATH=%s\n" % SEP.join(path))
-  f.close()
+  with open(os.path.join(appli_local,"env.d","configRemote.sh"),'w') as f:
+      f.write("export SALOME_CATALOGS_PATH=%s\n" % SEP.join(path))
 
 
 if __name__ == '__main__':
index 38d5304388cbdec6cda8899dd52370ea3523cf0b..adfddac2ecbdbc9595ddfc01cfe29416acf4f938 100755 (executable)
@@ -1,4 +1,4 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
 #  -*- coding: iso-8859-1 -*-
 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
index 2ea384b6367a296f9aaa63d6cbf55b74e5289ee0..c8ce783f5ea8f05fa84703e3964ee6907a65ae33 100755 (executable)
@@ -1,4 +1,4 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
 #  -*- coding: iso-8859-1 -*-
 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
@@ -82,9 +82,9 @@ def killAllPorts():
         pass
     # kill other processes
     if sys.platform != 'win32':
-        import commands
+        import subprocess
         cmd = "ps -fea | grep '%s' | grep 'ghs3d' | grep 'f /tmp/GHS3D_' | grep -v 'grep' | awk '{print $2}'" % user
-        prc = commands.getoutput(cmd)
+        prc = subprocess.getoutput(cmd)
         for field in prc.split():
             try:
                 os.kill(int(field), signal.SIGKILL)
@@ -94,7 +94,7 @@ def killAllPorts():
         pass
         # kill ompi-server needed for MPI containers coupling
         cmd = "ps -fea | grep '%s' | grep 'ompi-server' | grep -v 'grep' | awk '{print $2}'" % user
-        prc = commands.getoutput(cmd)
+        prc = subprocess.getoutput(cmd)
         for field in prc.split():
             try:
                 os.kill(int(field), signal.SIGKILL)
@@ -111,8 +111,8 @@ if __name__ == "__main__":
     try:
         from salomeContextUtils import setOmniOrbUserPath
         setOmniOrbUserPath()
-    except Exception, e:
-        print e
+    except Exception as e:
+        print(e)
         sys.exit(1)
     killAllPorts()
     pass
index 01d1eb39a2b9546e22a56162ec5c96d4e8e8de5a..fec9e4aa356850f7a1794f4bc39e881283a9febf 100755 (executable)
@@ -1,4 +1,4 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
 #  -*- coding: iso-8859-1 -*-
 # Copyright (C) 2007-2017  CEA/DEN, EDF R&D, OPEN CASCADE
 #
@@ -31,7 +31,7 @@
 #  \endcode
 #
 
-import os, sys, pickle, signal, commands,glob
+import os, sys, pickle, signal, subprocess,glob
 import subprocess
 import shlex
 from salome_utils import verbose
@@ -96,7 +96,7 @@ def appliCleanOmniOrbConfig(port):
     the last is removed only if the link points to the first file.
     """
     if verbose():
-        print "clean OmniOrb config for port %s"%port
+        print("clean OmniOrb config for port %s"%port)
 
     from salome_utils import generateFileName, getUserName
     omniorbUserPath = os.getenv("OMNIORB_USER_PATH")
@@ -202,7 +202,7 @@ def shutdownMyPort(port, cleanup=True):
         # shutdown all
         orb = CORBA.ORB_init([''], CORBA.ORB_ID)
         lcc = LifeCycleCORBA(orb) # see (1)
-        print "Terminating SALOME on port %s..."%(port)
+        print("Terminating SALOME on port %s..."%(port))
         lcc.shutdownServers()
         # give some time to shutdown to complete
         time.sleep(1)
@@ -228,22 +228,22 @@ def __killMyPort(port, filedict):
         port = int(port)
 
     try:
-        with open(filedict, 'r') as fpid:
+        with open(filedict, 'rb') as fpid:
             process_ids=pickle.load(fpid)
             for process_id in process_ids:
-                for pid, cmd in process_id.items():
-                    if verbose(): print "stop process %s : %s"% (pid, cmd[0])
+                for pid, cmd in list(process_id.items()):
+                    if verbose(): print("stop process %s : %s"% (pid, cmd[0]))
                     try:
                         from salome_utils import killpid
                         killpid(int(pid))
                     except:
-                        if verbose(): print "  ------------------ process %s : %s not found"% (pid, cmd[0])
+                        if verbose(): print("  ------------------ process %s : %s not found"% (pid, cmd[0]))
                         pass
                     pass # for pid ...
                 pass # for process_id ...
             # end with
     except:
-        print "Cannot find or open SALOME PIDs file for port", port
+        print("Cannot find or open SALOME PIDs file for port", port)
         pass
     os.remove(filedict)
     pass
@@ -276,7 +276,7 @@ def __guessPiDictFilename(port):
             log_msg += "   ... not found\n"
 
     if verbose():
-        print log_msg
+        print(log_msg)
 
     return filedict
 #
@@ -296,12 +296,12 @@ def killMyPort(port):
         filedict = getPiDict(port)
         if not os.path.isfile(filedict): # removed by previous call, see (1)
             if verbose():
-                print "SALOME on port %s: already removed by previous call"%port
+                print("SALOME on port %s: already removed by previous call"%port)
             # Remove port from PortManager config file
             try:
                 from PortManager import releasePort
                 if verbose():
-                    print "Removing port from PortManager configuration file"
+                    print("Removing port from PortManager configuration file")
                 releasePort(port)
             except ImportError:
                 pass
@@ -391,10 +391,10 @@ def killMyPortSpy(pid, port):
 
 if __name__ == "__main__":
     if len(sys.argv) < 2:
-        print "Usage: "
-        print "  %s <port>" % os.path.basename(sys.argv[0])
-        print
-        print "Kills SALOME session running on specified <port>."
+        print("Usage: ")
+        print("  %s <port>" % os.path.basename(sys.argv[0]))
+        print()
+        print("Kills SALOME session running on specified <port>.")
         sys.exit(1)
         pass
     if sys.argv[1] == "--spy":
@@ -408,8 +408,8 @@ if __name__ == "__main__":
     try:
         from salomeContextUtils import setOmniOrbUserPath #@UnresolvedImport
         setOmniOrbUserPath()
-    except Exception, e:
-        print e
+    except Exception as e:
+        print(e)
         sys.exit(1)
     for port in sys.argv[1:]:
         killMyPort(port)
index 06b9645d8b95798d861000f2b86540fd2f084741..e32982a549365536fb2735b183a5c5ddd6ebf012 100755 (executable)
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-import os, glob, string, sys, re
+import argparse
+import glob
+import os
+import re
+import sys
 import xml.sax
-import optparse
-import types
 
 from salome_utils import verbose, getPortNumber, getHomeDir
 
+
 # names of tags in XML configuration file
 doc_tag = "document"
 sec_tag = "section"
@@ -108,8 +111,9 @@ def version():
         if root_dir and os.path.exists( version_file ):
             filename = version_file
         if filename:
-            str = open( filename, "r" ).readline() # str = "THIS IS SALOME - SALOMEGUI VERSION: 3.0.0"
-            match = re.search( r':\s+([a-zA-Z0-9.]+)\s*$', str )
+            with open(filename, "r") as f:
+                v = f.readline() # v = "THIS IS SALOME - SALOMEGUI VERSION: 3.0.0"
+            match = re.search( r':\s+([a-zA-Z0-9.]+)\s*$', v )
             if match :
                 return match.group( 1 )
     except:
@@ -213,7 +217,7 @@ def userFile(appname, cfgname):
         files += glob.glob(os.path.join(getHomeDir(), filetmpl2.format(appname)))
     pass
 
-    # ... loop through all files and find most appopriate file (with closest id)
+    # ... loop through all files and find most appropriate file (with closest id)
     appr_id   = -1
     appr_file = ""
     for f in files:
@@ -241,14 +245,14 @@ def userFile(appname, cfgname):
 def process_containers_params( standalone, embedded ):
     # 1. filter inappropriate containers names
     if standalone is not None:
-        standalone = filter( lambda x: x in standalone_choices, standalone )
+        standalone = [x for x in standalone if x in standalone_choices]
     if embedded is not None:
-        embedded   = filter( lambda x: x in embedded_choices,   embedded )
+        embedded   = [x for x in embedded if x in embedded_choices]
 
     # 2. remove containers appearing in 'standalone' parameter from the 'embedded'
     # parameter --> i.e. 'standalone' parameter has higher priority
     if standalone is not None and embedded is not None:
-        embedded = filter( lambda x: x not in standalone, embedded )
+        embedded = [x for x in embedded if x not in standalone]
 
     # 3. return corrected parameters values
     return standalone, embedded
@@ -264,7 +268,7 @@ section_to_skip = ""
 class xml_parser:
     def __init__(self, fileName, _opts, _importHistory):
         #warning _importHistory=[] is NOT good: is NOT empty,reinitialized after first call
-        if verbose(): print "Configure parser: processing %s ..." % fileName
+        if verbose(): print("Configure parser: processing %s ..." % fileName)
         self.fileName = os.path.abspath(fileName)
         self.importHistory = _importHistory
         self.importHistory.append(self.fileName)
@@ -282,39 +286,42 @@ class xml_parser:
             self.opts[ embedded_nam ] = embedded
         pass
 
-    def boolValue( self, str ):
-        strloc = str
-        if isinstance(strloc, types.UnicodeType):
+    def boolValue( self, item):
+        strloc = item
+        if isinstance(strloc, str):
             strloc = strloc.encode().strip()
-        if isinstance(strloc, types.StringType):
-            strlow = strloc.lower()
-            if strlow in   ("1", "yes", "y", "on", "true", "ok"):
+        if isinstance(strloc, bytes):
+            strlow = strloc.decode().lower()
+            if strlow in ("1", "yes", "y", "on", "true", "ok"):
                 return True
             elif strlow in ("0", "no", "n", "off", "false", "cancel"):
                 return False
         return strloc
         pass
 
-    def intValue( self, str ):
-        strloc = str
-        if isinstance(strloc, types.UnicodeType):
+    def intValue( self, item):
+        strloc = item
+        if isinstance(strloc, str):
             strloc = strloc.encode().strip()
-        if isinstance(strloc, types.StringType):
-            strlow = strloc.lower()
-            if strlow in   ("1", "yes", "y", "on", "true", "ok"):
+        if isinstance(strloc, bytes):
+            strlow = strloc.decode().lower()
+            if strlow in ("1", "yes", "y", "on", "true", "ok"):
                 return 1
             elif strlow in ("0", "no", "n", "off", "false", "cancel"):
                 return 0
             else:
-                return string.atoi(strloc)
+                return int(strloc.decode())
         return strloc
         pass
 
-    def strValue( self, str ):
-        strloc = str
+    def strValue( self, item):
+        strloc = item
         try:
-            if isinstance(strloc, types.UnicodeType): strloc = strloc.encode().strip()
-            else: strloc = strloc.strip()
+            if isinstance( strloc, str):
+                strloc = strloc.strip()
+            else:
+                if isinstance( strloc, bytes):
+                    strloc = strloc.decode().strip()
         except:
             pass
         return strloc
@@ -333,7 +340,7 @@ class xml_parser:
             section_name = attrs.getValue( nam_att )
             if section_name in [lanch_nam, lang_nam]:
                 self.section = section_name # launch section
-            elif self.opts.has_key( modules_nam ) and \
+            elif modules_nam in self.opts and \
                  section_name in self.opts[ modules_nam ]:
                 self.section = section_name # <module> section
             else:
@@ -401,12 +408,12 @@ class xml_parser:
             if os.path.exists(absfname + ext) :
                 absfname += ext
                 if absfname in self.importHistory :
-                    if verbose(): print "Configure parser: Warning : file %s is already imported" % absfname
+                    if verbose(): print("Configure parser: Warning : file %s is already imported" % absfname)
                     return # already imported
                 break
             pass
         else:
-            if verbose(): print "Configure parser: Error : file %s does not exist" % absfname
+            if verbose(): print("Configure parser: Error : file %s does not exist" % absfname)
             return
 
         # importing file
@@ -417,438 +424,380 @@ class xml_parser:
             # import file
             imp = xml_parser(absfname, opts, self.importHistory)
             # merge results
-            for key in imp.opts.keys():
-                if not self.opts.has_key(key):
+            for key in imp.opts:
+                if key not in self.opts:
                     self.opts[key] = imp.opts[key]
                     pass
                 pass
             pass
         except:
-            if verbose(): print "Configure parser: Error : can not read configuration file %s" % absfname
+            if verbose(): print("Configure parser: Error : can not read configuration file %s" % absfname)
         pass
 
 
 # -----------------------------------------------------------------------------
 
-booleans = { '1': True , 'yes': True , 'y': True , 'on' : True , 'true' : True , 'ok'     : True,
-             '0': False, 'no' : False, 'n': False, 'off': False, 'false': False, 'cancel' : False }
+booleans = {'1': True , 'yes': True , 'y': True , 'on' : True , 'true' : True , 'ok'     : True,
+            '0': False, 'no' : False, 'n': False, 'off': False, 'false': False, 'cancel' : False}
 
-boolean_choices = booleans.keys()
+boolean_choices = list(booleans.keys())
 
-def check_embedded(option, opt, value, parser):
-    from optparse import OptionValueError
-    assert value is not None
-    if parser.values.embedded:
-        embedded = filter( lambda a: a.strip(), re.split( "[:;,]", parser.values.embedded ) )
-    else:
-        embedded = []
-    if parser.values.standalone:
-        standalone = filter( lambda a: a.strip(), re.split( "[:;,]", parser.values.standalone ) )
-    else:
-        standalone = []
-    vals = filter( lambda a: a.strip(), re.split( "[:;,]", value ) )
-    for v in vals:
-        if v not in embedded_choices:
-            raise OptionValueError( "option %s: invalid choice: %r (choose from %s)" % ( opt, v, ", ".join( map( repr, embedded_choices ) ) ) )
-        if v not in embedded:
-            embedded.append( v )
-            if v in standalone:
-                del standalone[ standalone.index( v ) ]
-                pass
-    parser.values.embedded = ",".join( embedded )
-    parser.values.standalone = ",".join( standalone )
-    pass
 
-def check_standalone(option, opt, value, parser):
-    from optparse import OptionValueError
-    assert value is not None
-    if parser.values.embedded:
-        embedded = filter( lambda a: a.strip(), re.split( "[:;,]", parser.values.embedded ) )
-    else:
-        embedded = []
-    if parser.values.standalone:
-        standalone = filter( lambda a: a.strip(), re.split( "[:;,]", parser.values.standalone ) )
-    else:
-        standalone = []
-    vals = filter( lambda a: a.strip(), re.split( "[:;,]", value ) )
-    for v in vals:
-        if v not in standalone_choices:
-            raise OptionValueError( "option %s: invalid choice: %r (choose from %s)" % ( opt, v, ", ".join( map( repr, standalone_choices ) ) ) )
-        if v not in standalone:
-            standalone.append( v )
-            if v in embedded:
-                del embedded[ embedded.index( v ) ]
-                pass
-    parser.values.embedded = ",".join( embedded )
-    parser.values.standalone = ",".join( standalone )
-    pass
+class CheckEmbeddedAction(argparse.Action):
+    def __call__(self, parser, namespace, value, option_string=None):
+        assert value is not None
+        if namespace.embedded:
+            embedded = [a for a in re.split("[:;,]", namespace.embedded) if a.strip()]
+        else:
+            embedded = []
+        if namespace.standalone:
+            standalone = [a for a in re.split("[:;,]", namespace.standalone) if a.strip()]
+        else:
+            standalone = []
+        vals = [a for a in re.split("[:;,]", value) if a.strip()]
+        for v in vals:
+            if v not in embedded_choices:
+                raise argparse.ArgumentError("option %s: invalid choice: %r (choose from %s)"
+                                             % (self.dest, v, ", ".join(map(repr, embedded_choices))))
+            if v not in embedded:
+                embedded.append(v)
+                if v in standalone:
+                    del standalone[standalone.index(v)]
+                    pass
+        namespace.embedded = ",".join(embedded)
+        namespace.standalone = ",".join(standalone)
+        pass
+
+
+class CheckStandaloneAction(argparse.Action):
+    def __call__(self, parser, namespace, value, option_string=None):
+        assert value is not None
+        if namespace.embedded:
+            embedded = [a for a in re.split("[:;,]", namespace.embedded) if a.strip()]
+        else:
+            embedded = []
+        if namespace.standalone:
+            standalone = [a for a in re.split("[:;,]", namespace.standalone) if a.strip()]
+        else:
+            standalone = []
+        vals = [a for a in re.split("[:;,]", value) if a.strip()]
+        for v in vals:
+            if v not in standalone_choices:
+                raise argparse.ArgumentError("option %s: invalid choice: %r (choose from %s)"
+                                             % (self.dest, v, ", ".join(map(repr, standalone_choices))))
+            if v not in standalone:
+                standalone.append(v)
+                if v in embedded:
+                    del embedded[embedded.index(v)]
+                    pass
+        namespace.embedded = ",".join(embedded)
+        namespace.standalone = ",".join(standalone)
 
-def store_boolean (option, opt, value, parser, *args):
-    if isinstance(value, types.StringType):
-        try:
-            value_conv = booleans[value.strip().lower()]
-            for attribute in args:
-                setattr(parser.values, attribute, value_conv)
-        except KeyError:
-            raise optparse.OptionValueError(
-                "option %s: invalid boolean value: %s (choose from %s)"
-                % (opt, value, boolean_choices))
-    else:
-        for attribute in args:
-            setattr(parser.values, attribute, value)
 
-def CreateOptionParser (theAdditionalOptions=None, exeName=None):
-    if theAdditionalOptions is None:
-        theAdditionalOptions = []
+class StoreBooleanAction(argparse.Action):
+    def __call__(self, parser, namespace, value, option_string=None):
+        if isinstance(value, bytes):
+            value = value.decode()
+        if isinstance(value, str):
+            try:
+                value_conv = booleans[value.strip().lower()]
+                setattr(namespace, self.dest, value_conv)
+            except KeyError:
+                raise argparse.ArgumentError(
+                    "option %s: invalid boolean value: %s (choose from %s)"
+                    % (self.dest, value, boolean_choices))
+        else:
+            setattr(namespace, self.dest, value)
+
+
+def CreateOptionParser(exeName=None):
+
+    if not exeName:
+        exeName = "%(prog)s"
+
+    a_usage = """%s [options] [STUDY_FILE] [PYTHON_FILE [args] [PYTHON_FILE [args]...]]
+Python file arguments, if any, must be comma-separated (without blank characters) and prefixed by "args:" (without quotes), e.g. myscript.py args:arg1,arg2=val,...
+""" % exeName
+    version_str = "Salome %s" % version()
+    pars = argparse.ArgumentParser(usage=a_usage)
+
+    # Version
+    pars.add_argument('-v', '--version', action='version', version=version_str)
+
     # GUI/Terminal. Default: GUI
     help_str = "Launch without GUI (in the terminal mode)."
-    o_t = optparse.Option("-t",
-                          "--terminal",
-                          action="store_false",
-                          dest="gui",
-                          help=help_str)
+    pars.add_argument("-t",
+                      "--terminal",
+                      action="store_false",
+                      dest="gui",
+                      help=help_str)
 
     help_str = "Launch in Batch Mode. (Without GUI on batch machine)"
-    o_b = optparse.Option("-b",
-                          "--batch",
-                          action="store_true",
-                          dest="batch",
-                          help=help_str)
+    pars.add_argument("-b",
+                      "--batch",
+                      action="store_true",
+                      dest="batch",
+                      help=help_str)
 
     help_str = "Launch in GUI mode [default]."
-    o_g = optparse.Option("-g",
-                          "--gui",
-                          action="store_true",
-                          dest="gui",
-                          help=help_str)
+    pars.add_argument("-g",
+                      "--gui",
+                      action="store_true",
+                      dest="gui",
+                      help=help_str)
 
     # Show Desktop (inly in GUI mode). Default: True
     help_str  = "1 to activate GUI desktop [default], "
     help_str += "0 to not activate GUI desktop (Session_Server starts, but GUI is not shown). "
     help_str += "Ignored in the terminal mode."
-    o_d = optparse.Option("-d",
-                          "--show-desktop",
-                          metavar="<1/0>",
-                          #type="choice", choices=boolean_choices,
-                          type="string",
-                          action="callback", callback=store_boolean, callback_args=('desktop',),
-                          dest="desktop",
-                          help=help_str)
+    pars.add_argument("-d",
+                      "--show-desktop",
+                      metavar="<1/0>",
+                      action=StoreBooleanAction,
+                      dest="desktop",
+                      help=help_str)
     help_str  = "Do not activate GUI desktop (Session_Server starts, but GUI is not shown). "
     help_str += "The same as --show-desktop=0."
-    o_o = optparse.Option("-o",
-                          "--hide-desktop",
-                          action="store_false",
-                          dest="desktop",
-                          help=help_str)
+    pars.add_argument("-o",
+                      "--hide-desktop",
+                      action="store_false",
+                      dest="desktop",
+                      help=help_str)
 
     # Use logger or log-file. Default: nothing.
     help_str = "Redirect messages to the CORBA collector."
-    #o4 = optparse.Option("-l", "--logger", action="store_true", dest="logger", help=help_str)
-    o_l = optparse.Option("-l",
-                          "--logger",
-                          action="store_const", const="CORBA",
-                          dest="log_file",
-                          help=help_str)
+    pars.add_argument("-l",
+                      "--logger",
+                      action="store_const", const="CORBA",
+                      dest="log_file",
+                      help=help_str)
     help_str = "Redirect messages to the <log-file>"
-    o_f = optparse.Option("-f",
-                          "--log-file",
-                          metavar="<log-file>",
-                          type="string",
-                          action="store",
-                          dest="log_file",
-                          help=help_str)
+    pars.add_argument("-f",
+                      "--log-file",
+                      metavar="<log-file>",
+                      dest="log_file",
+                      help=help_str)
 
     # Configuration XML file. Default: see defaultUserFile() function
-    help_str  = "Parse application settings from the <file> "
+    help_str = "Parse application settings from the <file> "
     help_str += "instead of default %s" % defaultUserFile()
-    o_r = optparse.Option("-r",
-                          "--resources",
-                          metavar="<file>",
-                          type="string",
-                          action="store",
-                          dest="resources",
-                          help=help_str)
+    pars.add_argument("-r",
+                      "--resources",
+                      metavar="<file>",
+                      dest="resources",
+                      help=help_str)
 
     # Use own xterm for each server. Default: False.
     help_str = "Launch each SALOME server in own xterm console"
-    o_x = optparse.Option("-x",
-                          "--xterm",
-                          action="store_true",
-                          dest="xterm",
-                          help=help_str)
+    pars.add_argument("-x",
+                      "--xterm",
+                      action="store_true",
+                      dest="xterm",
+                      help=help_str)
 
     # Modules. Default: Like in configuration files.
     help_str  = "SALOME modules list (where <module1>, <module2> are the names "
     help_str += "of SALOME modules which should be available in the SALOME session)"
-    o_m = optparse.Option("-m",
-                          "--modules",
-                          metavar="<module1,module2,...>",
-                          type="string",
-                          action="append",
-                          dest="modules",
-                          help=help_str)
+    pars.add_argument("-m",
+                      "--modules",
+                      metavar="<module1,module2,...>",
+                      action="append",
+                      dest="modules",
+                      help=help_str)
 
     # Embedded servers. Default: Like in configuration files.
     help_str  = "CORBA servers to be launched in the Session embedded mode. "
     help_str += "Valid values for <serverN>: %s " % ", ".join( embedded_choices )
     help_str += "[by default the value from the configuration files is used]"
-    o_e = optparse.Option("-e",
-                          "--embedded",
-                          metavar="<server1,server2,...>",
-                          type="string",
-                          action="callback",
-                          dest="embedded",
-                          callback=check_embedded,
-                          help=help_str)
+    pars.add_argument("-e",
+                      "--embedded",
+                      metavar="<server1,server2,...>",
+                      action=CheckEmbeddedAction,
+                      dest="embedded",
+                      help=help_str)
 
     # Standalone servers. Default: Like in configuration files.
     help_str  = "CORBA servers to be launched in the standalone mode (as separate processes). "
     help_str += "Valid values for <serverN>: %s " % ", ".join( standalone_choices )
     help_str += "[by default the value from the configuration files is used]"
-    o_s = optparse.Option("-s",
-                          "--standalone",
-                          metavar="<server1,server2,...>",
-                          type="string",
-                          action="callback",
-                          dest="standalone",
-                          callback=check_standalone,
-                          help=help_str)
+    pars.add_argument("-s",
+                      "--standalone",
+                      metavar="<server1,server2,...>",
+                      action=CheckStandaloneAction,
+                      dest="standalone",
+                      help=help_str)
 
     # Kill with port. Default: False.
     help_str = "Kill SALOME with the current port"
-    o_p = optparse.Option("-p",
-                          "--portkill",
-                          action="store_true",
-                          dest="portkill",
-                          help=help_str)
+    pars.add_argument("-p",
+                      "--portkill",
+                      action="store_true",
+                      dest="portkill",
+                      help=help_str)
 
     # Kill all. Default: False.
     help_str = "Kill all running SALOME sessions"
-    o_k = optparse.Option("-k",
-                          "--killall",
-                          action="store_true",
-                          dest="killall",
-                          help=help_str)
+    pars.add_argument("-k",
+                      "--killall",
+                      action="store_true",
+                      dest="killall",
+                      help=help_str)
 
     # Additional python interpreters. Default: 0.
     help_str  = "The number of additional external python interpreters to run. "
     help_str += "Each additional python interpreter is run in separate "
     help_str += "xterm session with properly set SALOME environment"
-    o_i = optparse.Option("-i",
-                          "--interp",
-                          metavar="<N>",
-                          type="int",
-                          action="store",
-                          dest="interp",
-                          help=help_str)
+    pars.add_argument("-i",
+                      "--interp",
+                      metavar="<N>",
+                      type=int,
+                      dest="interp",
+                      help=help_str)
 
     # Splash. Default: True.
     help_str  = "1 to display splash screen [default], "
     help_str += "0 to disable splash screen. "
     help_str += "This option is ignored in the terminal mode. "
     help_str += "It is also ignored if --show-desktop=0 option is used."
-    o_z = optparse.Option("-z",
-                          "--splash",
-                          metavar="<1/0>",
-                          #type="choice", choices=boolean_choices,
-                          type="string",
-                          action="callback", callback=store_boolean, callback_args=('splash',),
-                          dest="splash",
-                          help=help_str)
+    pars.add_argument("-z",
+                      "--splash",
+                      metavar="<1/0>",
+                      action=StoreBooleanAction,
+                      dest="splash",
+                      help=help_str)
 
     # Catch exceptions. Default: True.
     help_str  = "1 (yes,true,on,ok) to enable centralized exception handling [default], "
     help_str += "0 (no,false,off,cancel) to disable centralized exception handling."
-    o_c = optparse.Option("-c",
-                          "--catch-exceptions",
-                          metavar="<1/0>",
-                          #type="choice", choices=boolean_choices,
-                          type="string",
-                          action="callback", callback=store_boolean, callback_args=('catch_exceptions',),
-                          dest="catch_exceptions",
-                          help=help_str)
+    pars.add_argument("-c",
+                      "--catch-exceptions",
+                      metavar="<1/0>",
+                      action=StoreBooleanAction,
+                      dest="catch_exceptions",
+                      help=help_str)
 
     # Print free port and exit
     help_str = "Print free port and exit"
-    o_a = optparse.Option("--print-port",
-                          action="store_true",
-                          dest="print_port", default=False,
-                          help=help_str)
+    pars.add_argument("--print-port",
+                      action="store_true",
+                      dest="print_port",
+                      help=help_str)
 
     # Do not relink ${HOME}/.omniORB_last.cfg
     help_str = "Do not save current configuration ${HOME}/.omniORB_last.cfg"
-    o_n = optparse.Option("--nosave-config",
-                          action="store_false",
-                          dest="save_config", default=True,
-                          help=help_str)
+    pars.add_argument("--nosave-config",
+                      action="store_false",
+                      dest="save_config",
+                      help=help_str)
 
     # Launch with interactive python console. Default: False.
     help_str = "Launch with interactive python console."
-    o_pi = optparse.Option("--pinter",
-                          action="store_true",
-                          dest="pinter",
-                          help=help_str)
+    pars.add_argument("--pinter",
+                      action="store_true",
+                      dest="pinter",
+                      help=help_str)
 
     # Print Naming service port into a user file. Default: False.
     help_str = "Print Naming Service Port into a user file."
-    o_nspl = optparse.Option("--ns-port-log",
-                             metavar="<ns_port_log_file>",
-                             type="string",
-                             action="store",
-                             dest="ns_port_log_file",
-                             help=help_str)
+    pars.add_argument("--ns-port-log",
+                      metavar="<ns_port_log_file>",
+                      dest="ns_port_log_file",
+                      help=help_str)
 
     # Write/read test script file with help of TestRecorder. Default: False.
     help_str = "Write/read test script file with help of TestRecorder."
-    o_test = optparse.Option("--test",
-                             metavar="<test_script_file>",
-                             type="string",
-                             action="store",
-                             dest="test_script_file",
-                             help=help_str)
+    pars.add_argument("--test",
+                      metavar="<test_script_file>",
+                      dest="test_script_file",
+                      help=help_str)
 
     # Reproducing test script with help of TestRecorder. Default: False.
     help_str = "Reproducing test script with help of TestRecorder."
-    o_play = optparse.Option("--play",
-                             metavar="<play_script_file>",
-                             type="string",
-                             action="store",
-                             dest="play_script_file",
-                             help=help_str)
+    pars.add_argument("--play",
+                      metavar="<play_script_file>",
+                      dest="play_script_file",
+                      help=help_str)
 
     # gdb session
     help_str = "Launch session with gdb"
-    o_gdb = optparse.Option("--gdb-session",
-                            action="store_true",
-                            dest="gdb_session", default=False,
-                            help=help_str)
+    pars.add_argument("--gdb-session",
+                      action="store_true",
+                      dest="gdb_session",
+                      help=help_str)
 
     # ddd session
     help_str = "Launch session with ddd"
-    o_ddd = optparse.Option("--ddd-session",
-                            action="store_true",
-                            dest="ddd_session", default=False,
-                            help=help_str)
+    pars.add_argument("--ddd-session",
+                      action="store_true",
+                      dest="ddd_session",
+                      help=help_str)
 
 
     # valgrind session
     help_str = "Launch session with valgrind $VALGRIND_OPTIONS"
-    o_valgrind = optparse.Option("--valgrind-session",
-                                 action="store_true",
-                                 dest="valgrind_session", default=False,
-                                 help=help_str)
+    pars.add_argument("--valgrind-session",
+                      action="store_true",
+                      dest="valgrind_session",
+                      help=help_str)
 
     # shutdown-servers. Default: False.
     help_str  = "1 to shutdown standalone servers when leaving python interpreter, "
     help_str += "0 to keep the standalone servers as daemon [default]. "
     help_str += "This option is only useful in batchmode "
     help_str += "(terminal mode or without showing desktop)."
-    o_shutdown = optparse.Option("-w",
-                                 "--shutdown-servers",
-                                 metavar="<1/0>",
-                                 #type="choice", choices=boolean_choices,
-                                 type="string",
-                                 action="callback", callback=store_boolean, callback_args=('shutdown_servers',),
-                                 dest="shutdown_servers",
-                                 help=help_str)
+    pars.add_argument("-w",
+                      "--shutdown-servers",
+                      metavar="<1/0>",
+                      action=StoreBooleanAction,
+                      dest="shutdown_servers",
+                      help=help_str)
 
     # foreground. Default: True.
     help_str  = "0 and runSalome exits after have launched the gui, "
     help_str += "1 to launch runSalome in foreground mode [default]."
-    o_foreground = optparse.Option("--foreground",
-                                   metavar="<1/0>",
-                                   #type="choice", choices=boolean_choices,
-                                   type="string",
-                                   action="callback", callback=store_boolean, callback_args=('foreground',),
-                                   dest="foreground",
-                                   help=help_str)
+    pars.add_argument("--foreground",
+                      metavar="<1/0>",
+                      action=StoreBooleanAction,
+                      dest="foreground",
+                      help=help_str)
 
     # wake up session
     help_str  = "Wake up a previously closed session. "
     help_str += "The session object is found in the naming service pointed by the variable OMNIORB_CONFIG. "
     help_str += "If this variable is not set, the last configuration is taken. "
-    o_wake_up = optparse.Option("--wake-up-session",
-                                action="store_true",
-                                dest="wake_up_session", default=False,
-                                help=help_str)
+    pars.add_argument("--wake-up-session",
+                      action="store_true",
+                      dest="wake_up_session", default=False,
+                      help=help_str)
 
     # 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_mode",
-                            help=help_str)
+    pars.add_argument("--server-launch-mode",
+                      metavar="<server_launch_mode>",
+                      choices=["daemon", "fork"],
+                      dest="server_launch_mode",
+                      help=help_str)
 
     # use port
     help_str  = "Preferable port SALOME to be started on. "
     help_str += "If specified port is not busy, SALOME session will start on it; "
     help_str += "otherwise, any available port will be searched and used."
-    o_port = optparse.Option("--port",
-                             metavar="<port>",
-                             type="int",
-                                   action="store",
-                             dest="use_port",
-                                   help=help_str)
+    pars.add_argument("--port",
+                      metavar="<port>",
+                      type=int,
+                      dest="use_port",
+                      help=help_str)
 
+    # Language
     help_str  = "Force application language. By default, a language specified in "
     help_str += "the user's preferences is used."
-    o_lang = optparse.Option("-a",
-                             "--language",
-                             action="store",
-                             dest="language",
-                             help=help_str)
-
-    # All options
-    opt_list = [o_t,o_g, # GUI/Terminal
-                o_d,o_o, # Desktop
-                o_b,     # Batch
-                o_l,o_f, # Use logger or log-file
-                o_r,     # Configuration XML file
-                o_x,     # xterm
-                o_m,     # Modules
-                o_e,     # Embedded servers
-                o_s,     # Standalone servers
-                o_p,     # Kill with port
-                o_k,     # Kill all
-                o_i,     # Additional python interpreters
-                o_z,     # Splash
-                o_c,     # Catch exceptions
-                o_a,     # Print free port and exit
-                o_n,     # --nosave-config
-                o_pi,    # Interactive python console
-                o_nspl,
-                o_test,  # Write/read test script file with help of TestRecorder
-                o_play,  # Reproducing test script with help of TestRecorder
-                o_gdb,
-                o_ddd,
-                o_valgrind,
-                o_shutdown,
-                o_foreground,
-                o_wake_up,
-                o_slm,   # Server launch mode
-                o_port,  # Use port
-                o_lang,  # Language
-                ]
-
-    #std_options = ["gui", "desktop", "log_file", "resources",
-    #               "xterm", "modules", "embedded", "standalone",
-    #               "portkill", "killall", "interp", "splash",
-    #               "catch_exceptions", "print_port", "save_config", "ns_port_log_file"]
-
-    opt_list += theAdditionalOptions
-
-    if not exeName:
-      exeName = "%prog"
+    pars.add_argument("-a",
+                      "--language",
+                      dest="language",
+                      help=help_str)
 
-    a_usage = """%s [options] [STUDY_FILE] [PYTHON_FILE [args] [PYTHON_FILE [args]...]]
-Python file arguments, if any, must be comma-separated (without blank characters) and prefixed by "args:" (without quotes), e.g. myscript.py args:arg1,arg2=val,...
-"""%exeName
-    version_str = "Salome %s" % version()
-    pars = optparse.OptionParser(usage=a_usage, version=version_str, option_list=opt_list)
+    # Positional arguments (hdf file, python file)
+    pars.add_argument("arguments", nargs=argparse.REMAINDER)
 
     return pars
 
@@ -862,7 +811,7 @@ Python file arguments, if any, must be comma-separated (without blank characters
 args = {}
 #def get_env():
 #args = []
-def get_env(theAdditionalOptions=None, appname=salomeappname, cfgname=salomecfgname, exeName=None):
+def get_env(appname=salomeappname, cfgname=salomecfgname, exeName=None):
     ###
     # Collect launch configuration files:
     # - The environment variable "<appname>Config" (SalomeAppConfig) which can
@@ -885,32 +834,29 @@ def get_env(theAdditionalOptions=None, appname=salomeappname, cfgname=salomecfgn
     #   specified in configuration file(s)
     ###
 
-    if theAdditionalOptions is None:
-        theAdditionalOptions = []
-
     global args
     config_var = appname+'Config'
 
     # check KERNEL_ROOT_DIR
     kernel_root_dir = os.environ.get("KERNEL_ROOT_DIR", None)
     if kernel_root_dir is None:
-        print """
+        print("""
         For each SALOME module, the environment variable <moduleN>_ROOT_DIR must be set.
         KERNEL_ROOT_DIR is mandatory.
-        """
+        """)
         sys.exit(1)
 
     ############################
     # parse command line options
-    pars = CreateOptionParser(theAdditionalOptions, exeName=exeName)
-    (cmd_opts, cmd_args) = pars.parse_args(sys.argv[1:])
+    pars = CreateOptionParser(exeName=exeName)
+    cmd_opts = pars.parse_args(sys.argv[1:])
     ############################
 
     # Process --print-port option
     if cmd_opts.print_port:
         from searchFreePort import searchFreePort
         searchFreePort({})
-        print "port:%s"%(os.environ['NSPORT'])
+        print("port:%s"%(os.environ['NSPORT']))
 
         try:
             import PortManager
@@ -932,7 +878,7 @@ def get_env(theAdditionalOptions=None, appname=salomeappname, cfgname=salomecfgn
     gui_available = False
     if os.getenv("GUI_ROOT_DIR"):
         gui_resources_dir = os.path.join(os.getenv("GUI_ROOT_DIR"),'share','salome','resources','gui')
-        if os.path.isdir( gui_resources_dir ):
+        if os.path.isdir(gui_resources_dir):
             gui_available = True
             dirs.append(gui_resources_dir)
         pass
@@ -953,16 +899,16 @@ def get_env(theAdditionalOptions=None, appname=salomeappname, cfgname=salomecfgn
     _opts = {} # associative array of options to be filled
 
     # parse SalomeApp.xml files in directories specified by SalomeAppConfig env variable
-    for dir in dirs:
-        filename = os.path.join(dir, appname+'.xml')
+    for directory in dirs:
+        filename = os.path.join(directory, appname + '.xml')
         if not os.path.exists(filename):
-            if verbose(): print "Configure parser: Warning : can not find configuration file %s" % filename
+            if verbose(): print("Configure parser: Warning : can not find configuration file %s" % filename)
         else:
             try:
                 p = xml_parser(filename, _opts, [])
                 _opts = p.opts
             except:
-                if verbose(): print "Configure parser: Error : can not read configuration file %s" % filename
+                if verbose(): print("Configure parser: Error : can not read configuration file %s" % filename)
             pass
 
     # parse user configuration file
@@ -972,33 +918,33 @@ def get_env(theAdditionalOptions=None, appname=salomeappname, cfgname=salomecfgn
     user_config = cmd_opts.resources
     if not user_config:
         user_config = userFile(appname, cfgname)
-        if verbose(): print "Configure parser: user configuration file is", user_config
+        if verbose(): print("Configure parser: user configuration file is", user_config)
     if not user_config or not os.path.exists(user_config):
-        if verbose(): print "Configure parser: Warning : can not find user configuration file"
+        if verbose(): print("Configure parser: Warning : can not find user configuration file")
     else:
         try:
             p = xml_parser(user_config, _opts, [])
             _opts = p.opts
         except:
-            if verbose(): print 'Configure parser: Error : can not read user configuration file'
+            if verbose(): print('Configure parser: Error : can not read user configuration file')
             user_config = ""
 
     args = _opts
 
     args['user_config'] = user_config
-    #print "User Configuration file: ", args['user_config']
+    # print("User Configuration file: ", args['user_config'])
 
     # set default values for options which are NOT set in config files
     for aKey in listKeys:
-        if not args.has_key( aKey ):
+        if aKey not in args:
             args[aKey] = []
 
     for aKey in boolKeys:
-        if not args.has_key( aKey ):
+        if aKey not in args:
             args[aKey] = 0
 
     if args[file_nam]:
-        afile=args[file_nam]
+        afile = args[file_nam]
         args[file_nam] = [afile]
 
     args[appname_nam] = appname
@@ -1050,26 +996,28 @@ def get_env(theAdditionalOptions=None, appname=salomeappname, cfgname=salomecfgn
 
     # Naming Service port log file
     if cmd_opts.ns_port_log_file is not None:
-      args["ns_port_log_file"] = cmd_opts.ns_port_log_file
+        args["ns_port_log_file"] = cmd_opts.ns_port_log_file
 
     # Study files
-    for arg in cmd_args:
-        if arg[-4:] == ".hdf" and not args["study_hdf"]:
+    for arg in cmd_opts.arguments:
+        file_extension = os.path.splitext(arg)[-1]
+        if file_extension == ".hdf" and not args["study_hdf"]:
             args["study_hdf"] = arg
 
     # Python scripts
     from salomeContextUtils import getScriptsAndArgs, ScriptAndArgs
-    args[script_nam] = getScriptsAndArgs(cmd_args)
+    args[script_nam] = getScriptsAndArgs(cmd_opts.arguments)
     if args[gui_nam] and args["session_gui"]:
         new_args = []
-        for sa_obj in args[script_nam]: # args[script_nam] is a list of ScriptAndArgs objects
+        for sa_obj in args[script_nam]:  # args[script_nam] is a list of ScriptAndArgs objects
             script = re.sub(r'^python.*\s+', r'', sa_obj.script)
             new_args.append(ScriptAndArgs(script=script, args=sa_obj.args, out=sa_obj.out))
         #
         args[script_nam] = new_args
 
     # xterm
-    if cmd_opts.xterm is not None: args[xterm_nam] = cmd_opts.xterm
+    if cmd_opts.xterm is not None:
+        args[xterm_nam] = cmd_opts.xterm
 
     # Modules
     if cmd_opts.modules is not None:
@@ -1086,11 +1034,11 @@ def get_env(theAdditionalOptions=None, appname=salomeappname, cfgname=salomecfgn
 
     # Embedded
     if cmd_opts.embedded is not None:
-        args[embedded_nam] = filter( lambda a: a.strip(), re.split( "[:;,]", cmd_opts.embedded ) )
+        args[embedded_nam] = [a for a in re.split( "[:;,]", cmd_opts.embedded ) if a.strip()]
 
     # Standalone
     if cmd_opts.standalone is not None:
-        args[standalone_nam] = filter( lambda a: a.strip(), re.split( "[:;,]", cmd_opts.standalone ) )
+        args[standalone_nam] = [a for a in re.split( "[:;,]", cmd_opts.standalone ) if a.strip()]
 
     # Normalize the '--standalone' and '--embedded' parameters
     standalone, embedded = process_containers_params( args.get( standalone_nam ),
@@ -1150,13 +1098,6 @@ def get_env(theAdditionalOptions=None, appname=salomeappname, cfgname=salomecfgn
     if cmd_opts.wake_up_session is not None:
         args[wake_up_session_nam] = cmd_opts.wake_up_session
 
-    ####################################################
-    # Add <theAdditionalOptions> values to args
-    for add_opt in theAdditionalOptions:
-        cmd = "args[\"{0}\"] = cmd_opts.{0}".format(add_opt.dest)
-        exec(cmd)
-    ####################################################
-
     # disable signals handling
     if args[except_nam] == 1:
         os.environ["NOT_INTERCEPT_SIGNALS"] = "1"
@@ -1179,7 +1120,7 @@ def get_env(theAdditionalOptions=None, appname=salomeappname, cfgname=salomecfgn
             elif os.path.exists( os.path.join(d2,"{0}.xml".format(salomeappname)) ):
                 dirs.append( d2 )
         else:
-            #print "* '"+m+"' should be deleted from ",args[modules_nam]
+            # print("* '"+m+"' should be deleted from ",args[modules_nam])
             pass
 
     # Test
@@ -1202,19 +1143,19 @@ def get_env(theAdditionalOptions=None, appname=salomeappname, cfgname=salomecfgn
     if cmd_opts.use_port is not None:
         min_port = 2810
         max_port = min_port + 100
-        if cmd_opts.use_port not in xrange(min_port, max_port+1):
-            print "Error: port number should be in range [%d, %d])" % (min_port, max_port)
+        if cmd_opts.use_port not in range(min_port, max_port+1):
+            print("Error: port number should be in range [%d, %d])" % (min_port, max_port))
             sys.exit(1)
         args[useport_nam] = cmd_opts.use_port
 
     if cmd_opts.language is not None:
         langs = args["language_languages"] if "language_languages" in args else []
         if cmd_opts.language not in langs:
-            print "Error: unsupported language: %s" % cmd_opts.language
+            print("Error: unsupported language: %s" % cmd_opts.language)
             sys.exit(1)
         args[lang_nam] = cmd_opts.language
 
     # return arguments
     os.environ[config_var] = os.pathsep.join(dirs)
-    #print "Args: ", args
+    # print("Args: ", args)
     return args
index 37061547ded443e8d1d94640695eb31972d94d6f..19fde8e96bf6f3062ba9aff671e2474bba680509 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 #  -*- coding: iso-8859-1 -*-
 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
@@ -42,16 +42,16 @@ class NamingServer(Server):
         from salome_utils import getLogDir
         upath = getLogDir()
         try:
-            os.makedirs(upath, mode=0777)
+            os.makedirs(upath, mode=0o777)
         except:
             pass
 
-        if verbose(): print "Name Service... "
+        if verbose(): print("Name Service... ", end =' ')
         hname = getHostName()
 
         with open(os.environ["OMNIORB_CONFIG"]) as f:
           ss = re.findall("NameService=corbaname::" + hname + ":\d+", f.read())
-          if verbose(): print "ss = ", ss,
+          if verbose(): print("ss = ", ss, end=' ')
         sl = ss[0]
         ll = sl.split(':')
         aPort = ll[-1]
@@ -68,7 +68,7 @@ class NamingServer(Server):
         try:
           os.mkdir(upath)
         except:
-          #print "Can't create " + upath
+          # print("Can't create " + upath)
           pass
 
         #os.system("touch " + upath + "/dummy")
@@ -80,11 +80,11 @@ class NamingServer(Server):
         #os.system("rm -f " + upath + "/omninames* " + upath + "/dummy " + upath + "/*.log")
 
         #aSedCommand="s/.*NameService=corbaname::" + hname + ":\([[:digit:]]*\)/\1/"
-        #print "sed command = ", aSedCommand
+        # print("sed command = ", aSedCommand)
         #aPort = commands.getoutput("sed -e\"" + aSedCommand + "\"" + os.environ["OMNIORB_CONFIG"])
-        #print "port=", aPort
+        # print("port=", aPort)
         if sys.platform == "win32":
-          #print "start omniNames -start " + aPort + " -logdir " + upath
+          # print("start omniNames -start " + aPort + " -logdir " + upath)
           self.CMD = ['omniNames', '-start' , aPort , '-nohostname', '-logdir' , os.path.realpath(upath), '-errlog', os.path.realpath(os.path.join(upath,'omniNameErrors.log'))]
           #os.system("start omniNames -start " + aPort + " -logdir " + upath)
         else:
@@ -92,8 +92,8 @@ class NamingServer(Server):
           self.CMD = ['omniNames','-start' , aPort, '-logdir' , upath, '-errlog', upath+'/omniNameErrors.log']
           #os.system("omniNames -start " + aPort + " -logdir " + upath + " &")
 
-        if verbose(): print "... ok"
-        if verbose(): print "to list contexts and objects bound into the context with the specified name : showNS "
+        if verbose(): print("... ok")
+        if verbose(): print("to list contexts and objects bound into the context with the specified name : showNS ")
 
 
     def initArgs(self):
index 223a91a560880bba9cdb0c60660f034e04b1b25f..81043ac11566d46a66a5dcc09f2c577b1b271d9e 100755 (executable)
@@ -56,7 +56,7 @@ class client:
           return
       except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
           self.rootContext = None
-          if verbose(): print "Launch Naming Service++",
+          if verbose(): print("Launch Naming Service++", end=' ')
 
       # On lance le Naming Server (doit etre dans le PATH)
       test = True
@@ -66,7 +66,7 @@ class client:
       if test:
         NamingServer(args).run()
         pass
-      print "Searching Naming Service ",
+      print("Searching Naming Service ", end=' ')
       ncount=0
       delta=0.1
       while(ncount < 100):
@@ -82,25 +82,25 @@ class client:
               time.sleep(delta)
 
       if self.rootContext is None:
-          print "Failed to narrow the root naming context"
+          print("Failed to narrow the root naming context")
           sys.exit(1)
-      print " found in %s seconds " % ((ncount-1)*delta)
+      print(" found in %s seconds " % ((ncount-1)*delta))
 
     # --------------------------------------------------------------------------
 
     def showNScontext(self,context,dec=''):
       if not context:
-        print "[NS] No context"
+        print("[NS] No context")
         return
       else:
-        print context
+        print(context)
 
       _,bi = context.list(0)
       if bi is not None:
         ok,b = bi.next_one()
         while(ok):
             for s in b.binding_name :
-              print "%s%s.%s" %(dec,s.id,s.kind)
+              print("%s%s.%s" %(dec,s.id,s.kind))
               if s.kind == "dir":
                   obj = context.resolve([s])
                   scontext = obj._narrow(CosNaming.NamingContext)
@@ -116,7 +116,7 @@ class client:
     # --------------------------------------------------------------------------
 
     def Resolve(self, Path):
-      resolve_path = string.split(Path,'/')
+      resolve_path = Path.split('/')
       if resolve_path[0] == '': del resolve_path[0]
       dir_path = resolve_path[:-1]
       context_name = []
@@ -126,11 +126,11 @@ class client:
 
       try:
           obj = self.rootContext.resolve(context_name)
-      except CosNaming.NamingContext.NotFound, ex:
+      except CosNaming.NamingContext.NotFound as ex:
           obj = None
-      except CosNaming.NamingContext.InvalidName, ex:
+      except CosNaming.NamingContext.InvalidName as ex:
           obj = None
-      except CosNaming.NamingContext.CannotProceed, ex:
+      except CosNaming.NamingContext.CannotProceed as ex:
           obj = None
       except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
           obj = None
@@ -141,13 +141,13 @@ class client:
     def waitNS(self,name,typobj=None,maxcount=240):
       count = 0
       delta = 0.5
-      print "Searching %s in Naming Service " % name,
+      print("Searching %s in Naming Service " % name, end=' ')
       while(1):
           count += 1
-          if count > maxcount : raise RuntimeError, "Impossible de trouver %s" % name
+          if count > maxcount : raise RuntimeError("Impossible de trouver %s" % name)
           obj = self.Resolve(name)
           if obj :
-              print " found in %s seconds " % ((count-1)*delta)
+              print(" found in %s seconds " % ((count-1)*delta))
               break
           else:
               sys.stdout.write('+')
@@ -158,7 +158,7 @@ class client:
 
       nobj = obj._narrow(typobj)
       if nobj is None:
-            print "%s exists but is not a %s" % (name,typobj)
+            print("%s exists but is not a %s" % (name,typobj))
       return nobj
 
     if sys.platform != "win32":
@@ -166,16 +166,16 @@ class client:
         aCount = 0
         aDelta = 0.5
         anObj = None
-        print "Searching %s in Naming Service " % theName,
+        print("Searching %s in Naming Service " % theName, end=' ')
         while(1):
           try:
             os.kill(thePID,0)
           except:
-            raise RuntimeError, "Process %d for %s not found" % (thePID,theName)
+            raise RuntimeError("Process %d for %s not found" % (thePID,theName))
           aCount += 1
           anObj = self.Resolve(theName)
           if anObj:
-            print " found in %s seconds " % ((aCount-1)*aDelta)
+            print(" found in %s seconds " % ((aCount-1)*aDelta))
             break
           else:
             sys.stdout.write('+')
@@ -189,7 +189,7 @@ class client:
   
         anObject = anObj._narrow(theTypObj)
         if anObject is None:
-          print "%s exists but is not a %s" % (theName,theTypObj)
+          print("%s exists but is not a %s" % (theName,theTypObj))
         return anObject
 
 
@@ -201,11 +201,11 @@ class client:
 
       try:
           obj = self.rootContext.resolve(context_name)
-      except CosNaming.NamingContext.NotFound, ex:
+      except CosNaming.NamingContext.NotFound as ex:
           obj = None
-      except CosNaming.NamingContext.InvalidName, ex:
+      except CosNaming.NamingContext.InvalidName as ex:
           obj = None
-      except CosNaming.NamingContext.CannotProceed, ex:
+      except CosNaming.NamingContext.CannotProceed as ex:
           obj = None
       except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
           obj = None
@@ -216,13 +216,13 @@ class client:
     def waitLogger(self,name,typobj=None,maxcount=40):
       count = 0
       delta = 0.5
-      print "Searching %s in Naming Service " % name,
+      print("Searching %s in Naming Service " % name, end=' ')
       while(1):
           count += 1
-          if count > maxcount : raise RuntimeError, "Impossible de trouver %s" % name
+          if count > maxcount : raise RuntimeError("Impossible de trouver %s" % name)
           obj = self.ResolveLogger(name)
           if obj :
-              print " found in %s seconds " % ((count-1)*delta)
+              print(" found in %s seconds " % ((count-1)*delta))
               break
           else:
               sys.stdout.write('+')
@@ -233,5 +233,5 @@ class client:
 
       nobj = obj._narrow(typobj)
       if nobj is None:
-            print "%s exists but is not a %s" % (name,typobj)
+            print("%s exists but is not a %s" % (name,typobj))
       return nobj
index 77e6350df0d426d308535fcb49274ab22456f5fb..63d0c92cc1160b88074288c97cf14f4cf2cf7e62 100644 (file)
@@ -17,7 +17,7 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-import ConfigParser
+import configparser
 import os
 import logging
 import re
@@ -44,9 +44,9 @@ def _expandSystemVariables(key, val):
 #
 
 # :TRICKY: So ugly solution...
-class MultiOptSafeConfigParser(ConfigParser.SafeConfigParser):
+class MultiOptSafeConfigParser(configparser.SafeConfigParser):
   def __init__(self):
-    ConfigParser.SafeConfigParser.__init__(self)
+    configparser.SafeConfigParser.__init__(self)
 
   # copied from python 2.6.8 Lib.ConfigParser.py
   # modified (see code comments) to handle duplicate keys
@@ -88,7 +88,7 @@ class MultiOptSafeConfigParser(ConfigParser.SafeConfigParser):
           sectname = mo.group('header')
           if sectname in self._sections:
             cursect = self._sections[sectname]
-          elif sectname == ConfigParser.DEFAULTSECT:
+          elif sectname == configparser.DEFAULTSECT:
             cursect = self._defaults
           else:
             cursect = self._dict()
@@ -98,7 +98,7 @@ class MultiOptSafeConfigParser(ConfigParser.SafeConfigParser):
           optname = None
         # no section header in the file?
         elif cursect is None:
-          raise ConfigParser.MissingSectionHeaderError(fpname, lineno, line)
+          raise configparser.MissingSectionHeaderError(fpname, lineno, line)
         # an option line?
         else:
           mo = self.OPTCRE.match(line)
@@ -143,7 +143,7 @@ class MultiOptSafeConfigParser(ConfigParser.SafeConfigParser):
             # raised at the end of the file and will contain a
             # list of all bogus lines
             if not e:
-              e = ConfigParser.ParsingError(fpname)
+              e = configparser.ParsingError(fpname)
             e.append(lineno, repr(line))
     # if any parsing errors occurred, raise an exception
     if e:
@@ -151,9 +151,9 @@ class MultiOptSafeConfigParser(ConfigParser.SafeConfigParser):
 
     # join the multi-line values collected while reading
     all_sections = [self._defaults]
-    all_sections.extend(self._sections.values())
+    all_sections.extend(list(self._sections.values()))
     for options in all_sections:
-      for name, val in options.items():
+      for name, val in list(options.items()):
         if isinstance(val, list):
           options[name] = '\n'.join(val)
   #
@@ -174,13 +174,13 @@ def parseConfigFile(filename, reserved = None):
   # Read config file
   try:
     config.read(filename)
-  except ConfigParser.MissingSectionHeaderError:
+  except configparser.MissingSectionHeaderError:
     logConfigParser.error("No section found in file: %s"%(filename))
     return []
 
   try:
     return __processConfigFile(config, reserved, filename)
-  except ConfigParser.InterpolationMissingOptionError, e:
+  except configparser.InterpolationMissingOptionError as e:
     msg = "A variable may be undefined in SALOME context file: %s\nParser error is: %s\n"%(filename, e)
     raise SalomeContextException(msg)
 #
index 9639291f7f182d730a2e301f360dd7e40c74199d..78e12ee2eac74881b9e74922e624637016373fa6 100644 (file)
@@ -24,7 +24,6 @@
 from optparse import OptionParser
 import os
 import sys
-import user
 import pickle
 
 # Use to display newlines (\n) in epilog
@@ -47,7 +46,7 @@ ask user to select a port from list of available SALOME instances.\n
 The -c option can be used to specify the command to execute in the interpreter.
 A script can also be used.
 For example:
-       salome connect -p 2810 -c 'print "Hello"'
+       salome connect -p 2810 -c 'print("Hello")'
        salome connect -p 2810 hello.py
 """
   parser = MyParser(usage=usage, epilog=epilog)
@@ -60,31 +59,31 @@ For example:
                     )
   try:
     (options, args) = parser.parse_args(args)
-  except Exception, e:
-    print e
+  except Exception as e:
+    print(e)
     return {}, []
 
   return options, args
 #
 
 def __show_running_instances(list_of_instances):
-  print '-'*10
-  print "Running instances:"
+  print('-'*10)
+  print("Running instances:")
   for i in range(len(list_of_instances)):
     host, port, _ = list_of_instances[i]
-    print "   [%d] %s:%s"%(i+1, host, port)
-  print '-'*10
+    print("   [%d] %s:%s"%(i+1, host, port))
+  print('-'*10)
 #
 
 def __choose_in(choices):
   __show_running_instances(choices)
-  rep = raw_input("Please enter the number of instance to use (0 to cancel): ")
+  rep = input("Please enter the number of instance to use (0 to cancel): ")
   if rep == '0':
     return None, None, None
   elif rep in [str(i) for i in range(1, len(choices)+1)]:
     return choices[int(rep)-1]
   else:
-    print "*** Invalid number! ***"
+    print("*** Invalid number! ***")
     return __choose_in(choices)
 #
 
@@ -102,36 +101,36 @@ def __get_running_session(requested_port=None, lastInstanceByDefault=False):
 
   host, port, filename = None, None, None
   if requested_port:
-    print "Search for running instance on port %s..."%requested_port
+    print("Search for running instance on port %s..."%requested_port)
     found = [(h,p,f) for h,p,f in available_connexions if int(p) == int(requested_port)]
     if not found:
-      print "   ...no running instance found"
+      print("   ...no running instance found")
     elif len(found) == 1:
       host, port, filename = found[0]
-      print "   ...found unique instance: %s:%s"%(host,port)
+      print("   ...found unique instance: %s:%s"%(host,port))
     else:
-      print "   ...multiple instances found ; please choose one in the following:"
+      print("   ...multiple instances found ; please choose one in the following:")
       host, port, filename = __choose_in(found)
   else: # no requested port
     if not available_connexions:
-      print "No running instance found"
+      print("No running instance found")
     elif len(available_connexions) == 1:
       host, port, filename = available_connexions[0]
-      print "Found unique instance: %s:%s"%(host,port)
+      print("Found unique instance: %s:%s"%(host,port))
     else:
-      print "Multiple instances found ; please choose one in the following:"
+      print("Multiple instances found ; please choose one in the following:")
       host, port, filename = __choose_in(available_connexions)
       pass
 
   if port:
-    print "Selected instance: %s:%s"%(host, port)
+    print("Selected instance: %s:%s"%(host, port))
   else:
-    print "Cancel."
+    print("Cancel.")
 
   return host, port, filename
 #
 
-from omniORB import CORBA
+import CORBA
 import CosNaming
 import orbmodule
 
@@ -143,7 +142,7 @@ class client(orbmodule.client):
       self.rootContext = obj._narrow(CosNaming.NamingContext)
       return
     except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
-      print "It's not a valid naming service"
+      print("It's not a valid naming service")
       self.rootContext = None
       sys.stdout.flush()
       raise
@@ -162,12 +161,12 @@ def start_client():
   if session_server:
     session = clt.waitNS("/Kernel/Session")
   catalog = clt.waitNS("/Kernel/ModulCatalog")
-  studyMgr = clt.waitNS("/myStudyManager")
+  study = clt.waitNS("/Study")
 
   import salome
   salome.salome_init()
   from salome import lcc
-  print "--> now connected to SALOME"
+  print("--> now connected to SALOME")
 #
 
 def _prompt(environment=None, commands=None, message="Connecting to SALOME"):
@@ -183,10 +182,10 @@ def _prompt(environment=None, commands=None, message="Connecting to SALOME"):
   readline.set_completer(rlcompleter.Completer(environment).complete)
   readline.parse_and_bind("tab: complete")
   # calling this with globals ensures we can see the environment
-  print message
+  print(message)
   shell = code.InteractiveConsole(environment)
   for cmd in commands:
-    print "Execute command:", cmd
+    print("Execute command:", cmd)
     shell.push(cmd)
     pass
   shell.interact()
@@ -208,22 +207,27 @@ def connect(args=None, env=None):
     cmd.append(options.command)
   if args: # unprocessed: may be scripts
     for arg in args:
-      cmd.append("execfile('%s')"%os.path.abspath(os.path.expanduser(arg)))
+      filename = os.path.abspath(os.path.expanduser(arg))
+      pythonLine = "exec(compile(open(%s, \"rb\").read(), %s, 'exec'))"%(filename, filename)
+      cmd.append(pythonLine)
 
   if port:
     import subprocess
     absoluteAppliPath = os.getenv('ABSOLUTE_APPLI_PATH','')
     env_copy = os.environ.copy()
-    proc = subprocess.Popen(['python', os.path.join(absoluteAppliPath,"bin","salome","runConsole.py"), pickle.dumps(cmd)], shell=False, close_fds=True, env=env_copy)
+    cmdDump = pickle.dumps(cmd, protocol=0)
+    cmdString = cmdDump.decode()
+    proc = subprocess.Popen(['python3', os.path.join(absoluteAppliPath,"bin","salome","runConsole.py"), cmdString], shell=False, close_fds=True, env=env_copy)
     proc.communicate()
     return proc.returncode
 #
 
 if __name__ == "__main__":
   if len(sys.argv) == 2:
-    cmd = pickle.loads(sys.argv[1])
+    cmdBytes = sys.argv[1].encode()  
+    cmd = pickle.loads(cmdBytes)
     sys.argv = []
     _prompt(commands=cmd)
   else:
-    print "runConsole.py: incorrect usage!"
+    print("runConsole.py: incorrect usage!")
 #
index c13e39b12f915193f3a7a2c5909e8f4b1cb23824..f3c8df9f13d4dbdfb72969ebc20c4ef4db29a8fc 100644 (file)
@@ -43,7 +43,7 @@ if test "$hh" = "1" ; then
     echo ""
     echo "   to run IDLparser:"
     echo ""
-    echo "        $0 -Wbcatalog=<my_catalog.xml>[,icon=<pngfile>][,version=<num>][,author=<name>][,name=<component_name>][,multistudy=<component_multistudy>][,remove=component_name] <file.idl>   "
+    echo "        $0 -Wbcatalog=<my_catalog.xml>[,icon=<pngfile>][,version=<num>][,author=<name>][,name=<component_name>][,remove=component_name] <file.idl>   "
     echo ""
     echo "   to have omniidl help:"
     echo ""
index e6e79763937eb85ad290b51fa9c2ff262ba0d379..63eb62f1620fd0a03395f64bb6c93f056644c8f5 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 #  -*- coding: iso-8859-1 -*-
 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
@@ -50,7 +50,7 @@ def killLocalPort():
     try:
         killMyPort(my_port)
     except:
-        print "problem in killLocalPort()"
+        print("problem in killLocalPort()")
         pass
     pass
 
@@ -65,7 +65,7 @@ def givenPortKill(port):
     try:
         killMyPort(my_port)
     except:
-        print "problem in LocalPortKill(), killMyPort(%s)"%port
+        print("problem in LocalPortKill(), killMyPort(%s)"%port)
         pass
     pass
 
@@ -101,7 +101,7 @@ class InterpServer(Server):
     def run(self):
         global process_id
         command = self.CMD
-        print "INTERPSERVER::command = ", command
+        print("INTERPSERVER::command = ", command)
         import subprocess
         pid = subprocess.Popen(command).pid
         process_id[pid]=self.CMD
@@ -116,7 +116,7 @@ def get_cata_path(list_modules,modules_root_dir):
     cata_path=[]
 
     for module in list_modules:
-        if modules_root_dir.has_key(module):
+        if module in modules_root_dir:
             module_root_dir=modules_root_dir[module]
             module_cata=module+"Catalog.xml"
             cata_file=os.path.join(module_root_dir, "share",setenv.salome_subdir, "resources",module.lower(), module_cata)
@@ -134,7 +134,7 @@ def get_cata_path(list_modules,modules_root_dir):
         if os.path.exists(path):
             for cata_file in glob.glob(os.path.join(path,"*Catalog.xml")):
                 module_name= os.path.basename(cata_file)[:-11]
-                if not modules_cata.has_key(module_name):
+                if module_name not in modules_cata:
                     cata_path.append(cata_file)
                     modules_cata[module_name]=cata_file
 
@@ -160,7 +160,7 @@ class CatalogServer(Server):
 
         cata_path=get_cata_path(list_modules,modules_root_dir)
 
-        self.CMD=self.SCMD1 + ['"' + string.join(cata_path,'"::"') + '"'] + self.SCMD2
+        self.CMD=self.SCMD1 + ['"' + '"::"'.join(cata_path) + '"'] + self.SCMD2
 
 # ---
 
@@ -215,10 +215,10 @@ class LoggerServer(Server):
                                     with_username=True,
                                     with_hostname=True,
                                     with_port=True)
-        print "==========================================================="
-        print "Logger server: put log to the file:"
-        print logfile
-        print "==========================================================="
+        print("===========================================================")
+        print("Logger server: put log to the file:")
+        print(logfile)
+        print("===========================================================")
         self.CMD=['SALOME_Logger_Server', logfile]
         pass
     pass # end of LoggerServer class
@@ -256,7 +256,7 @@ class SessionServer(Server):
             raise Exception('Python containers no longer supported')
         if self.args['gui']:
             session_gui = True
-            if self.args.has_key('session_gui'):
+            if 'session_gui' in self.args:
                 session_gui = self.args['session_gui']
             if session_gui:
                 self.SCMD2+=['GUI']
@@ -267,7 +267,7 @@ class SessionServer(Server):
                     self.SCMD2+=['--study-hdf=%s'%self.args['study_hdf']]
                     pass
                 pass
-                if self.args.has_key('pyscript') and len(self.args['pyscript']) > 0:
+                if 'pyscript' in self.args and len(self.args['pyscript']) > 0:
                     msg = json.dumps(self.args['pyscript'], cls=ScriptAndArgsObjectEncoder)
                     self.SCMD2+=['--pyscript=%s'%(msg)]
                     pass
@@ -275,9 +275,9 @@ class SessionServer(Server):
             pass
         if self.args['noexcepthandler']:
             self.SCMD2+=['noexcepthandler']
-        if self.args.has_key('user_config'):
+        if 'user_config' in self.args:
             self.SCMD2+=['--resources=%s'%self.args['user_config']]
-        if self.args.has_key('modules'):
+        if 'modules' in self.args:
             list_modules = []
             #keep only modules with GUI
             for m in modules_list:
@@ -291,7 +291,7 @@ class SessionServer(Server):
             list_modules.reverse()
             self.SCMD2+=['--modules (%s)' % ":".join(list_modules)]
             pass
-        if self.args.has_key('language'):
+        if 'language' in self.args:
             self.SCMD2+=['--language=%s' % self.args['language']]
         pass
 
@@ -305,14 +305,14 @@ class SessionServer(Server):
 
         cata_path=get_cata_path(list_modules,modules_root_dir)
 
-        if (self.args["gui"]) & ('moduleCatalog' in self.args['embedded']):
+        if ("gui" in self.args) & ('moduleCatalog' in self.args['embedded']):
             #Use '::' instead ":" because drive path with "D:\" is invalid on windows platform
-            self.CMD=self.SCMD1 + ['"' + string.join(cata_path,'"::"') + '"'] + self.SCMD2
+            self.CMD=self.SCMD1 + ['"' + '"::"'.join(cata_path) + '"'] + self.SCMD2
         else:
             self.CMD=self.SCMD1 + self.SCMD2
-        if self.args.has_key('test'):
+        if 'test' in self.args:
             self.CMD+=['-test'] + self.args['test']
-        elif self.args.has_key('play'):
+        elif 'play' in self.args:
             self.CMD+=['-play'] + self.args['play']
 
         if self.args["gdb_session"] or self.args["ddd_session"]:
@@ -371,9 +371,9 @@ class LauncherServer(Server):
 
         cata_path=get_cata_path(list_modules,modules_root_dir)
 
-        if (self.args["gui"]) & ('moduleCatalog' in self.args['embedded']):
+        if ("gui" in self.args) & ('moduleCatalog' in self.args['embedded']):
             #Use '::' instead ":" because drive path with "D:\" is invalid on windows platform
-            self.CMD=self.SCMD1 + ['"' + string.join(cata_path,'"::"') + '"'] + self.SCMD2
+            self.CMD=self.SCMD1 + ['"' + '"::"'.join(cata_path) + '"'] + self.SCMD2
         else:
             self.CMD=self.SCMD1 + self.SCMD2
 #
@@ -395,12 +395,12 @@ def startSalome(args, modules_list, modules_root_dir):
     """Launch all SALOME servers requested by args"""
     init_time = os.times()
 
-    if verbose(): print "startSalome ", args
+    if verbose(): print("startSalome ", args)
 
     #
     # Set server launch command
     #
-    if args.has_key('server_launch_mode'):
+    if 'server_launch_mode' in args:
         Server.set_server_launch_mode(args['server_launch_mode'])
 
     #
@@ -509,15 +509,15 @@ def startSalome(args, modules_list, modules_root_dir):
     # and wait until it is registered in naming service
     #
 
-    #print "ARGS = ",args
+    # print("ARGS = ",args)
     if ('study' not in args['embedded']) | (args["gui"] == 0):
-        print "RunStudy"
+        print("RunStudy")
         myServer=SalomeDSServer(args)
         myServer.run()
         if sys.platform == "win32":
-          clt.waitNS("/myStudyManager")
+          clt.waitNS("/Study")
         else:
-          clt.waitNSPID("/myStudyManager",myServer.PID)
+          clt.waitNSPID("/Study",myServer.PID)
 
     #
     # Launch LauncherServer
@@ -578,9 +578,9 @@ def startSalome(args, modules_list, modules_root_dir):
           session=clt.waitNSPID("/Kernel/Session",mySessionServ.PID,SALOME.Session)
         args["session_object"] = session
     end_time = os.times()
-    if verbose(): print
-    print "Start SALOME, elapsed time : %5.1f seconds"% (end_time[4]
-                                                         - init_time[4])
+    if verbose(): print()
+    print("Start SALOME, elapsed time : %5.1f seconds"% (end_time[4]
+                                                         - init_time[4]))
 
     # ASV start GUI without Loader
     #if args['gui']:
@@ -597,14 +597,14 @@ def startSalome(args, modules_list, modules_root_dir):
     except:
         import traceback
         traceback.print_exc()
-        print "-------------------------------------------------------------"
-        print "-- to get an external python interpreter:runSalome --interp=1"
-        print "-------------------------------------------------------------"
+        print("-------------------------------------------------------------")
+        print("-- to get an external python interpreter:runSalome --interp=1")
+        print("-------------------------------------------------------------")
 
-    if verbose(): print "additional external python interpreters: ", nbaddi
+    if verbose(): print("additional external python interpreters: ", nbaddi)
     if nbaddi:
         for i in range(nbaddi):
-            print "i=",i
+            print("i=",i)
             anInterp=InterpServer(args)
             anInterp.run()
 
@@ -634,21 +634,21 @@ def useSalome(args, modules_list, modules_root_dir):
     except:
         import traceback
         traceback.print_exc()
-        print
-        print
-        print "--- Error during Salome launch ---"
+        print()
+        print()
+        print("--- Error during Salome launch ---")
 
-    #print process_id
+    # print(process_id)
 
     from addToKillList import addToKillList
     from killSalomeWithPort import getPiDict
 
     filedict = getPiDict(args['port'])
-    for pid, cmd in process_id.items():
+    for pid, cmd in list(process_id.items()):
         addToKillList(pid, cmd, args['port'])
         pass
 
-    if verbose(): print """
+    if verbose(): print("""
     Saving of the dictionary of Salome processes in %s
     To kill SALOME processes from a console (kill all sessions from all ports):
       python killSalome.py
@@ -660,7 +660,7 @@ def useSalome(args, modules_list, modules_root_dir):
 
     runSalome, with --killall option, starts with killing
     the processes resulting from the previous execution.
-    """%filedict
+    """%filedict)
 
     #
     #  Print Naming Service directory list
@@ -668,8 +668,8 @@ def useSalome(args, modules_list, modules_root_dir):
 
     if clt != None:
         if verbose():
-            print
-            print " --- registered objects tree in Naming Service ---"
+            print()
+            print(" --- registered objects tree in Naming Service ---")
             clt.showNS()
             pass
 
@@ -694,14 +694,14 @@ def useSalome(args, modules_list, modules_root_dir):
 
         # run python scripts, passed as command line arguments
         toimport = []
-        if args.has_key('gui') and args.has_key('session_gui'):
+        if 'gui' in args and 'session_gui' in args:
             if not args['gui'] or not args['session_gui']:
-                if args.has_key('study_hdf'):
+                if 'study_hdf' in args:
                     toopen = args['study_hdf']
                     if toopen:
                         import salome
                         salome.salome_init(toopen)
-                if args.has_key('pyscript'):
+                if 'pyscript' in args:
                     toimport = args['pyscript']
         from salomeContextUtils import formatScriptsAndArgs
         command = formatScriptsAndArgs(toimport)
@@ -714,9 +714,9 @@ def useSalome(args, modules_list, modules_root_dir):
     return clt
 
 def execScript(script_path):
-    print 'executing', script_path
+    print('executing', script_path)
     sys.path.insert(0, os.path.realpath(os.path.dirname(script_path)))
-    execfile(script_path,globals())
+    exec(compile(open(script_path).read(), script_path, 'exec'),globals())
     del sys.path[0]
 
 # -----------------------------------------------------------------------------
@@ -759,17 +759,17 @@ def main(exeName=None):
     try:
         from salomeContextUtils import setOmniOrbUserPath
         setOmniOrbUserPath()
-    except Exception, e:
-        print e
+    except Exception as e:
+        print(e)
         sys.exit(1)
 
     from salome_utils import getHostName
     args, modules_list, modules_root_dir = setenv.get_config(exeName=exeName)
-    print "runSalome running on %s" % getHostName()
+    print("runSalome running on %s" % getHostName())
 
     kill_salome(args)
     save_config = True
-    if args.has_key('save_config'):
+    if 'save_config' in args:
         save_config = args['save_config']
     # --
     test = True
@@ -850,7 +850,6 @@ def foreGround(clt, args):
 #
 
 def runSalome():
-    import user
     clt,args = main()
     # --
     test = args['gui'] and args['session_gui']
index 8045a62e6ad06e7a4e58a0c69118ef9f3e76132a..e17a7bd9ca16b1d28fdb87cfbce18a3616923da4 100644 (file)
@@ -121,8 +121,8 @@ User "myself" connects to remotemachine to run the script concatenate.py in
   short_args, extra_args = getShortAndExtraArgs(args)
   try:
     (options, args) = parser.parse_args(short_args)
-  except Exception, e:
-    print e
+  except Exception as e:
+    print(e)
     return None, []
 
   port = options.port
@@ -250,7 +250,7 @@ def __copyFiles(user, machine, script, infiles, outfiles):
 
     # copy the infile to the remote server
     cmd = "scp %s %s@%s:%s" % (infile, user, machine, tmp_file)
-    print "[  SCP  ]", cmd
+    print("[  SCP  ]", cmd)
     os.system(cmd)
 
     list_infiles.append(tmp_file)
@@ -274,7 +274,7 @@ def __copyFiles(user, machine, script, infiles, outfiles):
 
   # copy the salome script on the remote server
   cmd = "scp %s %s@%s:%s" % (tmp_script, user, machine, tmp_script)
-  print "[  SCP  ]", cmd
+  print("[  SCP  ]", cmd)
   os.system(cmd)
 
   return list_infiles, list_outfiles, tmp_script
@@ -283,10 +283,10 @@ def __copyFiles(user, machine, script, infiles, outfiles):
 # sa_obj is a ScriptAndArgs object (from salomeContextUtils)
 def __runRemoteSession(sa_obj, params):
   if not params.user:
-    print "ERROR: The user login on remote machine MUST be given."
+    print("ERROR: The user login on remote machine MUST be given.")
     return 1
   if not params.directory:
-    print "ERROR: The remote directory MUST be given."
+    print("ERROR: The remote directory MUST be given.")
     return 1
 
   # sa_obj.script may be 'python script.py' --> only process .py file
@@ -300,7 +300,7 @@ def __runRemoteSession(sa_obj, params):
   if params.port:
     command = command + "-p %s "%params.port
   command = command + " %s %s args:%s"%(header, tmp_script, ",".join(tmp_in))
-  print '[  SSH   ] ' + command
+  print('[  SSH   ] ' + command)
   os.system(command)
 
   # Get remote files and clean
@@ -310,12 +310,12 @@ def __runRemoteSession(sa_obj, params):
   for outfile in (sa_obj.out or []):
     remote_outfile = tmp_out.pop(0)
     command = "scp %s@%s:%s %s" %(params.user, params.machine, remote_outfile, outfile)
-    print "[  SCP  ] " + command
+    print("[  SCP  ] " + command)
     os.system(command)
 
   # clean temporary files
   command = "ssh %s@%s \\rm -f %s" % (params.user, params.machine, " ".join(temp_files))
-  print '[  SSH   ] ' + command
+  print('[  SSH   ] ' + command)
   os.system(command)
   os.remove(tmp_script)
 
index 2ea2fce2ca93d3c97fed409ed8b4eb9bbdd03b8a..31f662576f2c546da86da1d08b8cc7e2b8743e78 100644 (file)
@@ -65,7 +65,7 @@ For complete description of available options, pleaser refer to ctest documentat
     return []
 
   if args[0] in ["-h", "--help"]:
-    print usage + epilog
+    print(usage + epilog)
     sys.exit(0)
 
   return args
index a674fff6cd22aaf971e3c865bd4896e3a5390fb2..8e40e820ae49c19febfd0cd198d75ab059b0fd3a 100644 (file)
@@ -20,7 +20,7 @@
 import os
 import sys
 import logging
-import ConfigParser
+import configparser
 
 from parseConfigFile import parseConfigFile
 
@@ -68,7 +68,7 @@ Command options:
     any blank characters.
 '''
 
-  print msg
+  print(msg)
 #
 
 """
@@ -128,7 +128,9 @@ class SalomeContext:
 
     absoluteAppliPath = os.getenv('ABSOLUTE_APPLI_PATH','')
     env_copy = os.environ.copy()
-    proc = subprocess.Popen(['python', os.path.join(absoluteAppliPath,"bin","salome","salomeContext.py"), pickle.dumps(self), pickle.dumps(args)], shell=False, close_fds=True, env=env_copy)
+    selfBytes= pickle.dumps(self, protocol=0)
+    argsBytes= pickle.dumps(args, protocol=0)
+    proc = subprocess.Popen(['python3', os.path.join(absoluteAppliPath,"bin","salome","salomeContext.py"), selfBytes.decode(), argsBytes.decode()], shell=False, close_fds=True, env=env_copy)
     out, err = proc.communicate()
     return out, err, proc.returncode
   #
@@ -222,7 +224,7 @@ class SalomeContext:
       'car'     : '_getCar',
       }
 
-    if not command in availableCommands.keys():
+    if command not in availableCommands:
       command = "start"
       options = args
 
@@ -265,14 +267,14 @@ class SalomeContext:
       if ex.code != 0:
         self.getLogger().error("SystemExit %s in method %s.", ex.code, command)
       return ex.code
-    except StandardError:
+    except SalomeContextException as e:
+      self.getLogger().error(e)
+      return 1
+    except Exception:
       self.getLogger().error("Unexpected error:")
       import traceback
       traceback.print_exc()
       return 1
-    except SalomeContextException, e:
-      self.getLogger().error(e)
-      return 1
   #
 
   def __setContextFromConfigFile(self, filename, reserved=None):
@@ -280,7 +282,7 @@ class SalomeContext:
       reserved = []
     try:
       unsetVars, configVars, reservedDict = parseConfigFile(filename, reserved)
-    except SalomeContextException, e:
+    except SalomeContextException as e:
       msg = "%s"%e
       self.getLogger().error(msg)
       return 1
@@ -291,7 +293,7 @@ class SalomeContext:
 
     # set context
     for reserved in reservedDict:
-      a = filter(None, reservedDict[reserved]) # remove empty elements
+      a = [_f for _f in reservedDict[reserved] if _f] # remove empty elements
       a = [ os.path.realpath(x) for x in a ]
       reformattedVals = os.pathsep.join(a)
       if reserved in ["INCLUDE", "LIBPATH"]:
@@ -325,17 +327,17 @@ class SalomeContext:
   def _setContext(self, args=None):
     salome_context_set = os.getenv("SALOME_CONTEXT_SET")
     if salome_context_set:
-      print "***"
-      print "*** SALOME context has already been set."
-      print "*** Enter 'exit' (only once!) to leave SALOME context."
-      print "***"
+      print("***")
+      print("*** SALOME context has already been set.")
+      print("*** Enter 'exit' (only once!) to leave SALOME context.")
+      print("***")
       return 0
 
     os.environ["SALOME_CONTEXT_SET"] = "yes"
-    print "***"
-    print "*** SALOME context is now set."
-    print "*** Enter 'exit' (only once!) to leave SALOME context."
-    print "***"
+    print("***")
+    print("*** SALOME context is now set.")
+    print("*** Enter 'exit' (only once!) to leave SALOME context.")
+    print("***")
 
     cmd = ["/bin/bash"]
     proc = subprocess.Popen(cmd, shell=False, close_fds=True)
@@ -374,7 +376,7 @@ class SalomeContext:
       args = []
     ports = args
     if not ports:
-      print "Port number(s) not provided to command: salome kill <port(s)>"
+      print("Port number(s) not provided to command: salome kill <port(s)>")
       return 1
 
     from multiprocessing import Process
@@ -422,7 +424,7 @@ class SalomeContext:
   #
 
   def _showSoftwareVersions(self, softwares=None):
-    config = ConfigParser.SafeConfigParser()
+    config = configparser.SafeConfigParser()
     absoluteAppliPath = os.getenv('ABSOLUTE_APPLI_PATH')
     filename = os.path.join(absoluteAppliPath, "sha1_collections.txt")
     versions = {}
@@ -441,12 +443,12 @@ class SalomeContext:
     if softwares:
       for soft in softwares:
         if versions.has_key(soft.upper()):
-          print soft.upper().rjust(max_len), versions[soft.upper()]
+          print(soft.upper().rjust(max_len), versions[soft.upper()])
     else:
       import collections
       od = collections.OrderedDict(sorted(versions.items()))
       for name, version in od.iteritems():
-        print name.rjust(max_len), versions[name]
+        print(name.rjust(max_len), versions[name])
     pass
 
   def _showInfo(self, args=None):
@@ -468,7 +470,7 @@ Available options are:
       args = ["--version"]
 
     if "-h" in args or "--help" in args:
-      print usage + epilog
+      print(usage + epilog)
       return 0
 
     if "-p" in args or "--ports" in args:
@@ -477,17 +479,17 @@ Available options are:
       this_ports = ports['this']
       other_ports = ports['other']
       if this_ports or other_ports:
-          print "SALOME instances are running on the following ports:"
+          print("SALOME instances are running on the following ports:")
           if this_ports:
-              print "   This application:", this_ports
+              print("   This application:", this_ports)
           else:
-              print "   No SALOME instances of this application"
+              print("   No SALOME instances of this application")
           if other_ports:
-              print "   Other applications:", other_ports
+              print("   Other applications:", other_ports)
           else:
-              print "   No SALOME instances of other applications"
+              print("   No SALOME instances of other applications")
       else:
-          print "No SALOME instances are running"
+          print("No SALOME instances are running")
 
     if "-s" in args or "--softwares" in args:
       if "-s" in args:
@@ -500,7 +502,7 @@ Available options are:
       self._showSoftwareVersions(softwares=args[index+1:indexEnd])
 
     if "-v" in args or "--version" in args:
-      print "Running with python", platform.python_version()
+      print("Running with python", platform.python_version())
       return self._runAppli(["--version"])
 
     return 0
@@ -512,7 +514,7 @@ Available options are:
 
     modules = args
     if not modules:
-      print "Module(s) not provided to command: salome doc <module(s)>"
+      print("Module(s) not provided to command: salome doc <module(s)>")
       return 1
 
     appliPath = os.getenv("ABSOLUTE_APPLI_PATH")
@@ -528,71 +530,71 @@ Available options are:
       if os.path.isfile(docfile):
         out, err = subprocess.Popen(["xdg-open", docfile]).communicate()
       else:
-        print "Online documentation is not accessible for module:", module
+        print("Online documentation is not accessible for module:", module)
 
   def _usage(self, unused=None):
     usage()
   #
 
   def _makeCoffee(self, unused=None):
-    print "                        ("
-    print "                          )     ("
-    print "                   ___...(-------)-....___"
-    print "               .-\"\"       )    (          \"\"-."
-    print "         .-\'``\'|-._             )         _.-|"
-    print "        /  .--.|   `\"\"---...........---\"\"`   |"
-    print "       /  /    |                             |"
-    print "       |  |    |                             |"
-    print "        \\  \\   |                             |"
-    print "         `\\ `\\ |                             |"
-    print "           `\\ `|            SALOME           |"
-    print "           _/ /\\            4 EVER           /"
-    print "          (__/  \\             <3            /"
-    print "       _..---\"\"` \\                         /`\"\"---.._"
-    print "    .-\'           \\                       /          \'-."
-    print "   :               `-.__             __.-\'              :"
-    print "   :                  ) \"\"---...---\"\" (                 :"
-    print "    \'._               `\"--...___...--\"`              _.\'"
-    print "      \\\"\"--..__                              __..--\"\"/"
-    print "       \'._     \"\"\"----.....______.....----\"\"\"     _.\'"
-    print "          `\"\"--..,,_____            _____,,..--\"\"`"
-    print "                        `\"\"\"----\"\"\"`"
-    print ""
-    print "                    SALOME is working for you; what else?"
-    print ""
+    print("                        (")
+    print("                          )     (")
+    print("                   ___...(-------)-....___")
+    print("               .-\"\"       )    (          \"\"-.")
+    print("         .-\'``\'|-._             )         _.-|")
+    print("        /  .--.|   `\"\"---...........---\"\"`   |")
+    print("       /  /    |                             |")
+    print("       |  |    |                             |")
+    print("        \\  \\   |                             |")
+    print("         `\\ `\\ |                             |")
+    print("           `\\ `|            SALOME           |")
+    print("           _/ /\\            4 EVER           /")
+    print("          (__/  \\             <3            /")
+    print("       _..---\"\"` \\                         /`\"\"---.._")
+    print("    .-\'           \\                       /          \'-.")
+    print("   :               `-.__             __.-\'              :")
+    print("   :                  ) \"\"---...---\"\" (                 :")
+    print("    \'._               `\"--...___...--\"`              _.\'")
+    print("      \\\"\"--..__                              __..--\"\"/")
+    print("       \'._     \"\"\"----.....______.....----\"\"\"     _.\'")
+    print("          `\"\"--..,,_____            _____,,..--\"\"`")
+    print("                        `\"\"\"----\"\"\"`")
+    print("")
+    print("                    SALOME is working for you; what else?")
+    print("")
   #
 
   def _getCar(self, unused=None):
-    print "                                              _____________"
-    print "                                  ..---:::::::-----------. ::::;;."
-    print "                               .\'\"\"\"\"\"\"                  ;;   \\  \":."
-    print "                            .\'\'                          ;     \\   \"\\__."
-    print "                          .\'                            ;;      ;   \\\\\";"
-    print "                        .\'                              ;   _____;   \\\\/"
-    print "                      .\'                               :; ;\"     \\ ___:\'."
-    print "                    .\'--...........................    : =   ____:\"    \\ \\"
-    print "               ..-\"\"                               \"\"\"\'  o\"\"\"     ;     ; :"
-    print "          .--\"\"  .----- ..----...    _.-    --.  ..-\"     ;       ;     ; ;"
-    print "       .\"\"_-     \"--\"\"-----\'\"\"    _-\"        .-\"\"         ;        ;    .-."
-    print "    .\'  .\'   SALOME             .\"         .\"              ;       ;   /. |"
-    print "   /-./\'         4 EVER <3    .\"          /           _..  ;       ;   ;;;|"
-    print "  :  ;-.______               /       _________==.    /_  \\ ;       ;   ;;;;"
-    print "  ;  / |      \"\"\"\"\"\"\"\"\"\"\".---.\"\"\"\"\"\"\"          :    /\" \". |;       ; _; ;;;"
-    print " /\"-/  |                /   /                  /   /     ;|;      ;-\" | ;\';"
-    print ":-  :   \"\"\"----______  /   /              ____.   .  .\"\'. ;;   .-\"..T\"   ."
-    print "\'. \"  ___            \"\":   \'\"\"\"\"\"\"\"\"\"\"\"\"\"\"    .   ; ;    ;; ;.\" .\"   \'--\""
-    print " \",   __ \"\"\"  \"\"---... :- - - - - - - - - \' \'  ; ;  ;    ;;\"  .\""
-    print "  /. ;  \"\"\"---___                             ;  ; ;     ;|.\"\""
-    print " :  \":           \"\"\"----.    .-------.       ;   ; ;     ;:"
-    print "  \\  \'--__               \\   \\        \\     /    | ;     ;;"
-    print "   \'-..   \"\"\"\"---___      :   .______..\\ __/..-\"\"|  ;   ; ;"
-    print "       \"\"--..       \"\"\"--\"        m l s         .   \". . ;"
-    print "             \"\"------...                  ..--\"\"      \" :"
-    print "                        \"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"    \\        /"
-    print "                                               \"------\""
-    print ""
-    print "                                Drive your simulation properly with SALOME!"
-    print ""
+    print("                                              _____________")
+    print("                                  ..---:::::::-----------. ::::;;.")
+    print("                               .\'\"\"\"\"\"\"                  ;;   \\  \":.")
+    print("                            .\'\'                          ;     \\   \"\\__.")
+    print("                          .\'                            ;;      ;   \\\\\";")
+    print("                        .\'                              ;   _____;   \\\\/")
+    print("                      .\'                               :; ;\"     \\ ___:\'.")
+    print("                    .\'--...........................    : =   ____:\"    \\ \\")
+    print("               ..-\"\"                               \"\"\"\'  o\"\"\"     ;     ; :")
+    print("          .--\"\"  .----- ..----...    _.-    --.  ..-\"     ;       ;     ; ;")
+    print("       .\"\"_-     \"--\"\"-----\'\"\"    _-\"        .-\"\"         ;        ;    .-.")
+    print("    .\'  .\'   SALOME             .\"         .\"              ;       ;   /. |")
+    print("   /-./\'         4 EVER <3    .\"          /           _..  ;       ;   ;;;|")
+    print("  :  ;-.______               /       _________==.    /_  \\ ;       ;   ;;;;")
+    print("  ;  / |      \"\"\"\"\"\"\"\"\"\"\".---.\"\"\"\"\"\"\"          :    /\" \". |;       ; _; ;;;")
+    print(" /\"-/  |                /   /                  /   /     ;|;      ;-\" | ;\';")
+    print(":-  :   \"\"\"----______  /   /              ____.   .  .\"\'. ;;   .-\"..T\"   .")
+    print("\'. \"  ___            \"\":   \'\"\"\"\"\"\"\"\"\"\"\"\"\"\"    .   ; ;    ;; ;.\" .\"   \'--\"")
+    print(" \",   __ \"\"\"  \"\"---... :- - - - - - - - - \' \'  ; ;  ;    ;;\"  .\"")
+    print("  /. ;  \"\"\"---___                             ;  ; ;     ;|.\"\"")
+    print(" :  \":           \"\"\"----.    .-------.       ;   ; ;     ;:")
+    print("  \\  \'--__               \\   \\        \\     /    | ;     ;;")
+    print("   \'-..   \"\"\"\"---___      :   .______..\\ __/..-\"\"|  ;   ; ;")
+    print("       \"\"--..       \"\"\"--\"        m l s         .   \". . ;")
+    print("             \"\"------...                  ..--\"\"      \" :")
+    print("                        \"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"    \\        /")
+    print("                                               \"------\"")
+    print("")
+    print("                                Drive your simulation properly with SALOME!")
+    print("")
   #
 
   # Add the following two methods since logger is not pickable
@@ -618,8 +620,8 @@ Available options are:
 
 if __name__ == "__main__":
   if len(sys.argv) == 3:
-    context = pickle.loads(sys.argv[1])
-    args = pickle.loads(sys.argv[2])
+    context = pickle.loads(sys.argv[1].encode())
+    args = pickle.loads(sys.argv[2].encode())
 
     status = context._startSalome(args)
     sys.exit(status)
index c078c96fe2ce564f593078eb07f12ee7e58bbf73..4835bcd25fd4a899c7f83b9306013b2b8ae36d39 100644 (file)
@@ -1,4 +1,4 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
 
 # Copyright (C) 2013-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
@@ -188,8 +188,8 @@ def getScriptsAndArgs(args=None, searchPathList=None):
         extracted_args = []
         x = elt.split(",")
         # x is ['[file1', 'file2]', 'val1', 'done', '[1', '2', '3]', '[True', 'False]', 'ok']
-        list_begin_indices = [i for i in xrange(len(x)) if x[i].startswith('[')] # [0, 4, 7]
-        list_end_indices = [i for i in xrange(len(x)) if x[i].endswith(']')] # [1, 6, 8]
+        list_begin_indices = [i for i in range(len(x)) if x[i].startswith('[')] # [0, 4, 7]
+        list_end_indices = [i for i in range(len(x)) if x[i].endswith(']')] # [1, 6, 8]
         start = 0
         for lbeg, lend in zip(list_begin_indices,list_end_indices): # [(0, 1), (4, 6), (7, 8)]
           if lbeg > start:
@@ -221,17 +221,18 @@ def getScriptsAndArgs(args=None, searchPathList=None):
       callPython = True
       afterArgs = False
     else:
+      file_extension = os.path.splitext(elt)[-1]
       if not os.path.isfile(elt) and not os.path.isfile(elt+".py"):
         eltInSearchPath = __getScriptPath(elt, searchPathList)
         if eltInSearchPath is None or (not os.path.isfile(eltInSearchPath) and not os.path.isfile(eltInSearchPath+".py")):
-          if elt[-3:] == ".py":
+          if file_extension == ".py":
             raise SalomeContextException("Script not found: %s"%elt)
           scriptArgs.append(ScriptAndArgs(script=elt))
           continue
         elt = eltInSearchPath
 
-      if elt[-4:] != ".hdf":
-        if elt[-3:] == ".py" or isDriver:
+      if file_extension != ".hdf":
+        if file_extension == ".py" or isDriver:
           currentScript = os.path.abspath(elt)
         elif os.path.isfile(elt+".py"):
           currentScript = os.path.abspath(elt+".py")
@@ -244,6 +245,7 @@ def getScriptsAndArgs(args=None, searchPathList=None):
         scriptArgs.append(ScriptAndArgs(script=currentKey))
         callPython = False
       elif currentScript:
+        script_extension = os.path.splitext(currentScript)[-1]
         if isDriver:
           currentKey = currentScript
           scriptArgs.append(ScriptAndArgs(script=currentKey))
@@ -255,7 +257,7 @@ def getScriptsAndArgs(args=None, searchPathList=None):
           ispython = False
           try:
             fn = open(currentScript)
-            for i in xrange(10): # read only 10 first lines
+            for i in range(10): # read only 10 first lines
               ln = fn.readline()
               if re.search("#!.*python"):
                 ispython = True
@@ -264,7 +266,7 @@ def getScriptsAndArgs(args=None, searchPathList=None):
             fn.close()
           except:
             pass
-          if not ispython and currentScript[-3:] == ".py":
+          if not ispython and script_extension == ".py":
             currentKey = "@PYTHONBIN@ "+currentScript
           else:
             currentKey = currentScript
index 4f4936f97cf96b99315d7783f9959ebe43a35fc5..5c229733082bc92d7146b690169d7c4831d30e76 100644 (file)
@@ -56,10 +56,9 @@ def _try_bool( arg ):
     are supported.
     If <arg> does not represent a boolean, an exception is raised.
     """
-    import types
-    if type( arg ) == types.BooleanType  :
+    if isinstance(arg, bool)  :
         return arg
-    elif type( arg ) == types.StringType  :
+    elif isinstance(arg, (str, bytes)):
         v = str( arg ).lower()
         if   v in [ "yes", "y", "true"  ]: return True
         elif v in [ "no",  "n", "false" ]: return False
@@ -294,7 +293,7 @@ def generateFileName( dir, prefix = None, suffix = None, extension = None,
     ### check unsupported parameters
     for kw in kwargs:
         if kw not in supported and verbose():
-            print 'Warning! salome_utilitie.py: generateFileName(): parameter %s is not supported' % kw
+            print('Warning! salome_utilitie.py: generateFileName(): parameter %s is not supported' % kw)
             pass
         pass
     ### process supported keywords
@@ -375,7 +374,7 @@ def generateFileName( dir, prefix = None, suffix = None, extension = None,
 
 # ---
 
-def makeTmpDir( path, mode=0777 ):
+def makeTmpDir( path, mode=0o777 ):
     """
     Make temporary directory with the specified path.
     If the directory exists then clear its contents.
@@ -510,12 +509,12 @@ def killpid(pid, sig = 9):
     if not pid: return
     import os, sys
     if sig != 0:
-        if verbose(): print "######## killpid pid = ", pid
+        if verbose(): print("######## killpid pid = ", pid)
     try:
         if sys.platform == "win32":
             import ctypes
             if sig == 0:
-                # PROCESS_QUERY_INFORMATION (0x0400)   Required to retrieve certain information about a process
+                # PROCESS_QUERY_INFORMATION (0x0400)    Required to retrieve certain information about a process
                 handle = ctypes.windll.kernel32.OpenProcess(0x0400, False, int(pid))
                 if handle: 
                     ret = 1
@@ -523,7 +522,7 @@ def killpid(pid, sig = 9):
                 else:
                     ret = 0
             if sig == 9:
-                # PROCESS_TERMINATE (0x0001)   Required to terminate a process using TerminateProcess.
+                # PROCESS_TERMINATE (0x0001)    Required to terminate a process using TerminateProcess.
                 handle = ctypes.windll.kernel32.OpenProcess(0x0001, False, int(pid))
                 ret = ctypes.windll.kernel32.TerminateProcess(handle, -1)
                 ctypes.windll.kernel32.CloseHandle(handle)
@@ -535,7 +534,7 @@ def killpid(pid, sig = 9):
             ret = 1
             pass
         pass
-    except OSError, e:
+    except OSError as e:
         # errno.ESRCH == 3 is 'No such process'
         if e.errno == 3:
             ret = 0
index cdf304eba8e60a085a5c649bb443b24c57df2fcc..85eee9bbb74918f6e87f387c107ab4b80ad18629 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 #  -*- coding: iso-8859-1 -*-
 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
@@ -69,27 +69,27 @@ def searchFreePort_withPortManager(queue, args={}, save_config=1, use_port=None)
   port = getPort(use_port)
 
   if use_port:
-    print "Check if port can be used: %d" % use_port,
+    print("Check if port can be used: %d" % use_port, end=' ')
     if port == use_port and port != -1:
-      print "- OK"
+      print("- OK")
       __setup_config(use_port, args, save_config)
       queue.put([os.environ['OMNIORB_CONFIG'],
                  os.environ['NSPORT'],
                  os.environ['NSHOST']])
       return
     else:
-      print "- KO: port is busy"
+      print("- KO: port is busy")
       pass
   #
-  print "Searching for a free port for naming service:",
+  print("Searching for a free port for naming service:", end=' ')
   if port == -1: # try again
     port = getPort(use_port)
 
   if port != -1:
-    print "%s - OK"%(port)
+    print("%s - OK"%(port))
     __setup_config(port, args, save_config)
   else:
-    print "Unable to obtain port"
+    print("Unable to obtain port")
 
   queue.put([os.environ['OMNIORB_CONFIG'],
              os.environ['NSPORT'],
@@ -99,7 +99,7 @@ def searchFreePort_withPortManager(queue, args={}, save_config=1, use_port=None)
 def __savePortToFile(args):
   # Save Naming service port name into
   # the file args["ns_port_log_file"]
-  if args.has_key('ns_port_log_file'):
+  if 'ns_port_log_file' in args:
     omniorbUserPath = os.getenv("OMNIORB_USER_PATH")
     file_name = os.path.join(omniorbUserPath, args["ns_port_log_file"])
     with open(file_name, "w") as f:
index 75b6b16e011967c10ce6a6d2410774834559de30..2712c880e731cbd51c661f05170716d0809e3619 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 #  -*- coding: iso-8859-1 -*-
 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
@@ -71,7 +71,7 @@ class Server:
                                    + os.getenv("LD_LIBRARY_PATH")]
               myargs = myargs +['-T']+self.CMD[:1]+['-e'] + env_ld_library_path
         command = myargs + self.CMD
-        #print "command = ", command
+        # print("command = ", command)
         if sys.platform == "win32":
           import subprocess
           pid = subprocess.Popen(command).pid
@@ -121,12 +121,13 @@ class Server:
           pid = os.fork()
           if pid > 0:
             #send real pid to parent
-            os.write(c2pwrite,"%d" % pid)
+            pid_str = "%d" % pid
+            os.write(c2pwrite,pid_str.encode())
             os.close(c2pwrite)
             # exit from second parent
             os._exit(0)
-        except OSError, e:
-          print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror)
+        except OSError as e:
+          print("fork #2 failed: %d (%s)" % (e.errno, e.strerror), file=sys.stderr)
           os.write(c2pwrite,"-1")
           os.close(c2pwrite)
           sys.exit(1)
@@ -136,6 +137,6 @@ class Server:
         os.open("/dev/null", os.O_RDWR)  # redirect standard input (0) to /dev/null
         try:
           os.execvp(args[0], args)
-        except OSError, e:
-          print >>sys.stderr, "(%s) launch failed: %d (%s)" % (args[0],e.errno, e.strerror)
+        except OSError as e:
+          print("(%s) launch failed: %d (%s)" % (args[0],e.errno, e.strerror), file=sys.stderr)
           os._exit(127)
index 242f492cd37493fd6bb8fffd3baec901c0c70d31..e36481da8f4025219e83eb7da52d65a1c4579f37 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 #  -*- coding: iso-8859-1 -*-
 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
@@ -43,7 +43,7 @@ def add_path(directory, variable_name):
       splitsym = ";"
     else:
       splitsym = ":"
-    if not os.environ.has_key(variable_name):
+    if variable_name not in os.environ:
         os.environ[variable_name] = ""
         pass
     if os.path.exists(directory):
@@ -59,9 +59,8 @@ def add_path(directory, variable_name):
                 if os.path.abspath(_dir) != os.path.abspath(directory):
                   newpath.append(_dir)
             pass
-        import string
         newpath[:0] = [ directory ]
-        newpath = string.join(newpath, splitsym)
+        newpath = splitsym.join(newpath)
         os.environ[variable_name] = newpath
         if variable_name == "PYTHONPATH":
             sys.path[:0] = [os.path.realpath(directory)]
@@ -89,23 +88,16 @@ def get_config(silent=False, exeName=None):
 
     # read args from launch configure xml file and command line options
 
-    #*** Test additional option
-    #*** import optparse
-    #*** help_str = "Test options addition."
-    #*** o_j = optparse.Option("-j", "--join", action="store_true", dest="join", help=help_str)
 
     import launchConfigureParser
     args = launchConfigureParser.get_env(exeName=exeName)
 
-    #*** Test additional option
-    #*** args = launchConfigureParser.get_env([o_j])
-    #*** if args.has_key("join"): print args["join"]
 
     # Check variables <module>_ROOT_DIR
     # and set list of used modules (without KERNEL)
 
     modules_list = []
-    if args.has_key("modules"):
+    if "modules" in args:
         modules_list += [a for a in args["modules"] if a.strip()]
     # KERNEL must be last in the list to locate it at the first place in PATH
     if args["gui"] :
@@ -118,14 +110,14 @@ def get_config(silent=False, exeName=None):
     to_remove_list=[]
     for module in modules_list :
         module_variable=module+"_ROOT_DIR"
-        if not os.environ.has_key(module_variable):
+        if module_variable not in os.environ:
             if not silent:
-                print "*******************************************************"
-                print "*"
-                print "* Environment variable",module_variable,"must be set"
-                print "* Module", module, "will be not available"
-                print "*"
-                print "********************************************************"
+                print("*******************************************************")
+                print("*")
+                print("* Environment variable",module_variable,"must be set")
+                print("* Module", module, "will be not available")
+                print("*")
+                print("********************************************************")
                 pass
             to_remove_list.append(module)
             continue
@@ -170,7 +162,7 @@ def set_env(args, modules_list, modules_root_dir, silent=False):
         modules_list = modules_list[:] + ["GUI"]
     modules_list = modules_list[:] + ["KERNEL"]
     for module in modules_list :
-        if modules_root_dir.has_key(module):
+        if module in modules_root_dir:
             module_root_dir = modules_root_dir[module]
             if module_root_dir not in modules_root_dir_list:
               modules_root_dir_list[:0] = [module_root_dir]
@@ -185,7 +177,7 @@ def set_env(args, modules_list, modules_root_dir, silent=False):
                      "LD_LIBRARY_PATH")
             add_path(os.path.join(module_root_dir,"bin",salome_subdir),
                      "PATH")
-            if os.path.exists(module_root_dir + "/examples") :
+            if os.path.exists(os.path.join(module_root_dir, "examples")):
                 add_path(os.path.join(module_root_dir,"examples"),
                          "PYTHONPATH")
                 pass
@@ -230,7 +222,7 @@ def set_env(args, modules_list, modules_root_dir, silent=False):
 
     # set trace environment variable
 
-    if not os.environ.has_key("SALOME_trace"):
+    if "SALOME_trace" not in os.environ:
         os.environ["SALOME_trace"]="local"
     if args['file']:
         os.environ["SALOME_trace"]="file:"+args['file'][0]
index ca54dfcc60bca211e08274f9390586f0aba67541..e3b807a25fee903f1578f6cffd939108ab535d93 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 #  -*- coding: iso-8859-1 -*-
 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
index 3d7fbc0f9ab5120aaf99f2c3acfa53d7ee869f79..120228c4d7693c7334990c3aa15b7e01e725961d 100755 (executable)
@@ -1,4 +1,3 @@
-#  -*- coding: iso-8859-1 -*-
 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
 # Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
@@ -20,7 +19,6 @@
 #
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
-
 """Create a virtual Salome installation
 
 Based on a script created by Ian Bicking.
@@ -32,7 +30,9 @@ Typical use::
 install module KERNEL in the current directory
 """
 
-import sys, os, optparse, shutil,glob,fnmatch
+import sys, os, optparse, shutil, glob, fnmatch
+
+
 py_version = 'python%s.%s' % (sys.version_info[0], sys.version_info[1])
 
 verbose=0
@@ -43,11 +43,11 @@ def mkdir(path):
     """Create a directory and all the intermediate directories if path does not exist"""
     if not os.path.exists(path):
         if verbose:
-            print 'Creating %s' % path
+            print('Creating %s' % path)
         os.makedirs(path)
     else:
         if verbose:
-            print 'Directory %s already exists' % path
+            print('Directory %s already exists' % path)
             pass
         pass
 
@@ -57,15 +57,15 @@ def symlink(src, dest):
     """Create a link if it does not exist"""
     if not os.path.exists(dest):
         if os.path.lexists(dest):
-            print "Do not create symlink %s. It already exists but it's broken" % dest
+            print("Do not create symlink %s. It already exists but it's broken" % dest)
             return
         if verbose:
-            print 'Creating symlink %s' % dest
+            print('Creating symlink %s' % dest)
             pass
         os.symlink(src, dest)
     else:
         if verbose:
-            print 'Symlink %s already exists' % dest
+            print('Symlink %s already exists' % dest)
         pass
     pass
 
@@ -74,11 +74,11 @@ def symlink(src, dest):
 def rmtree(dir):
     """Remove (recursive) a directory if it exists"""
     if os.path.exists(dir):
-        print 'Deleting tree %s' % dir
+        print('Deleting tree %s' % dir)
         shutil.rmtree(dir)
     else:
         if verbose:
-            print 'Do not need to delete %s; already gone' % dir
+            print('Do not need to delete %s; already gone' % dir)
             pass
         pass
     pass
@@ -99,12 +99,12 @@ def link_module(options):
     global verbose
 
     if not options.module_path:
-        print "Option module is mandatory"
+        print("Option module is mandatory")
         return
 
     module_dir=os.path.abspath(options.module_path)
     if not os.path.exists(module_dir):
-        print "Module %s does not exist" % module_dir
+        print("Module %s does not exist" % module_dir)
         return
 
     verbose = options.verbose
@@ -127,7 +127,7 @@ def link_module(options):
       pyversio=versio
     else:
       #incompatible python versions
-      print "incompatible python versions : application has version %s and module %s has not" % (versio,module_dir)
+      print("incompatible python versions : application has version %s and module %s has not" % (versio,module_dir))
       return
 
     module_bin_dir=os.path.join(module_dir,'bin','salome')
@@ -188,20 +188,21 @@ def link_module(options):
         pass
     else:
         if verbose:
-            print module_bin_dir, " doesn't exist"
+            print(module_bin_dir, " doesn't exist")
         pass
 
     #directory bin/salome/test : create it and link content
     if os.path.exists(module_test_dir):
         # link <appli_path>/bin/salome/test/<module> to <module_path>/bin/salome/test
-        print "link %s --> %s"%(os.path.join(test_dir, options.module_name), module_test_dir)
+        print("link %s --> %s"%(os.path.join(test_dir, options.module_name), module_test_dir))
         symlink(module_test_dir, os.path.join(test_dir, options.module_name))
         # register module for testing in CTestTestfile.cmake
         with open(os.path.join(test_dir, "CTestTestfile.cmake"), "ab") as f:
-            f.write("SUBDIRS(%s)\n"%options.module_name)
+            aStr = "SUBDIRS(%s)\n"%options.module_name
+            f.write(aStr.encode())
     else:
         if verbose:
-            print module_test_dir, " doesn't exist"
+            print(module_test_dir, " doesn't exist")
         pass
 
     #directory idl/salome : create it and link content
@@ -211,7 +212,7 @@ def link_module(options):
             symlink(os.path.join(module_idl_dir, fn), os.path.join(idl_dir, fn))
     else:
         if verbose:
-            print module_idl_dir, " doesn't exist"
+            print(module_idl_dir, " doesn't exist")
 
     #directory lib/salome : create it and link content
     if os.path.exists(module_lib_dir):
@@ -222,7 +223,7 @@ def link_module(options):
         pass
     else:
         if verbose:
-            print module_lib_dir, " doesn't exist"
+            print(module_lib_dir, " doesn't exist")
         pass
 
     #directory lib/paraview : create it and link content
@@ -234,12 +235,12 @@ def link_module(options):
         pass
     else:
         if verbose:
-            print module_pvlib_dir, " doesn't exist"
+            print(module_pvlib_dir, " doesn't exist")
         pass
 
     #directory lib/pyversio/site-packages/salome : create it and link content
     if not os.path.exists(module_lib_py_dir):
-        print "Python directory %s does not exist" % module_lib_py_dir
+        print("Python directory %s does not exist" % module_lib_py_dir)
     else:
         # Specific action for the package salome
         module_lib_pypkg_dir=os.path.join(module_lib_py_dir,"salome")
@@ -262,7 +263,7 @@ def link_module(options):
             pass
         else:
             if verbose:
-                print module_lib_py_shared_dir, " doesn't exist"
+                print(module_lib_py_shared_dir, " doesn't exist")
             pass
 
     #directory share/doc/salome (KERNEL doc) : create it and link content
@@ -322,7 +323,7 @@ def link_module(options):
                 #other directories (not resources)
                 symlink(os.path.join(module_share_dir, fn), os.path.join(share_dir, fn))
     else:
-        print "share/salome directory %s does not exist" % module_share_dir
+        print("share/salome directory %s does not exist" % module_share_dir)
         pass
 
     #html files in doc/salome directory
@@ -355,12 +356,12 @@ def link_extra_test(options):
     global verbose
 
     if not options.extra_test_path:
-        print "Option extra_test is mandatory"
+        print("Option extra_test is mandatory")
         return
 
     extra_test_dir=os.path.abspath(options.extra_test_path)
     if not os.path.exists(extra_test_dir):
-        print "Test %s does not exist" % extra_test_dir
+        print("Test %s does not exist" % extra_test_dir)
         return
 
     verbose = options.verbose
@@ -375,14 +376,15 @@ def link_extra_test(options):
     #directory bin/salome/test : create it and link content
     if os.path.exists(extra_test_dir):
         # link <appli_path>/bin/salome/test/<extra_test> to <extra_test_path>/bin/salome/test
-        print "link %s --> %s"%(os.path.join(test_dir, options.extra_test_name), extra_test_dir)
+        print("link %s --> %s"%(os.path.join(test_dir, options.extra_test_name), extra_test_dir))
         symlink(extra_test_dir, os.path.join(test_dir, options.extra_test_name))
         # register extra_test for testing in CTestTestfile.cmake
         with open(os.path.join(test_dir, "CTestTestfile.cmake"), "ab") as f:
-            f.write("SUBDIRS(%s)\n"%options.extra_test_name)
+            aStr = "SUBDIRS(%s)\n" % options.extra_test_name
+            f.write(aStr.encode())
     else:
         if verbose:
-            print extra_test_dir, " doesn't exist"
+            print(extra_test_dir, " doesn't exist")
         pass
 
 # -----------------------------------------------------------------------------
index 6bc37fa433a18ce43a5bfaf8108e35ce11261b52..8b2e655b50efec55b0489cadd86a755715b2e814 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 #  -*- coding: iso-8859-1 -*-
 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
@@ -43,11 +43,11 @@ while(1):
   try:
     ccontext = rootContext.resolve(cname)
     break
-  except CosNaming.NamingContext.NotFound, ex:
+  except CosNaming.NamingContext.NotFound as ex:
     time.sleep(1)
-  except CosNaming.NamingContext.InvalidName, ex:
+  except CosNaming.NamingContext.InvalidName as ex:
     time.sleep(1)
-  except CosNaming.NamingContext.CannotProceed, ex:
+  except CosNaming.NamingContext.CannotProceed as ex:
     time.sleep(1)
   except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
     time.sleep(1)
@@ -68,7 +68,7 @@ def waitContainer(mycont):
               while(ok):
                 for s in bb.binding_name :
                    if s.id == mycont:
-                     print s.id
+                     print(s.id)
                      return
                 ok,bb=bii.next_one()
         ok,b=bi.next_one()
index 1c386b511624fe645b7cc092fdb5ddbbbf51069a..4005f67144fe925b6ec1f12d8967f30403774113 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 #  -*- coding: iso-8859-1 -*-
 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
index eae882caee60b5ea3fbbe45fdabe751a89f90d69..9300f476eef7e8eec7bc085ebf2316ed53515553 100644 (file)
@@ -19,10 +19,10 @@ file = str+"/test.hdf"
 
 #file = "/tmp/ggg.hdf"
 
-print " -------  We will save to", file, "-----------"
+print(" -------  We will save to", file, "-----------")
 
-batchmode_geompy.myStudyManager.SaveAs(file, batchmode_geompy.myStudy)
-openedStudy=batchmode_geompy.myStudyManager.Open(file)
+batchmode_geompy.myStudy.SaveAs(file)
+openedStudy=batchmode_geompy.myStudy.Open(file)
 
 if openedStudy == None:
         raise  RuntimeError, "Can't open saved study!"
index 756e4a3f125e5e02d3de311d211f50abc52cb71a..3c2345d9c519b2de144df93b490624bc1e106ede 100644 (file)
@@ -22,8 +22,8 @@ if str == None:
         str = "/tmp"
 file = str+"/test.hdf"
 
-batchmode_geompy.myStudyManager.SaveAs(file,  batchmode_geompy.myStudy)
-openedStudy = batchmode_geompy.myStudyManager.Open(file);
+batchmode_geompy.myStudy.SaveAs(file)
+openedStudy = batchmode_geompy.myStudy.Open(file);
 
 if openedStudy == None:
         raise  RuntimeError, "Can't open saved study!"
index 4cfd732fd3abd70a68a2e7bf5373112570e88e4f..99dac3761325060b70f9e39583288de143c80fde 100644 (file)
@@ -22,8 +22,8 @@ if str == None:
         str = "/tmp"
 file = str+"/test.hdf"
 
-batchmode_geompy.myStudyManager.SaveAs(file, batchmode_geompy.myStudy)
-openedStudy=batchmode_geompy.myStudyManager.Open(file);
+batchmode_geompy.myStudy.SaveAs(file)
+openedStudy=batchmode_geompy.myStudy.Open(file);
 
 if openedStudy == None:
         raise  RuntimeError, "Can't open saved study!"
index 7605877363ffc1d6f42d73321770f1be28a1908c..3394d8b868b986dbb83e72cf7425ca9e3133047a 100644 (file)
@@ -19,7 +19,7 @@ A.SetTextColor(color)
 c = A.TextColor();
 
 if c.R != 234 or c.G != 345 or c.B != 231:
-        print "Error: wrong value of AttributeTextColor"
+        print("Error: wrong value of AttributeTextColor")
 
 #      save / restore study      
 #============================================================
@@ -28,8 +28,8 @@ if str == None:
         str = "/tmp"
 file = str+"/test.hdf"
 
-batchmode_geompy.myStudyManager.SaveAs(file, batchmode_geompy.myStudy)
-openedStudy = batchmode_geompy.myStudyManager.Open(file);
+batchmode_geompy.myStudy.SaveAs(file)
+openedStudy = batchmode_geompy.myStudy.Open(file);
 
 if openedStudy == None:
         raise  RuntimeError, "Can't open saved study!"
@@ -53,5 +53,5 @@ if A == None :
 
 c = A.TextColor();
 if c.R != 234 or c.G != 345 or c.B != 231:
-        print "Error: wrong value of AttributeTextColor"
+        print("Error: wrong value of AttributeTextColor")
 
index c05aaff5258a3e259f3199284bcef1f608179892..6c16c96f01f4167f7115226a492a3d6ae15391eb 100644 (file)
@@ -19,7 +19,7 @@ A.SetTextHighlightColor(highlightcolor)
 
 c = A.TextHighlightColor();
 if c.R != 256 or c.G != 256 or c.B != 256:
-        print "Error: wrong value of AttributeTextHighlightColor"
+        print("Error: wrong value of AttributeTextHighlightColor")
 
 
 #      save / restore study      
@@ -29,8 +29,8 @@ if str == None:
         str = "/tmp"
 file = str+"/test.hdf"
 
-batchmode_geompy.myStudyManager.SaveAs(file, batchmode_geompy.myStudy)
-openedStudy=batchmode_geompy.myStudyManager.Open(file);
+batchmode_geompy.myStudy.SaveAs(file)
+openedStudy=batchmode_geompy.myStudy.Open(file);
 
 if openedStudy == None:
         raise  RuntimeError, "Can't open saved study!"
@@ -44,7 +44,7 @@ if father is None:
 #============================================================
 
 res, A = father.FindAttribute("AttributeTextHighlightColor")
-print res, A
+print(res, A)
 if res == 0 or A == None:
         raise  RuntimeError, "Error:  not found AttributeTextHighlightColor"
 
@@ -56,5 +56,5 @@ if A == None :
 c = A.TextHighlightColor();
 
 if c.R != 256 or c.G != 256 or c.B != 256:
-        print "Error: wrong value of AttributeTextTextHighlightColor"
+        print("Error: wrong value of AttributeTextTextHighlightColor")
 
index a0acf346d20b866c018e487321386fb89f6e0553..643891394ebe0205ac16a4dc0dc1d7504483212c 100644 (file)
@@ -9,7 +9,7 @@ aPixmap = A._narrow(SALOMEDS.AttributePixMap);
 aPixmap.SetPixMap( "ICON_OBJBROWSER_Geometry" );
 
 if aPixmap.GetPixMap() != "ICON_OBJBROWSER_Geometry":
-        print "Error: wrong value of AttributePixMap"
+        print("Error: wrong value of AttributePixMap")
 
 
 #      save / restore study      
@@ -19,8 +19,8 @@ if str == None:
         str = "/tmp"
 file = str+"/test.hdf"
 
-batchmode_geompy.myStudyManager.SaveAs(file, batchmode_geompy.myStudy)
-openedStudy = batchmode_geompy.myStudyManager.Open(file);
+batchmode_geompy.myStudy.SaveAs(file)
+openedStudy = batchmode_geompy.myStudy.Open(file);
 
 if openedStudy == None:
         raise  RuntimeError, "Can't open saved study!"
@@ -43,5 +43,5 @@ if A == None :
         raise  RuntimeError, "Can't create AttributePixMap attribute"
 
 if A.GetPixMap() != "ICON_OBJBROWSER_Geometry":
-        print "Error: wrong value of AttributePixMap"
+        print("Error: wrong value of AttributePixMap")
 
index 42493fe019816b4fa378f952a735d3767d693bcc..6494b849d56b39c4565c17d78ff533ac9e21ee70 100644 (file)
@@ -9,7 +9,7 @@ A = A._narrow(SALOMEDS.AttributeLocalID)
 A.SetValue(763242882)
 
 if A.Value() != 763242882:
-        print "Error: wrong value of AttributeLocalID"
+        print("Error: wrong value of AttributeLocalID")
 
 #      save / restore study      
 #=================================
@@ -18,8 +18,8 @@ if str == None:
         str = "/tmp"
 file = str+"/test.hdf"
 
-batchmode_geompy.myStudyManager.SaveAs(file, batchmode_geompy.myStudy)
-openedStudy = batchmode_geompy.myStudyManager.Open(file);
+batchmode_geompy.myStudy.SaveAs(file)
+openedStudy = batchmode_geompy.myStudy.Open(file);
 
 if openedStudy == None:
         raise  RuntimeError, "Can't open saved study!"
@@ -39,5 +39,5 @@ if res == 0 or A == None:
 A = A._narrow(SALOMEDS.AttributeLocalID)
 
 if A.Value() != 763242882:
-        print "Error: wrong value of AttributeLocalID"
+        print("Error: wrong value of AttributeLocalID")
 
index 3be50d9b64da8cc7a758811254445d237450b8a9..b5694d661bc6d922fcd81901ab4c1d746681dd3c 100644 (file)
@@ -21,7 +21,7 @@ A.Add(300)
 A.Add(500)
 A.Add(400)
 A.Add(700)
-print "First transaction goes on :  HasOpenCommand() = ", batchmode_geompy.myBuilder.HasOpenCommand()
+print("First transaction goes on :  HasOpenCommand() = ", batchmode_geompy.myBuilder.HasOpenCommand())
 batchmode_geompy.myBuilder.CommitCommand() #--------------
 
 # 2nd transaction ------------------------------------------
@@ -34,12 +34,12 @@ if batchmode_geompy.myBuilder.GetAvailableUndos() == 0:
         raise RuntimeError, "GetAvailableUndos() = 0 but must not !"
 
 if A.Length() != 4:
-        print "Wrong length of SequenceOfInteger"
+        print("Wrong length of SequenceOfInteger")
 if A.Value(1) != 100 or A.Value(2) != 300 or A.Value(3) != 400 or A.Value(4) != 500:
         raise  RuntimeError, "Wrong  value of  AttributeSequenceOfInteger"
 
 file1 = dir + "/test1.hdf"
-batchmode_geompy.myStudyManager.SaveAs(file1, batchmode_geompy.myStudy)
+batchmode_geompy.myStudy.SaveAs(file1)
 
 # 1st Undo ---------------------------------------
 batchmode_geompy.myBuilder.Undo()
@@ -47,13 +47,13 @@ res, A = batchmode_geompy.myBuilder.FindAttribute(batchmode_geompy.father, "Attr
 if A is None:
         raise  RuntimeError, "After first 'undo' can't find AttributeSequenceOfInteger"
 if A.Length() != 5:
-        print "Wrong length of SequenceOfInteger"
+        print("Wrong length of SequenceOfInteger")
 if A.Value(1) != 100 or A.Value(2) != 300 or A.Value(3) != 500 or A.Value(4) != 400 or  A.Value(5) != 700:
-        print  A.Value(1), A.Value(2), A.Value(3), A.Value(4), A.Value(5)
+        print( A.Value(1), A.Value(2), A.Value(3), A.Value(4), A.Value(5))
         raise  RuntimeError, "Wrong  value of  AttributeSequenceOfInteger after the first 'undo'!"
 # save 
 file2 = dir + "/test2.hdf"
-batchmode_geompy.myStudyManager.SaveAs(file2, batchmode_geompy.myStudy)
+batchmode_geompy.myStudy.SaveAs(file2)
 #-------------------------------------------------
 # 2nd Undo ---------------------------------------
 batchmode_geompy.myBuilder.Undo()
@@ -61,7 +61,7 @@ res, attr = batchmode_geompy.myBuilder.FindAttribute(batchmode_geompy.father, "A
 if res !=0 or attr != None :
         raise  RuntimeError, "After the second 'undo' AttributeSequenceOfInteger exists but must not!"
 file3 = dir + "/test3.hdf"
-batchmode_geompy.myStudyManager.SaveAs(file3, batchmode_geompy.myStudy)
+batchmode_geompy.myStudy.SaveAs(file3)
 #-------------------------------------------------
 
 #make redo twice ---------------------------------
@@ -73,13 +73,13 @@ res, A = batchmode_geompy.myBuilder.FindAttribute(batchmode_geompy.father, "Attr
 if res ==0 or A== None :
         raise  RuntimeError, "AttributeSequenceOfInteger is not found but must be!"
 if A.Length() != 4:
-        print "Wrong length of SequenceOfInteger"
+        print("Wrong length of SequenceOfInteger")
 if A.Value(1) != 100 or A.Value(2) != 300 or A.Value(3) != 400 or A.Value(4) != 500:
         raise  RuntimeError, "Wrong  value of  AttributeSequenceOfInteger"
 
 
 #----------------------------------------------------------------------
-openedStudy=batchmode_geompy.myStudyManager.Open(file1);
+openedStudy=batchmode_geompy.myStudy.Open(file1);
 
 if openedStudy == None:
         raise  RuntimeError, "Can't open saved study!"
@@ -100,11 +100,11 @@ if res == 0 or A == None:
 A = A._narrow(SALOMEDS.AttributeSequenceOfInteger)
 
 if A.Length() != 4:
-        print "Wrong length of SequenceOfInteger"
+        print("Wrong length of SequenceOfInteger")
 if A.Value(1) != 100 or A.Value(2) != 300 or A.Value(3) != 400 or A.Value(4) != 500:
-        print "Wrong  value of  AttributeSequenceOfInteger"
+        print("Wrong  value of  AttributeSequenceOfInteger")
 #----------------------------------------------------------------------
-openedStudy=batchmode_geompy.myStudyManager.Open(file2);
+openedStudy=batchmode_geompy.myStudy.Open(file2);
 
 if openedStudy == None:
         raise  RuntimeError, "Can't open saved study!"
@@ -125,12 +125,12 @@ if res == 0 or A == None:
 A = A._narrow(SALOMEDS.AttributeSequenceOfInteger)
 
 if A.Length() != 5:
-        print "Wrong length of SequenceOfInteger"
+        print("Wrong length of SequenceOfInteger")
 if A.Value(1) != 100 or A.Value(2) != 300 or A.Value(3) != 500 or A.Value(4) != 400 or  A.Value(5) != 700:
         raise  RuntimeError, "Wrong  value of  AttributeSequenceOfInteger after the first 'undo'!"
 
 #----------------------------------------------------------------------
-openedStudy=batchmode_geompy.myStudyManager.Open(file3);
+openedStudy=batchmode_geompy.myStudy.Open(file3);
 
 if openedStudy == None:
         raise  RuntimeError, "Can't open saved study!"
index 2c3e6b81925a2c2ba8bd07b0a95a9823eae7dc1f..2ffd4ee0310781fa6de8b5ee84996962e6f02c0a 100644 (file)
@@ -51,7 +51,7 @@ if A == None :
 A.SetValue("AttributesTesting")
 
 if A.Value() != "AttributesTesting":
-        print "Wrong  value of AttributeName"        
+        print("Wrong  value of AttributeName")        
 
 batchmode_geompy.myBuilder.CommitCommand()
 
@@ -130,11 +130,11 @@ batchmode_geompy.myBuilder.CommitCommand()
 #===========================================================
 
 res, A = batchmode_geompy.myBuilder.FindAttribute(child, "AttributeComment")
-print "res = ", res
+print("res = ", res)
 if A != None :
-        print " AttributeComment was found"
+        print(" AttributeComment was found")
 else:
-        print " AttributeComment is not found. It's correct"
+        print(" AttributeComment is not found. It's correct")
 
 attributes=[]
  
@@ -142,12 +142,12 @@ attributes = child.GetAllAttributes()
 
 length = len(attributes)
 
-print "Attributes number = ", length
-print attributes
+print("Attributes number = ", length)
+print(attributes)
 for i in range(0, length) :
         attr = attributes[i]
         if attr is None :
-                print i,"None item of object attributes list"
+                print(i,"None item of object attributes list")
 
 if length != 5 :
         raise RuntimeError, "Wrong number of attributes"
index 477f8b2b66ae43345507f1e9441591a221a4fd35..b2423ab890dc82d23674797c1015d61fcc400f17 100644 (file)
@@ -135,29 +135,29 @@ N32.SetFather(N3)
 N32.Prepend(N31)
 N33.InsertAfter(N32)
 N33.Append(N34)
-print "-------------  ", N1, "  -------------  "
-print "N1.Label() = ", N1.Label() , "IsRoot() = ", N1.IsRoot(), "Depth() = ", N1.Depth()
-print "N11.Label() = ", N11.Label() , "IsRoot() = ", N11.IsRoot(), "Depth() = ", N11.Depth()
-print "N111.Label() = ", N111.Label() , "IsRoot() = ", N111.IsRoot(), "Depth() = ", N111.Depth()
-print "N2.Label() = ", N2.Label() , "IsRoot() = ",  N2.IsRoot(), "Depth() = ", N2.Depth()
-print "N3.Label() = ", N3.Label() , "IsRoot() = ", N3.IsRoot(), "Depth() = ", N3.Depth()
-print "N31.Label() = ", N31.Label() , "IsRoot() = ", N31.IsRoot(), "Depth() = ", N31.Depth()
-print "N32.Label() = ", N32.Label() , "IsRoot() = ", N32.IsRoot(), "Depth() = ", N32.Depth()
-print "N321.Label() = ", N321.Label() , "IsRoot() = ", N321.IsRoot(), "Depth() = ", N321.Depth()
-print "N33.Label() = ", N33.Label() , "IsRoot() = ", N33.IsRoot(), "Depth() = ", N33.Depth()
-print "N34.Label() = ", N34.Label() , "IsRoot() = ", N34.IsRoot(), "Depth() = ", N34.Depth()
-print "N1.IsRoot()=", N1.IsRoot()
-
-print "N1.HasNext() = ",N1.HasNext()
+print("-------------  ", N1, "  -------------  ")
+print("N1.Label() = ", N1.Label() , "IsRoot() = ", N1.IsRoot(), "Depth() = ", N1.Depth())
+print("N11.Label() = ", N11.Label() , "IsRoot() = ", N11.IsRoot(), "Depth() = ", N11.Depth())
+print("N111.Label() = ", N111.Label() , "IsRoot() = ", N111.IsRoot(), "Depth() = ", N111.Depth())
+print("N2.Label() = ", N2.Label() , "IsRoot() = ",  N2.IsRoot(), "Depth() = ", N2.Depth())
+print("N3.Label() = ", N3.Label() , "IsRoot() = ", N3.IsRoot(), "Depth() = ", N3.Depth())
+print("N31.Label() = ", N31.Label() , "IsRoot() = ", N31.IsRoot(), "Depth() = ", N31.Depth())
+print("N32.Label() = ", N32.Label() , "IsRoot() = ", N32.IsRoot(), "Depth() = ", N32.Depth())
+print("N321.Label() = ", N321.Label() , "IsRoot() = ", N321.IsRoot(), "Depth() = ", N321.Depth())
+print("N33.Label() = ", N33.Label() , "IsRoot() = ", N33.IsRoot(), "Depth() = ", N33.Depth())
+print("N34.Label() = ", N34.Label() , "IsRoot() = ", N34.IsRoot(), "Depth() = ", N34.Depth())
+print("N1.IsRoot()=", N1.IsRoot())
+
+print("N1.HasNext() = ",N1.HasNext())
 if  N1.HasNext():
-        print N1.Next().Label()
+        print(N1.Next().Label())
 
-print "N32.HasPrevious() = ",N32.HasPrevious()
+print("N32.HasPrevious() = ",N32.HasPrevious())
 if  N32.HasPrevious():
-        print N32.GetPrevious().Label()
+        print(N32.GetPrevious().Label())
 
-print "N111.HasFirst()=",N111.HasFirst()
-print "N111.HasFather()=",N111.HasFather()
+print("N111.HasFirst()=",N111.HasFirst())
+print("N111.HasFather()=",N111.HasFather())
 if N111.HasFather() :
-        print "N111.GetFather().Label()=",N111.GetFather().Label()
+        print("N111.GetFather().Label()=",N111.GetFather().Label())
 
index 19bd49ec0356d2b994d98ada62fdcd84323e9fb5..45785ad4cf1edbfa643ffe4493a0e459c06d4731 100644 (file)
@@ -36,7 +36,7 @@ ShapeType = batchmode_smesh.ShapeType
 subShapeList = batchmode_geompy.SubShapeAll(box,ShapeType["Face"])
 face=subShapeList[0]
 name = "box_face"
-print name
+print(name)
 idface= batchmode_geompy.addToStudyInFather(box,face,name)
 
 # ---- add shell from box  in study
@@ -44,7 +44,7 @@ idface= batchmode_geompy.addToStudyInFather(box,face,name)
 subShellList= batchmode_geompy.SubShapeAll(box,ShapeType["Shell"])
 shell = subShellList[0]
 name = "box_shell"
-print name
+print(name)
 idshell= batchmode_geompy.addToStudyInFather(box,shell,name)
 
 # ---- add first edge of face in study
@@ -52,7 +52,7 @@ idshell= batchmode_geompy.addToStudyInFather(box,shell,name)
 edgeList =  batchmode_geompy.SubShapeAll(face,ShapeType["Edge"])
 edge=edgeList[0];
 name = "face_edge"
-print name
+print(name)
 idedge= batchmode_geompy.addToStudyInFather(face,edge,name)
 
 # ---- launch SMESH, init a Mesh with the box
@@ -60,7 +60,7 @@ idedge= batchmode_geompy.addToStudyInFather(face,edge,name)
 smesh =  batchmode_smesh.smesh
 #  --  Init  --
 shape = batchmode_geompy.IDToObject(idbox)
-mesh=smesh.Init(geom, batchmode_geompy.myStudyId, shape)
+mesh=smesh.Init(geom, shape)
 
 orb = batchmode_geompy.orb
 
@@ -70,73 +70,73 @@ batchmode_smesh.SetShape(idbox, idmesh);
 
 # ---- create Hypothesis
 
-print "-------------------------- create Hypothesis ----------------------"
-print "-------------------------- LocalLength"
-hyp1 = smesh.CreateHypothesis("LocalLength", batchmode_geompy.myStudyId )
+print("-------------------------- create Hypothesis ----------------------")
+print("-------------------------- LocalLength")
+hyp1 = smesh.CreateHypothesis("LocalLength")
 hypLen1 = hyp1._narrow(SMESH.SMESH_LocalLength)
 hypLen1.SetLength(100)
-print hypLen1.GetName()
-print hypLen1.GetId()
-print hypLen1.GetLength()
+print(hypLen1.GetName())
+print(hypLen1.GetId())
+print(hypLen1.GetLength())
 
 idlength = batchmode_smesh.AddNewHypothesis( orb.object_to_string(hypLen1) );
 batchmode_smesh.SetName(idlength, "Local_Length_100");
 
-print "-------------------------- NumberOfSegments"
-hyp2 =  smesh.CreateHypothesis("NumberOfSegments", batchmode_geompy.myStudyId )
+print("-------------------------- NumberOfSegments")
+hyp2 =  smesh.CreateHypothesis("NumberOfSegments")
 hypNbSeg1=hyp2._narrow(SMESH.SMESH_NumberOfSegments)
 hypNbSeg1.SetNumberOfSegments(7)
-print hypNbSeg1.GetName()
-print hypNbSeg1.GetId()
-print hypNbSeg1.GetNumberOfSegments()
+print(hypNbSeg1.GetName())
+print(hypNbSeg1.GetId())
+print(hypNbSeg1.GetNumberOfSegments())
 
 idseg =  batchmode_smesh.AddNewHypothesis( orb.object_to_string(hypNbSeg1) );
 batchmode_smesh.SetName(idseg, "NumberOfSegments_7");
 
-print "-------------------------- MaxElementArea"
-hyp3 = smesh.CreateHypothesis("MaxElementArea",  batchmode_geompy.myStudyId)
+print("-------------------------- MaxElementArea")
+hyp3 = smesh.CreateHypothesis("MaxElementArea")
 hypArea1=hyp3._narrow(SMESH.SMESH_MaxElementArea)
 hypArea1.SetMaxElementArea(2500)
-print hypArea1.GetName()
-print hypArea1.GetId()
-print hypArea1.GetMaxElementArea()
+print(hypArea1.GetName())
+print(hypArea1.GetId())
+print(hypArea1.GetMaxElementArea())
 
 idarea1 = batchmode_smesh.AddNewHypothesis( orb.object_to_string(hypArea1) );
 batchmode_smesh.SetName(idarea1, "MaxElementArea_2500");
 
-print "-------------------------- MaxElementArea"
-hyp3 = smesh.CreateHypothesis("MaxElementArea",  batchmode_geompy.myStudyId)
+print("-------------------------- MaxElementArea")
+hyp3 = smesh.CreateHypothesis("MaxElementArea")
 hypArea2 = hyp3._narrow(SMESH.SMESH_MaxElementArea)
 hypArea2.SetMaxElementArea(500)
-print hypArea2.GetName()
-print hypArea2.GetId()
-print hypArea2.GetMaxElementArea()
+print(hypArea2.GetName())
+print(hypArea2.GetId())
+print(hypArea2.GetMaxElementArea())
 
 idarea2 = batchmode_smesh.AddNewHypothesis( orb.object_to_string(hypArea2) );
 batchmode_smesh.SetName(idarea2, "MaxElementArea_500");
 
-print "-------------------------- Regular_1D"
-alg1 = smesh.CreateHypothesis("Regular_1D",  batchmode_geompy.myStudyId)
+print("-------------------------- Regular_1D")
+alg1 = smesh.CreateHypothesis("Regular_1D")
 algo1 = alg1._narrow(SMESH.SMESH_Algo)
 listHyp = algo1.GetCompatibleHypothesis()
 for hyp in listHyp:
-    print hyp
+    print(hyp)
 algoReg=alg1._narrow(SMESH.SMESH_Regular_1D)
-print algoReg.GetName()
-print algoReg.GetId()
+print(algoReg.GetName())
+print(algoReg.GetId())
 
 idreg = batchmode_smesh.AddNewAlgorithms( orb.object_to_string(algoReg) );
 batchmode_smesh.SetName(idreg, "Regular_1D");
 
-print "-------------------------- MEFISTO_2D"
-alg2 = smesh.CreateHypothesis("MEFISTO_2D",  batchmode_geompy.myStudyId)
+print("-------------------------- MEFISTO_2D")
+alg2 = smesh.CreateHypothesis("MEFISTO_2D")
 algo2 = alg2._narrow(SMESH.SMESH_Algo)
 listHyp=algo2.GetCompatibleHypothesis()
 for hyp in listHyp:
-    print hyp
+    print(hyp)
 algoMef=alg2._narrow(SMESH.SMESH_MEFISTO_2D)
-print algoMef.GetName()
-print algoMef.GetId()
+print(algoMef.GetName())
+print(algoMef.GetId())
 
 idmef = batchmode_smesh.AddNewAlgorithms( orb.object_to_string(algoMef) );
 batchmode_smesh.SetName(idmef, "MEFISTO_2D");
@@ -144,13 +144,13 @@ batchmode_smesh.SetName(idmef, "MEFISTO_2D");
 
 # ---- add hypothesis to edge
 
-print "-------------------------- add hypothesis to edge"
+print("-------------------------- add hypothesis to edge")
 edge = batchmode_geompy.IDToObject(idedge)
 submesh = mesh.GetElementsOnShape(edge)
 ret = mesh.AddHypothesis(edge,algoReg)
-print ret
+print(ret)
 ret=mesh.AddHypothesis(edge,hypLen1)
-print ret
+print(ret)
 
 idsm1 = batchmode_smesh.AddSubMeshOnShape( idmesh,
                                            idedge,
@@ -160,11 +160,11 @@ batchmode_smesh.SetName(idsm1, "SubMeshEdge")
 batchmode_smesh.SetAlgorithms( idsm1, idreg );
 batchmode_smesh.SetHypothesis( idsm1, idlength );
 
-print "-------------------------- add hypothesis to face"
+print("-------------------------- add hypothesis to face")
 face=batchmode_geompy.IDToObject(idface)
 submesh=mesh.GetElementsOnShape(face)
 ret=mesh.AddHypothesis(face,hypArea2)
-print ret
+print(ret)
 
 idsm2 = batchmode_smesh.AddSubMeshOnShape( idmesh,
                                     idface,
@@ -175,17 +175,17 @@ batchmode_smesh.SetHypothesis( idsm2, idarea2 );
 
 # ---- add hypothesis to box
 
-print "-------------------------- add hypothesis to box"
+print("-------------------------- add hypothesis to box")
 box=batchmode_geompy.IDToObject(idbox)
 submesh=mesh.GetElementsOnShape(box)
 ret=mesh.AddHypothesis(box,algoReg)
-print ret
+print(ret)
 ret=mesh.AddHypothesis(box,hypNbSeg1)
-print ret
+print(ret)
 ret=mesh.AddHypothesis(box,algoMef)
-print ret
+print(ret)
 ret=mesh.AddHypothesis(box,hypArea1)
-print ret
+print(ret)
 
 batchmode_smesh.SetAlgorithms( idmesh, idreg );
 batchmode_smesh.SetHypothesis( idmesh, idseg );
@@ -194,12 +194,12 @@ batchmode_smesh.SetHypothesis( idmesh, idarea1 );
 
 # ---- compute box
 
-print "-------------------------- compute box"
+print("-------------------------- compute box")
 ret=smesh.Compute(mesh,box)
-print ret
+print(ret)
 log=mesh.GetLog(0); # no erase trace
 for linelog in log:
-    print linelog
+    print(linelog)
 
 
 #=======================================================
@@ -212,12 +212,12 @@ dir= os.getenv("SUPERV_ROOT_DIR")
 if dir == None:
         raise RuntimeError, "SUPERV_ROOT_DIR is not defined"
 xmlfile = dir +"/examples/GraphEssai.xml"
-print "--------------\n"+xmlfile+"\n--------------\n"
+print("--------------\n"+xmlfile+"\n--------------\n")
 
 myGraph = Graph ( xmlfile )
 
 # This DataFlow is "valid" : no loop, correct links between Nodes etc...
-print myGraph.IsValid()
+print(myGraph.IsValid())
 
 # Get Nodes
 myGraph.PrintNodes()
@@ -235,61 +235,61 @@ Mulz = Mul.Port('z')
 Divz = Div.Port('z')
 
 # This DataFlow is "executable" : all pending Ports are defined with Datas
-print myGraph.IsExecutable()
+print(myGraph.IsExecutable())
 
 # Starts only execution of that DataFlow and gets control immediately
-print myGraph.Run()
+print(myGraph.Run())
 
 # That DataFlow is running ==> 0 (false)
-print myGraph.IsDone()
+print(myGraph.IsDone())
 
 # Events of execution :
 aStatus,aNode,anEvent,aState = myGraph.Event()
 while aStatus :
-    print aNode.Thread(),aNode.SubGraph(),aNode.Name(),anEvent,aState
+    print(aNode.Thread(),aNode.SubGraph(),aNode.Name(),anEvent,aState)
     aStatus,aNode,anEvent,aState = myGraph.Event()
-print myGraph.IsDone()
+print(myGraph.IsDone())
 
 # Wait for Completion (but it is already done after event loop ...)
-print "Done : ",myGraph.DoneW()
+print("Done : ",myGraph.DoneW())
 
 # Get result
-print "Result : ",Divz.ToString()
+print("Result : ",Divz.ToString())
 
 # Intermediate results :
-print "Intermediate Result Add\z : ",Addz.ToString()
-print "Intermediate Result Sub\z : ",Subz.ToString()
-print "Intermediate Result Mul\z : ",Mulz.ToString()
+print("Intermediate Result Add\z : ",Addz.ToString())
+print("Intermediate Result Sub\z : ",Subz.ToString())
+print("Intermediate Result Mul\z : ",Mulz.ToString())
 
-print " "
-#print "Type : print myGraph.IsDone()"
-#print "       If execution is finished ==> 1 (true)"
+print(" ")
+#print("Type : print(myGraph.IsDone()")
+#print("       If execution is finished ==> 1 (true)")
 res=myGraph.IsDone()
 if res != 1:
         raise RuntimeError, "myGraph.Run() is not done"
 
-print " "
-print "Type : print Divz.ToString()"
-print "       You will get the result"
+print(" ")
+print("Type : print(Divz.ToString()")
+print("       You will get the result")
 Divz.ToString()
 
-print " "
-print "Type : myGraph.PrintPorts()"
-print "       to see input and output values of the graph"
+print(" ")
+print("Type : myGraph.PrintPorts()")
+print("       to see input and output values of the graph")
 myGraph.PrintPorts()
 
-print " "
-print "Type : Add.PrintPorts()"
+print(" ")
+print("Type : Add.PrintPorts()")
 Add.PrintPorts()
 
-print "Type : Sub.PrintPorts()"
+print("Type : Sub.PrintPorts()")
 Sub.PrintPorts()
 
-print "Type : Mul.PrintPorts()"
+print("Type : Mul.PrintPorts()")
 Mul.PrintPorts()
 
-print "Type : Div.PrintPorts()"
-print "       to see input and output values of nodes"
+print("Type : Div.PrintPorts()")
+print("       to see input and output values of nodes")
 Div.PrintPorts()
 
 # Export will create newsupervisionexample.xml and the corresponding .py file
@@ -297,21 +297,21 @@ tmpdir=os.getenv("TmpDir")
 if tmpdir is None:
         tmpdir="/tmp"
 file = tmpdir + "/newsupervisionexample"
-print "--------------\n"+file+"\n--------------\n"
+print("--------------\n"+file+"\n--------------\n")
 myGraph.Export(file)
 
 ior = batchmode_geompy.orb.object_to_string(myGraph.G)
 addStudy(ior)
 
 GraphName = myGraph.Name()
-print "Before save ",
+print("Before save ",)
 nodes = myGraph.Nodes()
 length_bs = len(nodes)
-print "ListOfNodes length = ", length_bs
+print("ListOfNodes length = ", length_bs)
 names=[]
 for node in nodes:
         names.append(node.Name())
-print names
+print(names)
 
 
 #=================================
@@ -326,26 +326,26 @@ file = str+"/test.hdf"
 #==================================================
 #1. SaveAs
 #==================================================
-print " -------  We will save to", file, "-----------"
+print(" -------  We will save to", file, "-----------")
 
-batchmode_geompy.myStudyManager.SaveAs(file, batchmode_geompy.myStudy)
-batchmode_geompy.myStudyManager.Close(batchmode_geompy.myStudy)
+batchmode_geompy.myStudy.SaveAs(file)
+batchmode_geompy.myStudy.Clear()
 
 #rename the file and try to reread it again
 
 os.mkdir(str + "/test_dir")
 
 #2.==================================================
-print " ------- We rename the file as " + str + "/test_dir/test_new.hdf"
+print(" ------- We rename the file as " + str + "/test_dir/test_new.hdf")
 os.rename(file, str+"/test_dir/test_new.hdf")
 
 #==================================================
 #3. Open
 #==================================================
-print " ------- We try to open " + str + "/test_dir/test_new.hdf"
+print(" ------- We try to open " + str + "/test_dir/test_new.hdf")
 
 try:
-        openedStudy=batchmode_geompy.myStudyManager.Open(str+"/test_dir/test_new.hdf")
+        openedStudy=batchmode_geompy.myStudy.Open(str+"/test_dir/test_new.hdf")
 except Exception:
         raise  RuntimeError, "Can't open saved study!"
 
@@ -417,7 +417,7 @@ aChildIterator = openedStudy.NewChildIterator(father)
 
 #while aChildIterator.More():
 anSObject = aChildIterator.Value()
-#print "iterate: ", anSObject.GetID()
+#print("iterate: ", anSObject.GetID())
 res, anAttr=anSObject.FindAttribute("AttributeIOR")
 if res :
         anAttr=anAttr._narrow(SALOMEDS.AttributeIOR)
@@ -425,7 +425,7 @@ if res :
         Graph=SuperV.getGraph(ior)
         ListOfNodes=Graph.Nodes()
         length_as= len(ListOfNodes)
-        print "ListOfNodes length = ", length_as
+        print("ListOfNodes length = ", length_as)
         if length_as != length_bs:
                 raise RuntimeErrror, "different length of nodes after study open"
 #aChildIterator.Next()
@@ -441,13 +441,13 @@ if names != Names :
 #==================================================
 #4. Save
 #==================================================
-batchmode_geompy.myStudyManager.Save(openedStudy)
-batchmode_geompy.myStudyManager.Close(openedStudy)
+batchmode_geompy.myStudy.Save()
+batchmode_geompy.myStudy.Clear()
 #==================================================
 #5. Open
 #==================================================
 try:
-        openedStudy = batchmode_geompy.myStudyManager.Open(str+"/test_dir/test_new.hdf")
+        openedStudy = batchmode_geompy.myStudy.Open(str+"/test_dir/test_new.hdf")
 except Exception:
         raise  RuntimeError, "Can't open saved study!"
 
@@ -525,7 +525,7 @@ if res :
         Graph=SuperV.getGraph(ior)
         ListOfNodes=Graph.Nodes()
         length_as= len(ListOfNodes)
-        print "ListOfNodes length = ", length_as
+        print("ListOfNodes length = ", length_as)
         if length_as != length_bs:
                 raise RuntimeErrror, "different length of nodes after study open"
 #aChildIterator.Next()
index 9326da1150bd66ce548d65390fe5b86cc3a14fb3..6b7731d99c662f4d9e4d9d9fabcda48c30092bd8 100644 (file)
@@ -20,22 +20,22 @@ if A == None :
 A = A._narrow(SALOMEDS.AttributeStudyProperties)
 
 batchmode_geompy.myBuilder.NewCommand();
-print "A.GetUserName()= ", A.GetUserName()
+print("A.GetUserName()= ", A.GetUserName())
 res,mm,hh,dd,mnth,yy=A.GetCreationDate()
-print "A.GetCreationDate() = ", mm,hh,dd,mnth,yy
-print "A.GetCreationMode() = ", A.GetCreationMode()
-print "A.IsModified() = ", A.IsModified()
-print "A.IsLocked() = ", A.IsLocked()
+print("A.GetCreationDate() = ", mm,hh,dd,mnth,yy)
+print("A.GetCreationMode() = ", A.GetCreationMode())
+print("A.IsModified() = ", A.IsModified())
+print("A.IsLocked() = ", A.IsLocked())
 if A.IsLocked() == 0 :
-        A.SetUserName("tester"); print 'A.SetUserName("tester"), A.GetUserName() = ', A.GetUserName()
-        A.SetCreationDate(11,11,11,11,2002); print 'A.SetCreationDate(11,11,11,11,2002), A.GetCreationDate() =', A.GetCreationDate()
-        print "A.IsModified() = ", A.IsModified()
+        A.SetUserName("tester"); print('A.SetUserName("tester"), A.GetUserName() = ', A.GetUserName())
+        A.SetCreationDate(11,11,11,11,2002); print('A.SetCreationDate(11,11,11,11,2002), A.GetCreationDate() =', A.GetCreationDate())
+        print("A.IsModified() = ", A.IsModified())
 A.SetLocked(1)
 
 #check the transaction result 
 batchmode_geompy.myBuilder.CommitCommand()
 if A.GetUserName() != "tester":
-        print 'Control after transaction close : A.GetUserName() = ', A.GetUserName()
+        print('Control after transaction close : A.GetUserName() = ', A.GetUserName())
         raise RuntimeError, "Field 'UserName' was not modified but had to!"
 
 # try to make some changes wrapped by transaction 
@@ -63,9 +63,9 @@ if str == None:
         str = "/tmp"
 file = str+"/test.hdf"
 
-print " -------  We will save to", file, "-----------"
+print(" -------  We will save to", file, "-----------")
 
-batchmode_geompy.myStudyManager.SaveAs(file, batchmode_geompy.myStudy)
+batchmode_geompy.myStudy.SaveAs(file)
 
 
 #--------------------------------------------------------------------------#
@@ -74,7 +74,7 @@ batchmode_geompy.myStudyManager.SaveAs(file, batchmode_geompy.myStudy)
 
 print" -------------- Open  " + file + "-------------- " 
 
-openedStudy = batchmode_geompy.myStudyManager.Open(file)
+openedStudy = batchmode_geompy.myStudy.Open(file)
 if openedStudy == None:
         raise  RuntimeError, "Can't open saved study!"
 
@@ -135,17 +135,17 @@ myBuilder.CommitCommand()
 #4.
 myBuilder.NewCommand()
 A.SetLocked(0);
-print "A.GetUserName()= ", A.GetUserName()
-print "A.GetCreationDate() = ", A.GetCreationDate()
-print "A.GetCreationMode() = ", A.GetCreationMode()
-print "A.IsModified() = ", A.IsModified()
+print("A.GetUserName()= ", A.GetUserName())
+print("A.GetCreationDate() = ", A.GetCreationDate())
+print("A.GetCreationMode() = ", A.GetCreationMode())
+print("A.IsModified() = ", A.IsModified())
 myBuilder.CommitCommand()
 
 #5.
 myBuilder.NewCommand()
 A.SetUserName("tester1")
 myBuilder.CommitCommand()
-print "A.GetUserName()= ", A.GetUserName()
+print("A.GetUserName()= ", A.GetUserName())
 
 #remove the document file
 os.remove(file)
index 33526d9564ae26902fa7d84e3972b0a36f5d9ce6..7ff5b0ec2e5bfab3539ec849f52f8f0bacde9045 100644 (file)
@@ -29,10 +29,10 @@ a=[836,3425,342]
 A.SetColumn(3,a)
 
 # change attribute values
-print "A.GetValue(2,2) = ", A.GetValue(2,2)
-print "A.PutValue(2,2,625323)"
+print("A.GetValue(2,2) = ", A.GetValue(2,2))
+print("A.PutValue(2,2,625323)")
 A.PutValue(625323,2,2)
-print "A.GetValue(2,2) = ", A.GetValue(2,2)
+print("A.GetValue(2,2) = ", A.GetValue(2,2))
 
 #set Titles
 
@@ -48,18 +48,18 @@ A.SetColumnTitle(3,"TC")
 
 
 #check the table
-print "Common title : ",A.GetTitle()
-print "Rows titles : ",  A.GetRowTitles()
+print("Common title : ",A.GetTitle())
+print("Rows titles : ",  A.GetRowTitles())
 rnb = A.GetNbRows()
 for i in range(1, rnb):
         b=A.GetRow(i)
-        print b
+        print(b)
 
 cnb = A.GetNbColumns()
-print "Columns title : ", A.GetColumnTitles()
+print("Columns title : ", A.GetColumnTitles())
 for i in range(1, cnb):
         b=A.GetColumn(i)
-        print b
+        print(b)
 
 # set titles
 #titles=["11","12","13"]
@@ -77,9 +77,9 @@ if str == None:
         str = "/tmp"
 file = str+"/test.hdf"
 
-print " -------  We will save to", file, "-----------"
+print(" -------  We will save to", file, "-----------")
 
-batchmode_geompy.myStudyManager.SaveAs(file, batchmode_geompy.myStudy)
+batchmode_geompy.myStudy.SaveAs(file)
 
 #--------------------------------------------------------------------------#
 #---------------------------- Open file -----------------------------------# 
@@ -87,7 +87,7 @@ batchmode_geompy.myStudyManager.SaveAs(file, batchmode_geompy.myStudy)
 
 print" -------------- Open  " + file + "-------------- " 
 
-openedStudy=batchmode_geompy.myStudyManager.Open(file)
+openedStudy=batchmode_geompy.myStudy.Open(file)
 if openedStudy == None:
         raise  RuntimeError, "Can't open saved study!"
 
@@ -104,24 +104,24 @@ if res == 0 or A == None:
 A = A._narrow(SALOMEDS.AttributeTableOfInteger)
 
 #check the table
-print "Common title : ",A.GetTitle()
-print "Rows titles : ",  A.GetRowTitles()
+print("Common title : ",A.GetTitle())
+print("Rows titles : ",  A.GetRowTitles())
 rnb = A.GetNbRows()
 for i in range(1, rnb):
         b=A.GetRow(i)
-        print b
+        print(b)
 
 cnb = A.GetNbColumns()
-print "Columns title : ", A.GetColumnTitles()
+print("Columns title : ", A.GetColumnTitles())
 for i in range(1, cnb):
         b=A.GetColumn(i)
-        print b
+        print(b)
 
 titles=["ff","ss","tt"]
 A.SetRowTitles(titles)
-print "Rows titles : ",  A.GetRowTitles()
+print("Rows titles : ",  A.GetRowTitles())
 
 titles=["ww","zz","cc"]
 A.SetColumnTitles(titles)
-print "Column titles : ",  A.GetColumnTitles()
+print("Column titles : ",  A.GetColumnTitles())
 
index bba273be632b08bd842ff8a07d067d1fe890e8e9..157bd36316637b1fa68646dff663cd1d7e2ee4d2 100644 (file)
@@ -29,10 +29,10 @@ a=[836,3425,342]
 A.SetColumn(3,a)
 
 # change attribute values
-print "A.GetValue(2,2) = ", A.GetValue(2,2)
-print "A.PutValue(2,2,625323)"
+print("A.GetValue(2,2) = ", A.GetValue(2,2))
+print("A.PutValue(2,2,625323)")
 A.PutValue(625323,2,2)
-print "A.GetValue(2,2) = ", A.GetValue(2,2)
+print("A.GetValue(2,2) = ", A.GetValue(2,2))
 
 #set Titles
 
@@ -48,18 +48,18 @@ A.SetColumnTitle(3,"TC")
 
 
 #check the table
-print "Common title : ",A.GetTitle()
-print "Rows titles : ",  A.GetRowTitles()
+print("Common title : ",A.GetTitle())
+print("Rows titles : ",  A.GetRowTitles())
 rnb = A.GetNbRows() + 1
 for i in range(1, rnb):
         b=A.GetRow(i)
-        print b
+        print(b)
 
 cnb = A.GetNbColumns() + 1
-print "Columns title : ", A.GetColumnTitles()
+print("Columns title : ", A.GetColumnTitles())
 for i in range(1, cnb):
         b=A.GetColumn(i)
-        print b
+        print(b)
 
 # set titles
 #titles=["11","12","13"]
@@ -78,9 +78,9 @@ if str == None:
         str = "/tmp"
 file = str+"/test.hdf"
 
-print " -------  We will save to", file, "-----------"
+print(" -------  We will save to", file, "-----------")
 
-batchmode_geompy.myStudyManager.SaveAs(file, batchmode_geompy.myStudy)
+batchmode_geompy.myStudy.SaveAs(file)
 
 #--------------------------------------------------------------------------#
 #---------------------------- Open file -----------------------------------# 
@@ -88,7 +88,7 @@ batchmode_geompy.myStudyManager.SaveAs(file, batchmode_geompy.myStudy)
 
 print" -------------- Open  " + file + "-------------- " 
 
-openedStudy = batchmode_geompy.myStudyManager.Open(file)
+openedStudy = batchmode_geompy.myStudy.Open(file)
 if openedStudy == None:
         raise  RuntimeError, "Can't open saved study!"
 
@@ -105,24 +105,24 @@ if res == 0 or A == None:
 A = A._narrow(SALOMEDS.AttributeTableOfReal)
 
 #check the table
-print "Common title : ",A.GetTitle()
-print "Rows titles : ",  A.GetRowTitles()
+print("Common title : ",A.GetTitle())
+print("Rows titles : ",  A.GetRowTitles())
 rnb = A.GetNbRows() + 1
 for i in range(1, rnb):
         b=A.GetRow(i)
-        print b
+        print(b)
 
 cnb = A.GetNbColumns() + 1
-print "Columns title : ", A.GetColumnTitles()
+print("Columns title : ", A.GetColumnTitles())
 for i in range(1, cnb):
         b=A.GetColumn(i)
-        print b
+        print(b)
 
 titles=["ff","ss","tt"]
 A.SetRowTitles(titles)
-print "Rows titles : ",  A.GetRowTitles()
+print("Rows titles : ",  A.GetRowTitles())
 
 titles=["ww","zz","cc"]
 A.SetColumnTitles(titles)
-print "Column titles : ",  A.GetColumnTitles()
+print("Column titles : ",  A.GetColumnTitles())
 
index da60ce0e9bfee0a44d5ee08d08ad63ceb2f6d720..b613c47c7d40e280fe44179bafce154c024ac554 100644 (file)
@@ -12,19 +12,3 @@ anAttrName = anAttr._narrow(SALOMEDS.AttributeName)
 anAttrName.SetValue("User data")
 
 
-#Add a new case 'Case1' to the component 'User data'
-aBuilder.AddDirectory("/User data/Case1")
-
-#Set a study context to '/User data/Case1'
-aStudy.SetContext("/User data/Case1")
-
-#Print the current study context
-print aStudy.GetContext()
-
-#Add a sub directory 'aSubCase' to 'Case1' (under the current context)
-aBuilder.AddDirectory("aSubCase")
-
-
-#Add a new case 'Case2' to component 'User data'
-aBuilder.AddDirectory("/User data/Case2")
-
index 95e18e8e7cca162695a9fed10691cc751b63c5e6..a374b98fbd8f88c2ae67105e9eaf0ba4bfbfe7ef 100644 (file)
@@ -13,16 +13,16 @@ A.Add(625.1e+2)
 A.Add(0.928e+100)
 A.Add(83.287)
 
-print "initial values ",A.Value(1), A.Value(2), A.Value(3), A.Value(4)
+print("initial values ",A.Value(1), A.Value(2), A.Value(3), A.Value(4))
 A.Remove(3)
-print "after remove ", A.Value(1), A.Value(2), A.Value(3)
+print("after remove ", A.Value(1), A.Value(2), A.Value(3))
 A.ChangeValue(2,76.265)
-print "after second item change", A.Value(1), A.Value(2), A.Value(3)
+print("after second item change", A.Value(1), A.Value(2), A.Value(3))
 
 if A.Length() != 3:
-        print "Error : wrong length of SequenceOfReal"
+        print("Error : wrong length of SequenceOfReal")
 if A.Value(1) != 0.0293 or A.Value(2) != 76.265 or A.Value(3) != 83.287:
-        print "Error : wrong value of  AttributeSequenceOfReal"
+        print("Error : wrong value of  AttributeSequenceOfReal")
 
 #      save / restore study      
 #=================================
@@ -31,8 +31,8 @@ if str == None:
         str = "/tmp"
 file = str+"/test.hdf"
 
-batchmode_geompy.myStudyManager.SaveAs(file, batchmode_geompy.myStudy)
-openedStudy=batchmode_geompy.myStudyManager.Open(file);
+batchmode_geompy.myStudy.SaveAs(file)
+openedStudy=batchmode_geompy.myStudy.Open(file);
 
 if openedStudy == None:
         raise  RuntimeError, "Can't open saved study!"
@@ -53,8 +53,8 @@ if res == 0 or A == None:
 A = A._narrow(SALOMEDS.AttributeSequenceOfReal)
 
 if A.Length() != 3:
-        print "Error : wrong length of SequenceOfReal"
+        print("Error : wrong length of SequenceOfReal")
 if A.Value(1) != 0.0293 or A.Value(2) != 76.265 or A.Value(3) != 83.287:
-        print "Error : wrong value of  AttributeSequenceOfReal"
-print "after restoring ", A.Value(1), A.Value(2), A.Value(3)
+        print("Error : wrong value of  AttributeSequenceOfReal")
+print("after restoring ", A.Value(1), A.Value(2), A.Value(3))
 
index 2dd1966db98b46c87c0bcb6cfbbdf99d5c968e42..fa0ad0e0ccd4a2c2a9ca19401f263d35dcddbee3 100644 (file)
@@ -19,9 +19,9 @@ A.ChangeValue(4,500)
 
 
 if A.Length() != 4:
-        print "Wrong length of SequenceOfInteger"
+        print("Wrong length of SequenceOfInteger")
 if A.Value(1) != 100 or A.Value(2) != 300 or A.Value(3) != 400 or A.Value(4) != 700:
-        print "Wrong  value of  AttributeSequenceOfInteger"
+        print("Wrong  value of  AttributeSequenceOfInteger")
 
 
 #      save / restore study      
@@ -30,8 +30,8 @@ str= os.getenv("TmpDir")
 if str == None:
         str = "/tmp"
 file = str+"/test.hdf"
-batchmode_geompy.myStudyManager.SaveAs(file, batchmode_geompy.myStudy)
-openedStudy=batchmode_geompy.myStudyManager.Open(file);
+batchmode_geompy.myStudy.SaveAs(file)
+openedStudy=batchmode_geompy.myStudy.Open(file);
 
 if openedStudy == None:
         raise  RuntimeError, "Can't open saved study!"
@@ -52,7 +52,7 @@ if res == 0 or A == None:
 A = A._narrow(SALOMEDS.AttributeSequenceOfInteger)
 
 if A.Length() != 4:
-        print "Wrong length of SequenceOfInteger"
+        print("Wrong length of SequenceOfInteger")
 if A.Value(1) != 100 or A.Value(2) != 300 or A.Value(3) != 400 or A.Value(4) != 700:
-        print "Wrong  value of  AttributeSequenceOfInteger"
+        print("Wrong  value of  AttributeSequenceOfInteger")
 
index 59e3bc6a031b59a5f8addd793a4065674859a6bb..c6f6ea217eb595391e0be0bfa056d8cfcd1db1de 100644 (file)
@@ -11,7 +11,7 @@ if A == None :
 A.SetValue("AttributesTesting")
 
 if A.Value() != "AttributesTesting":
-        print "Wrong  value of AttributeName"
+        print("Wrong  value of AttributeName")
 
 
 #      save / restore study      
@@ -21,8 +21,8 @@ if str == None:
         str = "/tmp"
 file = str+"/test.hdf"
 
-batchmode_geompy.myStudyManager.SaveAs(file, batchmode_geompy.myStudy)
-openedStudy = batchmode_geompy.myStudyManager.Open(file);
+batchmode_geompy.myStudy.SaveAs(file)
+openedStudy = batchmode_geompy.myStudy.Open(file);
 
 if openedStudy == None:
         raise  RuntimeError, "Can't open saved study!"
@@ -46,5 +46,5 @@ if A == None :
         raise  RuntimeError, "Can't create AttributeName attribute"
 
 if A.Value() != "AttributesTesting":
-        print "Wrong  value of AttributeName"
+        print("Wrong  value of AttributeName")
 
index 71a5859e73724968cc623f16e00ff6951c1cbc12..4685f2b7abcaad5d21896647a9cd19d53f9aafb6 100644 (file)
@@ -19,8 +19,8 @@ if str == None:
         str = "/tmp"
 file = str+"/test.hdf"
 
-batchmode_geompy.myStudyManager.SaveAs(file, batchmode_geompy.myStudy)
-openedStudy = batchmode_geompy.myStudyManager.Open(file);
+batchmode_geompy.myStudy.SaveAs(file)
+openedStudy = batchmode_geompy.myStudy.Open(file);
 
 if openedStudy == None:
         raise  RuntimeError, "Can't open saved study!"
index 8ddf8bb2bf9511138a41439ac3ebb1654c13e282..2477a3e072b40f13586c434d01277e5e5d91da89 100644 (file)
@@ -18,8 +18,8 @@ if str == None:
         str = "/tmp"
 file = str+"/test.hdf"
 
-batchmode_geompy.myStudyManager.SaveAs(file, batchmode_geompy.myStudy)
-openedStudy = batchmode_geompy.myStudyManager.Open(file);
+batchmode_geompy.myStudy.SaveAs(file)
+openedStudy = batchmode_geompy.myStudy.Open(file);
 
 if openedStudy == None:
         raise  RuntimeError, "Can't open saved study!"
index eadb13feb99a6a7b382ee43ca7c3ee3749e0242a..3d79cab4470fee2bb72571b3f2f524264fa11333 100644 (file)
@@ -26,8 +26,8 @@ if str == None:
         str = "/tmp"
 file = str+"/test.hdf"
 
-batchmode_geompy.myStudyManager.SaveAs(file, batchmode_geompy.myStudy)
-openedStudy=batchmode_geompy.myStudyManager.Open(file);
+batchmode_geompy.myStudy.SaveAs(file)
+openedStudy=batchmode_geompy.myStudy.Open(file);
 
 if openedStudy == None:
         raise  RuntimeError, "Can't open saved study!"
index d29c9bab7baa087abc3900c93db5153b5d9fe490..68d9394d38b187426ae777d3d1b73b9e02b53ab1 100644 (file)
@@ -22,8 +22,8 @@ if str == None:
         str = "/tmp"
 file = str+"/test.hdf"
 
-batchmode_geompy.myStudyManager.SaveAs(file, batchmode_geompy.myStudy)
-openedStudy = batchmode_geompy.myStudyManager.Open(file);
+batchmode_geompy.myStudy.SaveAs(file)
+openedStudy = batchmode_geompy.myStudy.Open(file);
 
 if openedStudy == None:
         raise  RuntimeError, "Can't open saved study!"
index 75deb29601f9bc856fb4ab1e3c527b170772f237..735396a86f26be8ba3d26d0f056a056d8b9acaec 100644 (file)
@@ -72,46 +72,6 @@ geom = salome.lcc.FindOrLoadComponent('FactoryServer', 'GEOM')
 \b Note, that in the above example, \e "FactoryServer" is a name of the
 SALOME container, where Geometry module engine should be loaded.
 
-\li \b myStudyManager Reference to the study manager
-
-SALOMEDS Study manager is used to manipulate with the studies: create,
-open, save, close. It also can be used to find the study by its
-numerical ID or name. The code below demonstrates main
-functionalities of a study manager:
-\code
-# create new study with the name "MyStudy"
-new_study = salome.myStudyManager.NewStudy("MyStudy")
-
-# open study from file /home/user/MyStudy.hdf
-study = salome.myStudyManager.OpenStudy("/home/user/MyStudy.hdf")
-
-# save study
-salome.myStudyManager.Save(study, False) # not using multifile save mode
-
-# save study in ASCII format
-salome.myStudyManager.SaveASCII(study, True) # using multifile save mode
-
-# save study with the new file path
-salome.myStudyManager.SaveAs("/home/user/MyStudy.hdf", study, False)
-
-# save study with the new file path in ASCII format
-salome.myStudyManager.SaveAsASCII("/home/user/MyStudy.hdf", study, False)
-
-# close study
-salome.myStudyManager.Close(study)
-
-# get list of all opened studies
-studies = salome.myStudyManager.GetOpenStudies()
-
-# find study by its numerical ID (integer value starting from 1)
-study = salome.myStudyManager.GetStudyByID(studyID)
-
-# find study by its name
-study = salome.myStudyManager.GetStudyByName("/home/user/MyStudy.hdf")
-
-# ...
-\endcode
-
 \anchor salome_myStudy
 \li \b myStudy Reference to the current (active) study
 
@@ -136,8 +96,26 @@ documentation.
 # get study name
 studyName = salome.myStudy._get_Name()
 
-# get study numerical ID
-studyID = salome.myStudy._get_StudyId()
+# open study from file /home/user/MyStudy.hdf
+salome.myStudy.Open("/home/user/MyStudy.hdf")
+
+# save study
+salome.myStudy.Save(False, False) # not using multifile save mode
+
+# save study in ASCII format
+salome.myStudy.Save(True, True) # using multifile save mode
+
+# save study with the new file path
+salome.myStudy.SaveAs("/home/user/MyStudy.hdf", False, False)
+
+# save study with the new file path in ASCII format
+salome.myStudy.SaveAs("/home/user/MyStudy.hdf", False, True)
+
+# clear study
+salome.myStudy.Clear()
+
+# init study
+salome.myStudy.Init()
 
 # find SALOMEDS component by its type
 scomponent = FindComponent("MyComponent")
@@ -185,19 +163,13 @@ iter = salome.myStudy.NewChildIterator(comp) # initialize from the component
 iter.InitEx(True) # init recursive mode
 while iter.More():
       c = iter.Value()
-      print c.GetID()
+      print(c.GetID())
       iter.Next()
       pass
 
 # ...
 \endcode
 
-\li \b myStudyId Identifier of the current (active) study
-
-This variable contains the numerical identifier of the current
-(active) study. It is an equivalent of \c
-salome.myStudy._get_StudyId() code.
-
 \li \b myStudyName Name of the current (active) study
 
 This variable contains the name of the current (active) study. It is
@@ -210,7 +182,7 @@ window. The output for each object includes its entry ID, name, IOR
 (if there is one) and referenced object ID (for references). I.e.
 this is the same data the user can see in the Object Browser columns.
 \code
-salome.DumpStudy(salome.myStudy)
+salome.DumpStudy()
 \endcode
 
 \li \b IDToSObject() Get SALOMEDS object by its entry ID.
@@ -279,15 +251,6 @@ else:
    entry = ""
 \endcode
 
-\li \b createNewStudy() Create new study
-
-This function can be used to create new SALOME study. Returns an ID of
-the created study.
-\code
-studyId = salome.createNewStudy()
-study   = salome.myStudyManager.GetStudyByID(s)
-\endcode
-
 \li \b generateName() Generate unique name
 
 This function adds random numerical suffix to the passed string
index 71933b7912d55df20521e1aafb27e51b074821ac..19b96a54d786b0151438b918707bd633341ba39c 100644 (file)
@@ -135,7 +135,6 @@ Study.dir
   extStudy_1.object
   extStudy_2.object
   extStudy_3.object
-myStudyManager.object
 SalomeAppEngine.object
 \endcode
 
index eca7301eb64092f21b892183e0b5a13c112b7327..fa29dcab3e8c8eda06a05059001002fb2bdaa383 100644 (file)
@@ -120,7 +120,7 @@ def extend_path(pname):
     # WARN: This may still add duplicate entries to path on
     # case-insensitive filesystems
     if os.path.isdir(subdir) and subdir not in __path__:
-      print "INFO - The directory %s is appended to sys.path" % subdir
+      print("INFO - The directory %s is appended to sys.path" % subdir)
       __path__.append(subdir)
  
 extend_path(ROOT_PYTHONPACKAGE_NAME)
index bf3c2e6ea9c4c832b9713bd326318449dbae5b6e..1ec93a04679eb18ae14370e60e5a300a0098fbd4 100644 (file)
@@ -97,7 +97,7 @@ From a Python script, use a SalomeInstance object:
 \code
 from salome_instance import SalomeInstance
 instance = SalomeInstance.start()
-print "Instance created and now running on port", instance.get_port()
+print("Instance created and now running on port", instance.get_port())
 ...
 instance.stop()
 \endcode
index 4f9439e83daa4eeec4256367bc5136e8060b8816..cb665591f0576fc42f0e06edc5bc42b2468f8a58 100644 (file)
@@ -337,7 +337,7 @@ def tok_eater(type, tok, spos, epos, line):
                     s = 'static '
                     if params[0] == 'cls':
                         param = string.join(params[1:], ",")
-               s = s+name+"("+param+");\n"
+                s = s+name+"("+param+");\n"
                 if len(name) > 1 \
                    and name[0:2] == '__' \
                    and name[len(name)-2:len(name)] != '__' \
@@ -345,7 +345,7 @@ def tok_eater(type, tok, spos, epos, line):
                        private_member = True
                        output("  private:\n",(def_spos[0]+2,def_spos[1]))
             else:
-               s = name+"("+param+");\n"
+                s = name+"("+param+");\n"
             if (doc_string!=""): comment_block.append(doc_string)
             print_comment(def_spos)
             output(s,def_spos)
@@ -427,12 +427,12 @@ def filterFile(filename, out=sys.stdout):
         root,ext  = os.path.splitext(filename)
 
         if ext==".py":
-            filter(filename)
+            list(filter(filename))
         else:
             dump(filename)
 
         sys.stderr.write("OK\n")
-    except IOError,e:
+    except IOError as e:
         sys.stderr.write(e[1]+"\n")
 
 
@@ -478,7 +478,7 @@ def convert(srcpath, destpath):
          namespace=namespace+"::"+os.path.split(srcpath)[1]
        else:
          namespace=os.path.split(srcpath)[1]
-       print "It's a package:",namespace
+       print("It's a package:",namespace)
     sp = os.path.join(srcpath,"*")
     sfiles = glob.glob(sp)
     dp = os.path.join(destpath,"*")
@@ -507,7 +507,7 @@ def convert(srcpath, destpath):
 
         destfile = os.path.join(destpath,basename)
         if destfile==srcfile:
-            print "WARNING: Input and output names are identical!"
+            print("WARNING: Input and output names are identical!")
             sys.exit(1)
 
         count+=1
@@ -527,12 +527,12 @@ def convert(srcpath, destpath):
             try:
                 shutil.rmtree(dname)
             except:
-                print "Can't remove obsolete directory '%s'"%dname
+                print("Can't remove obsolete directory '%s'"%dname)
         else:
             try:
                 os.remove(dname)
             except:
-                print "Can't remove obsolete file '%s'"%dname
+                print("Can't remove obsolete file '%s'"%dname)
 
     return count
 
@@ -545,8 +545,8 @@ filter_file = False
 
 try:
     opts, args = getopt.getopt(sys.argv[1:], "hf", ["help"])
-except getopt.GetoptError,e:
-    print e
+except getopt.GetoptError as e:
+    print(e)
     sys.exit(1)
 
 for o,a in opts:
@@ -564,6 +564,6 @@ else:
         sys.exit(1)
 
     # Filter an entire Python source tree
-    print '"%s" -> "%s"\n'%(args[0],args[1])
+    print('"%s" -> "%s"\n'%(args[0],args[1]))
     c=convert(args[0],args[1])
-    print "%d files"%(c)
+    print("%d files"%(c))
index 8e8f4f218952fc666f754901263fdb2cf1b539ed..e063ff7adf541b4c2e03cdc681320b930cede778 100644 (file)
@@ -41,7 +41,7 @@ module SALOMEDS
 {
 /*! \brief Name of the file in which the %Study is saved.
 */
-  typedef string URL;
+  typedef wstring URLPath;
 
 /*! \brief Main identifier of an object in %SALOME application
 */
@@ -55,12 +55,6 @@ module SALOMEDS
 */
   typedef string SalomeReference;
 
-/*! \brief List of the names of studies which are currently open in this %SALOME session.
-
-Since %SALOME is a multi-study application, it allows to open a lot of studies
-during each working session.
-*/
-  typedef sequence<string> ListOfOpenStudies;
 //! List of file names
   typedef sequence<string> ListOfFileNames;
 //! List of modification dates of a study
@@ -81,7 +75,6 @@ during each working session.
 
   interface GenericAttribute;
   interface Study;
-  interface StudyManager;
   interface StudyBuilder;
   interface SObject;
   interface SComponent;
@@ -105,899 +98,752 @@ during each working session.
 //! Exception indicating that this feature hasn't been implemented in %SALOME application.
   exception NotImplemented {};
 
+  //==========================================================================
+/*! \brief %Study Builder Interface
 
-  //===========================================================================
- /*! \brief %Study Interface
-
-    The purpose of the %Study is to manage the data produced by various components of %SALOME platform.
-   Most of the %Study operations are handled by the StudyManager and the StudyBuilder.
-   What is left in the %Study interface are elementary inquiries.
-   (Incidentally, we recall that a CORBA attribute is implemented as a pair of get
-      and set methods.) A %Study is explored by a set of tools, mainly iterators
-    , which are described further. Nevertheless, the %Study
-     interface allows the search of an object by name or by ID.
-     \note
-     <BR><VAR>The Path </VAR>of an object in %SALOME application is much alike a standard path of a file.
-    In general it's a string of names of directories divided by a slash '/'.
-     <BR><VAR>The Context</VAR> is the current directory of an object.</P>
+  The purpose of the Builder is to add and/or remove objects and attributes.
+  A %StudyBuilder is linked to a %Study. A
+  command management is provided for the undo/redo functionalities.
+  \note
+  <BR><VAR>The Tag</VAR> of an item in %SALOME application is a symbolic description of
+  item's position in the tree-type structure of the browser. In general it has the following
+  form: <TT>0:2:1:1</TT>
 */
+  //==========================================================================
 
-  interface Study
+  interface StudyBuilder
   {
+/*! \brief %LockProtection Exception
 
-//! Invalid study reference
-    exception StudyInvalidReference {};
-//! Invalid study context
-    exception StudyInvalidContext {};
-//! Invalid study component
-    exception StudyInvalidComponent {};
-//! Invalid directory of the %study exception
-    exception StudyInvalidDirectory {};
-//! Exception pointing that this name of the study has already been used.
-    exception StudyNameAlreadyUsed {};
-//! study object already exists
-    exception StudyObjectAlreadyExists {};
-//! Invalid name of the %study exception
-    exception StudyNameError {};
-//! Invalid study comment
-    exception StudyCommentError {};
-
-/*! \brief The name of the %Study
-
-   This is equivalent to the methods setName() & getName()
+    This exception is raised while attempting to modify a locked %study.
 */
-    attribute string     Name; // equivalent to setName() & getName()
-/*! \brief The ID of the %Study
+    exception LockProtection {};
+/*! \brief Creation of a new %SComponent.
 
-   This is equivalent to the methods setID() & getID()
-*/
-    attribute short      StudyId;
-//! Sequence containing %SObjects
-    typedef sequence<SObject> ListOfSObject;
-//!  Get the persistent reference to the %Study.
-    PersistentReference  GetPersistentReference() raises(StudyInvalidReference);
-//! Get a transient reference to the %Study.
-    SalomeReference      GetTransientReference() raises(StudyInvalidReference);
+   Creates a new %SComponent
+   \param ComponentDataType    Data type of the %SComponent which will be created.
 
-/*! \brief indicate whether the %Study is empty
+<em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
 
-    \return True if the %Study is empty
 */
-    boolean IsEmpty() raises(StudyInvalidReference);
-/*! \brief  Find a %SComponent by its name.
-
-   \param aComponentName    It's a string value in the Comment Attribute of the Component,
-    which is looked for, defining the data type of this Component.
+    SComponent NewComponent(in string ComponentDataType) raises(LockProtection);
 
-<em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
+/*! \brief Definition of the instance to the %SComponent
 
+    Defines the instance to the %SComponent.
 */
-    SComponent FindComponent  (in string aComponentName) raises(StudyInvalidReference);
+    void       DefineComponentInstance (in SComponent aComponent,in Object ComponentIOR) raises(LockProtection);
 
-/*! \brief  Find a %SComponent by ID of the according %SObject
+/*! \brief Deletion of a %SComponent
+
+  Removes a %SComponent.
 */
-    SComponent FindComponentID(in ID aComponentID) raises(StudyInvalidReference);
-/*! \brief  Find a %SObject by the Name Attribute of this %SObject
+    void       RemoveComponent(in SComponent aComponent) raises(LockProtection);
 
-    \param anObjectName String parameter defining the name of the object
-    \return The obtained %SObject
+/*! \brief Creation of a new %SObject
 
-<em>See \ref example19 for an example of this method usage in batchmode of %SALOME application.</em>
-*/
-    SObject       FindObject      (in string anObjectName) raises(StudyInvalidReference);
-/*! \brief  Find a %SObject by its ID
+   Creates a new %SObject under a definite father %SObject.
 
-    \param aObjectID This parameter defines the ID of the required object
-    \return The obtained %SObject
-*/
-    SObject       FindObjectID    (in ID aObjectID) raises(StudyInvalidReference);
-/*! \brief Create a %SObject by its ID
+   \param theFatherObject The father %SObject under which this one should be created.
+   \return New %SObject
 
-    \param aObjectID This parameter defines the ID of the required object
-    \return The created %SObject
-*/
-    SObject       CreateObjectID    (in ID aObjectID) raises(StudyInvalidReference);
-/*!  \brief Find a %SObject by IOR of the object belonging to this %SObject.
+<em>See \ref example18 for an example of this method usage in batchmode of %SALOME application.</em>
 
-    \param anObjectName This parameter defines the IOR of the object
-    \return The obtained %SObject
 */
-    SObject       FindObjectIOR   (in ID aObjectIOR) raises(StudyInvalidReference);
-/*! \brief  Find in the study all %SObjects produced by a given %Component.
 
-    \param anObjectName The Name Attribute of the searched %SObjects should correspond to <VAR>anObjectName</VAR>.
-    \param aComponentName The name of the component, which objects are searched for.
-*/
-    ListOfSObject FindObjectByName(in string anObjectName, in string aComponentName) raises(StudyInvalidReference);
-/*! \brief  Find a %SObject by the path to it.
+    SObject NewObject      (in SObject theFatherObject) raises(LockProtection);
 
-    \param thePath The path to the required %SObject.
-    \return The obtained %SObject.
-*/
-    SObject FindObjectByPath(in string thePath) raises(StudyInvalidReference);
-/*! \brief Get the path to the %SObject.
-*/
-    string GetObjectPath(in Object theObject) raises(StudyInvalidReference);
+/*! \brief Creation of a new %SObject with a definite %tag
 
-/*! \brief  Set the context of the %Study.
+   Creates a new %SObject with a definite %tag.
 
-    \param thePath String parameter defining the context of the study.
+   \param atag Long value corresponding to the tag of the new %SObject.
+   \return New %SObject
 
-<em>See \ref example23 for an example of this method usage in batchmode of %SALOME application.</em>
 */
-    void SetContext(in string thePath) raises (StudyInvalidReference, StudyInvalidContext);
-/*!  \brief Get the context of the %Study.
+    SObject NewObjectToTag (in SObject theFatherObject, in long atag) raises(LockProtection);
+/*! \brief Deletion of the %SObject
 
-<em>See \ref example23 for an example of this method usage in batchmode of %SALOME application.</em>
-*/
-    string GetContext() raises (StudyInvalidReference, StudyInvalidContext);
-/*!  \brief Get a list of names of objects corresponding to the context.
+  Removes a %SObject from the %StudyBuilder.
 
-   \note  If the parameter <VAR>theContext</VAR> is empty, then the current context will be used.
+  \param anObject The %SObject to be deleted.
 */
-    ListOfStrings GetObjectNames(in string theContext) raises (StudyInvalidReference, StudyInvalidContext);
-/*! \brief Get a list of names of directories and subdirectories corresponding to the context.
+    void    RemoveObject   (in SObject anObject) raises(LockProtection);
+/*! \brief Deletion of the %SObject with all his child objects.
 
-   \note  If the parameter <VAR>theContext</VAR> is empty, then the current context will be used.
-*/
-    ListOfStrings GetDirectoryNames(in string theContext) raises (StudyInvalidReference, StudyInvalidContext);
-/*! \brief  Get a list of names of Files corresponding to the context.
+  Removes the %SObject with all his child objects.
 
-    \note  If the parameter <VAR>theContext</VAR> is empty, then the current context will be used.
+  \param anObject The %SObject to be deleted with all child objects.
 */
-    ListOfStrings GetFileNames(in string theContext) raises (StudyInvalidReference, StudyInvalidContext);
-/*! \brief Get a list of names of Components corresponding to the context.
+    void    RemoveObjectWithChildren(in SObject anObject) raises(LockProtection);
 
-   \note  If the parameter <VAR>theContext</VAR> is empty, then the current context will be used.
-*/
-    ListOfStrings GetComponentNames(in string theContext) raises(StudyInvalidReference);
-/*!  \brief Create a new iterator of child levels of the given %SObject.
+/*!
+   Loads a %SComponent.
 
-    \param aSO The given %SObject
-    \return A new iterator of child levels of the given %SObject.
-*/
-    ChildIterator NewChildIterator(in SObject aSO) raises(StudyInvalidReference);
+<em>See \ref example19 for an example of this method usage in batchmode of %SALOME application.</em>
 
-/*!  \brief Create a new iterator of the %SComponents.
+*/
+    void  LoadWith (in SComponent sco, in Driver Engine) raises (SALOME::SALOME_Exception);
+/*!
+   Loads a %SObject.
 
-    \return A new iterator of the %SComponents.
+   \param sco %SObject to be loaded.
 */
-    SComponentIterator NewComponentIterator() raises(StudyInvalidReference);
+    void  Load (in SObject sco);
 
-/*! \brief  Create a new %StudyBuilder to add or modify an object in the study.
+/*! \brief Looking for or creating an attribute assigned to the %SObject
 
-   \return A new %StudyBuilder.
+    Allows to find or create an attribute of a specific type which is assigned to the object.
+    \param anObject        The %SObject corresponding to the attribute which is looked for.
+    \param aTypeOfAttribute     Type of the attribute.
 
-<em>See \ref example20 for an example of this method usage in batchmode of %SALOME application.</em>
+<em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
 */
-    StudyBuilder NewBuilder() raises(StudyInvalidReference);
-/*! \brief Labels dependency
 
-    Updates the map with IOR attribute. It's an inner method used for optimization.
-*/
-    void UpdateIORLabelMap(in string anIOR, in string anEntry) raises(StudyInvalidReference);
+    GenericAttribute FindOrCreateAttribute(in  SObject        anObject,
+                                         in  string         aTypeOfAttribute) raises(LockProtection);
 
-/*! \brief Getting properties of the study
+/*! \brief Looking for an attribute assigned to a %SObject
 
-   Returns the attribute, which contains the properties of this study.
+    Allows to find an attribute of a specific type which is assigned to the object.
+    \param anObject        The %SObject corresponding to the attribute which is looked for.
+    \param aTypeOfAttribute     Type of the attribute.
+    \param anAttribute       Where the attribute is placed if it's found.
+    \return True if it finds an attribute.
+ */
 
-<em>See \ref example20 for an example of this method usage in batchmode of %SALOME application.</em>
+    boolean FindAttribute(in  SObject        anObject,
+                                 out GenericAttribute anAttribute,
+                                 in  string         aTypeOfAttribute);
+/*! \brief Deleting the attribute assigned to the %SObject
 
-*/
-    AttributeStudyProperties GetProperties() raises(StudyInvalidReference);
-/*! \brief  Indicate whether the %study has been saved
-*/
-    attribute boolean IsSaved;
-/*! \brief  Indicate whether the %study has been modified and not saved.
+    Removes the attribute of a specific type which is assigned to the object.
+    \param anObject        The %SObject corresponding to the attribute.
+    \param aTypeOfAttribute     Type of the attribute.
 
-  Returns True if the %study has been modified and not saved.
+<em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
 */
-    boolean IsModified() raises(StudyInvalidReference);
-
-/*! \brief  Mark the %study as being modified and not saved.
+    void RemoveAttribute(in  SObject        anObject,
+                         in  string         aTypeOfAttribute) raises(LockProtection);
+/*!
+    Adds a reference between %anObject and %theReferencedObject.
+    \param anObject The %SObject which will get a reference
+    \param theReferencedObject The %SObject having a reference
 */
-    void Modified() raises(StudyInvalidReference);
 
-/*! \brief  Indicate the file where the %study has been saved
+    void Addreference(in SObject anObject,
+                      in SObject theReferencedObject) ;
+
+/*!
+    Removes a reference from %anObject to another object.
+    \param anObject The %SObject which contains a reference
 */
-    attribute string URL;
 
-/*! \brief List of %SObjects
+    void RemoveReference(in SObject anObject) ;
 
-    Returns the list of %SObjects which refers to %anObject.
-*/
-    ListOfSObject FindDependances(in SObject anObject) raises(StudyInvalidReference);
+/*! \brief Identification of the %SObject's substructure.
 
-/*! \brief The date of the last saving of the study
+      Identification of the %SObject's substructure by GUID.
 
-    Returns the date of the last saving of study with format: "DD/MM/YYYY HH:MM"
-*/
-    string GetLastModificationDate() raises(StudyInvalidReference);
-/*! \brief The list of modification dates of the study
 
-    Returns the list of modification dates (without creation date) with format "DD/MM/YYYY HH:MM".
-      Note : the first modification begins the list.
+      \param anObject The %SObject which will be identified
+      \param theGUID GUID has the following format "00000000-0000-0000-0000-000000000000"
 */
-    ListOfDates GetModificationsDate() raises(StudyInvalidReference);
-/*! \brief Object conversion.
+    void SetGUID(in SObject anObject, in string theGUID) raises(LockProtection);
+/*!
+Searches for a definite %SObject with a definite GUID and returns True if it finds it.
 
-    Converts an object into IOR.
-    \return    IOR
+\param anObject A definite %SObject which will be identified
+\param theGUID GUID has the following format "00000000-0000-0000-0000-000000000000"
 */
-    string ConvertObjectToIOR(in Object theObject);
-/*! \brief Object conversion.
+     boolean IsGUID(in SObject anObject, in string theGUID);
 
-    Converts IOR into an object.
-    \return    An object
-*/
-    Object ConvertIORToObject(in string theIOR);
+/*! \brief Creation of a new command
 
-/*!  \brief Get a new %UseCaseBuilder.
-*/
-    UseCaseBuilder  GetUseCaseBuilder() raises(StudyInvalidReference);
+   Creates a new command which can contain several different actions.
 
-/*! \brief  Close the components in the study, remove itself from the %StudyManager.
-*/
-    void Close() raises(StudyInvalidReference);
+<em>See \ref example3 for an example of this method usage in batchmode of %SALOME application.</em>
 
-/*! \brief  Enable (if isEnabled = True)/disable automatic addition of new %SObjects to the use case.
 */
-    void EnableUseCaseAutoFilling(in boolean isEnabled) raises(StudyInvalidReference);
+    void NewCommand(); // command management
+/*! \brief Execution of the command
 
-/*!
-    Functions for internal usage only
-*/
-    void AddPostponed(in string theIOR) raises(StudyInvalidReference);
+   Commits all actions declared within this command.
 
-    void AddCreatedPostponed(in string theIOR) raises(StudyInvalidReference);
+   \exception LockProtection This exception is raised, when trying to perform this command a study, which is protected for modifications.
 
-    void RemovePostponed(in long theUndoLimit) raises(StudyInvalidReference);
+<em>See \ref example16 for an example of this method usage in batchmode of %SALOME application.</em>
 
-    void UndoPostponed(in long theWay) raises(StudyInvalidReference);
-
-    boolean DumpStudy(in string thePath,
-                      in string theBaseName,
-                      in boolean isPublished,
-                      in boolean isMultiFile) raises(StudyInvalidReference);
-
-/*! \brief  Get an AttributeParameter used to store common parameters for given %theSavePoint.
-
-    \param theID identifies a common parameters set (Example: "Interface Applicative")
-    \param theSavePoint is number of a set of parameters as there can be several sets
-*/
-    AttributeParameter GetCommonParameters(in string theID, in long theSavePoint) raises(StudyInvalidReference);
-
-/*! \brief  Get an AttributeParameter used to store parameters for given %theModuleName.
-
-    \param theID identifies a common parameters set (Example: "Interface Applicative")
-    \param theModuleName is a name of the module (Example: "Geometry")
-    \param theSavePoint is number of a set of parameters as there can be several sets
 */
-    AttributeParameter GetModuleParameters(in string theID, in string theModuleName, in long theSavePoint) raises(StudyInvalidReference);
-
-
-/*! \brief Get a default Python script to restore visual parameters for given %theModuleName.
-
-    \param theModuleName is a name of the module (Example: "Geometry")
-    \param indent is a string to use for script indentation
-*/
-    string GetDefaultScript(in string theModuleName, in string indent) raises(StudyInvalidReference);
-
+    void CommitCommand() raises(LockProtection); // command management
 /*!
-    Private method, returns an implementation of this Study.
-   \param theHostname is a hostname of the caller
-   \param thePID is a process ID of the caller
-   \param isLocal is set True if the Study is launched locally with the caller
-*/
-    long long GetLocalImpl(in string theHostname, in long thePID, out boolean isLocal);
-
-
-/*! \brief  Mark this Study as being locked by the given locker.
-
-    The lock status can be checked by method IsStudyLocked
-    \param theLockerID identifies a locker of the study can be for ex. IOR of the engine that locks the study.
-*/
-    void SetStudyLock(in string theLockerID) raises(StudyInvalidReference);
-
-/*! \brief Indicate if the Study is locked
-
-   Returns True if the Study was marked locked.
+    Returns True if at this moment there is a command under execution.
 */
-    boolean IsStudyLocked() raises(StudyInvalidReference);
+    boolean HasOpenCommand();
+/*! \brief Cancellation of the command
 
-/*! \brief  Mark this Study as being unlocked by the given locker.
+    Cancels all actions declared within the command.
 
-     The lock status can be checked by method IsStudyLocked
-    \param theLockerID identifies a locker of the study can be for ex. IOR of the engine that unlocks the study.
+<em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
 */
-    void UnLockStudy(in string theLockerID) raises(StudyInvalidReference);
+    void AbortCommand(); // command management
+/*! \brief Undolimit
 
-/*! \brief  Get the list of IDs of the Study's lockers.
+    The number of actions which can be undone
 */
-    ListOfStrings GetLockerID() raises(StudyInvalidReference);
+    attribute long  UndoLimit;
+/*! \brief Undo method
 
-/*! \brief  Create real variable with Name theVarName and value theValue
+    Cancels all actions of the last command.
 
-    (or set if variable value into theValue already exists)
-    \param theVarName is a name of the variable
-    \param theVarName is a value of the variable.
-*/
-    void SetReal( in string theVarName, in double theValue ) raises(StudyInvalidReference);
+    \exception LockProtection This exception is raised, when trying to perform this command a study, which is protected for modifications.
 
-/*! \brief  Create integer variable with Name theVarName and value theValue
+<em>See \ref example16 for an example of this method usage in batchmode of %SALOME application.</em>
 
-    (or set if variable value into theValue already exists)
-    \param theVarName is a name of the variable
-    \param theVarName is a value of the variable.
 */
-    void SetInteger( in string theVarName, in long theValue ) raises(StudyInvalidReference);
-/*! \brief  Create boolean variable with Name theVarName and value theValue
+    void Undo() raises (LockProtection);
+/*! \brief Redo method
 
-    (or set if variable value into theValue already exists)
-    \param theVarName is a name of the variable
-    \param theVarName is a value of the variable.
-*/
-    void SetBoolean( in string theVarName, in boolean theValue ) raises(StudyInvalidReference);
+    Redoes all actions of the last command.
 
-/*! \brief  Create string variable with Name theVarName and value theValue
+\exception LockProtection This exception is raised, when trying to perform this command a study, which is protected for modifications.
 
-    (or set if variable value into theValue already exists)
-    \param theVarName is a name of the variable
-    \param theVarName is a value of the variable.
-*/
-    void SetString( in string theVarName, in string theValue ) raises(StudyInvalidReference);
+<em>See \ref example16 for an example of this method usage in batchmode of %SALOME application.</em>
 
-/*! \brief  Set current value as double for string variable
 */
-    void SetStringAsDouble( in string theVarName, in double theValue ) raises(StudyInvalidReference);
+    void Redo() raises (LockProtection);
+/*!
+    Returns True if at this moment there are any actions which can be canceled.
 
-/*! \brief Get value of a real variable
+<em>See \ref example16 for an example of this method usage in batchmode of %SALOME application.</em>
 
-    \param theVarName is a name of the variable.
 */
-    double GetReal( in string theVarName ) raises(StudyInvalidReference);
+    boolean GetAvailableUndos();
+/*!
+    Returns True if at this moment there are any actions which can be redone.
 
-/*! \brief Get value of an integer variable
+<em>See \ref example3 for an example of this method usage in batchmode of %SALOME application.</em>
 
-    \param theVarName is a name of the variable.
 */
-    long GetInteger( in string theVarName ) raises(StudyInvalidReference);
-
-/*! \brief Get value of a boolean variable
+    boolean GetAvailableRedos();
+/*!
+    Puts name attribute with the given string value to the given %SObject
 
-    \param theVarName is a name of the variable.
+    \param theSO Existing SObject to set name attribute.
+    \param theValue The value to be set to the name attribute.
 */
-    boolean GetBoolean( in string theVarName ) raises(StudyInvalidReference);
+    void SetName(in SObject theSO, in string theValue) raises (LockProtection);
 
-/*! \brief Get value of a string variable
+/*!
+    Puts comment attribute with the given string value to the given %SObject
 
-    \param theVarName is a name of the variable.
+    \param theSO Existing SObject to set comment attribute.
+    \param theValue The value to be set to the comment attribute.
 */
-    string GetString( in string theVarName ) raises(StudyInvalidReference);
-
+    void SetComment(in SObject theSO, in string theValue) raises (LockProtection);
 
-/*! \brief Indicate if a variable is real
+/*!
+    Puts IOR attribute with the given string value to the given %SObject
 
-    Return true if variable is real otherwise return false.
-    \param theVarName is a name of the variable.
+    \param theSO Existing SObject to set IOR attribute.
+    \param theValue The value to be set to the IOR attribute.
 */
-    boolean IsReal( in string theVarName ) raises(StudyInvalidReference);
+    void SetIOR(in SObject theSO, in string theValue) raises (LockProtection);
+  };
 
-/*! \brief Indicate if a variable is integer
+  //===========================================================================
+ /*! \brief %Study Interface
 
-    Return true if variable is integer otherwise return false.
-    \param theVarName is a name of the variable.
+    The purpose of the %Study is to manage the data produced by various components of %SALOME platform.
+   Most of the %Study operations are handled by the StudyBuilder.
+   What is left in the %Study interface are elementary inquiries.
+   (Incidentally, we recall that a CORBA attribute is implemented as a pair of get
+      and set methods.) A %Study is explored by a set of tools, mainly iterators
+    , which are described further. Nevertheless, the %Study
+     interface allows the search of an object by name or by ID.
+     \note
+     <BR><VAR>The Path </VAR>of an object in %SALOME application is much alike a standard path of a file.
+    In general it's a string of names of directories divided by a slash '/'.
+     <BR><VAR>The Context</VAR> is the current directory of an object.</P>
 */
-    boolean IsInteger( in string theVarName ) raises(StudyInvalidReference);
 
-/*! \brief Indicate if a variable is boolean
+  interface Study
+  {
 
-    Return true if variable is boolean otherwise return false.
-    \param theVarName is a name of the variable.
+//! Invalid study reference
+    exception StudyInvalidReference {};
+//! Invalid study component
+    exception StudyInvalidComponent {};
+//! Invalid directory of the %study exception
+    exception StudyInvalidDirectory {};
+//! Exception pointing that this name of the study has already been used.
+    exception StudyNameAlreadyUsed {};
+//! study object already exists
+    exception StudyObjectAlreadyExists {};
+//! Invalid name of the %study exception
+    exception StudyNameError {};
+//! Invalid study comment
+    exception StudyCommentError {};
+    
+/*!
+    Determines whether the server has already been loaded or not.
 */
-    boolean IsBoolean( in string theVarName ) raises(StudyInvalidReference);
-
-/*! \brief Indicate if a variable is string
+    void ping();
+    void Shutdown();
+/*!
+    Returns the PID of the server
+*/
+    long getPID();
 
-    Return true if variable is string otherwise return false.
-    \param theVarName is a name of the variable.
+/*!
+    Shutdown the Study process.
 */
-    boolean IsString( in string theVarName ) raises(StudyInvalidReference);
+    oneway void ShutdownWithExit();
 
-/*! \brief Indicate if a variable exists in the study
+/*! \brief The name of the %Study
 
-    Return true if variable exists in the study,
-    otherwise return false.
-    \param theVarName is a name of the variable.
+   This is equivalent to the methods setName() & getName()
 */
-    boolean IsVariable( in string theVarName ) raises(StudyInvalidReference);
+    attribute wstring Name; // equivalent to getName()
 
-/*! \brief Get names of all variables from the study.
+/*! \brief  Indicate the file where the %study has been saved
 */
-    ListOfStrings GetVariableNames() raises(StudyInvalidReference);
 
-/*! \brief Remove a variable
+//! Sequence containing %SObjects
+    typedef sequence<SObject> ListOfSObject;
+//!  Get the persistent reference to the %Study.
+    PersistentReference  GetPersistentReference() raises(StudyInvalidReference);
 
-   Remove variable with the specified name from the study with substitution of its value.
+/*! \brief indicate whether the %Study is empty
 
-   \param theVarName Name of the variable.
-   \return Status of operation.
+    \return True if the %Study is empty
 */
-    boolean RemoveVariable( in string theVarName ) raises(StudyInvalidReference);
+    boolean IsEmpty() raises(StudyInvalidReference);
+/*! \brief  Find a %SComponent by its name.
 
-/*! \brief Rename a variable
+   \param aComponentName    It's a string value in the Comment Attribute of the Component,
+    which is looked for, defining the data type of this Component.
 
-   Rename variable with the specified name within the study.
+<em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
 
-   \param theVarName Name of the variable.
-   \param theNewVarName New name for the variable.
-   \return Status of operation.
 */
-    boolean RenameVariable( in string theVarName, in string theNewVarName ) raises(StudyInvalidReference);
-
-/*! \brief Indicate whether variable is used
-
-   Check that variable is used in the study.
+    SComponent FindComponent  (in string aComponentName) raises(StudyInvalidReference);
 
-   \param theVarName Name of the variable.
-   \return Variable usage.
+/*! \brief  Find a %SComponent by ID of the according %SObject
 */
-    boolean IsVariableUsed( in string theVarName ) raises(StudyInvalidReference);
+    SComponent FindComponentID(in ID aComponentID) raises(StudyInvalidReference);
+/*! \brief  Find a %SObject by the Name Attribute of this %SObject
 
-/*! \brief Parse variables used for object creation
+    \param anObjectName String parameter defining the name of the object
+    \return The obtained %SObject
 
-   \param string with variables, separated by special symbol.
-   \return Variables list.
+<em>See \ref example19 for an example of this method usage in batchmode of %SALOME application.</em>
 */
-    ListOfListOfStrings ParseVariables( in string theVars ) raises(StudyInvalidReference);
-
-/*!
-     Attach an observer to the Study
+    SObject       FindObject      (in string anObjectName) raises(StudyInvalidReference);
+/*! \brief  Find a %SObject by its ID
 
-    \param theObserver observer being attached
-    \param modify when \c true, observer receives any object's modification events;
-           otherwise observer receives object's creation events only
+    \param aObjectID This parameter defines the ID of the required object
+    \return The obtained %SObject
 */
-     void attach(in SALOMEDS::Observer theObserver, in boolean modify);
-/*!
-     Detach an observer from the Study
+    SObject       FindObjectID    (in ID aObjectID) raises(StudyInvalidReference);
+/*! \brief Create a %SObject by its ID
 
-    \param theObserver observer to be detached
+    \param aObjectID This parameter defines the ID of the required object
+    \return The created %SObject
 */
-     void detach(in SALOMEDS::Observer theObserver);
-  };
-
-  //==========================================================================
-/*! \brief %Study Builder Interface
+    SObject       CreateObjectID    (in ID aObjectID) raises(StudyInvalidReference);
+/*!  \brief Find a %SObject by IOR of the object belonging to this %SObject.
 
-  The purpose of the Builder is to add and/or remove objects and attributes.
-  A %StudyBuilder is linked to a %Study. A
-  command management is provided for the undo/redo functionalities.
-  \note
-  <BR><VAR>The Tag</VAR> of an item in %SALOME application is a symbolic description of
-  item's position in the tree-type structure of the browser. In general it has the following
-  form: <TT>0:2:1:1</TT>
+    \param anObjectName This parameter defines the IOR of the object
+    \return The obtained %SObject
 */
-  //==========================================================================
-
-  interface StudyBuilder
-  {
-/*! \brief %LockProtection Exception
+    SObject       FindObjectIOR   (in ID aObjectIOR) raises(StudyInvalidReference);
+/*! \brief  Find in the study all %SObjects produced by a given %Component.
 
-    This exception is raised while attempting to modify a locked %study.
+    \param anObjectName The Name Attribute of the searched %SObjects should correspond to <VAR>anObjectName</VAR>.
+    \param aComponentName The name of the component, which objects are searched for.
 */
-    exception LockProtection {};
-/*! \brief Creation of a new %SComponent.
-
-   Creates a new %SComponent
-   \param ComponentDataType    Data type of the %SComponent which will be created.
-
-<em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
+    ListOfSObject FindObjectByName(in string anObjectName, in string aComponentName) raises(StudyInvalidReference);
+/*! \brief  Find a %SObject by the path to it.
 
+    \param thePath The path to the required %SObject.
+    \return The obtained %SObject.
 */
-    SComponent NewComponent(in string ComponentDataType) raises(LockProtection);
-/*! \brief Definition of the instance to the %SComponent
-
-    Defines the instance to the %SComponent.
+    SObject FindObjectByPath(in string thePath) raises(StudyInvalidReference);
+/*! \brief Get the path to the %SObject.
 */
-    void       DefineComponentInstance (in SComponent aComponent,in Object ComponentIOR) raises(LockProtection);
+    string GetObjectPath(in Object theObject) raises(StudyInvalidReference);
 
-/*! \brief Deletion of a %SComponent
+/*!  \brief Create a new iterator of child levels of the given %SObject.
 
-  Removes a %SComponent.
+    \param aSO The given %SObject
+    \return A new iterator of child levels of the given %SObject.
 */
-    void       RemoveComponent(in SComponent aComponent) raises(LockProtection);
+    ChildIterator NewChildIterator(in SObject aSO) raises(StudyInvalidReference);
 
-/*! \brief Creation of a new %SObject
+/*!  \brief Create a new iterator of the %SComponents.
 
-   Creates a new %SObject under a definite father %SObject.
+    \return A new iterator of the %SComponents.
+*/
+    SComponentIterator NewComponentIterator() raises(StudyInvalidReference);
 
-   \param theFatherObject The father %SObject under which this one should be created.
-   \return New %SObject
+/*! \brief  Create a new %StudyBuilder to add or modify an object in the study.
 
-<em>See \ref example18 for an example of this method usage in batchmode of %SALOME application.</em>
+   \return A new %StudyBuilder.
 
+<em>See \ref example20 for an example of this method usage in batchmode of %SALOME application.</em>
 */
+    StudyBuilder NewBuilder() raises(StudyInvalidReference);
+/*! \brief Labels dependency
 
-    SObject NewObject      (in SObject theFatherObject) raises(LockProtection);
+    Updates the map with IOR attribute. It's an inner method used for optimization.
+*/
+    void UpdateIORLabelMap(in string anIOR, in string anEntry) raises(StudyInvalidReference);
 
-/*! \brief Creation of a new %SObject with a definite %tag
+/*! \brief Getting properties of the study
 
-   Creates a new %SObject with a definite %tag.
+   Returns the attribute, which contains the properties of this study.
 
-   \param atag Long value corresponding to the tag of the new %SObject.
-   \return New %SObject
+<em>See \ref example20 for an example of this method usage in batchmode of %SALOME application.</em>
 
 */
-    SObject NewObjectToTag (in SObject theFatherObject, in long atag) raises(LockProtection);
-/*! \brief Deletion of the %SObject
-
-  Removes a %SObject from the %StudyBuilder.
-
-  \param anObject The %SObject to be deleted.
+    AttributeStudyProperties GetProperties() raises(StudyInvalidReference);
+/*! \brief  Indicate whether the %study has been saved
 */
-    void    RemoveObject   (in SObject anObject) raises(LockProtection);
-/*! \brief Deletion of the %SObject with all his child objects.
-
-  Removes the %SObject with all his child objects.
+    attribute boolean IsSaved;
+/*! \brief  Indicate whether the %study has been modified and not saved.
 
-  \param anObject The %SObject to be deleted with all child objects.
+  Returns True if the %study has been modified and not saved.
 */
-    void    RemoveObjectWithChildren(in SObject anObject) raises(LockProtection);
-
-/*!
-   Loads a %SComponent.
-
-<em>See \ref example19 for an example of this method usage in batchmode of %SALOME application.</em>
+    boolean IsModified() raises(StudyInvalidReference);
 
+/*! \brief  Mark the %study as being modified and not saved.
 */
-    void  LoadWith (in SComponent sco, in Driver Engine) raises (SALOME::SALOME_Exception);
-/*!
-   Loads a %SObject.
+    void Modified() raises(StudyInvalidReference);
 
-   \param sco %SObject to be loaded.
+/*! \brief  Indicate the file where the %study has been saved
 */
-    void  Load (in SObject sco);
-
-/*! \brief Looking for or creating an attribute assigned to the %SObject
+    attribute wstring URL;
 
-    Allows to find or create an attribute of a specific type which is assigned to the object.
-    \param anObject        The %SObject corresponding to the attribute which is looked for.
-    \param aTypeOfAttribute     Type of the attribute.
+/*! \brief List of %SObjects
 
-<em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
+    Returns the list of %SObjects which refers to %anObject.
 */
+    ListOfSObject FindDependances(in SObject anObject) raises(StudyInvalidReference);
 
-    GenericAttribute FindOrCreateAttribute(in  SObject        anObject,
-                                         in  string         aTypeOfAttribute) raises(LockProtection);
+/*! \brief The date of the last saving of the study
 
-/*! \brief Looking for an attribute assigned to a %SObject
+    Returns the date of the last saving of study with format: "DD/MM/YYYY HH:MM"
+*/
+    string GetLastModificationDate() raises(StudyInvalidReference);
+/*! \brief The list of modification dates of the study
 
-    Allows to find an attribute of a specific type which is assigned to the object.
-    \param anObject        The %SObject corresponding to the attribute which is looked for.
-    \param aTypeOfAttribute     Type of the attribute.
-    \param anAttribute       Where the attribute is placed if it's found.
-    \return True if it finds an attribute.
- */
+    Returns the list of modification dates (without creation date) with format "DD/MM/YYYY HH:MM".
+      Note : the first modification begins the list.
+*/
+    ListOfDates GetModificationsDate() raises(StudyInvalidReference);
+/*! \brief Object conversion.
 
-    boolean FindAttribute(in  SObject        anObject,
-                                 out GenericAttribute anAttribute,
-                                 in  string         aTypeOfAttribute);
-/*! \brief Deleting the attribute assigned to the %SObject
+    Converts an object into IOR.
+    \return    IOR
+*/
+    string ConvertObjectToIOR(in Object theObject);
+/*! \brief Object conversion.
 
-    Removes the attribute of a specific type which is assigned to the object.
-    \param anObject        The %SObject corresponding to the attribute.
-    \param aTypeOfAttribute     Type of the attribute.
+    Converts IOR into an object.
+    \return    An object
+*/
+    Object ConvertIORToObject(in string theIOR);
 
-<em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
+/*! \brief Get a new %UseCaseBuilder.
 */
-    void RemoveAttribute(in  SObject        anObject,
-                         in  string         aTypeOfAttribute) raises(LockProtection);
-/*!
-    Adds a reference between %anObject and %theReferencedObject.
-    \param anObject The %SObject which will get a reference
-    \param theReferencedObject The %SObject having a reference
+    UseCaseBuilder  GetUseCaseBuilder() raises(StudyInvalidReference);
+    
+/*! \brief Clear a study object
 */
+    void Clear() raises(StudyInvalidReference);
 
-    void Addreference(in SObject anObject,
-                      in SObject theReferencedObject) ;
-
-/*!
-    Removes a reference from %anObject to another object.
-    \param anObject The %SObject which contains a reference
+/*! \brief Initialization a study object
 */
+    void Init() raises(StudyInvalidReference);
+    
+/*! \brief Open a study by url
 
-    void RemoveReference(in SObject anObject) ;
-
-/*!
-   Adds a directory in the %Study.
-   \param theName String parameter defining the name of the directory.
-
-<em>See \ref example23 for an example of this method usage in batchmode of %SALOME application.</em>
-
+    Reads and activates the structure of the study %Objects.
+    \param aStudyUrl The path to the study
 */
-    void AddDirectory(in string theName) raises(LockProtection);
-
-/*! \brief Identification of the %SObject's substructure.
+    boolean Open (in URLPath aStudyUrl) raises (SALOME::SALOME_Exception);
+    
+/*! \brief Saving the study in a file (or files).
 
-      Identification of the %SObject's substructure by GUID.
+    Saves a study.
+    \param theMultiFile If this parameter is True the study will be saved in several files.
+    \param theASCII If this parameter is True the study will be saved in ASCII format, otherwise in HDF format.
+*/
+    boolean Save(in boolean theMultiFile, in boolean theASCII) raises(StudyInvalidReference);
+    
+/*! \brief Saving the study in a specified file (or files).
 
+    Saves the study in a specified file (or files).
+    \param aUrl The path to the definite file in whcih the study will be saved
+    \param theMultiFile If this parameter is True the study will be saved in several files.
+    \param theASCII If this parameter is True the study will be saved in ASCII format, otherwise in HDF format.
 
-      \param anObject The %SObject which will be identified
-      \param theGUID GUID has the following format "00000000-0000-0000-0000-000000000000"
+<em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
 */
-
-     void SetGUID(in SObject anObject, in string theGUID) raises(LockProtection);
+    boolean  SaveAs(in URLPath aUrl, // if the file already exists
+                    in boolean theMultiFile, // overwrite (as option)
+                    in boolean theASCII) 
+                    raises(StudyInvalidReference); 
 /*!
-Searches for a definite %SObject with a definite GUID and returns True if it finds it.
-
-\param anObject A definite %SObject which will be identified
-\param theGUID GUID has the following format "00000000-0000-0000-0000-000000000000"
+    Returns True, if the given %SObject can be copied to the clipboard.
 */
-     boolean IsGUID(in SObject anObject, in string theGUID);
-
-/*! \brief Creation of a new command
-
-   Creates a new command which can contain several different actions.
-
-<em>See \ref example3 for an example of this method usage in batchmode of %SALOME application.</em>
-
+    boolean CanCopy(in SObject theObject) raises(StudyInvalidReference);
+/*!
+    Returns True, if the given %SObject is copied to the clipboard.
+    \param theObject The %SObject which will be copied
 */
-    void NewCommand(); // command management
-/*! \brief Execution of the command
-
-   Commits all actions declared within this command.
-
-   \exception LockProtection This exception is raised, when trying to perform this command a study, which is protected for modifications.
-
-<em>See \ref example16 for an example of this method usage in batchmode of %SALOME application.</em>
-
+    boolean Copy(in SObject theObject) raises(StudyInvalidReference);
+/*!
+    Returns True, if the object from the clipboard can be pasted to the given %SObject.
+    \param theObject The %SObject stored in the clipboard.
 */
-    void CommitCommand() raises(LockProtection); // command management
+    boolean CanPaste(in SObject theObject) raises(StudyInvalidReference);
 /*!
-    Returns True if at this moment there is a command under execution.
+    Returns the %SObject in which the object from the clipboard was pasted to.
+    \param theObject The %SObject which will be pasted
+    \exception SALOMEDS::StudyBuilder::LockProtection This exception is raised, when trying to paste
+    an object into a study, which is protected for modifications.
 */
-    boolean HasOpenCommand();
-/*! \brief Cancellation of the command
-
-    Cancels all actions declared within the command.
+    SObject Paste(in SObject theObject) raises (SALOMEDS::StudyBuilder::LockProtection);
 
-<em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
+/*! \brief  Enable (if isEnabled = True)/disable automatic addition of new %SObjects to the use case.
 */
-    void AbortCommand(); // command management
-/*! \brief Undolimit
+    void EnableUseCaseAutoFilling(in boolean isEnabled) raises(StudyInvalidReference);
 
-    The number of actions which can be undone
+/*!
+    Functions for internal usage only
 */
-    attribute long  UndoLimit;
-/*! \brief Undo method
+    void AddPostponed(in string theIOR) raises(StudyInvalidReference);
 
-    Cancels all actions of the last command.
+    void AddCreatedPostponed(in string theIOR) raises(StudyInvalidReference);
 
-    \exception LockProtection This exception is raised, when trying to perform this command a study, which is protected for modifications.
+    void RemovePostponed(in long theUndoLimit) raises(StudyInvalidReference);
 
-<em>See \ref example16 for an example of this method usage in batchmode of %SALOME application.</em>
+    void UndoPostponed(in long theWay) raises(StudyInvalidReference);
 
-*/
-    void Undo() raises (LockProtection);
-/*! \brief Redo method
+    boolean DumpStudy(in string thePath,
+                      in string theBaseName,
+                      in boolean isPublished,
+                      in boolean isMultiFile) raises(StudyInvalidReference);
 
-    Redoes all actions of the last command.
+/*! \brief  Get an AttributeParameter used to store common parameters for given %theSavePoint.
 
-\exception LockProtection This exception is raised, when trying to perform this command a study, which is protected for modifications.
+    \param theID identifies a common parameters set (Example: "Interface Applicative")
+    \param theSavePoint is number of a set of parameters as there can be several sets
+*/
+    AttributeParameter GetCommonParameters(in string theID, in long theSavePoint) raises(StudyInvalidReference);
 
-<em>See \ref example16 for an example of this method usage in batchmode of %SALOME application.</em>
+/*! \brief  Get an AttributeParameter used to store parameters for given %theModuleName.
 
+    \param theID identifies a common parameters set (Example: "Interface Applicative")
+    \param theModuleName is a name of the module (Example: "Geometry")
+    \param theSavePoint is number of a set of parameters as there can be several sets
 */
-    void Redo() raises (LockProtection);
-/*!
-    Returns True if at this moment there are any actions which can be canceled.
+    AttributeParameter GetModuleParameters(in string theID, in string theModuleName, in long theSavePoint) raises(StudyInvalidReference);
 
-<em>See \ref example16 for an example of this method usage in batchmode of %SALOME application.</em>
 
+/*! \brief Get a default Python script to restore visual parameters for given %theModuleName.
+
+    \param theModuleName is a name of the module (Example: "Geometry")
+    \param indent is a string to use for script indentation
 */
-    boolean GetAvailableUndos();
+    string GetDefaultScript(in string theModuleName, in string indent) raises(StudyInvalidReference);
+
 /*!
-    Returns True if at this moment there are any actions which can be redone.
+    Private method, returns an implementation of this Study.
+   \param theHostname is a hostname of the caller
+   \param thePID is a process ID of the caller
+   \param isLocal is set True if the Study is launched locally with the caller
+*/
+    long long GetLocalImpl(in string theHostname, in long thePID, out boolean isLocal);
 
-<em>See \ref example3 for an example of this method usage in batchmode of %SALOME application.</em>
 
-*/
-    boolean GetAvailableRedos();
-/*!
-    Puts name attribute with the given string value to the given %SObject
+/*! \brief  Mark this Study as being locked by the given locker.
 
-    \param theSO Existing SObject to set name attribute.
-    \param theValue The value to be set to the name attribute.
+    The lock status can be checked by method IsStudyLocked
+    \param theLockerID identifies a locker of the study can be for ex. IOR of the engine that locks the study.
 */
-    void SetName(in SObject theSO, in string theValue) raises (LockProtection);
+    void SetStudyLock(in string theLockerID) raises(StudyInvalidReference);
 
-/*!
-    Puts comment attribute with the given string value to the given %SObject
+/*! \brief Indicate if the Study is locked
 
-    \param theSO Existing SObject to set comment attribute.
-    \param theValue The value to be set to the comment attribute.
+   Returns True if the Study was marked locked.
 */
-    void SetComment(in SObject theSO, in string theValue) raises (LockProtection);
+    boolean IsStudyLocked() raises(StudyInvalidReference);
 
-/*!
-    Puts IOR attribute with the given string value to the given %SObject
+/*! \brief  Mark this Study as being unlocked by the given locker.
 
-    \param theSO Existing SObject to set IOR attribute.
-    \param theValue The value to be set to the IOR attribute.
+     The lock status can be checked by method IsStudyLocked
+    \param theLockerID identifies a locker of the study can be for ex. IOR of the engine that unlocks the study.
 */
-    void SetIOR(in SObject theSO, in string theValue) raises (LockProtection);
-  };
-
-  //==========================================================================
-/*! \brief %Study Manager interface
+    void UnLockStudy(in string theLockerID) raises(StudyInvalidReference);
 
-    The purpose of the Manager is to manipulate the %Studies. You will find in this
-    interface the methods to create, open,
-    close, and save a %Study. Since a %SALOME session is multi-document, you will
-    also find the methods allowing to navigate
-    through the collection of studies present in a session.
+/*! \brief  Get the list of IDs of the Study's lockers.
 */
-  //==========================================================================
+    ListOfStrings GetLockerID() raises(StudyInvalidReference);
 
-  interface StudyManager
-  {
-/*!
-    Determines whether the server has already been loaded or not.
+/*! \brief  Create real variable with Name theVarName and value theValue
+
+    (or set if variable value into theValue already exists)
+    \param theVarName is a name of the variable
+    \param theVarName is a value of the variable.
 */
-    void ping();
+    void SetReal( in string theVarName, in double theValue ) raises(StudyInvalidReference);
 
-    void Shutdown();
+/*! \brief  Create integer variable with Name theVarName and value theValue
 
-/*!
-    Returns the PID of the server
+    (or set if variable value into theValue already exists)
+    \param theVarName is a name of the variable
+    \param theVarName is a value of the variable.
 */
-    long getPID();
+    void SetInteger( in string theVarName, in long theValue ) raises(StudyInvalidReference);
+/*! \brief  Create boolean variable with Name theVarName and value theValue
 
-/*!
-    Shutdown the StudyManager process.
+    (or set if variable value into theValue already exists)
+    \param theVarName is a name of the variable
+    \param theVarName is a value of the variable.
 */
-    oneway void ShutdownWithExit();
+    void SetBoolean( in string theVarName, in boolean theValue ) raises(StudyInvalidReference);
 
-/*! \brief Creation of a new study
+/*! \brief  Create string variable with Name theVarName and value theValue
 
-     Creates a new study with a definite name.
+    (or set if variable value into theValue already exists)
+    \param theVarName is a name of the variable
+    \param theVarName is a value of the variable.
+*/
+    void SetString( in string theVarName, in string theValue ) raises(StudyInvalidReference);
 
-     \param study_name String parameter defining the name of the study
+/*! \brief  Set current value as double for string variable
+*/
+    void SetStringAsDouble( in string theVarName, in double theValue ) raises(StudyInvalidReference);
 
-<em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
+/*! \brief Get value of a real variable
 
+    \param theVarName is a name of the variable.
 */
-    Study NewStudy(in string study_name) raises (SALOME::SALOME_Exception);
-
-/*! \brief Open a study
+    double GetReal( in string theVarName ) raises(StudyInvalidReference);
 
-     Reads and activates the structure of the study %Objects.
-     \param aStudyUrl The path to the study
-    \warning This method doesn't activate the corba objects. Only a component can do it.
+/*! \brief Get value of an integer variable
 
-<em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
+    \param theVarName is a name of the variable.
 */
-    Study Open (in URL aStudyUrl) raises (SALOME::SALOME_Exception);
+    long GetInteger( in string theVarName ) raises(StudyInvalidReference);
 
-/*! \brief Closing the study
+/*! \brief Get value of a boolean variable
 
-    Closes a study.
+    \param theVarName is a name of the variable.
 */
-    void  Close(in Study aStudy);
-/*! \brief Saving the study in a HDF file (or files).
+    boolean GetBoolean( in string theVarName ) raises(StudyInvalidReference);
 
-    Saves a study.
+/*! \brief Get value of a string variable
 
-    \param theMultiFile If this parameter is True the study will be saved in several files.
+    \param theVarName is a name of the variable.
+*/
+    string GetString( in string theVarName ) raises(StudyInvalidReference);
 
-<em>See \ref example19 for an example of this method usage in batchmode of %SALOME application.</em>
 
-*/
-    boolean  Save(in  Study aStudy, in boolean theMultiFile);
-/*! \brief Saving a study in a ASCII file (or files).
+/*! \brief Indicate if a variable is real
 
-    Saves a study in an ASCII format file (or files).
-    \param theMultiFile If this parameter is True the study will be saved in several files.
+    Return true if variable is real otherwise return false.
+    \param theVarName is a name of the variable.
 */
-    boolean  SaveASCII(in  Study aStudy, in boolean theMultiFile);
-/*! \brief Saving the study in a specified HDF file (or files).
+    boolean IsReal( in string theVarName ) raises(StudyInvalidReference);
 
-    Saves the study in a specified file (or files).
-    \param aUrl The path to the definite file in which the study will be saved
-    \param aStudy The study which will be saved
-    \param theMultiFile If this parameter is True the study will be saved in several files.
+/*! \brief Indicate if a variable is integer
 
-<em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
+    Return true if variable is integer otherwise return false.
+    \param theVarName is a name of the variable.
 */
-    boolean  SaveAs(in URL   aUrl, // if the file already exists
-                in Study aStudy,
-                in boolean theMultiFile); // overwrite (as option)
-/*! \brief Saving the study in a specified ASCII file (or files).
+    boolean IsInteger( in string theVarName ) raises(StudyInvalidReference);
 
-    Saves the study in a specified ASCII file (or files).
+/*! \brief Indicate if a variable is boolean
 
-    \param aUrl The path to the definite file in which the study will be saved
-    \param aStudy The study which will be saved
-    \param theMultiFile If this parameter is True the study will be saved in several files.
+    Return true if variable is boolean otherwise return false.
+    \param theVarName is a name of the variable.
 */
-    boolean  SaveAsASCII(in URL   aUrl, // if the file already exists
-                      in Study aStudy,
-                      in boolean theMultiFile); // overwrite (as option)
+    boolean IsBoolean( in string theVarName ) raises(StudyInvalidReference);
 
+/*! \brief Indicate if a variable is string
 
-/*! \brief List of open studies.
+    Return true if variable is string otherwise return false.
+    \param theVarName is a name of the variable.
+*/
+    boolean IsString( in string theVarName ) raises(StudyInvalidReference);
 
-Gets the list of open studies
+/*! \brief Indicate if a variable exists in the study
 
-    \return A list of open studies in the current session.
+    Return true if variable exists in the study,
+    otherwise return false.
+    \param theVarName is a name of the variable.
 */
-    ListOfOpenStudies GetOpenStudies();
-
-/*! \brief Getting a particular %Study picked by name
+    boolean IsVariable( in string theVarName ) raises(StudyInvalidReference);
 
-    Activates a particular %Study
-    among the session collection picking it by name.
-    \param aStudyName The name of the study
+/*! \brief Get names of all variables from the study.
 */
-    Study GetStudyByName  (in string aStudyName);
+    ListOfStrings GetVariableNames() raises(StudyInvalidReference);
 
-/*! \brief Getting a particular %Study picked by ID
+/*! \brief Remove a variable
+
+   Remove variable with the specified name from the study with substitution of its value.
 
-    Activates a particular %Study
-    among the session collection picking it by ID.
-    \param aStudyID The ID of the study
+   \param theVarName Name of the variable.
+   \return Status of operation.
 */
-    Study GetStudyByID  (in short aStudyID);
+    boolean RemoveVariable( in string theVarName ) raises(StudyInvalidReference);
 
-    // copy/paste methods
+/*! \brief Rename a variable
 
-/*!
-    Returns True, if the given %SObject can be copied to the clipboard.
-*/
-    boolean CanCopy(in SObject theObject);
-/*!
-    Returns True, if the given %SObject is copied to the clipboard.
-    \param theObject The %SObject which will be copied
-*/
-    boolean Copy(in SObject theObject);
-/*!
-    Returns True, if the object from the clipboard can be pasted to the given %SObject.
-    \param theObject The %SObject stored in the clipboard.
-*/
-    boolean CanPaste(in SObject theObject);
-/*!
-    Returns the %SObject in which the object from the clipboard was pasted to.
-    \param theObject The %SObject which will be pasted
-    \exception SALOMEDS::StudyBuilder::LockProtection This exception is raised, when trying to paste
-    an object into a study, which is protected for modifications.
+   Rename variable with the specified name within the study.
+
+   \param theVarName Name of the variable.
+   \param theNewVarName New name for the variable.
+   \return Status of operation.
 */
-    SObject Paste(in SObject theObject) raises (SALOMEDS::StudyBuilder::LockProtection);
+    boolean RenameVariable( in string theVarName, in string theNewVarName ) raises(StudyInvalidReference);
 
-/*! \brief Object conversion.
+/*! \brief Indicate whether variable is used
 
-    Converts an object into IOR.
-    \return    IOR
+   Check that variable is used in the study.
+
+   \param theVarName Name of the variable.
+   \return Variable usage.
 */
-    string ConvertObjectToIOR(in Object theObject);
-/*! \brief Object conversion.
+    boolean IsVariableUsed( in string theVarName ) raises(StudyInvalidReference);
 
-    Converts IOR into an object.
-    \return    An object
+/*! \brief Parse variables used for object creation
+
+   \param string with variables, separated by special symbol.
+   \return Variables list.
 */
-    Object ConvertIORToObject(in string theIOR);
+    ListOfListOfStrings ParseVariables( in string theVars ) raises(StudyInvalidReference);
 
 /*!
-    Private method, returns an implementation of this StudyManager.
-   \param theHostname is a hostname of the caller
-   \param thePID is a process ID of the caller
-   \param isLocal is set True if the StudyManager is launched locally with the caller
+     Attach an observer to the Study
+
+    \param theObserver observer being attached
+    \param modify when \c true, observer receives any object's modification events;
+           otherwise observer receives object's creation events only
 */
-    long long GetLocalImpl(in string theHostname, in long thePID, out boolean isLocal);
+     void attach(in SALOMEDS::Observer theObserver, in boolean modify);
+/*!
+     Detach an observer from the Study
 
+    \param theObserver observer to be detached
+*/
+     void detach(in SALOMEDS::Observer theObserver);
   };
 
-
   //==========================================================================
 /*! \brief %SObject interface
 
@@ -1081,11 +927,6 @@ Gets the list of open studies
 */
     ListOfAttributes     GetAllAttributes();
 
-/*! Gets the study of a given %SObject.
-    \return The study containing the given %SObject.
-*/
-    Study GetStudy();
-
 /*! Gets the CORBA object by its own IOR attribute.
     Returns nil, if can't.
     \return The CORBA object of the %SObject.
@@ -1374,7 +1215,7 @@ This class represents a common tool for all components integrated into SALOME ap
 can be called by any component and which provide the following functionality:
 <ul>
     <li> publishing in the study of the objects created by a definite component
-    <li> saving/loading of the data created by a definite component. These methods are called by the StudyManager when loading/saving a study containing the data created by a definite component.
+    <li> saving/loading of the data created by a definite component. These methods are called when loading/saving a study containing the data created by a definite component.
     <li> transforming of the transient references into persistent references (or vice versa) of the SObjects when saving (or loading) a study
     <li> copy/paste common functionality. These methods can be called by any component in order to copy/paste its object created in the study
 </ul>
@@ -1386,7 +1227,7 @@ can be called by any component and which provide the following functionality:
 
     /*! \brief Saving the data produced by a definite component.
 
-        This method is called by the StudyManager when saving a study.
+        This method is called when saving a study.
        \param theComponent    %SComponent corresponding to this Component
        \param theURL  The path to the file in which the data will be saved.
        \param isMultiFile  If the value of this boolean parameter is True, the data will be saved in several files.
@@ -1401,7 +1242,7 @@ can be called by any component and which provide the following functionality:
 
 /*! \brief Saving the data in ASCII format produced by a definite component.
 
-        This method is called by the StudyManager when saving a study in ASCII format.
+        This method is called when saving a study in ASCII format.
        \param theComponent    %SComponent corresponding to this Component
        \param theURL  The path to the file in which the data will be saved.
        \param isMultiFile  If the value of this boolean parameter is True, the data will be saved in several files.
@@ -1414,7 +1255,7 @@ can be called by any component and which provide the following functionality:
 
     /*! \brief Loading the data.
 
-       This method is called by the StudyManager when opening a study.
+       This method is called when opening a study.
        \param theComponent      %SComponent corresponding to this Component
        \param theStream   The file which contains all data saved by the component on Save method
        \param isMultiFile  If the value of this boolean parameter is True, the data will be loaded from several files
@@ -1425,7 +1266,7 @@ can be called by any component and which provide the following functionality:
 
     /*! \brief Loading the data from files in ASCII format.
 
-       This method is called by the StudyManager when opening a study.
+       This method is called when opening a study.
        \param theComponent      %SComponent corresponding to this Component
        \param theStream   The file which contains all data saved by the component on Save method
        \param isMultiFile  If the value of this boolean parameter is True, the data will be loaded from several files
@@ -1436,7 +1277,7 @@ can be called by any component and which provide the following functionality:
 
     /*! \brief Closing of the study
 
-      This method Close is called by the StudyManager when closing a study.
+      This method Close is called when closing a study.
     \param aSComponent The according %SComponent
      */
 
@@ -1500,7 +1341,6 @@ study is open, these references are transformed into persintent IORs.
 /*! \brief Publishing in the study
 
    Publishes the given object in the %study, using the algorithm of this component.
-    \param theStudy     The %study in which the object is published
     \param theSObject     If this parameter is null the object is published for the first time. Otherwise
     this parameter should contain a reference to the object published earlier
     \param theObject      The object which is published
@@ -1509,7 +1349,7 @@ study is open, these references are transformed into persintent IORs.
 
     \return The published %SObject.
 */
-    SObject PublishInStudy(in Study theStudy, in SObject theSObject, in Object theObject, in string theName);
+    SObject PublishInStudy(in SObject theSObject, in Object theObject, in string theName);
 
     // copy/paste methods
 
index f5b18d4a3062ace5f814870669b10380f5b6c5fe..8c02315aab0b892f1e7ca0278b363b4bc366404d 100644 (file)
@@ -90,12 +90,9 @@ module Engines
       \param componentName Name of the component which will be registered
                            in Registry and Name Service,
                          (instance number suffix added to the registered name)
-      \param studyId        0 if instance is not associated to a study,
-                            >0 otherwise (== study id)
       \return a loaded component
     */
-    Engines::EngineComponent create_component_instance(in string componentName,
-                                                       in long studyId);
+    Engines::EngineComponent create_component_instance(in string componentName);
 
     //! Create a new Python servant instance of a generic service.
         /*!
@@ -104,8 +101,6 @@ module Engines
           Warning: no internal registration is done, so it is up to the caller to
           manage the various instantiation.
           \param serviceName Name of the service
-
-                                >0 otherwise (== study id)
           \param reason  in case of error (return void string) a string explaining the error
           \return the IOR of the loaded service.
         */
@@ -118,25 +113,20 @@ module Engines
       \param componentName Name of the component which will be registered
                            in Registry and Name Service,
                          (instance number suffix added to the registered name)
-      \param studyId        0 if instance is not associated to a study,
-                            >0 otherwise (== study id)
       \param env         a dict of env variables
       \param reason      in case of error (return nil) a string explaining the error
       \return a loaded component
     */
     Engines::EngineComponent create_component_instance_env(in string componentName,
-                                                           in long studyId, in FieldsDict env,
+                                                           in FieldsDict env,
                                                            out string reason);
     //! Find a servant instance of a component
     /*!
       \param registeredName  Name of the component in Registry or Name Service,
                              without instance suffix number
-      \param studyId        0 if instance is not associated to a study,
-                            >0 otherwise (== study id)
-      \return the first instance found with same studyId
+      \return the first instance found
     */
-    EngineComponent find_component_instance(in string registeredName,
-                                            in long studyId);
+    EngineComponent find_component_instance(in string registeredName);
 
     //! Find a servant instance of a component, or create a new one.
     /*!
@@ -261,15 +251,6 @@ module Engines
     //!  Determines whether the server has already been loaded or not.
     void ping();
 
-    //!  Get study associated to component instance
-    /*!
-      get study associated to component instance
-      \return -1: not initialised (Internal Error)
-               0: multistudy component instance
-              >0: study id associated to this instance
-    */
-    long getStudyId();
-
     //! Remove component instance from container
     /*!
       Deactivates the %Component.
@@ -355,8 +336,7 @@ module Engines
       Returns a python script, which is being played back reproduces
       the data model of component
     */
-    TMPFile DumpPython(in Object theStudy,
-                       in boolean isPublished,
+    TMPFile DumpPython(in boolean isPublished,
                        in boolean isMultiFile,
                        out boolean isValidScript);
 
@@ -469,11 +449,10 @@ module Engines
       It is worth using this method only if hasObjectInfo() method returns true.
 
       \param entry object's entry.
-      \param studyId study id
 
       \return an information about the given object.
     */
-    string getObjectInfo(in long studyId, in string entry);
+    string getObjectInfo(in string entry);
 
     //! Get version of the component
     /*!
index 78439ffe3cf166d01e9886887ac4b4aa4cd569a0..9aa6c61644b3f41ad99732f74152b400b8b83271 100644 (file)
@@ -166,7 +166,6 @@ a path to a component
     ComponentType      type;
     string             name;
     string             username;
-    boolean            multistudy;
     ImplType           implementationType;
     string             implname;
     string             icon;
@@ -269,10 +268,6 @@ a path to a component
 */
     readonly attribute string componentusername;
 
-/*!  \brief Get whether the component is multistudy or not
-*/
-    readonly attribute boolean multistudy;
-
 /*!  \brief Get the type of the component
 */
     readonly attribute ComponentType component_type ;
index 855f6f73ca48c02e350fea824056f5e1ee0502c1..ecedde31a1a32d81f3a68b85dae1d2e783c09b3e 100644 (file)
@@ -39,8 +39,7 @@ module Engines
     // Replicated Method used by the proxy to create
     // a PACO Component
     void create_paco_component_node_instance(in string registeredName,
-                                            in string proxy_containerName,
-                                            in long studyId) raises(SALOME::SALOME_Exception);
+                                            in string proxy_containerName) raises(SALOME::SALOME_Exception);
 
     void updateInstanceNumber();
   };
index 90509c0bb7a1426e2e1888c6afd4bac536a72ffa..5715977b19f93fcb8cc5f5cf0648a0d5cbb6ea1a 100644 (file)
@@ -51,11 +51,10 @@ module SALOME
 
    It can be:
         -# asleep  : no running study
-        -# running : one or more running studies
+        -# running : one running study
 */
     SessionState state ;
-    //! Number of running studies
-    short        runningStudies ;
+
     //! It is True if GUI is active in the session
     boolean      activeGUI ;
   } ;
@@ -70,8 +69,8 @@ module SALOME
   {
 //!  This exception is raised when trying to stop the %session with active GUI
     exception GUIActive {} ;
-//!  This exception is raised when trying to stop the %session with a number of running studies.
-    exception RunningStudies {} ;
+//!  This exception is raised when trying to stop the %session with running study.
+    exception RunningStudy {} ;
 
 //!  Launches GUI in the session
     void GetInterface();
@@ -80,7 +79,7 @@ module SALOME
     Engines::EngineComponent GetComponent(in string theLibraryName);
 
 //!  Stops the %Session (It must be idle)
-    void StopSession() raises(GUIActive, RunningStudies) ;
+    void StopSession() raises(GUIActive, RunningStudy) ;
 
 //!  Gets Session State
     StatSession GetStatSession() ;
@@ -94,8 +93,6 @@ module SALOME
     long getPID();
 //!  Returns host name
     string getHostname();
-//!  Get Active study ID
-    long GetActiveStudyId();
 //!  Restores a state of the study at theSavePoint
     boolean restoreVisualState(in long theSavePoint);
 
index 5648c41fda83d0965b2bc2d63a7a2277424d061d..3a87aaddedbe4b74ad3bf86eab75d81d8c76e05c 100644 (file)
@@ -77,7 +77,6 @@
                <component-author>NRI</component-author>
                <component-version>@SALOMEKERNEL_VERSION@</component-version>
                <component-comment>GUI Neutral Context</component-comment>
-               <component-multistudy>1</component-multistudy>
 
        <constraint>hostname = muna</constraint>
        </component>
@@ -88,7 +87,6 @@
                <component-author>NRI</component-author>
                <component-version>@SALOMEKERNEL_VERSION@</component-version>
                <component-comment>GUI Neutral Context</component-comment>
-               <component-multistudy>1</component-multistudy>
                <constraint>'linux' ~ OS</constraint>
        </component>
        <component>
@@ -98,7 +96,6 @@
                <component-author>NRI</component-author>
                <component-version>@SALOMEKERNEL_VERSION@</component-version>
                <component-comment>GUI Neutral Context</component-comment>
-               <component-multistudy>1</component-multistudy>
                <constraint>'linux' ~ OS</constraint>
        </component>
 </component-list>
index dbe0153e75ef44f2336b684e9224c4b91d699d12..5dec70e4bc9d1de7e08dc796573ea1dc72e126f4 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # Current the script does:
 # 1. remove Python documentation in triple double quotes (like """some_comments""")
 #
-# Usage: prepare_generating_doc.py [-o <output_file>] <input_file> 
+# Usage: prepare_generating_doc.py [-o <output_file>] <input_file>
 #
 # If <output_file> is not specified, it is generated in the current directory.
 #
-#################################################################################
+###############################################################################
 
-import os, sys, re
+import os, sys
 
 def main(input_file, output_file = None):
-    
+
     # open input file
     try:
         infile = open(input_file, 'rb')
@@ -50,7 +50,7 @@ def main(input_file, output_file = None):
         pass
 
     if not output_file: output_file = os.path.basename(input_file)
-    
+
     # open output file
     try:
         outfile = open(output_file, 'wb')
@@ -65,8 +65,8 @@ def main(input_file, output_file = None):
 
     for line in infile.readlines():
         # 1. remove comments like """some_comments"""
-        n = line.find('"""')
-        n1 = line[(n+2):].find('"""')
+        n = line.find(b'"""')
+        n1 = line[(n+2):].find(b'"""')
         if (n > -1) and (n1 > -1):
             continue
         if isCom:
@@ -92,14 +92,13 @@ def main(input_file, output_file = None):
     pass
 
 if __name__ == "__main__":
-    import optparse
-    parser = optparse.OptionParser(usage="%prog [options] input_file")
+    import argparse
+    parser = argparse.ArgumentParser()
     h  = "Output file (if not specified, generated in the current directory)"
-    parser.add_option("-o", "--output", dest="output",
-                      action="store", default=None, metavar="file",
-                      help=h)
-    (options, args) = parser.parse_args()
-
-    if len( args ) < 1: sys.exit("Input file is not specified")
-    main( args[0], options.output )
+    parser.add_argument("-o", "--output", dest="output",
+                        action="store", default=None, metavar="file",
+                        help=h)
+    parser.add_argument('input_file')
+    args = parser.parse_args()
+    main( args.input_file, args.output )
     pass
index 8136f11e550e27e2de395f3e89c8daf051c72210..4b61ca056b338a255229895adae9c2fd1dc69f9f 100644 (file)
@@ -58,7 +58,7 @@ EOF
    AC_MSG_RESULT($swig_ok) 
 fi
 
-numpydir=`$PYTHON -c "import numpy;print numpy.get_include()" 2>/dev/null`
+numpydir=`$PYTHON -c "import numpy;print(numpy.get_include())" 2>/dev/null`
 if test -d "$numpydir"; then
    numpy_ok=yes
    PYTHON_INCLUDES="-I$numpydir $PYTHON_INCLUDES"
index 9f153147aac994d4a3e7d919fa9b2e8c9ed823e8..f40fd028207ef0fa1d1f26aa1cd7a85804c95070 100644 (file)
@@ -32,7 +32,7 @@ AC_MSG_CHECKING(for flags used to embed python interpreter)
 changequote(,)dnl
 py_makefile="`$PYTHON -c '
 import sys
-print \"%s/lib/python%s/config/Makefile\"%(sys.exec_prefix, sys.version[:3])'`"
+print(\"%s/lib/python%s/config/Makefile\"%(sys.exec_prefix, sys.version[:3]))'`"
 changequote([,])dnl
 if test ! -f "$py_makefile"; then
    AC_MSG_ERROR([*** Couldn't find the python config makefile.  Maybe you are
@@ -44,11 +44,11 @@ py_lib="`$PYTHON -c '
 import sys
 ver = sys.version[:3]
 pre = sys.exec_prefix
-print \"-L%s/lib/python%s/config\" % (pre, ver),
+print(\"-L%s/lib/python%s/config\" % (pre, ver)),
 if ver == \"1.4\":
-        print \"-lPython -lObjects -lParser\"
+        print(\"-lPython -lObjects -lParser\")
 else:
-        print \"-lpython\" + ver
+        print(\"-lpython\" + ver)
 
 changequote([,])dnl
 
@@ -83,7 +83,7 @@ AC_MSG_CHECKING(for config.c.in)
 changequote(,)dnl
 py_config_in="`$PYTHON -c '
 import sys
-print \"%s/lib/python%s/config/config.c.in\"%(sys.exec_prefix, sys.version[:3])'`"
+print(\"%s/lib/python%s/config/config.c.in\"%(sys.exec_prefix, sys.version[:3]))'`"
 changequote([,])dnl
 if test ! -f "$py_config_in"; then
    AC_MSG_ERROR([*** Couldn't find the config.c.in file.  Maybe you are
index 9153ded5dd5a30adff64a51900e42f55ad287d46..833f4c90ae227764ca8ca6ebe3da685d5b492ca4 100644 (file)
@@ -37,33 +37,31 @@ dnl a `module'.
 
 AC_DEFUN([CHECK_PYTHON],
  [
+  AC_BEFORE([$0],[AM_PATH_PYTHON])
+  AC_REQUIRE([AC_LINKER_OPTIONS])dnl
+
   python_ok=yes
  
-  AC_ARG_WITH(python,
-   [AC_HELP_STRING([--with-python=DIR],[root directory path of python installation])],
-   [PYTHON="$withval/bin/python"
-    AC_MSG_RESULT("select python distribution in $withval")
-   ], [
-    AC_PATH_PROG(PYTHON, python)
-    ])
+  AM_PATH_PYTHON([3])
   
-  AC_CHECKING([local Python configuration])
-
-  AC_REQUIRE([AC_LINKER_OPTIONS])dnl
-
-  PYTHON_PREFIX=`echo $PYTHON | sed -e "s,[[^/]]*$,,;s,/$,,;s,^$,.,"`
-  PYTHON_PREFIX=`echo $PYTHON_PREFIX | sed -e "s,[[^/]]*$,,;s,/$,,;s,^$,.,"`
-  PYTHONHOME=$PYTHON_PREFIX
-
-  AC_SUBST(PYTHON_PREFIX)
-  AC_SUBST(PYTHONHOME)
-
-  changequote(<<, >>)dnl
-  PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[:3]"`
-  changequote([, ])dnl
-  AC_SUBST(PYTHON_VERSION)
+  AC_MSG_NOTICE([local Python configuration])
+
+  AC_SUBST([python_bin],
+           [`basename ${PYTHON}`] )
+           
+  AC_SUBST([PYTHON_ABIFLAGS],
+           [`${PYTHON} -c "import sys; print (sys.abiflags)"`] )
+           
+  AC_SUBST([PYTHON_PREFIX],
+           [`${PYTHON} -c "import sys; print (sys.prefix)"`] )
+           
+  AC_SUBST([PYTHONHOME],
+           [`${PYTHON} -c "import sys; print (sys.prefix)"`] )
 
   PY_MAKEFILE=${PYTHON_PREFIX}/lib${LIB_LOCATION_SUFFIX}/python$PYTHON_VERSION/config/Makefile
+  if test ! -f "$PY_MAKEFILE"; then
+    PY_MAKEFILE=${PYTHON_PREFIX}/lib${LIB_LOCATION_SUFFIX}/python$PYTHON_VERSION/config-${PYTHON_VERSION}${PYTHON_ABIFLAGS}-${build_cpu}-${build_os}/Makefile
+  fi
   if test ! -f "$PY_MAKEFILE"; then
     # For Ubuntu >= 13.04
     PY_MAKEFILE=${PYTHON_PREFIX}/lib${LIB_LOCATION_SUFFIX}/python$PYTHON_VERSION/config-${build_cpu}-${build_os}/Makefile
@@ -92,13 +90,18 @@ AC_DEFUN([CHECK_PYTHON],
       PYTHON_LIB=$PYTHON_LIBS
       PYTHON_LIBA=${PYTHON_PREFIX}/lib64/python$PYTHON_VERSION/config/libpython$PYTHON_VERSION.a
     fi
+    if test "$PY_MAKEFILE" = "${PYTHON_PREFIX}/lib${LIB_LOCATION_SUFFIX}/python$PYTHON_VERSION/config-${PYTHON_VERSION}${PYTHON_ABIFLAGS}-${build_cpu}-${build_os}/Makefile" ; then
+      PYTHON_LIBS="-L${PYTHON_PREFIX}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/config-${PYTHON_VERSION}${PYTHON_ABIFLAGS}-${build_cpu}-${build_os} -lpython${PYTHON_VERSION}${PYTHON_ABIFLAGS}"
+      PYTHON_LIB=$PYTHON_LIBS
+      PYTHON_LIBA=${PYTHON_PREFIX}/lib${LIB_LOCATION_SUFFIX}/python$PYTHON_VERSION/config-${PYTHON_VERSION}${PYTHON_ABIFLAGS}-${build_cpu}-${build_os}/libpython${PYTHON_VERSION}${PYTHON_ABIFLAGS}.a
+    fi
   fi
 
   dnl At times (like when building shared libraries) you may want
   dnl to know which OS Python thinks this is.
 
   AC_SUBST(PYTHON_PLATFORM)
-  PYTHON_PLATFORM=`$PYTHON -c "import sys; print sys.platform"`
+  PYTHON_PLATFORM=`$PYTHON -c "import sys; print(sys.platform)"`
 
   AC_SUBST(PYTHON_SITE)
   AC_ARG_WITH(python-site,
index 59cefd2d432ae10a89b8969415af848cc96da25b..1a3fde9183a91144c68bea1a33972d1cbb9950ed 100755 (executable)
 
 import os
 import shutil
-import optparse
+import argparse
 
 # Options of this script
 def profileQuickStartParser() :
 
-    parser = optparse.OptionParser( usage = "usage: python app-quickstart.py [options]" )
+    parser = argparse.ArgumentParser( usage = "usage: python app-quickstart.py [options]" )
 
-    parser.add_option('-p',
+    parser.add_argument('-p',
                       "--prefix",
                       metavar="</Path/to/the/sources/of/application>",
-                      type="string",
                       action="store",
                       dest="prefix",
                       default='.',
                       help="Where the application's sources will be generated. [Default : '.']")
 
-    parser.add_option('-m',
+    parser.add_argument('-m',
                       "--modules",
                       metavar="<module1,module2,...>",
-                      type="string",
                       action="store",
                       dest="modules",
                       default='KERNEL,GUI',
                       help="List of the application's modules. [Default : KERNEL,GUI]")
 
-    parser.add_option('-n',
+    parser.add_argument('-n',
                       "--name",
-                      type="string",
                       action="store",
                       dest="name",
                       help="Name of the application")
 
-    parser.add_option('-v',
+    parser.add_argument('-v',
                       "--version",
-                      type="string",
                       action="store",
                       dest="version",
                       default='1.0',
                       help="Version of the application. [Default : 1.0]")
 
-    parser.add_option('-s',
+    parser.add_argument('-s',
                       "--slogan",
-                      type="string",
                       action="store",
                       dest="slogan",
                       default='',
                       help="Slogan of the application.")
 
-    parser.add_option('-f',
+    parser.add_argument('-f',
                       "--force",
                       action="store_true",
                       dest="force",
@@ -85,8 +80,14 @@ def profileGenerateSplash( resources_dir, appname, version, subtext ):
     import ImageDraw
     import ImageFont
 
-    uname = unicode(appname, 'UTF-8')
-    uversion = unicode(version, 'UTF-8')
+    if isinstance(appname, bytes):
+        uname = str(appname, 'UTF-8')
+    else:
+        uname = appname
+    if isinstance(version, bytes):
+        uversion = str(version, 'UTF-8')
+    else:
+        uversion = version
 
     # fonts
     fontbig = ImageFont.truetype( os.path.join( resources_dir, 'Anita semi square.ttf' ), 64)
@@ -98,7 +99,7 @@ def profileGenerateSplash( resources_dir, appname, version, subtext ):
     nbcar = len(uname)
     width = 600
     if nbcar > 12:
-        width = min( width*nbcar/12, 1024) #a little more
+        width = min( width*nbcar//12, 1024) #a little more
     height = 300
     borderX = 30 #50
     borderY = 3 #30
@@ -143,7 +144,10 @@ def profileGenerateLogo( appname, font ):
     import Image
     import ImageDraw
 
-    uname = unicode(appname, 'UTF-8')
+    if isinstance(appname, bytes):
+        uname = str(appname, 'UTF-8')
+    else:
+        uname = appname
 
     # evaluate size before deleting draw
     im = Image.new( "RGBA", (1, 1), (0, 0, 0, 0) )
@@ -157,28 +161,42 @@ def profileGenerateLogo( appname, font ):
     del draw
     return im
 
-   
+
+# Check if filename is a binary file
+def is_binary(filename):
+    """ returns True if filename is a binary file
+    (from https://stackoverflow.com/a/7392391/2531279)
+    """
+    textchars = bytearray({7,8,9,10,12,13,27} | set(range(0x20, 0x100)) - {0x7f})
+    with open(filename, 'rb') as f:
+        s = f.read(512)
+    return bool(s.translate(None, textchars))
+
+
 #Replace strings in the template
-def profileReplaceStrings( src, dst, options ) :
-    with open( dst, "wt" ) as fout:
-        with open( src, "rt" ) as fin:
+def profileReplaceStrings( src, dst, args) :
+    if is_binary(src):
+        shutil.copyfile(src, dst)
+    else:
+        with open( dst, "w") as fout, \
+                open( src, "r") as fin:
             for line in fin:
-                if options.modules == '_NO_' and '[LIST_OF_MODULES]' in line:
+                if args.modules == '_NO_' and '[LIST_OF_MODULES]' in line:
                     line = ''
-                l = line.replace( '[LIST_OF_MODULES]', options.modules )
-                l = l.replace( '[VERSION]', options.version )
-                l = l.replace( '[SLOGAN]', options.slogan )
-                l = l.replace( '[NAME_OF_APPLICATION]', options.name.upper() )
-                l = l.replace( '[Name_of_Application]', options.name )
-                l = l.replace( '(name_of_application)', options.name.lower() )
+                l = line.replace( '[LIST_OF_MODULES]', args.modules )
+                l = l.replace( '[VERSION]', args.version )
+                l = l.replace( '[SLOGAN]', args.slogan )
+                l = l.replace( '[NAME_OF_APPLICATION]', args.name.upper() )
+                l = l.replace( '[Name_of_Application]', args.name )
+                l = l.replace( '(name_of_application)', args.name.lower() )
                 fout.write( l )
 
 
 #Generation of a template profile sources
-def profileGenerateSources( options, args ) :
+def profileGenerateSources( args ) :
 
     #Set name of several directories
-    app_dir = options.prefix
+    app_dir = args.prefix
     app_resources_dir = os.path.join( app_dir, "resources" )
     kernel_root_dir = os.environ["KERNEL_ROOT_DIR"]
     bin_salome_dir = os.path.join( kernel_root_dir, "bin", "salome" )
@@ -187,9 +205,9 @@ def profileGenerateSources( options, args ) :
 
     #Check if the directory of the sources already exists and delete it
     if os.path.exists( app_dir ) :
-        if not options.force :
-            print "Directory %s already exists." %app_dir
-            print "Use option --force to overwrite it."
+        if not args.force :
+            print("Directory %s already exists." %app_dir)
+            print("Use option --force to overwrite it.")
             return
         else :
             shutil.rmtree( app_dir )
@@ -201,7 +219,7 @@ def profileGenerateSources( options, args ) :
         for d in dirs :
             os.mkdir( os.path.join( dst_dir, d ) )
         for f in files :
-            profileReplaceStrings( os.path.join( root, f ), os.path.join( dst_dir, f ), options )
+            profileReplaceStrings( os.path.join( root, f ), os.path.join( dst_dir, f ), args)
 
     #Complete source directory
     contextFiles = [ "salomeContext.py", "salomeContextUtils.py", "parseConfigFile.py" ]
@@ -227,15 +245,15 @@ def profileGenerateSources( options, args ) :
         font = ImageFont.truetype( os.path.join( kernel_resources_dir, "Anita semi square.ttf" ) , 18 )
 
         #Generate and save logo
-        app_logo = profileGenerateLogo( options.name, font )
+        app_logo = profileGenerateLogo( args.name, font )
         app_logo.save( logo_destination, "PNG" )
 
         #Generate and splash screen and about image
-        if options.slogan :
-            subtext = options.slogan
+        if args.slogan :
+            subtext = args.slogan
         else :
             subtext = "Powered by SALOME"
-        im = profileGenerateSplash( kernel_resources_dir, options.name, options.version, subtext )
+        im = profileGenerateSplash( kernel_resources_dir, args.name, args.version, subtext )
         im.save( splash_destination, "PNG" )
         im.save( about_destination, "PNG" )
     else :
@@ -249,22 +267,22 @@ def profileGenerateSources( options, args ) :
             shutil.copy( about_name, splash_destination )
 
     #End of script
-    print "Sources of %s were generated in %s." %( options.name, app_dir )
+    print("Sources of %s were generated in %s." %( args.name, app_dir ))
 
 
 # -----------------------------------------------------------------------------
 
 if __name__ == '__main__':
-    #Get options and args
-    (options, args) = profileQuickStartParser().parse_args()
+    #Get optional and positional args
+    args = profileQuickStartParser().parse_args()
 
     #Check name of the application
-    if not options.name :
+    if not args.name :
         raise RuntimeError( "A name must be given to the application. Please use option --name." )
 
     #Check if the prefix's parent is a directory
-    if not os.path.isdir( os.path.dirname( options.prefix ) ) :
-        raise RuntimeError( "%s is not a directory." % os.path.dirname( options.prefix ) )
+    if not os.path.isdir( os.path.dirname( args.prefix ) ) :
+        raise RuntimeError( "%s is not a directory." % os.path.dirname( args.prefix ) )
 
     #Generate sources of the profile
-    profileGenerateSources( options, args )
+    profileGenerateSources( args )
index 62c813abcbc147727dbdaabd8a2a6d2315898fae..44159b3954c15250affceed3e0a6cfb2e39f8bc8 100644 (file)
@@ -1 +1 @@
-print "Hello world"
+print("Hello world")
index 6a52479a136282178d3c43098f5ff822a959070d..9c33b5d5a7442665a8567bbcbf29f6585edc55c0 100644 (file)
 # define _separator_ '/'
 #endif
 
+#define _extension_ ".hdf"
+
 namespace Kernel_Utils
 {
-  std::string GetBaseName( const std::string& file_path )
+  std::string GetBaseName( const std::string& file_path, const bool with_extension )
   {
+       std::string tmp_str = file_path;
     int pos = file_path.rfind( _separator_ );
     if ( pos >= 0 )
-      return pos < (int)file_path.size()-1 ? file_path.substr( pos+1 ) : "";
-    return file_path;
+      tmp_str = pos < (int)file_path.size()-1 ? file_path.substr( pos+1 ) : "";
+
+    pos = tmp_str.rfind( _extension_ );
+    if( !with_extension && pos >= 0 )
+      tmp_str = pos < (int)tmp_str.size()-1 ? tmp_str.substr( 0, pos ) : "";
+
+    return tmp_str;
   }
 
   std::string GetDirName( const std::string& file_path )
@@ -157,6 +165,15 @@ namespace Kernel_Utils
     return aFilePath;
   }
   
+  std::string AddExtension( const std::string& name )
+  {
+    std::string tmp_str = name;
+    int pos = tmp_str.rfind( _extension_ );
+    if( pos < 0 )
+      return tmp_str.append( _extension_ );
+    return tmp_str;
+  }
+
   //============================================================================
   // function : IsExists
   // purpose  : Returns True(False) if the path (not)exists
index 5c27021f64815007623e91668fda7f21eb2c7fac..f4c7fa5f3f2fe71b425f16f38e8f45779ff06cbc 100644 (file)
@@ -32,7 +32,7 @@
 namespace Kernel_Utils
 {
   // Extracts and returns the base name of the specified file name.
-  BASICS_EXPORT std::string GetBaseName( const std::string& file_path );
+  BASICS_EXPORT std::string GetBaseName( const std::string& file_path, bool with_extension = true );
 
   // Extracts and returns the dir name of the specified file name.
   BASICS_EXPORT std::string GetDirName( const std::string& file_path );
@@ -49,11 +49,13 @@ namespace Kernel_Utils
   // /tmp/something/ for Unix or c:\something\ for WIN32
   BASICS_EXPORT std::string GetTmpDir();
 
-
   // Returns the unique temporary file name without any extension
   // /tmp/something/file for Unix or c:\something\file for WIN32
   BASICS_EXPORT std::string GetTmpFileName();
 
+  // Adds extension in the end of the specified file name.
+  BASICS_EXPORT std::string AddExtension( const std::string& name );
+
   // Returns True(False) if the path (not)exists
   BASICS_EXPORT bool IsExists( const std::string& path );
 
index 0487829cb9aabe886b0db760dbb0ca037e3bb8cc..df5d1a49c34ef2f6e30e32be6e2925fe6b8aa934 100644 (file)
@@ -106,6 +106,36 @@ namespace Kernel_Utils
     return guid;
   }
 
+  const wchar_t* decode(const char* encoded)
+  {
+    setlocale(LC_ALL, "");
+    size_t length = strlen(encoded) + sizeof(char);
+    wchar_t* decoded = new wchar_t[length];
+    memset( decoded, '\0', length);
+    mbstowcs(decoded, encoded, length);
+    return decoded;
+  }
+
+  const wchar_t* decode_s(std::string encoded)
+  {
+    return decode(encoded.c_str());
+  }
+
+  const char* encode(const wchar_t* decoded)
+  {
+    setlocale(LC_ALL, "");
+    size_t length = std::wcslen(decoded) + sizeof(wchar_t);
+    char* encoded = new char[length];
+    memset( encoded, '\0', length);
+    wcstombs(encoded, decoded, length);
+    return encoded;
+  }
+
+  std::string encode_s(const wchar_t* decoded)
+  {
+    return std::string(encode(decoded));
+  }
+
 #ifndef WIN32
   void print_traceback()
   {
index 868fd3f9a8f1222978ec3a5f0220ae0a94221891..3468d205e80714726843952ef4929f8009684318 100644 (file)
@@ -56,6 +56,11 @@ namespace Kernel_Utils
     ObjectdID       //!< Global usage object identifier ID
   };
 
+  const wchar_t* decode(const char* encoded);
+  const wchar_t* decode_s(std::string encoded);
+  const char* encode(const wchar_t* decoded);
+  std::string encode_s(const wchar_t* decoded);
+
   //! Get predefined GUID
   BASICS_EXPORT std::string GetGUID( GUIDtype );
 #ifndef WIN32
index 7ee54b5b89c38e663aaccae6e0e8a2eecf1cbff3..9396baf818612f157621430677ed7b427e04729f 100755 (executable)
@@ -20,7 +20,7 @@
 INCLUDE(${SWIG_USE_FILE})
 
 SET_SOURCE_FILES_PROPERTIES(libSALOME_Comm.i PROPERTIES CPLUSPLUS ON)
-SET_SOURCE_FILES_PROPERTIES(libSALOME_Comm.i PROPERTIES SWIG_DEFINITIONS "-shadow")
+SET_SOURCE_FILES_PROPERTIES(libSALOME_Comm.i PROPERTIES SWIG_FLAGS "-py3")
 
 INCLUDE_DIRECTORIES(
   ${PYTHON_INCLUDE_DIRS}
index 6cbff9c6d42864b257994131caaaf586eed26a45..be654198a8dfd7b4ec9c29e8ade0cab6dbc529c6 100644 (file)
@@ -51,7 +51,6 @@ int SIGUSR11 = 1000;
 extern bool _Sleeping ;
 static Engines_Component_i * theEngines_Component ;
 
-bool Engines_Component_i::_isMultiStudy = true;
 bool Engines_Component_i::_isMultiInstance = false;
 
 /*! \class Engines_Component_i
@@ -101,7 +100,6 @@ Engines_Component_i::Engines_Component_i(CORBA::ORB_ptr orb,
   _Executed(false) ,
   _graphName("") ,
   _nodeName(""),
-  _studyId(-1),
   _id(0),
   _contId(0),
   _CanceledThread(false)
@@ -155,7 +153,6 @@ Engines_Component_i::Engines_Component_i(CORBA::ORB_ptr orb,
   _Executed(false) ,
   _graphName("") ,
   _nodeName(""),
-  _studyId(-1),
   _id(0),
   _contId(0),
   _CanceledThread(false)
@@ -227,20 +224,6 @@ char* Engines_Component_i::interfaceName()
   return CORBA::string_dup(_interfaceName.c_str()) ;
 }
 
-//=============================================================================
-/*!
- *  CORBA method: Get study Id
- *  \return -1: not initialised (Internal Error)
- *           0: multistudy component instance
- *          >0: study id associated to this instance
- */
-//=============================================================================
-
-CORBA::Long Engines_Component_i::getStudyId()
-{
-  return _studyId;
-}
-
 //=============================================================================
 /*!
  *  CORBA method: Test if instance is alive and responds
@@ -606,31 +589,6 @@ Engines_Container_i *Engines_Component_i::GetContainerPtr()
   return dynamic_cast<Engines_Container_i*>(_poa->id_to_servant(contId)) ;
 }
 
-//=============================================================================
-/*!
- *  C++ method: set study Id
- *  \param studyId         0 if instance is not associated to a study,
- *                         >0 otherwise (== study id)
- *  \return true if the set of study Id is OK
- *  must be set once by Container, at instance creation,
- *  and cannot be changed after.
- */
-//=============================================================================
-
-CORBA::Boolean Engines_Component_i::setStudyId(CORBA::Long studyId)
-{
-  ASSERT( studyId >= 0);
-  CORBA::Boolean ret = false;
-  if (_studyId < 0) // --- not yet initialized
-    {
-      _studyId = studyId;
-      ret = true;
-    }
-  else
-    if ( _studyId == studyId) ret = true;
-  return ret;
-}
-
 //=============================================================================
 /*!
  *  C++ method: return CORBA instance id, the id is set in derived class
@@ -915,12 +873,11 @@ std::string Engines_Component_i::GetDynLibraryName(const char *componentName)
  */
 //=============================================================================
 
-Engines::TMPFile* Engines_Component_i::DumpPython(CORBA::Object_ptr theStudy,
-                                                  CORBA::Boolean isPublished,
+Engines::TMPFile* Engines_Component_i::DumpPython(CORBA::Boolean isPublished,
                                                   CORBA::Boolean isMultiFile,
                                                   CORBA::Boolean& isValidScript)
 {
-  const char* aScript = isMultiFile ? "def RebuildData(theStudy): pass" : "";
+  const char* aScript = isMultiFile ? "def RebuildData(): pass" : "";
   char* aBuffer = new char[strlen(aScript)+1];
   strcpy(aBuffer, aScript);
   CORBA::Octet* anOctetBuf =  (CORBA::Octet*)aBuffer;
index 19eb2de774098aa9bd0f5a93448c5a33b6b6302c..d34b36ba839674dd460eded40ab72b38c99b31ff 100644 (file)
@@ -259,17 +259,17 @@ Engines_Container_i::~Engines_Container_i()
   if(_NS)
     delete _NS;
   for(std::map<std::string,Engines::PyNode_var>::iterator it=_dftPyNode.begin();it!=_dftPyNode.end();it++)
-    {
-      Engines::PyNode_var tmpVar((*it).second);
-      if(!CORBA::is_nil(tmpVar))
-        tmpVar->UnRegister();
-    }
+  {
+    Engines::PyNode_var tmpVar((*it).second);
+    if(!CORBA::is_nil(tmpVar))
+      tmpVar->UnRegister();
+  }
   for(std::map<std::string,Engines::PyScriptNode_var>::iterator it=_dftPyScriptNode.begin();it!=_dftPyScriptNode.end();it++)
-    {
-      Engines::PyScriptNode_var tmpVar((*it).second);
-      if(!CORBA::is_nil(tmpVar))
-        tmpVar->UnRegister();
-    }
+  {
+    Engines::PyScriptNode_var tmpVar((*it).second);
+    if(!CORBA::is_nil(tmpVar))
+      tmpVar->UnRegister();
+  }
 }
 
 //=============================================================================
@@ -374,20 +374,20 @@ void Engines_Container_i::Shutdown()
   */
   std::map<std::string, Engines::EngineComponent_var>::iterator itm;
   for (itm = _listInstances_map.begin(); itm != _listInstances_map.end(); itm++)
+  {
+    try
     {
-      try
-        {
-          itm->second->destroy();
-        }
-      catch(const CORBA::Exception& e)
-        {
-          // ignore this entry and continue
-        }
-      catch(...)
-        {
-          // ignore this entry and continue
-        }
+      itm->second->destroy();
+    }
+    catch(const CORBA::Exception& e)
+    {
+      // ignore this entry and continue
     }
+    catch(...)
+    {
+      // ignore this entry and continue
+    }
+  }
   _listInstances_map.clear();
 
   _NS->Destroy_FullDirectory(_containerName.c_str());
@@ -418,15 +418,15 @@ Engines_Container_i::load_component_Library(const char* componentName, CORBA::St
   //=================================================================
   std::string retso;
   if(load_component_CppImplementation(componentName,retso))
-    {
-      reason=CORBA::string_dup("");
-      return true;
-    }
+  {
+    reason=CORBA::string_dup("");
+    return true;
+  }
   else if(retso != "ImplementationNotFound")
-    {
-      reason=CORBA::string_dup(retso.c_str());
-      return false;
-    }
+  {
+    reason=CORBA::string_dup(retso.c_str());
+    return false;
+  }
 
   retso="Component ";
   retso+=componentName;
@@ -438,15 +438,15 @@ Engines_Container_i::load_component_Library(const char* componentName, CORBA::St
   //=================================================================
   std::string retpy;
   if(load_component_PythonImplementation(componentName,retpy))
-    {
-      reason=CORBA::string_dup("");
-      return true;
-    }
+  {
+    reason=CORBA::string_dup("");
+    return true;
+  }
   else if(retpy != "ImplementationNotFound")
-    {
-      reason=CORBA::string_dup(retpy.c_str());
-      return false;
-    }
+  {
+    reason=CORBA::string_dup(retpy.c_str());
+    return false;
+  }
   
   retpy="Component ";
   retpy+=componentName;
@@ -459,15 +459,15 @@ Engines_Container_i::load_component_Library(const char* componentName, CORBA::St
   //=================================================================
   std::string retex;
   if(load_component_ExecutableImplementation(componentName,retex))
-    {
-      reason=CORBA::string_dup("");
-      return true;
-    }
+  {
+    reason=CORBA::string_dup("");
+    return true;
+  }
   else if(retex != "ImplementationNotFound")
-    {
-      reason=CORBA::string_dup(retex.c_str());
-      return false;
-    }
+  {
+    reason=CORBA::string_dup(retex.c_str());
+    return false;
+  }
 
   retex="Component ";
   retex+=componentName;
@@ -508,21 +508,21 @@ Engines_Container_i::load_component_CppImplementation(const char* componentName,
   // (see decInstanceCnt, finalize_removal))
   if (_toRemove_map.count(impl_name) != 0) _toRemove_map.erase(impl_name);
   if (_library_map.count(impl_name) != 0)
-    {
-      MESSAGE("Library " << impl_name << " already loaded");
-      _numInstanceMutex.unlock();
-      reason="";
-      return true;
-    }
+  {
+    MESSAGE("Library " << impl_name << " already loaded");
+    _numInstanceMutex.unlock();
+    reason="";
+    return true;
+  }
   _numInstanceMutex.unlock();
 
 #ifndef WIN32
   void* handle;
   handle = dlopen( impl_name.c_str() , RTLD_NOW | RTLD_GLOBAL ) ;
   if ( !handle )
-    {
-      //not loadable. Try to find the lib file in LD_LIBRARY_PATH
-      std::string path;
+  {
+    //not loadable. Try to find the lib file in LD_LIBRARY_PATH
+    std::string path;
 #ifdef __APPLE__
       char* p=getenv("DYLD_LIBRARY_PATH");
 #else
@@ -550,25 +550,25 @@ Engines_Container_i::load_component_CppImplementation(const char* componentName,
           //continue with other implementation
           reason="ImplementationNotFound";
           return false;
-        }
     }
+  }
 #else
   HINSTANCE handle;
   handle = LoadLibrary( impl_name.c_str() );
   if ( !handle )
-    {
-      reason="ImplementationNotFound";
-    }
+  {
+    reason="ImplementationNotFound";
+  }
 #endif
 
   if ( handle )
-    {
-      _numInstanceMutex.lock();
-      _library_map[impl_name] = handle;
-      _numInstanceMutex.unlock();
-      reason="";
-      return true;
-    }
+  {
+    _numInstanceMutex.lock();
+    _library_map[impl_name] = handle;
+    _numInstanceMutex.unlock();
+    reason="";
+    return true;
+  }
 
   return false;
 
@@ -589,11 +589,11 @@ Engines_Container_i::load_component_PythonImplementation(const char* componentNa
 
   _numInstanceMutex.lock() ; // lock to be alone (stl container write)
   if (_library_map.count(aCompName) != 0)
-    {
-      _numInstanceMutex.unlock() ;
-      reason="";
-      return true; // Python Component, already imported
-    }
+  {
+    _numInstanceMutex.unlock() ;
+    reason="";
+    return true; // Python Component, already imported
+  }
   _numInstanceMutex.unlock() ;
 
   PyGILState_STATE gstate = PyGILState_Ensure();
@@ -601,30 +601,30 @@ Engines_Container_i::load_component_PythonImplementation(const char* componentNa
                                          (char*)"import_component",
                                          (char*)"s",componentName);
 
-  reason=PyString_AsString(result);
+  reason=PyUnicode_AsUTF8(result);
   Py_XDECREF(result);
   SCRUTE(reason);
   PyGILState_Release(gstate);
 
   if (reason=="")
-    {
-      //Python component has been loaded (import componentName)
-      _numInstanceMutex.lock() ; // lock to be alone (stl container write)
-      _library_map[aCompName] = (void *)_pyCont; // any non O value OK
-      _numInstanceMutex.unlock() ;
-      MESSAGE("import Python: "<< aCompName <<" OK");
-      return true;
-    }
+  {
+    //Python component has been loaded (import componentName)
+    _numInstanceMutex.lock() ; // lock to be alone (stl container write)
+    _library_map[aCompName] = (void *)_pyCont; // any non O value OK
+    _numInstanceMutex.unlock() ;
+    MESSAGE("import Python: "<< aCompName <<" OK");
+    return true;
+  }
   else if(reason=="ImplementationNotFound")
-    {
-      //Python implementation has not been found. Continue with other implementation
-      reason="ImplementationNotFound";
-    }
+  {
+    //Python implementation has not been found. Continue with other implementation
+    reason="ImplementationNotFound";
+  }
   else
-    {
-      //Python implementation has been found but loading has failed
-      std::cerr << reason << std::endl;
-    }
+  {
+    //Python implementation has been found but loading has failed
+    std::cerr << reason << std::endl;
+  }
   return false;
 
 }
@@ -650,27 +650,27 @@ Engines_Container_i::load_component_ExecutableImplementation(const char* compone
   if(p)path=p;
 
   if (findpathof(path, pth, executable))
+  {
+    if(checkifexecutable(pth))
     {
-      if(checkifexecutable(pth))
-        {
-          _numInstanceMutex.lock() ; // lock to be alone (stl container write)
-          _library_map[executable] = (void *)1; // any non O value OK
-          _numInstanceMutex.unlock() ;
-          MESSAGE("import executable: "<< pth <<" OK");
-          reason="";
-          return true;
-        }
-      reason="Component ";
-      reason+=aCompName;
-      reason+=": implementation found ";
-      reason+=pth;
-      reason+=" but it is not executable";
-      std::cerr << reason << std::endl;
+      _numInstanceMutex.lock() ; // lock to be alone (stl container write)
+      _library_map[executable] = (void *)1; // any non O value OK
+      _numInstanceMutex.unlock() ;
+      MESSAGE("import executable: "<< pth <<" OK");
+      reason="";
+      return true;
     }
+    reason="Component ";
+    reason+=aCompName;
+    reason+=": implementation found ";
+    reason+=pth;
+    reason+=" but it is not executable";
+    std::cerr << reason << std::endl;
+  }
   else
-    {
-      reason="ImplementationNotFound";
-    }
+  {
+    reason="ImplementationNotFound";
+  }
   return false;
 }
 
@@ -681,19 +681,16 @@ Engines_Container_i::load_component_ExecutableImplementation(const char* compone
 *  The servant registers itself to naming service and Registry.
 *  \param genericRegisterName  Name of the component instance to register
 *                         in Registry & Name Service (without _inst_n suffix)
-*  \param studyId         0 for multiStudy instance, 
-*                         study Id (>0) otherwise
 *  \return a loaded component
 */
 //=============================================================================
 Engines::EngineComponent_ptr
-Engines_Container_i::create_component_instance(const char*genericRegisterName,
-                                               CORBA::Long studyId)
+Engines_Container_i::create_component_instance(const char*genericRegisterName)
 {
   Engines::FieldsDict_var env = new Engines::FieldsDict;
   char* reason;
   Engines::EngineComponent_ptr compo =
-    create_component_instance_env(genericRegisterName, studyId, env, reason);
+    create_component_instance_env(genericRegisterName, env, reason);
   CORBA::string_free(reason);
   return compo;
 }
@@ -705,8 +702,6 @@ Engines_Container_i::create_component_instance(const char*genericRegisterName,
 *  The servant registers itself to naming service and Registry.
 *  \param genericRegisterName  Name of the component instance to register
 *                         in Registry & Name Service (without _inst_n suffix)
-*  \param studyId         0 for multiStudy instance, 
-*                         study Id (>0) otherwise
 *  \param env             dict of env variables
 *  \param reason          explains error when create_component_instance_env fails
 *  \return a loaded component
@@ -714,44 +709,36 @@ Engines_Container_i::create_component_instance(const char*genericRegisterName,
 //=============================================================================
 Engines::EngineComponent_ptr
 Engines_Container_i::create_component_instance_env(const char*genericRegisterName,
-                                                   CORBA::Long studyId,
                                                    const Engines::FieldsDict& env,
                                                    CORBA::String_out reason)
 {
-  if (studyId < 0)
-    {
-      INFOS("studyId must be > 0 for mono study instance, =0 for multiStudy");
-      reason=CORBA::string_dup("studyId must be > 0 for mono study instance, =0 for multiStudy");
-      return Engines::EngineComponent::_nil() ;
-    }
-
   std::string error;
   if (_library_map.count(genericRegisterName) != 0)
-    {
-      // It's a Python component
-      Engines::EngineComponent_ptr compo = createPythonInstance(genericRegisterName, studyId, error);
-      reason=CORBA::string_dup(error.c_str());
-      return compo;
-    }
+  {
+    // It's a Python component
+    Engines::EngineComponent_ptr compo = createPythonInstance(genericRegisterName, error);
+    reason=CORBA::string_dup(error.c_str());
+    return compo;
+  }
 
   std::string impl_name = std::string(LIB) + genericRegisterName + ENGINESO;
   if (_library_map.count(impl_name) != 0)
-    {
-      // It's a C++ component
-      void* handle = _library_map[impl_name];
-      Engines::EngineComponent_ptr compo = createInstance(genericRegisterName, handle, studyId, error);
-      reason=CORBA::string_dup(error.c_str());
-      return compo;
-    }
+  {
+    // It's a C++ component
+    void* handle = _library_map[impl_name];
+    Engines::EngineComponent_ptr compo = createInstance(genericRegisterName, handle, error);
+    reason=CORBA::string_dup(error.c_str());
+    return compo;
+  }
 
   impl_name = std::string(genericRegisterName) + ".exe";
   if (_library_map.count(impl_name) != 0)
-    {
-      //It's an executable component
-      Engines::EngineComponent_ptr compo = createExecutableInstance(genericRegisterName, studyId, env, error);
-      reason=CORBA::string_dup(error.c_str());
-      return compo;
-    }
+  {
+    //It's an executable component
+    Engines::EngineComponent_ptr compo = createExecutableInstance(genericRegisterName, env, error);
+    reason=CORBA::string_dup(error.c_str());
+    return compo;
+  }
 
   error="load_component_Library has probably not been called for component: ";
   error += genericRegisterName;
@@ -764,8 +751,6 @@ Engines_Container_i::create_component_instance_env(const char*genericRegisterNam
 //! Create a new component instance (Executable implementation)
 /*! 
 *  \param CompName               Name of the component instance
-*  \param studyId                0 for multiStudy instance, 
-*                                study Id (>0) otherwise
 *  \param env                    dict of env variables
 *  \param reason                 explains error when creation fails
 *  \return a loaded component
@@ -776,7 +761,7 @@ Engines_Container_i::create_component_instance_env(const char*genericRegisterNam
 */
 //=============================================================================
 Engines::EngineComponent_ptr
-Engines_Container_i::createExecutableInstance(std::string CompName, int studyId,
+Engines_Container_i::createExecutableInstance(std::string CompName,
                                               const Engines::FieldsDict& env,
                                               std::string& reason)
 {
@@ -830,35 +815,35 @@ Engines_Container_i::createExecutableInstance(std::string CompName, int studyId,
   int status;
   pid_t pid = fork();
   if(pid == 0) // child
+  {
+    for (CORBA::ULong i=0; i < env.length(); i++)
     {
-      for (CORBA::ULong i=0; i < env.length(); i++)
-        {
-          if (env[i].value.type()->kind() == CORBA::tk_string)
-            {
-              const char* value;
-              env[i].value >>= value;
-              std::string s(env[i].key);
-              s+='=';
-              s+=value;
-              putenv(strdup(s.c_str()));
-            }
-        }
-
-      execl("/bin/sh", "sh", "-c", command.c_str() , (char *)0);
-      status=-1;
+      if (env[i].value.type()->kind() == CORBA::tk_string)
+      {
+        const char* value;
+        env[i].value >>= value;
+        std::string s(env[i].key);
+        s+='=';
+        s+=value;
+        putenv(strdup(s.c_str()));
+      }
     }
+
+    execl("/bin/sh", "sh", "-c", command.c_str() , (char *)0);
+    status=-1;
+  }
   else if(pid < 0)       // failed to fork
-    {
-      status=-1;
-    }
+  {
+    status=-1;
+  }
   else            //parent
+  {
+    pid_t tpid;
+    do
     {
-      pid_t tpid;
-      do
-        {
-          tpid = wait(&status);
-        } while (tpid != pid);
-    }
+      tpid = wait(&status);
+    } while (tpid != pid);
+  }
 #else
   // launch component with a system call
   int status=system(command.c_str());
@@ -928,14 +913,12 @@ Engines_Container_i::createExecutableInstance(std::string CompName, int studyId,
 //! Create a new component instance (Python implementation)
 /*! 
 *  \param CompName               Name of the component instance
-*  \param studyId                0 for multiStudy instance, 
-*                                study Id (>0) otherwise
 *  \param reason                 explains error when creation fails
 *  \return a loaded component
 */
 //=============================================================================
 Engines::EngineComponent_ptr
-Engines_Container_i::createPythonInstance(std::string CompName, int studyId,
+Engines_Container_i::createPythonInstance(std::string CompName,
                                           std::string& reason)
 {
   Engines::EngineComponent_var iobject = Engines::EngineComponent::_nil() ;
@@ -953,10 +936,9 @@ Engines_Container_i::createPythonInstance(std::string CompName, int studyId,
   PyGILState_STATE gstate = PyGILState_Ensure();
   PyObject *result = PyObject_CallMethod(_pyCont,
                                          (char*)"create_component_instance",
-                                         (char*)"ssl",
+                                         (char*)"ss",
                                          CompName.c_str(),
-                                         instanceName.c_str(),
-                                         studyId);
+                                         instanceName.c_str());
   const char *ior;
   const char *error;
   PyArg_ParseTuple(result,"ss", &ior, &error);
@@ -966,11 +948,11 @@ Engines_Container_i::createPythonInstance(std::string CompName, int studyId,
   PyGILState_Release(gstate);
 
   if( iors!="" )
-    {
-      CORBA::Object_var obj = _orb->string_to_object(iors.c_str());
-      iobject = Engines::EngineComponent::_narrow( obj ) ;
-      _listInstances_map[instanceName] = iobject;
-    }
+  {
+    CORBA::Object_var obj = _orb->string_to_object(iors.c_str());
+    iobject = Engines::EngineComponent::_narrow( obj ) ;
+    _listInstances_map[instanceName] = iobject;
+  }
   return iobject._retn();
 }
 
@@ -993,10 +975,9 @@ Engines_Container_i::create_python_service_instance(const char * CompName,
   PyGILState_STATE gstate = PyGILState_Ensure();
   PyObject *result = PyObject_CallMethod(_pyCont,
                                          (char*)"create_component_instance",
-                                         (char*)"ssl",
+                                         (char*)"ss",
                                          CompName,
-                                         instanceName.c_str(),
-                                         0);
+                                         instanceName.c_str());
   const char *ior;
   const char *error;
   PyArg_ParseTuple(result,"ss", &ior, &error);
@@ -1017,8 +998,6 @@ Engines_Container_i::create_python_service_instance(const char * CompName,
 *                                in Registry & Name Service,
 *                                (without _inst_n suffix, like "COMPONENT")
 *  \param handle                 loaded library handle
-*  \param studyId                0 for multiStudy instance, 
-*                                study Id (>0) otherwise
 *  \param reason                 explains error when creation fails
 *  \return a loaded component
 * 
@@ -1034,7 +1013,6 @@ Engines_Container_i::create_python_service_instance(const char * CompName,
 Engines::EngineComponent_ptr
 Engines_Container_i::createInstance(std::string genericRegisterName,
                                     void *handle,
-                                    int studyId,
                                     std::string& reason)
 {
   // --- find the factory
@@ -1088,30 +1066,23 @@ Engines_Container_i::createInstance(std::string genericRegisterName,
     id = (Component_factory) ( _orb, _poa, _id, instanceName.c_str(),
                                                 aGenRegisterName.c_str() ) ;
     if (id == NULL)
-      {
-        reason="Can't get ObjectId from factory";
-        INFOS(reason);
-        return iobject._retn();
-      }
+    {
+      reason="Can't get ObjectId from factory";
+      INFOS(reason);
+      return iobject._retn();
+    }
 
-    // --- get reference & servant from id
+    // --- get reference from id
 
     CORBA::Object_var obj = _poa->id_to_reference(*id);
     iobject = Engines::EngineComponent::_narrow( obj ) ;
 
-    Engines_Component_i *servant =
-      dynamic_cast<Engines_Component_i*>(_poa->reference_to_servant(iobject));
-    ASSERT(servant);
-    //SCRUTE(servant->_refcount_value());
     _numInstanceMutex.lock() ; // lock to be alone (stl container write)
     _listInstances_map[instanceName] = iobject;
     _cntInstances_map[aGenRegisterName] += 1;
     _numInstanceMutex.unlock() ;
     SCRUTE(aGenRegisterName);
     SCRUTE(_cntInstances_map[aGenRegisterName]);
-    servant->setStudyId(studyId);
-    servant->_remove_ref(); // do not need servant any more (remove ref from reference_to_servant)
-    //SCRUTE(servant->_refcount_value());
 
     // --- register the engine under the name
     //     containerName(.dir)/instanceName(.object)
@@ -1133,14 +1104,11 @@ Engines_Container_i::createInstance(std::string genericRegisterName,
 *  CORBA method: Finds a servant instance of a component
 *  \param registeredName  Name of the component in Registry or Name Service,
 *                         without instance suffix number
-*  \param studyId         0 if instance is not associated to a study,
-*                         >0 otherwise (== study id)
-*  \return the first instance found with same studyId
+*  \return the first found instance
 */
 //=============================================================================
 Engines::EngineComponent_ptr
-Engines_Container_i::find_component_instance( const char* registeredName,
-                                              CORBA::Long studyId)
+Engines_Container_i::find_component_instance( const char* registeredName)
 {
   Engines::EngineComponent_var anEngine = Engines::EngineComponent::_nil();
   std::map<std::string,Engines::EngineComponent_var>::iterator itm =_listInstances_map.begin();
@@ -1151,10 +1119,7 @@ Engines_Container_i::find_component_instance( const char* registeredName,
     if (instance.find(registeredName) == 0)
     {
       anEngine = (*itm).second;
-      if (studyId == anEngine->getStudyId())
-      {
-        return anEngine._retn();
-      }
+      return anEngine._retn();
     }
     itm++;
   }
@@ -1320,29 +1285,11 @@ Engines_Container_i::find_or_create_instance(std::string genericRegisterName,
       {
         iobject = createInstance(genericRegisterName,
                                  handle,
-                                 0,
-                                 reason); // force multiStudy instance here !
+                                 reason);
       }
       else
       {
         iobject = Engines::EngineComponent::_narrow( obj ) ;
-        Engines_Component_i *servant =
-          dynamic_cast<Engines_Component_i*>
-          (_poa->reference_to_servant(iobject));
-        ASSERT(servant)
-          int studyId = servant->getStudyId();
-        ASSERT (studyId >= 0);
-        if (studyId == 0) // multiStudy instance, OK
-        {
-          // No ReBind !
-          MESSAGE(component_registerBase.c_str()<<" already bound");
-        }
-        else // monoStudy instance: NOK
-        {
-          iobject = Engines::EngineComponent::_nil();
-          INFOS("load_impl & find_component_instance methods "
-            << "NOT SUITABLE for mono study components");
-        }
       }
     }
     catch (...)
@@ -1632,36 +1579,36 @@ void Engines_Container_i::copyFile(Engines::Container_ptr container, const char*
 
   FILE* fp;
   if ((fp = fopen(localFile,"wb")) == NULL)
-    {
-      INFOS("file " << localFile << " cannot be open for writing");
-      return;
-    }
+  {
+    INFOS("file " << localFile << " cannot be open for writing");
+    return;
+  }
 
   CORBA::Long fileId = fileTransfer->open(remoteFile);
   if (fileId > 0)
+  {
+    Engines::fileBlock* aBlock;
+    int toFollow = 1;
+    int ctr=0;
+    while (toFollow)
     {
-      Engines::fileBlock* aBlock;
-      int toFollow = 1;
-      int ctr=0;
-      while (toFollow)
-        {
-          ctr++;
-          //SCRUTE(ctr);
-          aBlock = fileTransfer->getBlock(fileId);
-          toFollow = aBlock->length();
-          //SCRUTE(toFollow);
-          CORBA::Octet *buf = aBlock->get_buffer();
-          fwrite(buf, sizeof(CORBA::Octet), toFollow, fp);
-          delete aBlock;
-        }
-      fclose(fp);
-      MESSAGE("end of transfer");
-      fileTransfer->close(fileId);
+      ctr++;
+      //SCRUTE(ctr);
+      aBlock = fileTransfer->getBlock(fileId);
+      toFollow = aBlock->length();
+      //SCRUTE(toFollow);
+      CORBA::Octet *buf = aBlock->get_buffer();
+      fwrite(buf, sizeof(CORBA::Octet), toFollow, fp);
+      delete aBlock;
     }
+    fclose(fp);
+    MESSAGE("end of transfer");
+    fileTransfer->close(fileId);
+  }
   else
-    {
-      INFOS("open reference file for copy impossible");
-    }
+  {
+    INFOS("open reference file for copy impossible");
+  }
 }
 
 //=============================================================================
@@ -1673,57 +1620,57 @@ void Engines_Container_i::copyFile(Engines::Container_ptr container, const char*
 //=============================================================================
 Engines::PyNode_ptr Engines_Container_i::createPyNode(const char* nodeName, const char* code)
 {
-    Engines::PyNode_var node= Engines::PyNode::_nil();
+  Engines::PyNode_var node= Engines::PyNode::_nil();
 
-    PyGILState_STATE gstate = PyGILState_Ensure();
-    PyObject *res = PyObject_CallMethod(_pyCont,
-      (char*)"create_pynode",
-      (char*)"ss",
-      nodeName,
-      code);
-    if(res==NULL)
-      {
-        //internal error
-        PyErr_Print();
-        PyGILState_Release(gstate);
-        SALOME::ExceptionStruct es;
-        es.type = SALOME::INTERNAL_ERROR;
-        es.text = "can not create a python node";
-        throw SALOME::SALOME_Exception(es);
-      }
-    long ierr=PyInt_AsLong(PyTuple_GetItem(res,0));
-    PyObject* result=PyTuple_GetItem(res,1);
-    std::string astr=PyString_AsString(result);
-    Py_DECREF(res);
+  PyGILState_STATE gstate = PyGILState_Ensure();
+  PyObject *res = PyObject_CallMethod(_pyCont,
+    (char*)"create_pynode",
+    (char*)"ss",
+    nodeName,
+    code);
+  if(res==NULL)
+  {
+    //internal error
+    PyErr_Print();
     PyGILState_Release(gstate);
-    if(ierr==0)
-      {
-        Utils_Locker lck(&_mutexForDftPy);
-        CORBA::Object_var obj=_orb->string_to_object(astr.c_str());
-        node=Engines::PyNode::_narrow(obj);
-        std::map<std::string,Engines::PyNode_var>::iterator it(_dftPyNode.find(nodeName));
-        if(it==_dftPyNode.end())
-          {
-            _dftPyNode[nodeName]=node;
-          }
-        else
-          {
-            Engines::PyNode_var oldNode((*it).second);
-            if(!CORBA::is_nil(oldNode))
-              oldNode->UnRegister();
-            (*it).second=node;
-          }
-        if(!CORBA::is_nil(node))
-          node->Register();
-        return node._retn();
-      }
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::INTERNAL_ERROR;
+    es.text = "can not create a python node";
+    throw SALOME::SALOME_Exception(es);
+  }
+  long ierr=PyLong_AsLong(PyTuple_GetItem(res,0));
+  PyObject* result=PyTuple_GetItem(res,1);
+  std::string astr=PyUnicode_AsUTF8(result);
+  Py_DECREF(res);
+  PyGILState_Release(gstate);
+  if(ierr==0)
+  {
+    Utils_Locker lck(&_mutexForDftPy);
+    CORBA::Object_var obj=_orb->string_to_object(astr.c_str());
+    node=Engines::PyNode::_narrow(obj);
+    std::map<std::string,Engines::PyNode_var>::iterator it(_dftPyNode.find(nodeName));
+    if(it==_dftPyNode.end())
+    {
+      _dftPyNode[nodeName]=node;
+    }
     else
-      {
-        SALOME::ExceptionStruct es;
-        es.type = SALOME::INTERNAL_ERROR;
-        es.text = astr.c_str();
-        throw SALOME::SALOME_Exception(es);
-      }
+    {
+      Engines::PyNode_var oldNode((*it).second);
+      if(!CORBA::is_nil(oldNode))
+        oldNode->UnRegister();
+      (*it).second=node;
+    }
+    if(!CORBA::is_nil(node))
+      node->Register();
+    return node._retn();
+  }
+  else
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::INTERNAL_ERROR;
+    es.text = astr.c_str();
+    throw SALOME::SALOME_Exception(es);
+  }
 }
 
 //=============================================================================
@@ -1738,13 +1685,13 @@ Engines::PyNode_ptr  Engines_Container_i::getDefaultPyNode(const char *nodeName)
   if(it==_dftPyNode.end())
     return Engines::PyNode::_nil();
   else
-    {
-      Engines::PyNode_var tmpVar((*it).second);
-      if(!CORBA::is_nil(tmpVar))
-        return Engines::PyNode::_duplicate(tmpVar);
-      else
-        return Engines::PyNode::_nil();
-    }
+  {
+    Engines::PyNode_var tmpVar((*it).second);
+    if(!CORBA::is_nil(tmpVar))
+      return Engines::PyNode::_duplicate(tmpVar);
+    else
+      return Engines::PyNode::_nil();
+  }
 }
 
 //=============================================================================
@@ -1756,58 +1703,58 @@ Engines::PyNode_ptr  Engines_Container_i::getDefaultPyNode(const char *nodeName)
 //=============================================================================
 Engines::PyScriptNode_ptr Engines_Container_i::createPyScriptNode(const char* nodeName, const char* code)
 {
-    Engines::PyScriptNode_var node= Engines::PyScriptNode::_nil();
+  Engines::PyScriptNode_var node= Engines::PyScriptNode::_nil();
 
-    PyGILState_STATE gstate = PyGILState_Ensure();
-    PyObject *res = PyObject_CallMethod(_pyCont,
-      (char*)"create_pyscriptnode",
-      (char*)"ss",
-      nodeName,
-      code);
-    if(res==NULL)
-      {
-        //internal error
-        PyErr_Print();
-        PyGILState_Release(gstate);
-        SALOME::ExceptionStruct es;
-        es.type = SALOME::INTERNAL_ERROR;
-        es.text = "can not create a python node";
-        throw SALOME::SALOME_Exception(es);
-      }
-    long ierr=PyInt_AsLong(PyTuple_GetItem(res,0));
-    PyObject* result=PyTuple_GetItem(res,1);
-    std::string astr=PyString_AsString(result);
-    Py_DECREF(res);
+  PyGILState_STATE gstate = PyGILState_Ensure();
+  PyObject *res = PyObject_CallMethod(_pyCont,
+    (char*)"create_pyscriptnode",
+    (char*)"ss",
+    nodeName,
+    code);
+  if(res==NULL)
+  {
+    //internal error
+    PyErr_Print();
     PyGILState_Release(gstate);
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::INTERNAL_ERROR;
+    es.text = "can not create a python node";
+    throw SALOME::SALOME_Exception(es);
+  }
+  long ierr=PyLong_AsLong(PyTuple_GetItem(res,0));
+  PyObject* result=PyTuple_GetItem(res,1);
+  std::string astr=PyUnicode_AsUTF8(result);
+  Py_DECREF(res);
+  PyGILState_Release(gstate);
 
-    if(ierr==0)
-      {
-        Utils_Locker lck(&_mutexForDftPy);
-        CORBA::Object_var obj=_orb->string_to_object(astr.c_str());
-        node=Engines::PyScriptNode::_narrow(obj);
-        std::map<std::string,Engines::PyScriptNode_var>::iterator it(_dftPyScriptNode.find(nodeName));
-        if(it==_dftPyScriptNode.end())
-          {
-            _dftPyScriptNode[nodeName]=node;
-          }
-        else
-          {
-            Engines::PyScriptNode_var oldNode((*it).second);
-            if(!CORBA::is_nil(oldNode))
-              oldNode->UnRegister();
-            (*it).second=node;
-          }
-        if(!CORBA::is_nil(node))
-          node->Register();
-        return node._retn();
-      }
+  if(ierr==0)
+  {
+    Utils_Locker lck(&_mutexForDftPy);
+    CORBA::Object_var obj=_orb->string_to_object(astr.c_str());
+    node=Engines::PyScriptNode::_narrow(obj);
+    std::map<std::string,Engines::PyScriptNode_var>::iterator it(_dftPyScriptNode.find(nodeName));
+    if(it==_dftPyScriptNode.end())
+    {
+      _dftPyScriptNode[nodeName]=node;
+    }
     else
-      {
-        SALOME::ExceptionStruct es;
-        es.type = SALOME::INTERNAL_ERROR;
-        es.text = astr.c_str();
-        throw SALOME::SALOME_Exception(es);
-      }
+    {
+      Engines::PyScriptNode_var oldNode((*it).second);
+      if(!CORBA::is_nil(oldNode))
+        oldNode->UnRegister();
+      (*it).second=node;
+    }
+    if(!CORBA::is_nil(node))
+      node->Register();
+    return node._retn();
+  }
+  else
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::INTERNAL_ERROR;
+    es.text = astr.c_str();
+    throw SALOME::SALOME_Exception(es);
+  }
 }
 
 //=============================================================================
@@ -1822,13 +1769,13 @@ Engines::PyScriptNode_ptr Engines_Container_i::getDefaultPyScriptNode(const char
   if(it==_dftPyScriptNode.end())
     return Engines::PyScriptNode::_nil();
   else
-    {
-      Engines::PyScriptNode_var tmpVar((*it).second);
-      if(!CORBA::is_nil(tmpVar))
-        return Engines::PyScriptNode::_duplicate(tmpVar);
-      else
-        return Engines::PyScriptNode::_nil();
-    }
+  {
+    Engines::PyScriptNode_var tmpVar((*it).second);
+    if(!CORBA::is_nil(tmpVar))
+      return Engines::PyScriptNode::_duplicate(tmpVar);
+    else
+      return Engines::PyScriptNode::_nil();
+  }
 }
 
 //=============================================================================
@@ -1916,3 +1863,43 @@ void Engines_Container_i::clearTemporaryFiles()
   }
   _tmp_files.clear();
 }
+
+/*
+std::string Engines_Container_i::AnotherMethodeToReplace_PyString_AsString(PyObject * result)
+{
+    std::string my_result = "";
+    if (PyUnicode_Check(result)) {
+        // Convert string to bytes.
+        // strdup() bytes into my_result.
+        PyObject * temp_bytes = PyUnicode_AsEncodedString(result, "ASCII", "strict"); // Owned reference
+        if (temp_bytes != NULL) {
+            my_result = PyBytes_AS_STRING(temp_bytes); // Borrowed pointer
+            my_result = strdup(my_result);
+            Py_DECREF(temp_bytes);
+        } else {
+            // TODO PY3: Handle encoding error.
+            Py_DECREF(temp_bytes);
+        }
+
+    } else if (PyBytes_Check(result)) {
+        // strdup() bytes into my_result.
+        my_result = PyBytes_AS_STRING(result); // Borrowed pointer
+        my_result = strdup(my_result);
+    } else {
+        // Convert into your favorite string representation.
+        // Convert string to bytes if it is not already.
+        // strdup() bytes into my_result.
+        // TODO PY3: Check if only bytes is ok. 
+        PyObject * temp_bytes = PyObject_Bytes(result); // Owned reference
+        if (temp_bytes != NULL) {
+            my_result = PyBytes_AS_STRING(temp_bytes); // Borrowed pointer
+            my_result = strdup(my_result);
+            Py_DECREF(temp_bytes);
+        } else {
+            // TODO PY3: Handle error.
+            Py_DECREF(temp_bytes);
+        }
+    }
+    return my_result;
+}
+*/
index dad0be21b03f3fe07fbd07f1c996baa62304b875..beaea103bfdf3e5adc7a5800858ecc932e3fa619 100644 (file)
@@ -20,7 +20,8 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-#include <time.h>
+#include <Python.h>
+#include <structmember.h>
 #ifndef WIN32
   #include <sys/time.h>
 #endif
 #include "utilities.h"
 #include "Container_init_python.hxx"
 
+#if PY_VERSION_HEX < 0x03050000
+static char*
+Py_EncodeLocale(const wchar_t *arg, size_t *size)
+{
+       return _Py_wchar2char(arg, size);
+}
+static wchar_t*
+Py_DecodeLocale(const char *arg, size_t *size)
+{
+       return _Py_char2wchar(arg, size);
+}
+#endif
+
+/*
+  The following functions are used to hook the Python
+  interpreter output.
+*/
+
+static void ContainerPyStdOut_dealloc(ContainerPyStdOut *self)
+{
+  PyObject_Del(self);
+}
+
+static PyObject*
+ContainerPyStdOut_write(ContainerPyStdOut *self, PyObject *args)
+{
+  char *c;
+  if (!PyArg_ParseTuple(args, "s",&c))
+    return NULL;
+  if(self->_cb==NULL) {
+    if ( self->_iscerr )
+      std::cerr << c ;
+    else
+      std::cout << c ;
+  }
+  else {
+    self->_cb(self->_data,c);
+  }
+  Py_INCREF(Py_None);
+  return Py_None;
+}
+
+static PyObject*
+ContainerPyStdOut_flush(ContainerPyStdOut *self)
+{
+  Py_INCREF(Py_None);
+  return Py_None;
+}
+
+static PyMethodDef ContainerPyStdOut_methods[] = {
+  {"write",  (PyCFunction)ContainerPyStdOut_write,  METH_VARARGS, PyDoc_STR("write(string) -> None")},
+  {"flush",  (PyCFunction)ContainerPyStdOut_flush,  METH_NOARGS,  PyDoc_STR("flush() -> None")},
+  {NULL,    NULL}   /* sentinel */
+};
+
+static PyMemberDef ContainerPyStdOut_memberlist[] = {
+      {(char*)"softspace", T_INT,  offsetof(ContainerPyStdOut, softspace), 0,
+       (char*)"flag indicating that a space needs to be printed; used by print"},
+      {NULL} /* Sentinel */
+};
+
+static PyTypeObject ContainerPyStdOut_Type = {
+  /* The ob_type field must be initialized in the module init function
+   * to be portable to Windows without using C++. */
+  PyVarObject_HEAD_INIT(NULL, 0)
+  /*0,*/                                  /*ob_size*/
+  "PyOut",                                /*tp_name*/
+  sizeof(ContainerPyStdOut),              /*tp_basicsize*/
+  0,                                      /*tp_itemsize*/
+  /* methods */
+  (destructor)ContainerPyStdOut_dealloc,  /*tp_dealloc*/
+  0,                                      /*tp_print*/
+  0,                                      /*tp_getattr*/
+  0,                                      /*tp_setattr*/
+  0,                                      /*tp_compare*/
+  0,                                      /*tp_repr*/
+  0,                                      /*tp_as_number*/
+  0,                                      /*tp_as_sequence*/
+  0,                                      /*tp_as_mapping*/
+  0,                                      /*tp_hash*/
+  0,                                      /*tp_call*/
+  0,                                      /*tp_str*/
+  PyObject_GenericGetAttr,                /*tp_getattro*/
+ /* softspace is writable:  we must supply tp_setattro */
+  PyObject_GenericSetAttr,                /* tp_setattro */
+  0,                                      /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT,                     /*tp_flags*/
+  0,                                      /*tp_doc*/
+  0,                                      /*tp_traverse*/
+  0,                                      /*tp_clear*/
+  0,                                      /*tp_richcompare*/
+  0,                                      /*tp_weaklistoffset*/
+  0,                                      /*tp_iter*/
+  0,                                      /*tp_iternext*/
+  ContainerPyStdOut_methods,              /*tp_methods*/
+  ContainerPyStdOut_memberlist,           /*tp_members*/
+  0,                                      /*tp_getset*/
+  0,                                      /*tp_base*/
+  0,                                      /*tp_dict*/
+  0,                                      /*tp_descr_get*/
+  0,                                      /*tp_descr_set*/
+  0,                                      /*tp_dictoffset*/
+  0,                                      /*tp_init*/
+  0,                                      /*tp_alloc*/
+  0,                                      /*tp_new*/
+  0,                                      /*tp_free*/
+  0,                                      /*tp_is_gc*/
+  0,                                      /*tp_bases*/
+  0,                                      /*tp_mro*/
+  0,                                      /*tp_cache*/
+  0,                                      /*tp_subclasses*/
+  0,                                      /*tp_weaklist*/
+  0,                                      /*tp_del*/
+  0,                                      /*tp_version_tag*/
+  0,                                      /*tp_finalize*/
+};
+
+static ContainerPyStdOut* ContainerNewPyStdOut( bool iscerr )
+{
+  ContainerPyStdOut *self;
+  self = PyObject_New(ContainerPyStdOut, &ContainerPyStdOut_Type);
+  if (self == NULL)
+    return NULL;
+  self->softspace = 0;
+  self->_cb = NULL;
+  self->_iscerr = iscerr;
+  return self;
+}
+
 void KERNEL_PYTHON::init_python(int argc, char **argv)
 {
   if (Py_IsInitialized())
@@ -41,11 +171,25 @@ void KERNEL_PYTHON::init_python(int argc, char **argv)
   MESSAGE("=================================================================");
   // set stdout to line buffering (aka C++ std::cout)
   setvbuf(stdout, (char *)NULL, _IOLBF, BUFSIZ);
-  char* salome_python=getenv("SALOME_PYTHON");
-  if(salome_python != 0)
-    Py_SetProgramName(salome_python);
+  wchar_t* salome_python;
+  char* env_python=getenv("SALOME_PYTHON");
+  if(env_python != 0)
+    {
+      wchar_t* salome_python = Py_DecodeLocale(env_python, NULL);
+      Py_SetProgramName(salome_python);
+    }
   Py_Initialize(); // Initialize the interpreter
-  PySys_SetArgv(argc, argv);
+  if (Py_IsInitialized())
+    {
+      MESSAGE("Python initialized eh eh eh");
+    }
+  wchar_t **changed_argv = new wchar_t*[argc]; // Setting arguments
+  for (int i = 0; i < argc; i++)
+  {
+    changed_argv[i] = Py_DecodeLocale(argv[i], NULL);
+  }
+  PySys_SetArgv(argc, changed_argv);
+
   PyRun_SimpleString("import threading\n");
   // VSR (22/09/2016): This is a workaround to prevent invoking qFatal() from PyQt5
   // causing application aborting
@@ -61,7 +205,14 @@ void KERNEL_PYTHON::init_python(int argc, char **argv)
   int res = PyRun_SimpleString(script.c_str());
   // VSR (22/09/2016): end of workaround
   PyEval_InitThreads(); // Create (and acquire) the interpreter lock
+
+  // Create python objects to capture stdout and stderr
+  PyObject* _vout=(PyObject*)ContainerNewPyStdOut( false ); // stdout
+  PyObject* _verr=(PyObject*)ContainerNewPyStdOut( true );  // stderr
+  PySys_SetObject((char*)"stderr",_verr);
+  PySys_SetObject((char*)"stdout",_vout);
+
   PyThreadState *pts = PyGILState_GetThisThreadState(); 
-  PyEval_ReleaseThread(pts);  
+  PyEval_ReleaseThread(pts);
+  //delete[] changed_argv;
 }
-
index 75e484524af5579de6d8b694dafa25f0c504bc94..e14475eacc79d2ceff7ceda44c5ffa588b607926 100644 (file)
 #define Py_RELEASE_NEW_THREAD \
   PyGILState_Release(gil_state);
 
+typedef void ContainerPyOutChanged(void* data,char * c);
+
+typedef struct {
+  PyObject_HEAD
+  int softspace;
+  ContainerPyOutChanged* _cb;
+  void* _data;
+  bool _iscerr;
+} ContainerPyStdOut;
+
 struct CONTAINER_EXPORT KERNEL_PYTHON
 {
   static void init_python(int argc, char **argv);
index a9ce718b870a11f2d5f3b6814189089cbd1ba2e1..b7c08321f4c31bd58836543f4b320d6704e000df 100755 (executable)
@@ -46,7 +46,7 @@ from libNOTIFICATION import *
 
 from SALOME_utilities import *
 
-from thread import *
+from _thread import *
 
 #=============================================================================
 
@@ -59,7 +59,6 @@ class SALOME_ComponentPy_i (Engines__POA.EngineComponent):
     _orb = None
     _poa = None
     _fieldsDict = []
-    _studyId = -1
 
     #-------------------------------------------------------------------------
 
@@ -173,7 +172,7 @@ class SALOME_ComponentPy_i (Engines__POA.EngineComponent):
         self._StartUsed = self.CpuUsed_impl()
         self._ThreadCpuUsed = 0
         self._Executed = 1
-        print "beginService for ",serviceName," Component instance : ",self._instanceName
+        print("beginService for ",serviceName," Component instance : ",self._instanceName)
         MESSAGE( "SALOME_ComponentPy_i::beginService _StartUsed " + str( self._ThreadId ) + " " + str( self._StartUsed ) )
         for e in self._fieldsDict:
           key=e.key
@@ -187,7 +186,7 @@ class SALOME_ComponentPy_i (Engines__POA.EngineComponent):
     def endService(self , serviceName ):
         MESSAGE(  "Send EndService notification for " + str( self._ThreadId ) + " " + str(serviceName) + " for graph/node " + str(self._graphName) + " " + str(self._nodeName) + " CpuUsed " + str( self.CpuUsed_impl() ) )
         MESSAGE(  "Component instance : " + str(self._instanceName) )
-        print "endService for",serviceName,"Component instance :",self._instanceName,"Cpu Used:",self.CpuUsed_impl()," (s) "
+        print("endService for",serviceName,"Component instance :",self._instanceName,"Cpu Used:",self.CpuUsed_impl()," (s) ")
 
 
     #-------------------------------------------------------------------------
@@ -293,25 +292,20 @@ class SALOME_ComponentPy_i (Engines__POA.EngineComponent):
 
     #-------------------------------------------------------------------------
 
-    def DumpPython(self, theStudy, isPublished, isMultiFile):
+    def DumpPython(self, isPublished, isMultiFile):
         aBuffer = "\0"
         if isMultiFile :
-            aBuffer = "def RebuildData(theStudy): pass\n\0"
+            aBuffer = "def RebuildData(): pass\n\0"
         return (aBuffer, 1)
 
     #-------------------------------------------------------------------------
 
-    def getStudyId(self):
-        return self._studyId
-
-    #-------------------------------------------------------------------------
-
     def hasObjectInfo(self):
         return 0
 
     #-------------------------------------------------------------------------
 
-    def getObjectInfo(self, studyId, entry):
+    def getObjectInfo(self, entry):
         return ""
 
     #-------------------------------------------------------------------------
index 4315da8b38b6e954f96adc1509b8e134b21bbac6..4235f5048ac3a50568355fec98c0d46a3b2a51cd 100644 (file)
@@ -81,7 +81,6 @@ public:
   void ping();
   void destroy();
 
-  CORBA::Long getStudyId();
   Engines::Container_ptr GetContainerRef();
 
   void setProperties(const Engines::FieldsDict& dico);
@@ -97,8 +96,7 @@ public:
   bool Resume_impl();
   CORBA::Long CpuUsed_impl() ;
 
-  virtual Engines::TMPFile* DumpPython(CORBA::Object_ptr theStudy,
-                                       CORBA::Boolean isPublished,
+  virtual Engines::TMPFile* DumpPython(CORBA::Boolean isPublished,
                                        CORBA::Boolean isMultiFile,
                                        CORBA::Boolean& isValidScript);
 
@@ -118,7 +116,7 @@ public:
 
   // Object information
   virtual bool hasObjectInfo() { return false; }
-  virtual char* getObjectInfo(CORBA::Long studyId, const char* entry) { return CORBA::string_dup(""); }
+  virtual char* getObjectInfo(const char* entry) { return CORBA::string_dup(""); }
 
   // Version information
   virtual char* getVersion();
@@ -130,8 +128,6 @@ public:
   std::string getContainerName();
   void setContainerName();
 
-  virtual bool setStudyId(CORBA::Long studyId);
-  static bool isMultiStudy();
   static bool isMultiInstance();
   static std::string GetDynLibraryName(const char *componentName);
 
@@ -150,8 +146,6 @@ public:
                                     Salome_file_i * file);
 
 protected:
-  int _studyId; // -1: not initialised; 0: multiStudy; >0: study
-  static bool _isMultiStudy;
   static bool _isMultiInstance;
 
   std::string _instanceName ;
index 2d6ee3b7588f15998aa6cef29e87a6ad9bcccd4b..901f678a0225cf3082eb7b545ad64d8ce94c0849 100644 (file)
@@ -34,7 +34,6 @@
 
 import os
 import sys
-import string
 import traceback
 import imp
 from omniORB import CORBA, PortableServer
@@ -65,7 +64,7 @@ class SALOME_Container_i:
         self._orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID)
         self._poa = self._orb.resolve_initial_references("RootPOA")
         self._containerName = containerName
-        if verbose(): print "SALOME_Container.SALOME_Container_i : _containerName ",self._containerName
+        if verbose(): print("SALOME_Container.SALOME_Container_i : _containerName ",self._containerName)
         #self._naming_service = SALOME_NamingServicePy_i(self._orb)
         self._container = self._orb.string_to_object(containerIORStr)
 
@@ -75,10 +74,10 @@ class SALOME_Container_i:
         MESSAGE( "SALOME_Container_i::import_component" )
         ret=""
         try:
-            if verbose(): print "try import ",componentName
+            if verbose(): print("try import ",componentName)
             __import__(componentName)
-            if verbose(): print "import ",componentName," successful"
-        except ImportError,e:
+            if verbose(): print("import ",componentName," successful")
+        except ImportError as e:
             #can't import python module componentName
             #try to find it in python path
             try:
@@ -87,22 +86,22 @@ class SALOME_Container_i:
               #module file found in path
               ret="Component "+componentName+": Python implementation found but it can't be loaded\n"
               ret=ret+traceback.format_exc(10)
-            except ImportError,ee:
+            except ImportError as ee:
               ret="ImplementationNotFound"
             except:
-              if verbose():print "error when calling find_module"
+              if verbose():print("error when calling find_module")
               ret="ImplementationNotFound"
         except:
             ret="Component "+componentName+": Python implementation found but it can't be loaded\n"
             ret=ret+traceback.format_exc(10)
             if verbose():
               traceback.print_exc()
-              print "import ",componentName," not possible"
+              print("import ",componentName," not possible")
         return ret
         
     #-------------------------------------------------------------------------
 
-    def create_component_instance(self, componentName, instanceName, studyId):
+    def create_component_instance(self, componentName, instanceName):
         MESSAGE( "SALOME_Container_i::create_component_instance" )
         comp_iors=""
         ret=""
index ac5f038949ee231382f458c031ed2153818992eb..e3cff84ab61feca568a2eefa98454571687edf0e 100755 (executable)
@@ -61,7 +61,7 @@ class SALOME_ContainerPy_i (Engines__POA.Container):
         myMachine=getShortHostName()
         Container_path = "/Containers/" + myMachine + "/" + containerName
         self._containerName = Container_path
-        if verbose(): print "container name ",self._containerName
+        if verbose(): print("container name ",self._containerName)
 
         naming_service = SALOME_NamingServicePy_i(self._orb)
         self._naming_service = naming_service
@@ -138,7 +138,7 @@ class SALOME_ContainerPy_i (Engines__POA.Container):
     def instance(self, nameToRegister, componentName):
         MESSAGE(  "SALOME_ContainerPy_i::instance " + str(nameToRegister) + ' ' + str(componentName) )
         self._numInstance = self._numInstance +1
-        instanceName = nameToRegister + "_inst_" + `self._numInstance`
+        instanceName = nameToRegister + "_inst_" + repr(self._numInstance)
 
         component=__import__(componentName)
         factory=getattr(component,componentName)
@@ -154,13 +154,13 @@ class SALOME_ContainerPy_i (Engines__POA.Container):
     def load_impl(self, nameToRegister, componentName):
         MESSAGE(  "SALOME_ContainerPy_i::load_impl " + str(nameToRegister) + ' ' + str(componentName) )
         self._numInstance = self._numInstance +1
-        instanceName = nameToRegister + "_inst_" + `self._numInstance`
+        instanceName = nameToRegister + "_inst_" + repr(self._numInstance)
         interfaceName = nameToRegister
         the_command = "import " + nameToRegister + "\n"
         the_command = the_command + "comp_i = " + nameToRegister + "." + nameToRegister
         the_command = the_command + "(self._orb, self._poa, self._this(), self._containerName, instanceName, interfaceName)\n"
         MESSAGE( "SALOME_ContainerPy_i::load_impl :" + str (the_command) )
-        exec the_command
+        exec(the_command)
         comp_o = comp_i._this()
         return comp_o
     
@@ -170,19 +170,19 @@ class SALOME_ContainerPy_i (Engines__POA.Container):
         MESSAGE( "SALOME_Container_i::import_component" )
         reason = ""
         try:
-            if verbose(): print "try import %s" % componentName
+            if verbose(): print("try import %s" % componentName)
             # try import component
             module=__import__(componentName)
-            if verbose(): print "import %s is done successfully" % componentName
+            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
+                print(reason)
                 pass
             pass
         except:
             import traceback
-            print "cannot import %s" % componentName
+            print("cannot import %s" % componentName)
             traceback.print_exc()
             reason = "cannot import %s" % componentName
         return reason
@@ -192,64 +192,55 @@ class SALOME_ContainerPy_i (Engines__POA.Container):
     def load_component_Library(self, componentName):
         MESSAGE(  "SALOME_ContainerPy_i::load_component_Library " + str(componentName) )
         ret = 0
-        instanceName = componentName + "_inst_" + `self._numInstance`
+        instanceName = componentName + "_inst_" + repr(self._numInstance)
         interfaceName = componentName
         reason = self.import_component(componentName)
         return reason == "", reason
     
     #-------------------------------------------------------------------------
 
-    def create_component_instance_env(self, componentName, studyId, env):
-      return self.create_component_instance(componentName, studyId), ""
+    def create_component_instance_env(self, componentName, env):
+      return self.create_component_instance(componentName), ""
 
-    def create_component_instance(self, componentName, studyId):
-        MESSAGE( "SALOME_ContainerPy_i::create_component_instance ==> " + str(componentName) + ' ' + str(studyId) )
-        if studyId < 0:
-            MESSAGE( "Study ID is lower than 0!" )
-            return None
-        else:
-            self._numInstance = self._numInstance +1
-            instanceName = componentName + "_inst_" + `self._numInstance`
-            comp_iors=""
-            try:
-                component=__import__(componentName)
-                factory=getattr(component,componentName)
-                comp_i=factory(self._orb,
-                               self._poa,
-                               self._this(),
-                               self._containerName,
-                               instanceName,
-                               componentName)
-                
-                MESSAGE( "SALOME_Container_i::create_component_instance : OK")
-                comp_o = comp_i._this()
-                self._listInstances_map[instanceName] = comp_i
-            except:
-                import traceback
-                traceback.print_exc()
-                MESSAGE( "SALOME_Container_i::create_component_instance : NOT OK")
-            return comp_o
+    def create_component_instance(self, componentName):
+        MESSAGE( "SALOME_ContainerPy_i::create_component_instance ==> " + str(componentName) )
+        self._numInstance = self._numInstance +1
+        instanceName = componentName + "_inst_" + repr(self._numInstance)
+        comp_iors=""
+        try:
+            component=__import__(componentName)
+            factory=getattr(component,componentName)
+            comp_i=factory(self._orb,
+                           self._poa,
+                           self._this(),
+                           self._containerName,
+                           instanceName,
+                           componentName)
+            
+            MESSAGE( "SALOME_Container_i::create_component_instance : OK")
+            comp_o = comp_i._this()
+            self._listInstances_map[instanceName] = comp_i
+        except:
+            import traceback
+            traceback.print_exc()
+            MESSAGE( "SALOME_Container_i::create_component_instance : NOT OK")
+        return comp_o
 
     #-------------------------------------------------------------------------
 
-    def find_component_instance(self, registeredName, studyId):
+    def find_component_instance(self, registeredName):
         anEngine = None
-        keysList = self._listInstances_map.keys()
-        i = 0
-        while i < len(keysList):
-            instance = keysList[i]
+        for instance in self._listInstances_map:
             if find(instance,registeredName) == 0:
                 anEngine = self._listInstances_map[instance]
-                if studyId == anEngine.getStudyId():
-                    return anEngine._this()
-            i = i + 1
-        return anEngine._this()
+                return anEngine._this()
+        return anEngine
         
 
     #-------------------------------------------------------------------------
 
     def create_python_service_instance(self, CompName):
-        return self.create_component_instance(CompName, 0)
+        return self.create_component_instance(CompName)
       
     #-------------------------------------------------------------------------
 
@@ -319,19 +310,19 @@ if __name__ == "__main__":
   # change the stdout buffering to line buffering (same as C++ cout buffering)
   sys.stdout=os.fdopen(1,"w",1)
   #initialise the ORB and find the root POA
-  if verbose():print "Starting ",sys.argv[1]
+  if verbose():print("Starting ",sys.argv[1])
   orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID)
   poa = orb.resolve_initial_references("RootPOA")
-  if verbose():print "ORB and POA initialized"
+  if verbose():print("ORB and POA initialized")
 
   #create an instance of SALOME_ContainerPy_i and a Container reference
   #containerName = "FactoryServerPy"
   MESSAGE( str(sys.argv) )
   containerName = sys.argv[1]
   cpy_i = SALOME_ContainerPy_i(orb, poa, containerName)
-  if verbose():print "SALOME_ContainerPy_i instance created ",cpy_i 
+  if verbose():print("SALOME_ContainerPy_i instance created ",cpy_i) 
   cpy_o = cpy_i._this()
-  if verbose():print "SALOME_ContainerPy_i instance activated ",cpy_o
+  if verbose():print("SALOME_ContainerPy_i instance activated ",cpy_o)
   sys.stdout.flush()
   sys.stderr.flush()
 
@@ -341,4 +332,4 @@ if __name__ == "__main__":
 
   #Block for ever
   orb.run()
-  if verbose():print "SALOME_ContainerPy_i shutdown"
+  if verbose():print("SALOME_ContainerPy_i shutdown")
index 197d0def95f49a37db0c8bfb496e1d5f6be97b89..1193ec379609e54eb22c589e44d4aa3a38778f97 100644 (file)
@@ -69,12 +69,10 @@ public:
   virtual bool load_component_Library(const char* componentName, CORBA::String_out reason);
 
   virtual Engines::EngineComponent_ptr
-  create_component_instance( const char* componentName,
-                             CORBA::Long studyId); // 0 for multiStudy
+  create_component_instance( const char* componentName);
 
   virtual Engines::EngineComponent_ptr
   create_component_instance_env( const char* componentName,
-                                 CORBA::Long studyId,          // 0 for multiStudy
                                  const Engines::FieldsDict& env,
                                  CORBA::String_out reason);
 
@@ -83,8 +81,7 @@ public:
                                  CORBA::String_out reason);
 
   Engines::EngineComponent_ptr
-  find_component_instance( const char* registeredName,
-                           CORBA::Long studyId); // 0 for multiStudy
+  find_component_instance( const char* registeredName);
 
   Engines::EngineComponent_ptr
   load_impl(const char* nameToRegister,
@@ -125,9 +122,9 @@ public:
   bool load_component_PythonImplementation(const char* componentName,std::string& reason);
   bool load_component_ExecutableImplementation(const char* componentName,std::string& reason);
 
-  Engines::EngineComponent_ptr createPythonInstance(std::string CompName, int studyId, std::string& error);
-  Engines::EngineComponent_ptr createExecutableInstance(std::string CompName, int studyId, const Engines::FieldsDict& env, std::string& error);
-  Engines::EngineComponent_ptr createInstance(std::string genericRegisterName, void *handle, int studyId, std::string& error);
+  Engines::EngineComponent_ptr createPythonInstance(std::string CompName, std::string& error);
+  Engines::EngineComponent_ptr createExecutableInstance(std::string CompName, const Engines::FieldsDict& env, std::string& error);
+  Engines::EngineComponent_ptr createInstance(std::string genericRegisterName, void *handle, std::string& error);
 
   static bool isPythonContainer(const char* ContainerName);
   static void decInstanceCnt(std::string genericRegisterName);
index 2feb5d4c9ceb0ddd0efbd4c131d64df39a767c1c..64ba692392e743c1618a67e74f55776cff6f05fd 100644 (file)
@@ -24,9 +24,9 @@
 #  Module : SALOME
 #  $Header$
 #
-import sys,traceback,string
+import sys,traceback
 import linecache
-import cPickle
+import pickle
 import Engines__POA
 import SALOME__POA
 import SALOME
@@ -47,7 +47,7 @@ class Generic(SALOME__POA.GenericObj):
       self.poa.deactivate_object(oid)
 
   def Destroy(self):
-    print "WARNING SALOME::GenericObj::Destroy() function is obsolete! Use UnRegister() instead."
+    print("WARNING SALOME::GenericObj::Destroy() function is obsolete! Use UnRegister() instead.")
     self.UnRegister()
 
 class PyNode_i (Engines__POA.PyNode,Generic):
@@ -58,31 +58,31 @@ class PyNode_i (Engines__POA.PyNode,Generic):
     self.nodeName=nodeName
     self.code=code
     self.my_container=my_container._container
-    linecache.cache[nodeName]=0,None,string.split(code,'\n'),nodeName
+    linecache.cache[nodeName]=0,None,code.split('\n'),nodeName
     ccode=compile(code,nodeName,'exec')
     self.context={}
     self.context["my_container"] = self.my_container
-    exec ccode in self.context
+    exec(ccode, self.context)
 
   def defineNewCustomVar(self,varName,valueOfVar):
-    self.context[varName] = cPickle.loads(valueOfVar)
+    self.context[varName] = pickle.loads(valueOfVar)
     pass
 
   def executeAnotherPieceOfCode(self,code):
     """Called for initialization of container lodging self."""
     try:
       ccode=compile(code,self.nodeName,'exec')
-      exec ccode in self.context
+      exec(ccode, self.context)
     except:
       raise SALOME.SALOME_Exception(SALOME.ExceptionStruct(SALOME.BAD_PARAM,"","PyScriptNode (%s) : code to be executed \"%s\"" %(self.nodeName,code),0))
 
   def execute(self,funcName,argsin):
     """Execute the function funcName found in local context with pickled args (argsin)"""
     try:
-      argsin,kws=cPickle.loads(argsin)
+      argsin,kws=pickle.loads(argsin)
       func=self.context[funcName]
       argsout=func(*argsin,**kws)
-      argsout=cPickle.dumps(argsout,-1)
+      argsout=pickle.dumps(argsout,-1)
       return argsout
     except:
       exc_typ,exc_val,exc_fr=sys.exc_info()
@@ -97,20 +97,20 @@ class PyScriptNode_i (Engines__POA.PyScriptNode,Generic):
     self.nodeName=nodeName
     self.code=code
     self.my_container=my_container._container
-    linecache.cache[nodeName]=0,None,string.split(code,'\n'),nodeName
+    linecache.cache[nodeName]=0,None,code.split('\n'),nodeName
     self.ccode=compile(code,nodeName,'exec')
     self.context={}
     self.context["my_container"] = self.my_container
 
   def defineNewCustomVar(self,varName,valueOfVar):
-    self.context[varName] = cPickle.loads(valueOfVar)
+    self.context[varName] = pickle.loads(valueOfVar)
     pass
 
   def executeAnotherPieceOfCode(self,code):
     """Called for initialization of container lodging self."""
     try:
       ccode=compile(code,self.nodeName,'exec')
-      exec ccode in self.context
+      exec(ccode, self.context)
     except:
       raise SALOME.SALOME_Exception(SALOME.ExceptionStruct(SALOME.BAD_PARAM,"","PyScriptNode (%s) : code to be executed \"%s\"" %(self.nodeName,code),0))
 
@@ -124,15 +124,15 @@ class PyScriptNode_i (Engines__POA.PyScriptNode,Generic):
   def execute(self,outargsname,argsin):
     """Execute the script stored in attribute ccode with pickled args (argsin)"""
     try:
-      argsname,kws=cPickle.loads(argsin)
+      argsname,kws=pickle.loads(argsin)
       self.context.update(kws)
-      exec self.ccode in self.context
+      exec(self.ccode, self.context)
       argsout=[]
       for arg in outargsname:
-        if not self.context.has_key(arg):
+        if arg not in self.context:
           raise KeyError("There is no variable %s in context" % arg)
         argsout.append(self.context[arg])
-      argsout=cPickle.dumps(tuple(argsout),-1)
+      argsout=pickle.dumps(tuple(argsout),-1)
       return argsout
     except:
       exc_typ,exc_val,exc_fr=sys.exc_info()
index 36a884e2df238543c7aab14982fbad50e0f7223b..d47b7dfc49ddd6ae6fb0df76809d6a28756963ab 100644 (file)
@@ -29,7 +29,7 @@ DF_Document::DF_Document(const std::string& theDocumentType)
 {
   _id = -1;
   _type = theDocumentType;
-  _modified = true;
+  _modified = false;
 }
 
 DF_Document::~DF_Document()
index 48a6cb428dbe2cdc17ed23bdcdec34d95c093ddd..697747d88f265a09906194b9309d43ecdb3031e6 100755 (executable)
@@ -21,6 +21,7 @@ FIND_PACKAGE(SWIG REQUIRED)
 INCLUDE(${SWIG_USE_FILE})
 
 SET_SOURCE_FILES_PROPERTIES(calcium.i PROPERTIES CPLUSPLUS ON)
+SET_SOURCE_FILES_PROPERTIES(calcium.i PROPERTIES SWIG_FLAGS "-py3")
 SET(CMAKE_SWIG_FLAGS "-noexcept")
 ADD_DEFINITIONS(${OMNIORB_DEFINITIONS} ${BOOST_DEFINITIONS} ${PYTHON_DEFINITIONS} ${NUMPY_DEFINITIONS})
 
index 424dd6a4a9dc0a1ab758f291456645fbeb0c23b4..586cd8defdd6bc4a78a95135c6c8db65de76c9dd 100644 (file)
@@ -66,8 +66,8 @@ struct omniORBpyAPI {
 
 %init
 %{
+#include <capsulethunk.h>
   // init section
-
 #ifdef WITH_NUMPY
   import_array()
 #endif
@@ -77,10 +77,10 @@ struct omniORBpyAPI {
   {
     PyErr_SetString(PyExc_ImportError,
         (char*)"Cannot import _omnipy");
-    return;
+    return NULL;
   }
   PyObject* pyapi = PyObject_GetAttrString(omnipy, (char*)"API");
-  api = (omniORBpyAPI*)PyCObject_AsVoidPtr(pyapi);
+  api = (omniORBpyAPI*)PyCapsule_New(pyapi,NULL,NULL);
   Py_DECREF(pyapi);
 
   PyObject* engines = PyImport_ImportModule("Engines");
@@ -142,9 +142,11 @@ const char* pytype_string(PyObject* py_obj) {
   if (PyDict_Check(    py_obj)) return "dict"        ;
   if (PyList_Check(    py_obj)) return "list"        ;
   if (PyTuple_Check(   py_obj)) return "tuple"       ;
-  if (PyFile_Check(    py_obj)) return "file"        ;
   if (PyModule_Check(  py_obj)) return "module"      ;
+#if PY_MAJOR_VERSION < 3
+  if (PyFile_Check(    py_obj)) return "file"        ;
   if (PyInstance_Check(py_obj)) return "instance"    ;
+#endif
 
   return "unknown type";
 }
index 3f5e0e1a1f7e42771e7b4893ad563b4effecd39a..da3eeaa7e1cde875e7bcd34c52d324fda13c65d4 100644 (file)
@@ -58,29 +58,36 @@ void HDFfile::CreateOnDisk()
 
 void HDFfile::OpenOnDisk(hdf_access_mode access_mode)
 {
-  _access_mode = access_mode;
+       _access_mode = access_mode;
+       std::string msgerr;
 
-  switch (_access_mode)
-    {
-    case HDF_RDWR :
-      if (access(_name,F_OK))
+       switch (_access_mode)
        {
-         if ((_id = HDFfileCreate(_name)) < 0) 
-           throw HDFexception("Can't open HDF file");
+       case HDF_RDWR:
+               if (access(_name, F_OK))
+               {
+                       if ((_id = HDFfileCreate(_name)) < 0) {
+                               msgerr = "Can't create HDF in RW mode file" + std::string(_name);
+                               throw HDFexception(msgerr.c_str());
+                       }
+               }
+               else if ((_id = HDFfileOpen(_name, _access_mode)) < 0) {
+                       msgerr = "Can't open HDF in RW mode file " + std::string(_name);
+                       throw HDFexception(msgerr.c_str());
+               }
+               break;
+
+       case HDF_RDONLY:
+               if ((_id = HDFfileOpen(_name, _access_mode)) < 0) {
+                       msgerr = "Can't open HDF in RO mode file " + std::string(_name);
+                       throw HDFexception(msgerr.c_str());
+               }
+               break;
+
+       default:
+               msgerr = "Can't open HDF file " + std::string(_name) + " : bad access option";
+               throw HDFexception(msgerr.c_str());
        }
-      else
-       if ((_id = HDFfileOpen(_name,_access_mode)) < 0)
-         throw HDFexception("Can't open HDF file");
-      break;
-      
-    case HDF_RDONLY :
-      if ((_id = HDFfileOpen(_name,_access_mode)) < 0)
-       throw HDFexception("Can't open HDF file");
-      break;
-      
-    default :
-      throw HDFexception("Can't open HDF file : bad access option");
-    }
 }
 
 void HDFfile::CloseOnDisk()
index 943e1ddc858419e2b89e7d0ee2616fb6f1f9cb7c..23ee4083fc7304b4bb923766cb3d566242fcedf4 100755 (executable)
@@ -30,7 +30,7 @@ class SalomeDoc:
     def __init__(self, aDoc):
         self.doc = aDoc
     def __repr__(self):
-        print self.doc
+        print(self.doc)
         return "---"
     def salome(self):
         doc_salome = '''
@@ -52,9 +52,8 @@ variables:
                            with a Server name and an Engine name
   salome.sg
       methods:
-         updateObjBrowser(bool):
-         getActiveStudyId():
-         getActiveStudyName():
+         updateObjBrowser():
+         getStudyName():
          
          SelectedCount():      returns number of selected objects
          getSelected(i):       returns entry of selected object number i
@@ -71,16 +70,15 @@ variables:
 
          IDToObject(Entry):    returns CORBA reference from entry
 
-  salome.myStudyName     : active Study Name
-  salome.myStudyId       : active Study Id
+  salome.myStudyName     : the Study Name
   salome.myStudy         : the active Study itself (CORBA ior)
                            methods : defined in SALOMEDS.idl
                                                          
 methods:
-  salome.DumpStudy(study) : Dump a study, given the ior
+  salome.DumpStudy() : Dump a study, given the ior
 ---
 '''
-        print doc_salome
+        print(doc_salome)
         
     def geompy(self):
         doc_geompy = '''
@@ -99,7 +97,7 @@ methods:
   --- all methods of GEOM_Gen.idl that returns a shape are encapsulated,
       with the same interface : shapes are named with their ior
 '''
-        print doc_geompy
+        print(doc_geompy)
         
     def supervision(self):
         doc_supervision = '''
@@ -128,7 +126,7 @@ A new python example avoids references to LifeCycleCORBA
                                    and GraphExample.xml
 ---
 '''
-        print doc_supervision
+        print(doc_supervision)
         
     
 
index f10973927e59a639e7d321877b66782a5d9c563d..e33625b6a73c0a365927ca724a8bc65880d91ffa 100755 (executable)
@@ -35,9 +35,10 @@ from SALOME_NamingServicePy import *
 
     #--------------------------------------------------------------------------
 
-def DumpComponent(Study, SO, offset):
-    it = Study.NewChildIterator(SO)
-    Builder = Study.NewBuilder()
+def DumpComponent(SO, offset):
+    global myStudy
+    it = myStudy.NewChildIterator(SO)
+    Builder = myStudy.NewBuilder()
     while it.More():
         CSO = it.Value()
         it.Next()
@@ -50,7 +51,7 @@ def DumpComponent(Study, SO, offset):
             while ofs <= offset:
                 a = a + "--"
                 ofs = ofs +1
-            print a + ">" + CSO.GetID() + " " + t_name[1]
+            print(a + ">" + CSO.GetID() + " " + t_name[1])
         t_RefSO = CSO.ReferencedObject()
         if t_RefSO[0] == 1:
             RefSO = t_RefSO[1]
@@ -59,19 +60,20 @@ def DumpComponent(Study, SO, offset):
             while ofs <= offset:
                 a = a + "  "
                 ofs = ofs +1
-            print a + ">" + RefSO.GetID()
-        DumpComponent(Study, CSO, offset+2)
+            print(a + ">" + RefSO.GetID())
+        DumpComponent(CSO, offset+2)
 
     #--------------------------------------------------------------------------
 
-def DumpStudy(Study):
-    itcomp = Study.NewComponentIterator()
+def DumpStudy():
+    global myStudy
+    itcomp = myStudy.NewComponentIterator()
     while itcomp.More():
         SC = itcomp.Value()
         itcomp.Next()
         name = SC.ComponentDataType()
-        print "-> ComponentDataType is " + name
-        DumpComponent(Study, SC, 1)
+        print("-> ComponentDataType is " + name)
+        DumpComponent(SC, 1)
         
 
     #--------------------------------------------------------------------------
@@ -88,16 +90,10 @@ sg = SALOMEGUI_Swig()
 #create an naming service instance
 naming_service = SALOME_NamingServicePy_i(orb)
 
-# get active study name and id
-myStudyName = sg.getActiveStudyName()
-print myStudyName
+# get active study name
+myStudyName = sg.getStudyName()
+print(myStudyName)
 
-myStudyId = sg.getActiveStudyId()
-print myStudyId
-
-# get Study Manager reference
-obj = naming_service.Resolve('myStudyManager')
-myStudyManager = obj._narrow(SALOMEDS.StudyManager)
-
-# get active study
-myStudy = myStudyManager.GetStudyByName(myStudyName)
+# get Study reference
+obj = naming_service.Resolve('/Study')
+myStudy = obj._narrow(SALOMEDS.Study)
index 47b0b2c43beb1f9b88f17f363df43c8bdad70514..9c78533a928ebd85c6d974dc7b957636d5e8f2bc 100755 (executable)
@@ -45,9 +45,7 @@ variables:
 
   - salome.sg              : salome object to communicate with the graphical user interface (if any)
       - methods:
-         - updateObjBrowser(bool):
-         - getActiveStudyId():
-         - getActiveStudyName():
+         - updateObjBrowser():
 
          - SelectedCount():      returns number of selected objects
          - getSelected(i):       returns entry of selected object number i
@@ -65,7 +63,6 @@ variables:
          - IDToObject(Entry):    returns CORBA reference from entry
 
   - salome.myStudyName     : active Study Name
-  - salome.myStudyId       : active Study Id
   - salome.myStudy         : the active Study itself (CORBA ior)
       - methods : defined in SALOMEDS.idl
 
@@ -78,7 +75,6 @@ variables:
 #  \param salome.lcc             : instance of lifeCycleCORBA class (SALOME_LifeCycleCORBA)
 #  \param salome.sg              : Salome object to communicate with the graphical user interface, if running (see interface in salome_iapp::SalomeOutsideGUI)
 #  \param salome.myStudyName     : active Study Name
-#  \param salome.myStudyId       : active Study Id
 #  \param salome.myStudy         : the active Study (interface SALOMEDS::Study)
 
 #
@@ -110,13 +106,13 @@ 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):
+        if not isinstance(dir, str) or not os.path.isdir(dir) or not dir.endswith(MATCH_ENDING_PATTERN):
             continue
         subdir = os.path.join(dir, pname)
         # XXX This may still add duplicate entries to path on
         # case-insensitive filesystems
         if os.path.isdir(subdir) and subdir not in __path__:
-            if verbose(): print "INFO - The directory %s is appended to sys.path" % subdir
+            if verbose(): print("INFO - The directory %s is appended to sys.path" % subdir)
             __path__.append(subdir)
 
 extend_path(ROOT_PYTHONPACKAGE_NAME)
@@ -166,90 +162,58 @@ if not flags:
 #    pass
 
 orb, lcc, naming_service, cm,sg=None,None,None,None,None
-myStudyManager, myStudyId, myStudy, myStudyName=None,None,None,None
-
-def setCurrentStudy(theStudy):
-    """
-    Change current study : an existing one given by a study object.
-
-    :param theStudy: the study CORBA object to set as current study
-    """
-    global myStudyId, myStudy, myStudyName
-    myStudyId, myStudy, myStudyName =salome_study.setCurrentStudy(theStudy)
-
-def setCurrentStudyId(theStudyId=0):
-    """
-    Change current study : an existing or new one given by Id.
-
-    :param theStudyId: the study Id (optional argument)
-           0      : create a new study (default).
-           n (>0) : try connection to study with Id = n, or create a new one
-                      if study not found.
-    """
-    global myStudyId, myStudy, myStudyName
-    myStudyId, myStudy, myStudyName =salome_study.setCurrentStudyId(theStudyId)
+myStudy, myStudyName=None,None
 
 salome_initial=1
-def salome_init(theStudyId=0,embedded=0):
+def salome_init(embedded=0):
     """
     Performs only once SALOME general purpose initialisation for scripts.
-    optional argument : theStudyId
-      When in embedded interpreter inside IAPP, theStudyId is not used
-      When used without GUI (external interpreter)
-        0      : create a new study (default).
-        n (>0) : try connection to study with Id = n, or create a new one
-                 if study not found.
-                 If study creation, its Id may be different from theStudyId !
     Provides:
     orb             reference to CORBA
     lcc             a LifeCycleCorba instance
     naming_service  a naming service instance
     cm              reference to the container manager
     sg              access to SALOME GUI (when linked with IAPP GUI)
-    myStudyManager  the study manager
-    myStudyId       active study identifier
     myStudy         active study itself (CORBA reference)
     myStudyName     active study name
     """
     global salome_initial
     global orb, lcc, naming_service, cm
     global sg
-    global myStudyManager, myStudyId, myStudy, myStudyName
+    global myStudy, myStudyName
 
     try:
         if salome_initial:
             salome_initial=0
             sg = salome_iapp_init(embedded)
             orb, lcc, naming_service, cm = salome_kernel_init()
-            myStudyManager, myStudyId, myStudy, myStudyName = salome_study_init(theStudyId)
+            myStudy, myStudyName = salome_study_init()
             pass
         pass
-    except RuntimeError, inst:
+    except RuntimeError as inst:
         # wait a little to avoid trace mix
         import time
         time.sleep(0.2)
         x = inst
-        print "salome.salome_init():", x
-        print """
+        print("salome.salome_init():", x)
+        print("""
         ============================================
         May be there is no running SALOME session
         salome.salome_init() is intended to be used
         within an already running session
         ============================================
-        """
+        """)
         raise
     
 def salome_close():
-    global salome_initial, myStudy, myStudyId, myStudyName
+    global salome_initial, myStudy, myStudyName
     try:
-        # study can be closed either from GUI or directly with salome.myStudy.Close()
-        myStudy.Close()
+        # study can be clear either from GUI or directly with salome.myStudy.Clear()
+        myStudy.Clear()
     except:
         pass
     salome_initial=1
     salome_iapp_close()
-    salome_study_close()
-    myStudyId, myStudy, myStudyName=None,None,None
     pass
 
 
index 7a7ae9e819a1f075f0f1d8daa0dc3ea09946de65..59a0bfc8543bb563bc310df5117ae8891112693c 100755 (executable)
@@ -35,10 +35,10 @@ from SALOME_NamingServicePy import *
 def ImportComponentGUI(ComponentName):
     libName = "lib" + ComponentName + "_Swig"
     command = "from " + libName + " import *"
-    exec ( command )
+    exec (command, globals())
     constructor = ComponentName + "GUI_Swig()"
     command = "gui = " + constructor
-    exec ( command )
+    exec (command, globals())
     return gui
 
     #--------------------------------------------------------------------------
@@ -65,12 +65,12 @@ def generateName(prefix = None):
     #WITHOUTIHMgetAllSelected = SalomeGUIgetAllSelected
    
     #WITHOUTIHMdef getDesktop(self) :
-#      return SalomePyQt.getDesktop()
-       #WITHOUTIHMreturn None
+#       return SalomePyQt.getDesktop()
+        #WITHOUTIHMreturn None
 
     #WITHOUTIHMdef getSelection(self) :
-#      return SalomePyQt.getSelection()
-       #WITHOUTIHMreturn None
+#       return SalomePyQt.getSelection()
+        #WITHOUTIHMreturn None
 
     #--------------------------------------------------------------------------
 
@@ -105,7 +105,7 @@ def IDToSObject(id):
 
     #--------------------------------------------------------------------------
 
-def PersistentPresentation(theStudy, theSO, theWithID):
+def PersistentPresentation(theSO, theWithID):
     # put the sobject's content (with subchildren) to the string
     aResult = ""
     attrs = theSO.GetAllAttributes()
@@ -154,9 +154,9 @@ def PersistentPresentation(theStudy, theSO, theWithID):
         aResult = "sobject: " + theSO.GetID() + " nbattrs: " + str(aLen - anUncopied) + aResult + '\n'
     else:
         aResult = " nbattrs: " + str(aLen - anUncopied) + aResult + '\n'
-    anIter = theStudy.NewChildIterator(theSO)
+    anIter = myStudy.NewChildIterator(theSO)
     while anIter.More():
-        aResult += PersistentPresentation(theStudy, anIter.Value(), theWithID)
+        aResult += PersistentPresentation(anIter.Value(), theWithID)
         anIter.Next()
     return aResult
 
@@ -178,28 +178,30 @@ def CheckCopyPaste(theSO, theInfo ,theComponentPaste):
     while aRoot.GetID() != "0:":
         aRoot = aRoot.GetFather()
     aTree = GetTree(aRoot)
+    aStudyPersist = PersistentPresentation(aRoot, 1)
+
     aStudyPersist = PersistentPresentation(myStudy, aRoot, 1)
 
-    if not myStudyManager.CanCopy(theSO):
-        raise RuntimeError, "<CanCopy> for "+theInfo+" returns false"
+    if not myStudy.CanCopy(theSO):
+        raise RuntimeError("<CanCopy> for "+theInfo+" returns false")
     
-    if not myStudyManager.Copy(theSO):
-        raise RuntimeError, "<Copy> for "+theInfo+" returns false"
+    if not myStudy.Copy(theSO):
+        raise RuntimeError("<Copy> for "+theInfo+" returns false")
 
     
-    if not myStudyManager.CanPaste(theSO):
-        raise RuntimeError, "<CanPaste> for "+theInfo+" returns false"
+    if not myStudy.CanPaste(theSO):
+        raise RuntimeError("<CanPaste> for "+theInfo+" returns false")
 
     # check: before paste study is not changed check
-    if aStudyPersist != PersistentPresentation(myStudy, aRoot, 1):
-        raise RuntimeError, "Study is changed before Paste calling for "+theInfo
+    if aStudyPersist != PersistentPresentation(aRoot, 1):
+        raise RuntimeError("Study is changed before Paste calling for "+theInfo)
     
     aSObj = theSO
     if theComponentPaste:
         aSObj = theSO.GetFatherComponent()
         theInfo = theInfo + "(paste for component)"
-    if myStudyManager.Paste(aSObj) == None:
-        raise RuntimeError, "<Paste> for "+theInfo+" returns None object"
+    if myStudy.Paste(aSObj) == None:
+        raise RuntimeError("<Paste> for "+theInfo+" returns None object")
     aNewTree = GetTree(aRoot)
     aLen = len(aTree)
     for a in range(0,aLen):
@@ -209,7 +211,7 @@ def CheckCopyPaste(theSO, theInfo ,theComponentPaste):
     if aLen < len(aNewTree):
         return myStudy.FindObjectID(aNewTree[aLen])
     
-    raise RuntimeError, "After Copy calling the tree is not changed"
+    raise RuntimeError("After Copy calling the tree is not changed")
     
     #--------------------------------------------------------------------------
 def FindFileInDataDir(filename):
@@ -246,7 +248,7 @@ while 1:
     pass
     
 if orb is None:
-    print "Warning: ORB has not been initialized !!!"
+    print("Warning: ORB has not been initialized !!!")
 
 # create an LifeCycleCORBA instance
 lcc = LifeCycleCORBA(orb)
@@ -264,42 +266,30 @@ while 1:
     pass
     
 if lcc is None:
-    print "Warning: LifeCycleCORBA object has not been initialized !!!"
+    print("Warning: LifeCycleCORBA object has not been initialized !!!")
     
 #create a naming service instance
 naming_service = SALOME_NamingServicePy_i(orb)
 
-# get Study Manager reference
+# get Study reference
 obj = None
 
 step = 0
 sleeping_time = 0.01
 sleeping_time_max = 1.0
 while 1:
-    obj = naming_service.Resolve('myStudyManager')
+    obj = naming_service.Resolve('/Study')
     if obj is not None:break
     step = step + 1
     if step > 100: break
     time.sleep(sleeping_time)
     sleeping_time = max(sleeping_time_max, 2*sleeping_time)
     pass
-     
-myStudyManager = obj._narrow(SALOMEDS.StudyManager)
-
-if myStudyManager is None:
-    print "Warning: SALOMEDS.StudyManager has not been created !!!"
-
-# create new study
-aListOfOpenStudies = myStudyManager.GetOpenStudies();
-myStudy = None;
-if len(aListOfOpenStudies) == 0 :
-    myStudy = myStudyManager.NewStudy("Study1")
-else:
-    myStudyName = aListOfOpenStudies[0]
-    myStudy = myStudyManager.GetStudyByName(myStudyName)
     
-myStudyName = myStudy._get_Name()
+myStudy = obj._narrow(SALOMEDS.Study)
 
-myStudyId = myStudy._get_StudyId()
-#print myStudyId
 
+if myStudy is None:
+    print("Warning: SALOMEDS.Study has not been created !!!")
+    
+myStudyName = myStudy._get_Name()
index f0b8c06a1ffb8e406d83767442323dc9d6996ab4..d3ce1c3d8569cda41547f16ff0b817c914b73da9 100755 (executable)
@@ -84,10 +84,10 @@ class IParameters:
         self._ap = attributeParameter
         if ( clr ): self.clear()
         pass
-       
+
     def clear(self):
         """Clear parameters"""
-       self._ap.Clear()
+        self._ap.Clear()
 
     def append(self, listName, value):
         """Appends a value to the named list"""
index 1dfd4f75093ec07f8ad4422873e8fe1bb006ce1d..65dda6ce6aadfa452c18456d5940c5562b0cc858 100644 (file)
@@ -80,18 +80,18 @@ class Callable:
 #
 
 def TEST_serialization():
-    from testdata import TestData
+    from .testdata import TestData
     ref_name = "my study case"
     studyData = TestData()
     studyData.setName(ref_name)
 
-    print "serialize data ..."
+    print("serialize data ...")
     serialString = serialize(studyData)
-    print "unserialize data ..."
+    print("unserialize data ...")
     unserialData = unserialize(serialString)
 
     res_name = unserialData.getName()
-    print res_name
+    print(res_name)
     if ( ref_name != res_name ):
         return False
 
@@ -101,5 +101,5 @@ def TEST_serialization():
     return True
 
 if __name__ == "__main__":
-    import unittester
+    from . import unittester
     unittester.run("salome/kernel/__init__","TEST_serialization")
index 9251b2a72f3c295d2a69e8e942369393591b7780..b2f12bc5a1489b1b7106f8a0283906b27329478a 100644 (file)
@@ -26,7 +26,7 @@
 __author__="gboulant"
 __date__ ="$15 avr. 2010 19:44:17$"
 
-from uiexception import DevelException
+from .uiexception import DevelException
 
 # Most usable class types
 TypeString= "".__class__
@@ -105,18 +105,18 @@ class DataModeler:
         # Default initialization (if any)
         if defaultmap is not None:
             self._defaultmap.update(defaultmap)
-            for name in self._defaultmap.keys():
+            for name in self._defaultmap:
                 self.__setattr__(name,self._defaultmap[name])
 
     ## %A None argument means that no entry is created in the associated maps.
-    def addAttribute(self, name, type=None, range=None, default=None, void=None):
+    def addAttribute(self, name, a_type=None, a_range=None, default=None, void=None):
         """
         A None argument means that no entry is created in the associated maps.
         """
-        self._typemap[name] = type
+        self._typemap[name] = a_type
 
-        if range is not None:
-            self._rangemap[name] = range
+        if a_range is not None:
+            self._rangemap[name] = a_range
 
         if void is not None:
             self._voidmap[name] = void
@@ -133,9 +133,9 @@ class DataModeler:
 
         #__GBO_DEBUG_
         if name == "_typemap":
-            print "WARNING WARNING WARNING : changing value of _typemap by ",val
+            print("WARNING WARNING WARNING : changing value of _typemap by ",val)
 
-        if name not in self._typemap.keys():
+        if name not in self._typemap:
             raise DevelException("The class "+str(self.__class__)+" has no attribute "+str(name))
 
         if val is None:
@@ -158,11 +158,11 @@ class DataModeler:
         if name in UNCHECKED_ATTRIBUTES:
             return self.__dict__[name]
 
-        if name not in self._typemap.keys():
+        if name not in self._typemap:
             raise DevelException("The class "+str(self.__class__)+" has no attribute "+str(name))
         # The attribute coulb be requested while it has not been created yet (for
         # example if we did't call the setter before).
-        if not self.__dict__.has_key(name):
+        if name not in self.__dict__:
             return None
         
         return self.__dict__[name]
@@ -177,7 +177,7 @@ class DataModeler:
     def __isNotValidRange(self, name, val):
         isNotValid = (
             ( self._rangemap is not None) and
-            ( self._rangemap.has_key(name) ) and
+            ( name in self._rangemap ) and
             ( self._rangemap[name] is not None ) and
             ( val not in self._rangemap[name] ) )
 
@@ -186,13 +186,13 @@ class DataModeler:
     def __isVoidAllowed(self,name):
         isVoidAllowed = (
             ( self._voidmap is not None) and
-            ( self._voidmap.has_key(name) ) and
+            ( name in self._voidmap ) and
             ( self._voidmap[name] is True ) )
             
         return isVoidAllowed
 
     def log(self):
-        print "DATAMODELER ["+str(self.__class__)+"]: self._typemap.keys() = "+str(self._typemap.keys())
+        print("DATAMODELER ["+str(self.__class__)+"]: self._typemap.keys() = "+str(list(self._typemap.keys())))
 
 
 
@@ -219,7 +219,7 @@ def TEST_usecase():
     data.anydata = "any value"
     data.anydata = True
 
-    print data.integerdata
+    print(data.integerdata)
     return True
 
 def TEST_addAttribute():
@@ -232,8 +232,8 @@ def TEST_addAttribute():
     ref_value = 1.3
     data.addAttribute(
         name    = "myAttr",
-        type    = TypeDouble,
-        range   = None,
+        a_type    = TypeDouble,
+        a_range   = None,
         default = ref_value,
         void    = False)
 
@@ -242,15 +242,15 @@ def TEST_addAttribute():
             return False
         data.myAttr = 5.3
         #data.myAttr = 5
-    except Exception, e:
-        print e
+    except Exception as e:
+        print(e)
         return False
 
     try:
         data.myAttr = "bad type value"
         return False
-    except Exception, e:
-        print e
+    except Exception as e:
+        print(e)
         return True
 
 def TEST_badAttributeName():
@@ -264,8 +264,8 @@ def TEST_badAttributeName():
     try:
         data.myatt = 3
         return False
-    except Exception, e:
-        print "OK : "+str(e)
+    except Exception as e:
+        print("OK : "+str(e))
         return True
 
 def TEST_badAttributeType():
@@ -278,8 +278,8 @@ def TEST_badAttributeType():
     try:
         data.stringdata = 2
         return False
-    except Exception, e:
-        print "OK : "+str(e)
+    except Exception as e:
+        print("OK : "+str(e))
         return True
 
 def TEST_badAttributeRange():
@@ -296,16 +296,16 @@ def TEST_badAttributeRange():
     try:
         data.integerdata = ref_integervalue
         data.stringdata = "anything (no restriction has been defined)"
-    except Exception, e:
-        print e
+    except Exception as e:
+        print(e)
         return False
 
     # this should raise an exception
     try:
         data.integerdata = 9999 # a value not in the range
         return False
-    except Exception, e:
-        print e
+    except Exception as e:
+        print(e)
         return True
 
 def TEST_voidAttributeAllowed():
@@ -320,17 +320,17 @@ def TEST_voidAttributeAllowed():
     try:
         # this should not raise an exception
         data.stringdata = None
-        print data.stringdata
-    except Exception, e:
-        print e
+        print(data.stringdata)
+    except Exception as e:
+        print(e)
         return False
     
     try:
         # this should raise an exception
         data.integerdata = None
         return False
-    except Exception, e:
-        print e
+    except Exception as e:
+        print(e)
         return True
 
 def TEST_defaultValues():
@@ -343,14 +343,14 @@ def TEST_defaultValues():
     defaultmap["stringdata"] = ref_value
 
     data = DataModeler(typemap=typemap,defaultmap=defaultmap)
-    print data.stringdata
+    print(data.stringdata)
     if data.stringdata != ref_value:
         return False
     else:
         return True
 
 if __name__ == "__main__":
-    from unittester import run
+    from .unittester import run
     run("salome/kernel/datamodeler","TEST_usecase")
     run("salome/kernel/datamodeler","TEST_addAttribute")
     run("salome/kernel/datamodeler","TEST_badAttributeName")
index 1ec0eab1750e08177fa494d76245c734086a4a53..3420e1fec854211020fe419b56a22ade375e9b48 100644 (file)
@@ -38,7 +38,7 @@ __date__ ="$21 mai 2010 18:00:23$"
 #  \ingroup diclookup
 def find_key(dic, val):
     """return the key of dictionary dic given the value"""
-    return [k for k, v in dic.iteritems() if v == val][0]
+    return [k for k, v in dic.items() if v == val][0]
 
 ## return the value of dictionary dic given the key
 #  \ingroup diclookup
@@ -55,14 +55,14 @@ class Lookup(dict):
     ## items can be a list of pair_lists or a dictionary
     def __init__(self, items=None):
         """items can be a list of pair_lists or a dictionary"""
-       if items is None:
-           items = []
+        if items is None:
+            items = []
         dict.__init__(self, items)
 
     ## find the key(s) as a list given a value
     def get_keys(self, value):
         """find the key(s) as a list given a value"""
-        return [item[0] for item in self.items() if item[1] == value]
+        return [item[0] for item in list(self.items()) if item[1] == value]
 
     ## find the key associated to the given a value. If several keys exist,
     #  only the first is given. To get the whole list, use get_keys instead.
@@ -100,9 +100,9 @@ def TEST_getTestDictionnary():
 
 def TEST_find_value():
     symbol_dic = TEST_getTestDictionnary()
-    print find_key(symbol_dic, 'boron')  # B
-    print find_value(symbol_dic, 'B')    # boron
-    print find_value(symbol_dic, 'H')    # hydrogen
+    print(find_key(symbol_dic, 'boron'))  # B
+    print(find_value(symbol_dic, 'B'))    # boron
+    print(find_value(symbol_dic, 'H'))    # hydrogen
     if find_key(symbol_dic, 'nitrogen') != 'N':
         return False
     return True
@@ -114,24 +114,24 @@ def TEST_lookup():
     symbol = 'Li'
     # use a dictionary as initialization argument
     look = Lookup(symbol_dic)
-    print look.get_key(name)      # [Li']
+    print(look.get_key(name))      # [Li']
     if look.get_key(name) != symbol:
-        print "get "+str(look.get_key(name))+" while "+str(symbol)+" was expected"
+        print("get "+str(look.get_key(name))+" while "+str(symbol)+" was expected")
         return False
-    print look.get_value(symbol)  # lithium
+    print(look.get_value(symbol))  # lithium
 
     # use a list of pairs instead of a dictionary as initialization argument
     # (will be converted to a dictionary by the class internally)
     age_list = [['Fred', 23], ['Larry', 28], ['Ene', 23]]
     look2 = Lookup(age_list)
-    print look2.get_keys(23)        # ['Ene', 'Fred']
+    print(look2.get_keys(23))        # ['Ene', 'Fred']
     if look2.get_keys(23)[0] != 'Ene' or look2.get_keys(23)[1] != 'Fred':
-        print "get "+str(look2.get_keys(23))+" while ['Ene', 'Fred'] was expected"
+        print("get "+str(look2.get_keys(23))+" while ['Ene', 'Fred'] was expected")
         return False
-    print look2.get_value('Fred')  # 23
+    print(look2.get_value('Fred'))  # 23
     return True
 
 if __name__ == '__main__':
-    import unittester
+    from . import unittester
     unittester.run("diclookup", "TEST_find_value")
     unittester.run("diclookup", "TEST_lookup")
index 2190b2a018078669d706ffc9b2527a5d64dbfe2d..2ff423acaabbf5f37ccddfec9427c9c73c28a15d 100644 (file)
@@ -53,6 +53,7 @@ class Enumerate(object):
             value = offset + number
             setattr(self, key, value)
             self._dict_keynumbers[key] = value
+        self._dict_numberkeys = {v: k for k, v in self._dict_keynumbers.items()}
 
     ## Return true if this enumerate contains the specified key string
     #  \param key a key string to test
@@ -61,7 +62,7 @@ class Enumerate(object):
         Return true if this enumerate contains the specified key string
         @key a key string to test
         """
-        return (key in self._dict_keynumbers.keys())
+        return key in self._dict_keynumbers
 
     ## Returns true if the specified integer value is defined as an identifier
     #  in this enumerate.
@@ -72,25 +73,21 @@ class Enumerate(object):
         in this enumerate.
         @value a value to test
         """
-        return (value in self._dict_keynumbers.values())
+        return value in self._dict_numberkeys
 
     ## Returns the list of keys in this enumerate.
     def listkeys(self):
         """
         Returns the list of keys in this enumerate.
         """
-        list = self._dict_keynumbers.keys()
-        list.sort()
-        return list
+        return sorted(self._dict_keynumbers)
 
     ## Returns the list of values specified to initiate this enumerate.
     def listvalues(self):
         """
         Returns the list of values specified to initiate this enumerate.
         """
-        list = self._dict_keynumbers.values()
-        list.sort()
-        return list
+        return sorted(self._dict_numberkeys)
 
     ## Returns the symbolic key string associated to the specified identifier value.
     #  \param value an integer value whose associated key string is requested.
@@ -104,7 +101,7 @@ class Enumerate(object):
             return None
         # _MEM_ We assume here that the keys and associated values are in the
         # same order in their list.
-        return self._dict_keynumbers.keys()[self._dict_keynumbers.values().index(value)]
+        return self._dict_numberkeys[value]
 
         # If not, weshould use a longer implementation such that:
         #for key in self._dict_keynumbers.keys():
@@ -122,7 +119,7 @@ def TEST_simple():
         'SEP',
         'OTHER'
     ])
-    print TYPES_LIST.listvalues()
+    print(TYPES_LIST.listvalues())
     return True
 
 def TEST_createFromList():
@@ -133,8 +130,8 @@ def TEST_createFromList():
         'MED',
         'SMESH'])
 
-    print codes.KERNEL
-    print codes.GEOM
+    print(codes.KERNEL)
+    print(codes.GEOM)
     if (codes.KERNEL == 0 and codes.GEOM == 2):
         return True
     else:
@@ -145,8 +142,8 @@ def TEST_createFromString():
 
     codes = Enumerate(aList.split())
 
-    print codes.KERNEL
-    print codes.GEOM
+    print(codes.KERNEL)
+    print(codes.GEOM)
     if (codes.KERNEL == 0 and codes.GEOM == 2):
         return True
     else:
@@ -160,7 +157,7 @@ def TEST_contains():
         'MED',
         'SMESH'])
 
-    print "VISU in enumerate?", codes.contains("VISU")
+    print("VISU in enumerate?", codes.contains("VISU"))
     if (not codes.contains("VISU")):
         return True
     else:
@@ -187,8 +184,8 @@ def TEST_offset():
         'MED',
         'SMESH'], offset=20)
 
-    print codes.KERNEL
-    print codes.GEOM
+    print(codes.KERNEL)
+    print(codes.GEOM)
     if (codes.KERNEL == 20 and codes.GEOM == 22):
         return True
     else:
@@ -202,7 +199,7 @@ def TEST_listvalues():
         'MED',
         'SMESH'], offset=20)
 
-    print codes.listvalues()
+    print(codes.listvalues())
     if codes.listvalues() != [20, 21, 22, 23, 24]:
         return False
     return True
@@ -224,7 +221,7 @@ def TEST_keyOf():
     return True
 
 if __name__ == "__main__":
-    import unittester
+    from . import unittester
     unittester.run("enumerate", "TEST_simple")
     unittester.run("enumerate", "TEST_createFromList")
     unittester.run("enumerate", "TEST_createFromString")
index 0ac0490fcbb8e4d04f90aa7e9afb9b2d4629577f..c779c5158459f12581bd3de6566cb83262e8a03a 100644 (file)
@@ -53,7 +53,7 @@ class Variable:
     def __init__(self, name, dimension = None, minValue = None, maxValue = None,
                  initialValue = None):
         if dimension is None:
-         dimension = []
+            dimension = []
         self.name = name
         
         # Reserved for future use
@@ -105,9 +105,9 @@ class ExchangeVariables:
     def __init__(self, inputVarList = None, outputVarList = None,
                  refEntry = None):
         if inputVarList is None:
-         inputVarList = []
-       if outputVarList is None:
-         outputVarList = []
+            inputVarList = []
+        if outputVarList is None:
+            outputVarList = []
         self.inputVarList = inputVarList
         self.outputVarList = outputVarList
         self.refEntry = refEntry
@@ -182,8 +182,7 @@ def createSObjectForExchangeVariables(fatherSobj, exchangeVariables,
     :return: the newly created SObject.
 
     """
-    studyId = fatherSobj.GetStudy()._get_StudyId()
-    editor = getStudyEditor(studyId)
+    editor = getStudyEditor()
     sobj = editor.createItem(fatherSobj,
                              name = name,
                              icon = icon,
@@ -210,8 +209,7 @@ def updateSObjectForExchangeVariables(sobj, exchangeVariables,
     other parameters.
 
     """
-    studyId = sobj.GetStudy()._get_StudyId()
-    editor = getStudyEditor(studyId)
+    editor = getStudyEditor()
     editor.setItem(sobj, name = name, icon = icon, typeId = typeId)
     editor.builder.RemoveAttribute(sobj, "AttributeParameter")
     _setSObjectForExchangeVariables(editor, sobj, exchangeVariables)
index 8c21ec5686cbe7cf775be509c2ec1a9768761a01..fc056f1f89172901bf630440fd3c00dae6e31b6d 100644 (file)
@@ -30,16 +30,16 @@ def printfile(filename):
     lines = stream.readlines()
     stream.close()
     for line in lines:
-       if not termcolor.canDisplayColor(sys.stdout):
-           msg = line.split('\n')[0]
-       else:
+        if not termcolor.canDisplayColor(sys.stdout):
+            msg = line.split('\n')[0]
+        else:
             msg = termcolor.makeColoredMessage(line.split('\n')[0], termcolor.BLUE)
-        print msg
+        print(msg)
 
 import os
 import unittest
 from unittest import TestCase
-from uiexception import DevelException
+from .uiexception import DevelException
 
 ## This class is a simple wrapper of the pyunit framework.
 #  \ingroup pyunittester
@@ -97,8 +97,8 @@ def execAndConvertExceptionToBoolean(function):
         if result is None:
             return True
         return result
-    except Exception, e:
-        print e
+    except Exception as e:
+        print(e)
         return False
 
 # Simple helper function for most cases where there is only one
@@ -121,17 +121,17 @@ def run(testCaseClass):
 class MyTestCase(unittest.TestCase):
     def test_myTestOk_01(self):
         r=True
-        print "myTestOk_01: should be OK"
+        print("myTestOk_01: should be OK")
         self.assertTrue(r)
 
     def test_myTestOk_02(self):
         r=True
-        print "myTestOk_02: should be OK"
+        print("myTestOk_02: should be OK")
         self.assertTrue(r)
 
     def test_myTestNotOk(self):
         r=False
-        print "myTestNotOk: should be NOT OK"
+        print("myTestNotOk: should be NOT OK")
         self.assertTrue(r)
 
 def functionRaisingAnException():
@@ -144,32 +144,32 @@ def functionReturningTrue():
     return True
 
 def functionReturningNothing():
-    print "functionReturningNothing"
+    print("functionReturningNothing")
 
 class MyTestCase2(unittest.TestCase):
     def test_myTest_01(self):
         r=execAndConvertExceptionToBoolean(functionRaisingAnException)
-        print "test 01: this test should be NOT OK"
+        print("test 01: this test should be NOT OK")
         self.assertTrue(r)
 
     def test_myTest_02(self):
         r=execAndConvertExceptionToBoolean(functionReturningFalse)
-        print "test 02: this test should be NOT OK"
+        print("test 02: this test should be NOT OK")
         self.assertTrue(r)
 
     def test_myTest_03(self):
         r=execAndConvertExceptionToBoolean(functionReturningTrue)
-        print "test 03: this test should be OK"
+        print("test 03: this test should be OK")
         self.assertTrue(r)
 
     def test_myTest_04(self):
         r=execAndConvertExceptionToBoolean(functionReturningNothing)
-        print "test 04: this test should be OK"
+        print("test 04: this test should be OK")
         self.assertTrue(r)
 
     def test_myTest_05(self):
         r=True
-        print "test 05: this test should be OK"
+        print("test 05: this test should be OK")
         self.assertTrue(r)
 
 
index 57cdf9b7efc3233a4bf7224e013c4f117ae1de16..31038407cb42185ad0616797a62beb34c2c0537a 100644 (file)
 # SALOME development).
 
 import salome
-from deprecation import is_called_by_sphinx
+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:
-        print e
+    except Exception as e:
+        print(e)
 
 # Note that the salome module provides you with standard SALOME
 # objects: CORBA broker (orb): salome.orb lyfe cycle (lcc) :
-# salome.lcc naming service : salome.naming_service study manager :
-# salome.myStudyManager The default study : salome.myStudy
+# salome.lcc naming service : salome.naming_service 
+# The default study : salome.myStudy
 #
 # Alternatively, you may obtain these objects directly with the
 # following instructions:
@@ -96,12 +96,12 @@ def getComponent(componentName = "SalomeTestComponent",
     """
     Get a SALOME CORBA component from its name
     """
-    print "INF: getting component %s from CORBA module %s ..."%(componentName,corbaModule)
+    print("INF: getting component %s from CORBA module %s ..."%(componentName,corbaModule))
     __import__(corbaModule)
     component=salome.lcc.FindOrLoadComponent(containerType,componentName)
     if component is None:
-        print "ERR: the SALOME component "+componentName+" can't be reached"
-    print "INF: component %s obtained from CORBA module %s"%(componentName,corbaModule)
+        print("ERR: the SALOME component "+componentName+" can't be reached")
+    print("INF: component %s obtained from CORBA module %s"%(componentName,corbaModule))
     return component
 
 # Note that an alternative (and maybe better) method to get a component
@@ -120,30 +120,24 @@ def getComponentList():
     obj = salome.naming_service.Resolve('Kernel/ModulCatalog')
     catalog = obj._narrow(SALOME_ModuleCatalog.ModuleCatalog)
     if not catalog:
-        raise RuntimeError, "Can't access module catalog"
+        raise RuntimeError("Can't access module catalog")
     return catalog.GetComponentList()
 
-## Get a study manager to create and manage %SALOME studies
-#  \ingroup service
-def getStudyManager():
-    """Get a study manager to create and manage SALOME studies"""
-    return salome.myStudyManager
-
 import SALOMEDS
-## Get a study manager to create and manage SALOME studies
-#  \warning you should use instead the variable salome.myStudyManager
+## Get a study to create SALOME study
+#  \warning you should use instead the variable salome.myStudy. 
 #  This function is given for illustration of usage of the naming service
 #  \ingroup service
-def __getStudyManager_demo():
+def __getStudy_demo():
     """
-    Get a study manager to create and manage SALOME studies. WARN: you
-    should use instead the variable salome.myStudyManager. This
+    Get a study to create SALOME study. WARN: you
+    should use instead the variable salome.myStudy. This
     function is given for illustration of usage of the naming service
     """
     naming_service = SALOME_NamingServicePy_i( orb )
-    obj = naming_service.Resolve( '/myStudyManager' )
-    studyManager = obj._narrow( SALOMEDS.StudyManager)
-    return studyManager
+    obj = naming_service.Resolve( '/Study' )
+    study = obj._narrow( SALOMEDS.Study)
+    return study
 
 
 #
@@ -242,7 +236,7 @@ def TEST_createObject():
     """
     import GEOM
     from salome.geom import geomBuilder
-    geompy = geomBuilder.New(salome.myStudy)
+    geompy = geomBuilder.New()
 
     box = geompy.MakeBoxDXDYDZ(200, 200, 200)
     id = geompy.addToStudy( box, 'box' )
@@ -259,14 +253,14 @@ def TEST_objectsManipulation():
 
 
     myObject = IDToObject(myEntry)
-    print myObject
+    print(myObject)
     if myObject is None:
         return False
 
     return True
 
 if __name__ == "__main__":
-    import unittester
+    from . import unittester
     unittester.run("services","TEST_getComponent")
     unittester.run("services","TEST_getComponentList")
     unittester.run("services","TEST_objectsManipulation")
index 463b70fb859d7160472f005c8a14e0e3ee1ca538..c047b046f610cbff380d9c9ef0f581d96755853e 100644 (file)
@@ -31,73 +31,34 @@ This module provides a new class :class:`StudyEditor` to complement
 
 import re
 
-import salome
-from salome.kernel.logger import Logger
 from salome.kernel import termcolor
-logger = Logger("salome.kernel.studyedit", color = termcolor.PURPLE)
+from salome.kernel.logger import Logger
+import salome
+
+
+logger = Logger("salome.kernel.studyedit", color=termcolor.PURPLE)
 
-_editors = {}
+_editor = None
 _DEFAULT_CONTAINER = "FactoryServer"
 
-# The codec to use for strings that are displayed in Salome study tree is Latin-1
-ENCODING_FOR_SALOME_STUDY = "iso-8859-1"
 
-## Return the ID of the active study. In GUI mode, this function is equivalent
-#  to salome.sg.getActiveStudyId(). Outside GUI, it returns <b> salome.myStudyId </b>
-#  variable.
+## Return a \b StudyEditor instance to edit the study. 
 #  \ingroup studyedit
-def getActiveStudyId():
+def getStudyEditor():
     """
-    Return the ID of the active study. In GUI mode, this function is equivalent
-    to ``salome.sg.getActiveStudyId()``. Outside GUI, it returns
-    ``salome.myStudyId`` variable.
+    Return a :class:`StudyEditor` instance to edit the study.
     """
-    salome.salome_init()
-    # Warning: we don't use salome.getActiveStudy() here because it doesn't
-    # work properly when called from Salome modules (multi-study interpreter
-    # issue)
-    if salome.hasDesktop():
-        return salome.sg.getActiveStudyId()
-    else:
-        return salome.myStudyId
-
-def getActiveStudy():
-    return getStudyFromStudyId(getActiveStudyId())
-
-def getStudyFromStudyId(studyId):
-    salome.salome_init()
-    study = salome.myStudyManager.GetStudyByID(studyId)
-    return study
-
-def getStudyIdFromStudy(study):
-    studyId = study._get_StudyId()
-    return studyId
-
-## Return a \b StudyEditor instance to edit the study with ID studyId. 
-#  If \b studyId is \b None, return an editor for the current study.
-#  \ingroup studyedit
-def getStudyEditor(studyId = None):
-    """
-    Return a :class:`StudyEditor` instance to edit the study with ID
-    `studyId`. If `studyId` is :const:`None`, return an editor for the current
-    study.
-    """
-    if studyId is None:
-        studyId = getActiveStudyId()
-    if not _editors.has_key(studyId):
-        _editors[studyId] = StudyEditor(studyId)
-    return _editors[studyId]
+    global _editor
+    if _editor is None:
+        _editor = StudyEditor()
+    return _editor
 
 ## This class provides utility methods to complement \b Study and
 #  \b StudyBuilder classes. Those methods may be moved in those classes
-#  in the future. The parameter \b studyId defines the ID of the study to
-#  edit. If it is \em None, the edited study will be the current study.
+#  in the future.
 #  The preferred way to get a StudyEditor object is through the method
 #  \b getStudyEditor which allows to reuse existing instances.
 #
-#  \param studyId This instance attribute contains the ID of the edited study. 
-#  This attribute should not be modified.
-#
 #  \param study This instance attribute contains the underlying \b Study object.
 #  It can be used to access the study but the attribute itself should not
 #  be modified.
@@ -110,16 +71,10 @@ class StudyEditor:
     """
     This class provides utility methods to complement :class:`Study` and
     :class:`StudyBuilder` classes. Those methods may be moved in those classes
-    in the future. The parameter `studyId` defines the ID of the study to
-    edit. If it is :const:`None`, the edited study will be the current study.
+    in the future.
     The preferred way to get a StudyEditor object is through the method
     :meth:`getStudyEditor` which allows to reuse existing instances.
 
-    .. attribute:: studyId
-    
-       This instance attribute contains the ID of the edited study. This
-       attribute should not be modified.
-
     .. attribute:: study
     
        This instance attribute contains the underlying :class:`Study` object.
@@ -133,15 +88,12 @@ class StudyEditor:
        should not be modified.
 
     """
-    def __init__(self, studyId = None):
+    def __init__(self):
         salome.salome_init()
-        if studyId is None:
-            studyId = getActiveStudyId()
-        self.studyId = studyId
-        self.study = salome.myStudyManager.GetStudyByID(studyId)
+        self.study = salome.myStudy
         if self.study is None:
             raise Exception("Can't create StudyEditor object: "
-                            "Study %d doesn't exist" % studyId)
+                            "Study doesn't exist")
         self.builder = self.study.NewBuilder()
 
     ## Find a component corresponding to the Salome module \b moduleName in
@@ -339,19 +291,19 @@ class StudyEditor:
     #  \return new SObject created in the study.
     #
     #  See \b setItem() for the description of the other parameters.
-    def createItem(self, fatherItem, name, fileType = None, fileName = None,
-                   comment = None, icon = None, IOR = None, typeId = None):
+    def createItem(self, fatherItem, name, fileType=None, fileName=None,
+                   comment=None, icon=None, IOR=None, typeId=None):
         """
         Create a new object named `name` under `fatherItem` in the study, with
         the given attributes. If an object named `name` already exists under
         the father object, the new object is created with a new name `name_X`
         where X is the first available index.
-        
+
         :type  fatherItem: SObject
         :param fatherItem: item under which the new item will be added.
-                
+
         :return: new SObject created in the study
-        
+
         See :meth:`setItem` for the description of the other parameters.
         """
         aSObject = self.builder.NewObject(fatherItem)
@@ -366,11 +318,10 @@ class StudyEditor:
             aSObj = aChildIterator.Value()
             aChildIterator.Next()
             aName = aSObj.GetName()
-            if re.match(aNameRE,aName):
+            if re.match(aNameRE, aName):
                 aTmp = aName[aLength:]
-                if re.match(anIdRE,aTmp):
-                    import string
-                    anId = string.atol(aTmp[1:])
+                if re.match(anIdRE, aTmp):
+                    anId = int(aTmp[1:])
                     if aMaxId < anId:
                         aMaxId = anId
                         pass
@@ -380,16 +331,16 @@ class StudyEditor:
                     pass
                 pass
             pass
-        
+
         aMaxId = aMaxId + 1
         aName = name
         if aMaxId > 0:
             aName = aName + aDelim + str(aMaxId)
             pass
-        
+
         self.setItem(aSObject, aName, fileType, fileName, comment, icon,
                      IOR, typeId)
-    
+
         return aSObject
 
     ## Modify the attributes of an item in the study. Unspecified attributes
@@ -540,21 +491,19 @@ class StudyEditor:
 
     ## Return the name of the object sObject
     def getName(self, sObject):
-        val = sObject.GetName()
-        return unicode(val, ENCODING_FOR_SALOME_STUDY)
+        return sObject.GetName()
 
     ## Set the name of the object sObject
     def setName(self, sObject, name):
-        self.builder.SetName(sObject, name.encode(ENCODING_FOR_SALOME_STUDY))
+        self.builder.SetName(sObject, name)
 
     ## Return the comment of the object sObject
     def getComment(self, sObject):
-        val = sObject.GetComment()
-        return unicode(val, ENCODING_FOR_SALOME_STUDY)
+        return sObject.GetComment()
 
     ## Set the comment of the object sObject
     def setComment(self, sObject, comment):
-        self.builder.SetComment(sObject, comment.encode(ENCODING_FOR_SALOME_STUDY))
+        self.builder.SetComment(sObject, comment)
 
     ## Return the value of the attribute named \b attributeName on the object
     #  sObject, or \b default if the attribute doesn't exist.
@@ -604,8 +553,7 @@ class StudyEditor:
         Return the value of the attribute "AttributeFileType" of the object
         `sObject`, or an empty string if it is not set.
         """
-        val = self.getAttributeValue(sObject, "AttributeFileType", "")
-        return unicode(val, ENCODING_FOR_SALOME_STUDY)
+        return self.getAttributeValue(sObject, "AttributeFileType", "")
 
     ## Set the attribute "AttributeFileType" of the object sObject to the
     #  value value.
@@ -615,7 +563,7 @@ class StudyEditor:
         value `value`.
         """
         self.setAttributeValue(sObject, "AttributeFileType",
-                               value.encode(ENCODING_FOR_SALOME_STUDY))
+                               value)
 
     ## Return the value of the attribute "AttributeExternalFileDef" of the
     #  object sObject, or an empty string if it is not set.
@@ -624,8 +572,7 @@ class StudyEditor:
         Return the value of the attribute "AttributeExternalFileDef" of the
         object `sObject`, or an empty string if it is not set.
         """
-        val = self.getAttributeValue(sObject, "AttributeExternalFileDef", "")
-        return unicode(val, ENCODING_FOR_SALOME_STUDY)
+        return self.getAttributeValue(sObject, "AttributeExternalFileDef", "")
 
     ## Set the attribute "AttributeExternalFileDef" of the object sObject
     #  to the value value.
@@ -635,7 +582,7 @@ class StudyEditor:
         to the value `value`.
         """
         self.setAttributeValue(sObject, "AttributeExternalFileDef",
-                               value.encode(ENCODING_FOR_SALOME_STUDY))
+                               value)
 
     ## Return the value of the attribute "AttributePixMap" of the object
     #  sObject, or an empty string if it is not set.
@@ -648,7 +595,7 @@ class StudyEditor:
         found, attr = self.builder.FindAttribute(sObject, "AttributePixMap")
         if found and attr.HasPixMap():
             value = attr.GetPixMap()
-        return unicode(value, ENCODING_FOR_SALOME_STUDY)
+        return value
 
     ## Set the attribute "AttributePixMap" of the object sObject to the
     #  value value.
@@ -658,4 +605,4 @@ class StudyEditor:
         value `value`.
         """
         attr = self.builder.FindOrCreateAttribute(sObject, "AttributePixMap")
-        attr.SetPixMap(value.encode(ENCODING_FOR_SALOME_STUDY))
+        attr.SetPixMap(value)
index f3c94600df0d86459942b9a2b51d59e858d45e8b..abf8b893587cdcb44b45e9ffbf21f64f02877583 100644 (file)
@@ -58,7 +58,7 @@ def walktree(rootpath, callback, **kwargs):
         pathname = os.path.join(rootpath, f)
         try:
             mode = os.stat(pathname)[ST_MODE]
-        except OSError, e:
+        except OSError as e:
             # It probably means that the file is a broken inode
             mode = -1
         if S_ISDIR(mode):
@@ -69,7 +69,7 @@ def walktree(rootpath, callback, **kwargs):
             callback(pathname, **kwargs)
         else:
             # Unknown file type, print a message
-            print 'Skipping %s' % pathname
+            print('Skipping %s' % pathname)
 
 
 #
@@ -84,26 +84,26 @@ except KeyError:
     TESTDOCDIR="/tmp"
     
 def TEST_findFiles():
-    print "########## find 1"
+    print("########## find 1")
     rootpath=TESTDOCDIR
     listfiles=findFiles(rootpath)
     for filename in listfiles:
-        print filename
+        print(filename)
 
-    print "########## find 2"
+    print("########## find 2")
     excludes=[os.path.join(TESTDOCDIR,"doc")]
     listfiles=findFiles(rootpath,excludes)
     for filename in listfiles:
-        print filename
+        print(filename)
 
     return True
 
 # This is the test callback function
 def visitfile_withargs(file, rootid):
-    print 'visiting file %s (rootid=%s)'%(file,str(rootid))
+    print('visiting file %s (rootid=%s)'%(file,str(rootid)))
 
 def visitfile_withoutargs(file):
-    print 'visiting file %s'%(file)
+    print('visiting file %s'%(file))
 
 def TEST_walktree():
     #walktree(TESTDOCDIR, visitfile_withargs, rootid=2)
@@ -111,6 +111,6 @@ def TEST_walktree():
     return True
 
 if __name__ == "__main__":
-    import unittester
+    from . import unittester
     unittester.run("syshelper", "TEST_findFiles")
     unittester.run("syshelper", "TEST_walktree")
index b7d99c778037b890d6379bdc407ab1fc82e94b8e..438d98b6786d79b300bd1ee31c51a67737084ae6 100644 (file)
@@ -41,9 +41,9 @@
 #  import sys
 #  from salome.kernel import termcolor
 #  if termcolor.canDisplayColor(sys.stdout):
-#      print termcolor.makeColoredMessage("Hello world!", termcolor.BLUE)
+#      print(termcolor.makeColoredMessage("Hello world!", termcolor.BLUE))
 #  else:
-#      print "Hello world!"
+#      print("Hello world!")
 #  \endcode
 #  \}
 
@@ -65,9 +65,9 @@ Example::
     import sys
     from salome.kernel import termcolor
     if termcolor.canDisplayColor(sys.stdout):
-        print termcolor.makeColoredMessage("Hello world!", termcolor.BLUE)
+        print(termcolor.makeColoredMessage("Hello world!", termcolor.BLUE))
     else:
-        print "Hello world!"
+        print("Hello world!")
 
 """
 
@@ -225,13 +225,13 @@ def TEST_termcolor():
     """Test function for termcolor module."""
     import sys
     if not canDisplayColor(sys.stdout):
-        print "Standard output does not support colors."
+        print("Standard output does not support colors.")
         return
-    print makeColoredMessage("This message must appear in blue.", BLUE)
-    print makeColoredMessage("This message must appear in red on green " +
-                             "background.", RED + GREEN_BG)
-    print makeColoredMessage("This message must appear in magenta and " +
-                             "crossed-out.", PURPLE + ['09'])
+    print(makeColoredMessage("This message must appear in blue.", BLUE))
+    print(makeColoredMessage("This message must appear in red on green " +
+                             "background.", RED + GREEN_BG))
+    print(makeColoredMessage("This message must appear in magenta and " +
+                             "crossed-out.", PURPLE + ['09']))
 
 
 # Main function only used to test the module
index 76485786f1d0c71a9755b128fc058d5abd9d7d14..4c671abd850f48c90073bafbcfb824b2a5edab2a 100644 (file)
@@ -24,8 +24,8 @@
 __author__="gboulant"
 __date__ ="$17 avr. 2010 19:44:36$"
 
-from enumerate import Enumerate
-from datamodeler import DataModeler, TypeString, TypeInteger
+from .enumerate import Enumerate
+from .datamodeler import DataModeler, TypeString, TypeInteger
 from salome.kernel import Callable
 
 class TestData(DataModeler):
@@ -79,7 +79,7 @@ class TestData(DataModeler):
 # Basic use cases and unit tests
 # ==============================================================================
 #
-from uiexception import UiException
+from .uiexception import UiException
 
 def TEST_getName():
     testdata = TestData()
@@ -96,8 +96,8 @@ def TEST_useBadKey():
         testdata.unknown = "unknown"
         # This should not arrive here
         return False
-    except UiException, err:
-        print err
+    except UiException as err:
+        print(err)
         return True
 
 def TEST_useBadType():
@@ -106,8 +106,8 @@ def TEST_useBadType():
         testdata.TYPE = "unknown"
         # This should not arrive here
         return False
-    except UiException, err:
-        print err
+    except UiException as err:
+        print(err)
         return True
 
 def TEST_useBadRange():
@@ -117,17 +117,17 @@ def TEST_useBadRange():
         testdata.TYPE = TestData.TYPES_LIST.SEP
         testdata.setType(TestData.TYPES_LIST.SEP)
         # This should arrive here
-    except UiException, err:
+    except UiException as err:
         # And not here
-        print err
+        print(err)
         return False
 
     try:
         testdata.TYPE = 9999 # a type that does not exist in the range
         # This should not arrive here
         return False
-    except UiException, err:
-        print err
+    except UiException as err:
+        print(err)
         return True
 
 def TEST_serialize():
@@ -136,7 +136,7 @@ def TEST_serialize():
     ref_testdata.setName("The first name")
     res_testdata = salome.kernel.unserialize(salome.kernel.serialize(ref_testdata))
 
-    print res_testdata.getName()
+    print(res_testdata.getName())
 
     if res_testdata.getName() != ref_testdata.getName():
         return False
@@ -144,14 +144,14 @@ def TEST_serialize():
     # Is the unserialized data still functional?
     try:
         res_testdata.setName("An other name")
-        print res_testdata.getName()
+        print(res_testdata.getName())
     except:
-        print e
+        print(e)
         return False
     return True
 
 if __name__ == "__main__":
-    from unittester import run
+    from .unittester import run
     run("salome/kernel/testdata","TEST_getName")
     run("salome/kernel/testdata","TEST_useBadKey")
     run("salome/kernel/testdata","TEST_useBadType")
index c71a9a54396ee5b6625acc3e67474ee13e6b0ed0..b6d6b06893aa6b493df798b9fd8510fa5cd918a4 100644 (file)
@@ -88,12 +88,12 @@ class Runner(threading.Thread):
         Ex�cution de la fonction. Impl�mentation de la m�thode run
         d�clench�e par l'appel ï¿½ Thread.start().
         """
-        print "##################### threadhelper.run"
+        print("##################### threadhelper.run")
         if self._function is None: return
         try:
             self._return = self._function(*self._argv)
-        except Exception, e:
-            print e
+        except Exception as e:
+            print(e)
             self._exception = e
         self._stopevent.set()
         self.notifyObserver()
@@ -107,15 +107,15 @@ class Runner(threading.Thread):
             return
         try:
             self._observer.processNotification()
-        except AttributeError, att:
+        except AttributeError as att:
             if str(att) == "processNotification":
-                print "L'observateur n'impl�mente pas la m�thode processNotification()"
+                print("L'observateur n'impl�mente pas la m�thode processNotification()")
             else:
-                print "La fonction processNotification() a lev� une exception:"
-                print att
-        except Exception, e:
-            print "La fonction processNotification() a lev� une exception:"
-            print e
+                print("La fonction processNotification() a lev� une exception:")
+                print(att)
+        except Exception as e:
+            print("La fonction processNotification() a lev� une exception:")
+            print(e)
 
     def callback(self):
         if self._callbackFunction is None: return
@@ -232,14 +232,14 @@ class PeriodicTimer( threading.Thread ):
 import os
 testfilename="/tmp/threadhelperTestFile"
 def testIfContinue():
-    print "On examine la pr�sence du fichier ", testfilename
+    print("On examine la pr�sence du fichier ", testfilename)
     if os.path.exists(testfilename):
         return STOP
     else:
         return CONTINUE
 
 def endedAction():
-    print "FINI"
+    print("FINI")
 
 def TEST_PeriodicTimer():
     periodicTimer=PeriodicTimer(1,0,testIfContinue, endedAction)
@@ -251,43 +251,43 @@ def function_ok(nbsteps=5):
     """
     Fonction qui se termine correctement
     """
-    print "D�but"
+    print("D�but")
     cnt=0
     while ( cnt < nbsteps ):
-        print "Etape ", cnt
+        print("Etape ", cnt)
         time.sleep(0.6)
         cnt+=1
 
-    print "Fin"
+    print("Fin")
 
 def function_with_exception():
     """
     Fonction qui aboutie ï¿½ une lev�e d'exception
     """
-    print "D�but"
+    print("D�but")
     cnt=0
     while ( cnt < 5 ):
-        print "Etape ", cnt
+        print("Etape ", cnt)
         time.sleep(1)
         cnt+=1
     
     raise Exception("erreur d'ex�cution de la fonction")
-    print "Fin"
+    print("Fin")
 
 def infinite_function():
     """
     fonction de dur�e infinie (tant qu'il y a du courant ï¿½l�ctrique) pour
     le test du timeout.
     """
-    print "D�but"
+    print("D�but")
     cnt=0
     while ( 1 ):
-        print "Etape ", cnt
+        print("Etape ", cnt)
         time.sleep(1)
         cnt+=1
     
     raise Exception("erreur")
-    print "Fin"
+    print("Fin")
 
 
 def runWithRunner(functionToRun):
@@ -295,21 +295,21 @@ def runWithRunner(functionToRun):
     Ex�cute la fonction avec le runner. On illustre ici la modalit�
     d'utilisation du Runner.
     """
-    print "###########"
+    print("###########")
     runner = Runner(functionToRun)
     runner.start()
 
     while ( not runner.isEnded() ):
-        print "La fonction est en cours"
+        print("La fonction est en cours")
         time.sleep(0.2)
     e = runner.getException()
     if e is not None:
-        print "La fonction s'est termin�e en erreur"
-        print e
+        print("La fonction s'est termin�e en erreur")
+        print(e)
         # On peut en fait la relancer
         # raise e
     else:
-        print "La fonction s'est termin�e correctement"
+        print("La fonction s'est termin�e correctement")
 
 
 def runWithTimeout(functionToRun, timeout=10):
@@ -317,26 +317,26 @@ def runWithTimeout(functionToRun, timeout=10):
     Ex�cute la fonction avec le runner. On illustre ici la modalit�
     d'utilisation du Runner.
     """
-    print "runWithTimeout : DEBUT"
+    print("runWithTimeout : DEBUT")
     runner = Runner(functionToRun)
     runner.start()
 
     # On se fixe un temps au del� duquel on consid�re que la fonction
     # est en erreur => on tue le thread (timeout)
     runner.wait(timeout)
-    print "Apr�s runner.timeout(timeout)"
+    print("Apr�s runner.timeout(timeout)")
     if not runner.isEnded():    
         runner.kill()
     e = runner.getException()
     if e is not None:
-        print "La fonction s'est termin�e en erreur"
-        print e
+        print("La fonction s'est termin�e en erreur")
+        print(e)
         # On peut en fait la relancer
         # raise e
     else:
-        print "La fonction s'est termin�e correctement"
+        print("La fonction s'est termin�e correctement")
 
-    print "runWithTimeout : FIN"
+    print("runWithTimeout : FIN")
     import sys
     sys.exit(0)
     
@@ -354,7 +354,7 @@ def TEST_Runner():
 
 
 def myCallbackFunction():
-    print "myCallbackFunction: the job is ended"
+    print("myCallbackFunction: the job is ended")
     
 
 def TEST_runWithCallback():
@@ -366,17 +366,17 @@ def TEST_runWithCallback():
         return False
 
     runnerId = runner.getId()
-    print "A runner has been started with id="+str(runnerId)
+    print("A runner has been started with id="+str(runnerId))
     cpt = 0
     while ( not runner.isEnded() ):
-        print "Waiting notification from process "+str(runner.getId())+", step n°"+str(cpt)
+        print("Waiting notification from process "+str(runner.getId())+", step n°"+str(cpt))
         time.sleep(0.2)
         cpt+=1
 
     return True
 
 if __name__ == "__main__":
-    import unittester
+    from . import unittester
     #TEST_PeriodicTimer()
     #TEST_Runner()
     #TEST_Timeout()
index b777c45677a8b564a0387f9f2833d1cadf1e3b29..a9a215d95a664450c1673212be021c97705868cb 100644 (file)
@@ -26,7 +26,7 @@
 __author__="gboulant"
 __date__ ="$31 mars 2010 11:59:33$"
 
-from enumerate import Enumerate
+from .enumerate import Enumerate
 
 ## This exception should be used for functionnal error management, at least in the GUI
 #  part of the application, for example to set user oriented messages at point
@@ -101,21 +101,21 @@ def TEST_uimessage():
     try:
         somethingGoesWrong()
         return False
-    except UiException, err:
-        print 'ERROR: %s' % str(err)
+    except UiException as err:
+        print('ERROR: %s' % str(err))
         if ( str(err) == "Something goes wrong" ):
             return True
         else:
             return False
 
 def TEST_specificException():
-    print DevelException("err")
-    print AdminException("err")
-    print UserException("err")
+    print(DevelException("err"))
+    print(AdminException("err"))
+    print(UserException("err"))
     return True
 
 if __name__ == "__main__":
-    import unittester
+    from . import unittester
     unittester.run("uiexception","TEST_uimessage")
     unittester.run("uiexception","TEST_specificException")
     
index 1a0001b98f0e1d6ce625109169aadf7e5aaad500..9abb4fa4c99b351c64ee4b2dd394b0686218b152 100644 (file)
@@ -45,12 +45,12 @@ def run(modulePath, functionName):
     module=sys.modules[moduleName]
     func = getattr(module,functionName)
     tabsize = 70-len(moduleName)-len(functionName)
-    print "[TEST] %s.%s %s test in progress" % (moduleName, functionName,"."*tabsize
+    print("[TEST] %s.%s %s test in progress" % (moduleName, functionName,"."*tabsize)
     ok = func()
     if ( ok ):
-        print "[TEST] %s.%s %s OK" % (moduleName, functionName,"."*tabsize)
+        print("[TEST] %s.%s %s OK" % (moduleName, functionName,"."*tabsize))
     else:
-        print "[TEST] %s.%s %s NOT OK" % (moduleName, functionName,"."*tabsize)
+        print("[TEST] %s.%s %s NOT OK" % (moduleName, functionName,"."*tabsize))
 
 ## This function is for debug only. It executes the specified function with the
 #  specified arguments in a try/except block so as to display the exception in
@@ -64,11 +64,11 @@ def tryfunction(function,*argv):
     the case where an exception is raised (useful to debug server side of a CORBA
     process).
     """
-    print "[TEST] trying the function %s" % function
+    print("[TEST] trying the function %s" % function)
     try:
         return function(*argv)
-    except Exception, e:
-        print e
+    except Exception as e:
+        print(e)
         raise e
 
 
index 963b1e3cbdd0a4b6d8d425bef0c3e9cae6d059e4..d39c60469600d56d38b605fe40377eef98102db9 100644 (file)
@@ -51,10 +51,10 @@ def openModule(mname, fname=None):
         shared_imported[mname]=mod
         # Salome modification end
 
-    elif sys.modules.has_key(mname):
+    elif mname in sys.modules:
         mod = sys.modules[mname]
 
-        if _partialModules.has_key(mname):
+        if mname in _partialModules:
             pmod = _partialModules[mname]
             mod.__dict__.update(pmod.__dict__)
             del _partialModules[mname]
@@ -62,7 +62,7 @@ def openModule(mname, fname=None):
         shared_imported[mname]=mod
         # Salome modification end
 
-    elif _partialModules.has_key(mname):
+    elif mname in _partialModules:
         mod = _partialModules[mname]
 
     # Salome modification start
@@ -98,10 +98,10 @@ def newModule(mname):
     for name in mlist:
         current = current + name
 
-        if sys.modules.has_key(current):
+        if current in sys.modules:
             mod = sys.modules[current]
 
-        elif _partialModules.has_key(current):
+        elif current in _partialModules:
             mod = _partialModules[current]
 
         else:
@@ -120,7 +120,7 @@ def updateModule(mname):
     # Be sure to use the right module dictionary
     import sys
     # Salome modification end
-    if _partialModules.has_key(mname):
+    if mname in _partialModules:
         pmod = _partialModules[mname]
         mod  = sys.modules[mname]
         mod.__dict__.update(pmod.__dict__)
index 9baeb7d5ddf90f67d7add9dcb194f933f23787f0..8bb69f4ebd723bdf53ae7e687db34083c7415fbd 100644 (file)
@@ -41,12 +41,10 @@ def getShapeTypeString(aSubId):
 
 def createAndDisplayGO( *args, **kwargs ):
     pass
-                       
     #--------------------------------------------------------------------------
 
 def UpdateViewer():
-    pass                                               
-                                                       
+    pass
     #--------------------------------------------------------------------------
 
 def setDisplayMode(objId, mode):
@@ -83,7 +81,7 @@ def setNameMode(objId, mode):
 
     #--------------------------------------------------------------------------
 
-def Init(studyId):
+def Init():
     return
 
     #--------------------------------------------------------------------------
index 8c6f8d7cd5b82248a578be1838dc7798657f0f27..24deed4111d47b32031ea73a31bde64692d08dda 100755 (executable)
@@ -38,14 +38,14 @@ def ImportComponentGUI(ComponentName):
     if IN_SALOME_GUI:
         libName = "lib" + ComponentName + "_Swig"
         command = "from " + libName + " import *"
-        exec ( command )
+        exec (command, globals())
         constructor = ComponentName + "_Swig()"
         command = "gui = " + constructor
-        exec ( command )
-        return gui
+        exec (command, globals())
+        return gui  # @UndefinedVariable
     else:
-        print "Warning: ImportComponentGUI(",ComponentName,") outside GUI !"
-        print "calls to GUI methods may crash..."
+        print("Warning: ImportComponentGUI(",ComponentName,") outside GUI !")
+        print("calls to GUI methods may crash...")
         return salome_ComponentGUI
 
     #--------------------------------------------------------------------------
@@ -71,90 +71,85 @@ class SalomeOutsideGUI(object):
     Provides a replacement for class SalomeGUI outside GUI process.
     Do almost nothing
     """
-    global myStudyId, myStudyName
+    global myStudyName
     
     def hasDesktop(self):
         """Indicate if GUI is running"""
         return False
     
-    def updateObjBrowser(self, bid):
+    def updateObjBrowser(self):
         """update the GUI object browser"""
-        print "SalomeOutsideGUI: no objectBrowser update outside GUI"
+        print("SalomeOutsideGUI: no objectBrowser update outside GUI")
         pass
     
-    def getActiveStudyId(self):
-        """Get the active study id"""
-        print "SalomeOutsideGUI.getActiveStudyId: avoid use outside GUI"
-        return myStudyId
-    
-    def getActiveStudyName(self):
-        """Get the active study name"""
-        print "SalomeOutsideGUI.getActiveStudyName: avoid use outside GUI"
+    def getStudyName(self):
+        """Get the study name"""
+        print("SalomeOutsideGUI.getStudyName: avoid use outside GUI")
         return myStudyName
     
     def SelectedCount(self):
         """Get the number of active selections"""
-        print "SalomeOutsideGUI: no selection mechanism available outside GUI"
+        print("SalomeOutsideGUI: no selection mechanism available outside GUI")
         return 0
     
     def getSelected(self, i):
         """Get the selection number i """
-        print "SalomeOutsideGUI: no selection mechanism available outside GUI"
+        print("SalomeOutsideGUI: no selection mechanism available outside GUI")
         return none
     
     def AddIObject(self, Entry):
         """Add an entry"""
-        print "SalomeOutsideGUI.AddIOObject: not available outside GUI"
+        print("SalomeOutsideGUI.AddIOObject: not available outside GUI")
         pass
     
     def RemoveIObject(self, Entry):
         """Remove an entry"""
-        print "SalomeOutsideGUI.REmoveIOObject: not available outside GUI"
+        print("SalomeOutsideGUI.REmoveIOObject: not available outside GUI")
         pass
     
     def ClearIObjects(self):
         """Clear entries"""
-        print "SalomeOutsideGUI.ClearIOObject: not available outside GUI"
+        print("SalomeOutsideGUI.ClearIOObject: not available outside GUI")
         pass
     
     def Display(self, Entry):
         """Display an entry"""
-        print "SalomeOutsideGUI.Display: not available outside GUI"
+        print("SalomeOutsideGUI.Display: not available outside GUI")
         pass
     
     def DisplayOnly(self, Entry):
         """Display only an entry"""
-        print "SalomeOutsideGUI.DisplayOnly: not available outside GUI"
+        print("SalomeOutsideGUI.DisplayOnly: not available outside GUI")
         pass
     
     def Erase(self, Entry):
         """Erase en entry"""
-        print "SalomeOutsideGUI.Erase: not available outside GUI"
+        print("SalomeOutsideGUI.Erase: not available outside GUI")
         pass
     
     def DisplayAll(self):
         """Display all"""
-        print "SalomeOutsideGUI.Erase: not available outside GUI"
+        print("SalomeOutsideGUI.Erase: not available outside GUI")
         pass
     
     def EraseAll(self):
         """Erase all"""
-        print "SalomeOutsideGUI.EraseAll: not available outside GUI"
+        print("SalomeOutsideGUI.EraseAll: not available outside GUI")
         pass
 
     def IsInCurrentView(self, Entry):
         """Indicate if an entry is in current view"""
-        print "SalomeOutsideGUI.IsIncurentView: not available outside GUI"
+        print("SalomeOutsideGUI.IsIncurentView: not available outside GUI")
         return False
         
     def getComponentName(self, ComponentUserName ):
         """Get component name from component user name"""
-        print "SalomeOutsideGUI.getComponentName: not available outside GUI"
+        print("SalomeOutsideGUI.getComponentName: not available outside GUI")
         return ""
    
     def getComponentUserName( self, ComponentName ):
         """Get component user name from component name"""
-        print "SalomeOutsideGUI.getComponentUserName: not available outside GUI"
+        print("SalomeOutsideGUI.getComponentUserName: not available outside GUI")
         return ""
         
     #--------------------------------------------------------------------------
index 12ac01b8231171e5128b2972051d88d5c3e2f184..92857da24fe50af1bdf6240e32032d57d24825e0 100644 (file)
@@ -36,7 +36,7 @@ class PseudoStudyForNoteBook(object):
         pass
     
     def GetVariableNames(self):
-        return self.kwargs.keys()
+        return list(self.kwargs.keys())
     
     def IsVariable(self, variableName):
         return variableName in self.kwargs
@@ -69,24 +69,27 @@ class PseudoStudyForNoteBook(object):
 
 class NoteBook:
     
-    def __init__(self, Study):
-        self.myStudy = Study
+    def __init__(self, theIsEnablePublish = True):
+        if theIsEnablePublish:
+            self.myStudy = salome.myStudy
+        else:
+            self.myStudy = PseudoStudyForNoteBook()
     
     def set(self, variableName, variable):
         """
         Create (or modify) variable with name "variableName" 
         and value equal "theValue".
         """
-        if type(variable) == float:
+        if isinstance(variable, float):
             self.myStudy.SetReal(variableName, variable)
             
-        elif type(variable) == int:
+        elif isinstance(variable, int):
             self.myStudy.SetInteger(variableName, variable)
             
-        elif type(variable) == bool:
+        elif isinstance(variable, bool):
             self.myStudy.SetBoolean(variableName, variable)
             
-        elif type(variable) == str:
+        elif isinstance(variable, str):
             self.myStudy.SetString(variableName, variable)
             
     def get(self, variableName):
@@ -124,7 +127,7 @@ class NoteBook:
                     pass
                 try:
                     aResult = eval(aResult)
-                except Exception, e:
+                except Exception as e:
                     msg = str(e)
                     msg += "\n"
                     msg += "A problem occurs while parsing "
@@ -171,9 +174,8 @@ class NoteBook:
     pass
 
 def checkThisNoteBook(**kwargs):
-    study = PseudoStudyForNoteBook(**kwargs)
-    note_book = NoteBook(study)
+    note_book = NoteBook( False )
     note_book.check()
     return
 
-notebook = NoteBook(salome.myStudy)
+notebook = NoteBook()
index 124bff168b0aa988dd8c47ab1a81a72811856791..f1b448754ef6861911f3cedebde168ad20297ca4 100644 (file)
@@ -28,7 +28,7 @@
  exception
 """
 import omniORB
-import cPickle
+import pickle
 import SALOME
 import Engines
 
@@ -38,17 +38,17 @@ class SmartPyNode(Engines._objref_PyNode):
 
   def execute(self,functionName,*args,**kws):
     try:
-      args=cPickle.dumps((args,kws),-1)
+      args=pickle.dumps((args,kws),-1)
       results=Engines._objref_PyNode.execute(self,functionName,args)
-      x=cPickle.loads(results)
+      x=pickle.loads(results)
       return x
-    except SALOME.SALOME_Exception, e:
+    except SALOME.SALOME_Exception as e:
       raise ValueError(e.details.text)
 
   def __getattr__(self,name):
     """ a trick to be able to call directly a remote method by its name : no need to use execute"""
     if name[0]== '_':
-      raise AttributeError, name
+      raise AttributeError(name)
     def afunc(*args,**kws):
       return self.execute(name,*args,**kws)
     return afunc
@@ -60,11 +60,11 @@ class SmartPyScriptNode(Engines._objref_PyScriptNode):
   def execute(self,outargsname,*args,**kws):
     #the tuple args are ignored
     try:
-      args=cPickle.dumps(((),kws),-1)
+      args=pickle.dumps(((),kws),-1)
       results=Engines._objref_PyScriptNode.execute(self,outargsname,args)
-      x=cPickle.loads(results)
+      x=pickle.loads(results)
       return x
-    except SALOME.SALOME_Exception, e:
+    except SALOME.SALOME_Exception as e:
       raise ValueError(e.details.text)
 
 #Register the new proxy for PyNode
index c084373255be678b239bc6187924f7babd1d13f5..5626aecdf8b13c3722364f03b1a79d6014d43d8e 100755 (executable)
@@ -31,15 +31,14 @@ import SALOMEDS
 import salome_iapp
 from launchConfigureParser import verbose
 
-myStudyManager = None
-myStudyId = None
 myStudy = None
 myStudyName = None
 
 #--------------------------------------------------------------------------
 
-def DumpComponent(Study, SO, Builder,offset):
-  it = Study.NewChildIterator(SO)
+def DumpComponent(SO, Builder,offset):
+  global myStudy
+  it = myStudy.NewChildIterator(SO)
   while it.More():
     CSO = it.Value()
     a=offset*"--" + ">" + CSO.GetID()
@@ -52,36 +51,26 @@ def DumpComponent(Study, SO, Builder,offset):
     find,RefSO = CSO.ReferencedObject()
     if find:
       a=a+":"+RefSO.GetID()
-    print a
-    DumpComponent(Study, CSO, Builder,offset+2)
+    print(a)
+    DumpComponent(CSO, Builder,offset+2)
     it.Next()
 
 #--------------------------------------------------------------------------
 
-def DumpStudy(Study):
+def DumpStudy():
     """
     Dump a study, given the ior
     """
-    itcomp = Study.NewComponentIterator()
-    Builder = Study.NewBuilder()
+    global myStudy
+    itcomp = myStudy.NewComponentIterator()
+    Builder = myStudy.NewBuilder()
     while itcomp.More():
       SC = itcomp.Value()
       name = SC.ComponentDataType()
-      print "-> ComponentDataType is " + name
-      DumpComponent(Study, SC,Builder, 1)
+      print("-> ComponentDataType is " + name)
+      DumpComponent(SC,Builder, 1)
       itcomp.Next()
 
-def DumpStudies():
-  """
-    Dump all studies in a StudyManager
-  """
-  global myStudyManager
-  for name in myStudyManager.GetOpenStudies():
-    s = myStudyManager.GetStudyByName(name)
-    print "study:",name, s._get_StudyId()
-    DumpStudy(s)
-
-
 #--------------------------------------------------------------------------
 
 def IDToObject(id):
@@ -97,6 +86,7 @@ def IDToObject(id):
     return myObj
 
 def ObjectToSObject(obj):
+    global myStudy
     mySO = None
     if obj is not None:
         ior =  orb.object_to_string(obj)
@@ -127,7 +117,8 @@ def generateName(prefix = None):
 
     #--------------------------------------------------------------------------
 
-def PersistentPresentation(theStudy, theSO, theWithID):
+def PersistentPresentation(theSO, theWithID):
+    global myStudy
     # put the sobject's content (with subchildren) to the string
     aResult = ""
     attrs = theSO.GetAllAttributes()
@@ -176,9 +167,9 @@ def PersistentPresentation(theStudy, theSO, theWithID):
         aResult = "sobject: " + theSO.GetID() + " nbattrs: " + str(aLen - anUncopied) + aResult + '\n'
     else:
         aResult = " nbattrs: " + str(aLen - anUncopied) + aResult + '\n'
-    anIter = theStudy.NewChildIterator(theSO)
+    anIter = myStudy.NewChildIterator(theSO)
     while anIter.More():
-        aResult += PersistentPresentation(theStudy, anIter.Value(), theWithID)
+        aResult += PersistentPresentation(anIter.Value(), theWithID)
         anIter.Next()
     return aResult
 
@@ -197,34 +188,34 @@ def GetTree(theSO):
     #--------------------------------------------------------------------------
 
 def CheckCopyPaste(theSO, theInfo ,theComponentPaste):
-    global myStudyManager, myStudy
+    global myStudy
 
     aRoot = theSO
     while aRoot.GetID() != "0:":
         aRoot = aRoot.GetFather()
     aTree = GetTree(aRoot)
-    aStudyPersist = PersistentPresentation(myStudy, aRoot, 1)
+    aStudyPersist = PersistentPresentation(aRoot, 1)
 
-    if not myStudyManager.CanCopy(theSO):
-        raise RuntimeError, "<CanCopy> for "+theInfo+" returns false"
+    if not myStudy.CanCopy(theSO):
+        raise RuntimeError("<CanCopy> for "+theInfo+" returns false")
     
-    if not myStudyManager.Copy(theSO):
-        raise RuntimeError, "<Copy> for "+theInfo+" returns false"
+    if not myStudy.Copy(theSO):
+        raise RuntimeError("<Copy> for "+theInfo+" returns false")
 
     
-    if not myStudyManager.CanPaste(theSO):
-        raise RuntimeError, "<CanPaste> for "+theInfo+" returns false"
+    if not myStudy.CanPaste(theSO):
+        raise RuntimeError("<CanPaste> for "+theInfo+" returns false")
 
     # check: before paste study is not changed check
-    if aStudyPersist != PersistentPresentation(myStudy, aRoot, 1):
-        raise RuntimeError, "Study is changed before Paste calling for "+theInfo
+    if aStudyPersist != PersistentPresentation(aRoot, 1):
+        raise RuntimeError("Study is changed before Paste calling for "+theInfo)
     
     aSObj = theSO
     if theComponentPaste:
         aSObj = theSO.GetFatherComponent()
         theInfo = theInfo + "(paste for component)"
-    if myStudyManager.Paste(aSObj) == None:
-        raise RuntimeError, "<Paste> for "+theInfo+" returns None object"
+    if myStudy.Paste(aSObj) == None:
+        raise RuntimeError("<Paste> for "+theInfo+" returns None object")
     aNewTree = GetTree(aRoot)
     aLen = len(aTree)
     for a in range(0,aLen):
@@ -234,7 +225,7 @@ def CheckCopyPaste(theSO, theInfo ,theComponentPaste):
     if aLen < len(aNewTree):
         return myStudy.FindObjectID(aNewTree[aLen])
     
-    raise RuntimeError, "After Copy calling the tree is not changed"
+    raise RuntimeError("After Copy calling the tree is not changed")
     
     #--------------------------------------------------------------------------
 
@@ -279,97 +270,12 @@ def FindFileInDataDir(filename):
 
     #--------------------------------------------------------------------------
 
-salome_study_ID = -1
-
-# *args are used here to support backward compatibility
-# previously it was possible to pass theStudyId parameter to this function
-# which is no more supported.
-def getActiveStudy(*args):
-    global myStudyManager
-    global salome_study_ID
-
-    if not myStudyManager:
-        print "No active study"
-        return None
-        pass
-
-    if verbose(): print "getActiveStudy"
-    if salome_study_ID == -1:
-        listOpenStudies = myStudyManager.GetOpenStudies()
-        if len(listOpenStudies) == 0:
-            return None
-        else:
-            s = myStudyManager.GetStudyByName(listOpenStudies[0])
-            salome_study_ID = s._get_StudyId()
-    if verbose(): print"--- Study Id ", salome_study_ID
-    return salome_study_ID
-
-    #--------------------------------------------------------------------------
-
-def setCurrentStudy(theStudy):
-    """
-    Change current study : an existing one given by a study object.
-
-    :param theStudy: the study CORBA object to set as current study
-
-    Obsolete: only one study can be opened at the moment.
-    This function works properly if specified theStudy parameter
-    corresponds to the currently opened study.
-    Kept for backward compatibility only.
-    """
-    global myStudyId, myStudy, myStudyName
-    global salome_study_ID
-    myStudy = theStudy
-    myStudyId = theStudy._get_StudyId()
-    myStudyName = theStudy._get_Name()
-    return myStudyId, myStudy, myStudyName
-
-    #--------------------------------------------------------------------------
-
-# *args are used here to support backward compatibility
-# previously it was possible to pass theStudyId parameter to this function
-# which is no more supported.
-def setCurrentStudyId(*args):
-    """
-    Change current study : an existing or new one.
-
-    This function connects to the single opened study if there is any; otherwise
-    new empty study is created.
-
-    Obsolete: only one study can be opened at the moment.
-    Kept for backward compatibility only.
-    """
-    global myStudyManager, myStudyId, myStudy, myStudyName
-    global salome_study_ID
-    salome_study_ID = -1
-    myStudyId = getActiveStudy()
-    if not myStudyId:
-      myStudyId = createNewStudy()
-    if verbose(): print "myStudyId",myStudyId
-    myStudy = myStudyManager.GetStudyByID(myStudyId)
-    myStudyName = myStudy._get_Name()
-    return myStudyId, myStudy, myStudyName
-
-    #--------------------------------------------------------------------------
-
-def createNewStudy():
-    global myStudyManager
-    print "createNewStudy"
-    aStudyName = "extStudy"
-    theStudy = myStudyManager.NewStudy(aStudyName)
-    theStudyId = theStudy._get_StudyId()
-    print aStudyName, theStudyId
-    return theStudyId
-
-    #--------------------------------------------------------------------------
-
 def openStudy(theStudyPath):
-    global myStudyManager
-    print "openStudy"
-    theStudy = myStudyManager.Open(theStudyPath)
-    theStudyId = theStudy._get_StudyId()
-    print theStudyPath, theStudyId
-    return theStudyId
+    print("openStudy")
+    global myStudy, myStudyName
+    myStudy.Open(theStudyPath)
+    myStudyName = myStudy._get_Name()
+    print(theStudyPath, myStudy._get_Name())
 
     #--------------------------------------------------------------------------
 
@@ -381,40 +287,26 @@ def salome_study_init(theStudyPath=None):
                       create new empty study if there is active study
         <URL> (str) : open study with the given file name
     """
-    global myStudyManager, myStudyId, myStudy, myStudyName
+    global myStudy, myStudyName
     global orb, lcc, naming_service, cm
 
-    if verbose(): print "theStudyPath:", theStudyPath
-    if not myStudyManager:
+    if verbose(): print("theStudyPath:", theStudyPath)
+    if not myStudy:
         orb, lcc, naming_service, cm = salome_kernel.salome_kernel_init()
 
-        # get Study Manager reference
-        if verbose(): print "looking for studyManager ..."
-        obj = naming_service.Resolve('myStudyManager')
-        myStudyManager = obj._narrow(SALOMEDS.StudyManager)
-        if verbose(): print "studyManager found"
+        # get Study reference
+        if verbose(): print("looking for study...")
+        obj = naming_service.Resolve('/Study')
+        myStudy = obj._narrow(SALOMEDS.Study)
+        if verbose(): print("Study found")
         pass
 
-    # get active study Id, ref and name
-    myStudy = None
-    myStudyId = getActiveStudy()
-    if myStudyId == None :
-        import types
-        if theStudyPath and type(theStudyPath) == types.StringType:
-            myStudyId = openStudy(theStudyPath)
-        else:
-            myStudyId = createNewStudy()
-    if verbose(): print "myStudyId", myStudyId
-
-    if myStudy == None:
-        myStudy = myStudyManager.GetStudyByID(myStudyId)
-    myStudyName = myStudy._get_Name()
+    import types
+    if theStudyPath and isinstance(theStudyPath, (str, bytes)):
+        if isinstance(theStudyPath, bytes):
+            theStudyPath = str(theStudyPath, 'UTF8')
+        openStudy(theStudyPath)
 
-    return myStudyManager, myStudyId, myStudy, myStudyName
+    myStudyName = myStudy._get_Name()
 
-def salome_study_close():
-    global salome_study_ID
-    global myStudyId, myStudy, myStudyName
-    salome_study_ID = -1
-    myStudyId, myStudy, myStudyName = None, None, None
-    pass
+    return myStudy, myStudyName
index 76dceacd467a9874ce0f7e58d8ff434286e39b21..4c4c05110c2e0c75c31f833b4801ab8c4480bc2d 100755 (executable)
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-print
-print "Perform quick test of the application by loading of the GEOM, SMESH, MED, PARAVIS"
-print "components and doing some operation within the components."
-print
+print()
+print("Perform quick test of the application by loading of the GEOM, SMESH, MED, PARAVIS")
+print("components and doing some operation within the components.")
+print()
 
 import salome
 import SALOME
@@ -35,84 +35,85 @@ import SALOME_ModuleCatalog
 
 step = 1
 
-print "======================================================================"
-print "           %d. Initialize study " % step; step+=1
-print "======================================================================"
+print("======================================================================")
+print("           %d. Initialize study " % step); step+=1
+print("======================================================================")
 
 # initialize study
 salome.salome_init()
 # get study builder
 builder = salome.myStudy.NewBuilder()
-print "OK"
+print("OK")
 
-print 
+print() 
 
-print "======================================================================"
-print "           %d. Retrieve module catalog " % step; step+=1
-print "======================================================================"
+print("======================================================================")
+print("           %d. Retrieve module catalog " % step); step+=1
+print("======================================================================")
 
 obj = salome.naming_service.Resolve('Kernel/ModulCatalog')
 catalog = obj._narrow(SALOME_ModuleCatalog.ModuleCatalog)
 if not catalog:
-    raise RuntimeError, "Can't access module catalog"
-print "OK"
 
-print
+    raise RuntimeError("Can't access module catalog")
+print("OK")
 
-print "======================================================================"
-print "           %d. Check modules availability in the module catalog " % step; step+=1
-print "======================================================================"
+print()
+
+print("======================================================================")
+print("           %d. Check modules availability in the module catalog " % step); step+=1
+print("======================================================================")
 
 for module in [ "GEOM", "SMESH", "MEDFactory", "PVSERVER"]:
-    print
-    print "--- Check %s ..." % module
+    print()
+    print("--- Check %s ..." % module)
     comp = catalog.GetComponent(module)
     if not comp:
-        raise RuntimeError, "Component %s is not found in Module Catalog." % module
-    print "OK"
+        raise RuntimeError("Component %s is not found in Module Catalog." % module)
+    print("OK")
     pass
 
-print
+print()
 
-print "======================================================================"
-print "           %d. Test Data Server " % step; step+=1
-print "======================================================================"
+print("======================================================================")
+print("           %d. Test Data Server " % step); step+=1
+print("======================================================================")
 
-print
-print "--- Create new component ..."
+print()
+print("--- Create new component ...")
 comp = builder.NewComponent("TEST")
 if not comp:
-    raise RuntimeError, "Can't create new component"
-print "OK"
+    raise RuntimeError("Can't create new component")
+print("OK")
 
-print
-print "--- Create AttributeName ..."
+print()
+print("--- Create AttributeName ...")
 A = builder.FindOrCreateAttribute(comp, "AttributeName")
 if not A:
-    raise RuntimeError, "Can't create AttributeName attribute"
+    raise RuntimeError("Can't create AttributeName attribute")
 A.SetValue("TEST")
 if A.Value() != "TEST":
-    raise RuntimeError, "Error : wrong value of  AttributeName"
-print "OK"
+    raise RuntimeError("Error : wrong value of  AttributeName")
+print("OK")
 
-print
-print "--- Create AttributeReal ..."
+print()
+print("--- Create AttributeReal ...")
 A = builder.FindOrCreateAttribute(comp, "AttributeReal")
 if not A:
-    raise RuntimeError, "Can't create AttributeReal attribute"
+    raise RuntimeError("Can't create AttributeReal attribute")
 A.SetValue(0.0001)
 if A.Value() != 0.0001:
-    raise RuntimeError, "Error : wrong value of  AttributeReal"
-print "OK"
+    raise RuntimeError("Error : wrong value of  AttributeReal")
+print("OK")
 
-print
+print()
 
-print "======================================================================"
-print "           %d. Test Geometry " % step; step+=1
-print "======================================================================"
+print("======================================================================")
+print("           %d. Test Geometry " % step); step+=1
+print("======================================================================")
 
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 ShapeTypeCompSolid = 1
 ShapeTypeSolid = 2
@@ -122,54 +123,54 @@ ShapeTypeWire = 5
 ShapeTypeEdge = 6
 ShapeTypeVertex = 7
 
-print
-print "--- Create a box ..."
+print()
+print("--- Create a box ...")
 box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
 idbox = geompy.addToStudy(box, "box")
 box_obj = salome.myStudy.FindObjectByPath("/Geometry/box")
 if not box_obj:
-    raise RuntimeError, "Error : wrong value of  AttributeReal"
-print "OK"
+    raise RuntimeError("Error : wrong value of  AttributeReal")
+print("OK")
 
 # ---- add shell from box in study
-print 
-print "--- Extract shell ..."
+print() 
+print("--- Extract shell ...")
 subShellList = geompy.SubShapeAll(box, ShapeTypeShell)
 shell = subShellList[0]
 name = geompy.SubShapeName(shell, box)
 idshell = geompy.addToStudyInFather(box, shell, name)
-print name
-print "OK"
+print(name)
+print("OK")
 
 # ---- add first face of box in study
-print 
-print "--- Extract face ..."
+print() 
+print("--- Extract face ...")
 subShapeList = geompy.SubShapeAll(box, ShapeTypeFace)
 face = subShapeList[0]
 name = geompy.SubShapeName(face, box)
 idface = geompy.addToStudyInFather(box, face, name)
-print name
-print "OK"
+print(name)
+print("OK")
 
 # ---- add first edge of face in study
-print 
-print "--- Extract edge ..."
+print() 
+print("--- Extract edge ...")
 edgeList = geompy.SubShapeAll(face, ShapeTypeEdge)
 edge = edgeList[0];
 name = geompy.SubShapeName(edge, face)
 idedge = geompy.addToStudyInFather(face, edge, name)
-print name
-print "OK"
+print(name)
+print("OK")
 
 # ---- update object browser
 if salome.hasDesktop():
-    salome.sg.updateObjBrowser(True);
+    salome.sg.updateObjBrowser();
 
-print
+print()
 
-print "======================================================================"
-print "           %d. Test Mesh " % step; step+=1
-print "======================================================================"
+print("======================================================================")
+print("           %d. Test Mesh " % step); step+=1
+print("======================================================================")
 
 from salome.StdMeshers import StdMeshersBuilder
 import SMESH
@@ -178,94 +179,94 @@ from salome.smesh import smeshBuilder
 smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
 if salome.hasDesktop():
     smeshgui = salome.ImportComponentGUI("SMESH")
-    smeshgui.Init(salome.myStudyId);
+    smeshgui.Init();
 else:
-    smesh = smeshBuilder.New(salome.myStudy)
+    smesh = smeshBuilder.New()
 
 # ---- create hypotheses 
 
 stdMeshersEngine = "StdMeshersEngine"
 
-print
-print "--- Create hypotheses ..."
+print()
+print("--- Create hypotheses ...")
 
-print
-print "------ LocalLength ..."
+print()
+print("------ LocalLength ...")
 hypLen1 = smesh.CreateHypothesis( "LocalLength", stdMeshersEngine )
 hypLen1.SetLength(100)
-print hypLen1.GetName()
-print hypLen1.GetId()
-print hypLen1.GetLength()
+print(hypLen1.GetName())
+print(hypLen1.GetId())
+print(hypLen1.GetLength())
 if salome.hasDesktop():
     smeshgui.SetName(salome.ObjectToID(hypLen1), "Local_Length_100")
-print "OK"
+print("OK")
 
-print
-print "------ NumberOfSegments ..."
+print()
+print("------ NumberOfSegments ...")
 hypNbSeg1= smesh.CreateHypothesis( "NumberOfSegments", stdMeshersEngine )
 hypNbSeg1.SetNumberOfSegments(7)
-print hypNbSeg1.GetName()
-print hypNbSeg1.GetId()
-print hypNbSeg1.GetNumberOfSegments()
+print(hypNbSeg1.GetName())
+print(hypNbSeg1.GetId())
+print(hypNbSeg1.GetNumberOfSegments())
 if salome.hasDesktop():
     smeshgui.SetName(salome.ObjectToID(hypNbSeg1), "NumberOfSegments_7")
-print "OK"
+print("OK")
 
-print
-print "------ MaxElementArea [1] ..."
+print()
+print("------ MaxElementArea [1] ...")
 hypArea1 = smesh.CreateHypothesis( "MaxElementArea", stdMeshersEngine )
 hypArea1.SetMaxElementArea(2500)
-print hypArea1.GetName()
-print hypArea1.GetId()
-print hypArea1.GetMaxElementArea()
+print(hypArea1.GetName())
+print(hypArea1.GetId())
+print(hypArea1.GetMaxElementArea())
 if salome.hasDesktop():
     smeshgui.SetName(salome.ObjectToID(hypArea1), "MaxElementArea_2500")
-print "OK"
+print("OK")
 
-print
-print "------ MaxElementArea [2] ..."
+print()
+print("------ MaxElementArea [2] ...")
 hypArea2 = smesh.CreateHypothesis( "MaxElementArea", stdMeshersEngine )
 hypArea2.SetMaxElementArea(500)
-print hypArea2.GetName()
-print hypArea2.GetId()
-print hypArea2.GetMaxElementArea()
+print(hypArea2.GetName())
+print(hypArea2.GetId())
+print(hypArea2.GetMaxElementArea())
 if salome.hasDesktop():
     smeshgui.SetName(salome.ObjectToID(hypArea2), "MaxElementArea_500")
-print "OK"
+print("OK")
 
 # ---- create algorithms
 
-print
-print "--- Create algorithms ..."
+print()
+print("--- Create algorithms ...")
 
-print
-print "------ Regular_1D ..."
+print()
+print("------ Regular_1D ...")
 algoReg = smesh.CreateHypothesis( "Regular_1D", stdMeshersEngine )
 listHyp = algoReg.GetCompatibleHypothesis()
 for hyp in listHyp:
-    print hyp
-print algoReg.GetName()
-print algoReg.GetId()
+    print(hyp)
+print(algoReg.GetName())
+print(algoReg.GetId())
 if salome.hasDesktop():
     smeshgui.SetName(salome.ObjectToID(algoReg), "Regular_1D" )
-print "OK"
+print("OK")
 
-print
-print "------ MEFISTO_2D ..."
+print()
+print("------ MEFISTO_2D ...")
 algoMef = smesh.CreateHypothesis( "MEFISTO_2D", stdMeshersEngine )
 listHyp=algoMef.GetCompatibleHypothesis()
 for hyp in listHyp:
-    print hyp
-print algoMef.GetName()
-print algoMef.GetId()
+    print(hyp)
+print(algoMef.GetName())
+print(algoMef.GetId())
 if salome.hasDesktop():
     smeshgui.SetName(salome.ObjectToID(algoMef), "MEFISTO_2D" )
-print "OK"
+print("OK")
 
 # ---- create mesh on the box, apply hypotheses / algorithms
 
-print
-print "--- Create mesh on the box ..."
+print()
+print("--- Create mesh on the box ...")
 mesh = smesh.CreateMesh(box)
 if salome.hasDesktop():
     smeshgui.SetName( salome.ObjectToID(mesh), "MeshBox" );
@@ -273,40 +274,40 @@ ret = mesh.AddHypothesis(box, algoReg)
 ret = mesh.AddHypothesis(box, algoMef)
 ret = mesh.AddHypothesis(box, hypNbSeg1)
 ret = mesh.AddHypothesis(box, hypArea1)
-print "OK"
+print("OK")
 
 # ---- create submesh on the edge, add hypothesis
 
-print
-print "--- Add 1D sub-mesh on the edge ..."
+print()
+print("--- Add 1D sub-mesh on the edge ...")
 submesh = mesh.GetSubMesh(edge, "SubMeshEdge")
 ret = mesh.AddHypothesis(edge, algoReg)
 ret = mesh.AddHypothesis(edge, hypLen1)
-print "OK"
+print("OK")
 
 # ---- create submesh on the edge, add hypothesis
 
-print
-print "--- Add 2D sub-mesh on the face ..."
+print()
+print("--- Add 2D sub-mesh on the face ...")
 submesh = mesh.GetSubMesh(face, "SubMeshFace")
 ret = mesh.AddHypothesis(face, hypArea2)
-print "OK"
+print("OK")
 
 # ---- compute mesh
-print
-print "--- Compute mesh ..."
+print()
+print("--- Compute mesh ...")
 smesh.Compute(mesh, box)
-print "OK"
+print("OK")
 
 # ---- update object browser
 if salome.hasDesktop():
-    salome.sg.updateObjBrowser(True);
+    salome.sg.updateObjBrowser();
 
-print
+print()
 
-print "======================================================================"
-print "           %d. Test Med " % step; step+=1
-print "======================================================================"
+print("======================================================================")
+print("           %d. Test Med " % step); step+=1
+print("======================================================================")
 
 import medcalc
 #from medcalc import properties
@@ -315,7 +316,7 @@ from medcalc.fieldproxy import FieldProxy
 medcalc.medconsole.setConsoleGlobals(globals())
 try:
     med_root=os.environ["MED_ROOT_DIR"]
-except KeyError, e:
+except KeyError as e:
     raise RuntimeError("MED_ROOT_DIR should be defined to load the test data")
 
 filepath = os.path.join(med_root,"share","salome","resources","med","medcalc_testfiles","smallmesh_varfield.med")
@@ -323,71 +324,71 @@ medcalc.medio.LoadDataSource(filepath)
 fieldHandlerList = medcalc.medevents.dataManager.getFieldHandlerList()
 
 fieldHandler0 = fieldHandlerList[0]
-print "---Field Handler 0:\n%s" % fieldHandler0
+print("---Field Handler 0:\n%s" % fieldHandler0)
 fieldHandler1 = fieldHandlerList[1]
-print "---Field Handler 1:\n%s" % fieldHandler1
+print("---Field Handler 1:\n%s" % fieldHandler1)
 
-print "--- The addition of two fields can be done using field handler directly."
+print("--- The addition of two fields can be done using field handler directly.")
 addFieldHandler = medcalc.fieldproxy.calculator.add(fieldHandler0,fieldHandler1)
-print "--- Result handler:\n%s" % addFieldHandler
+print("--- Result handler:\n%s" % addFieldHandler)
 
-print "--- Or with a field proxy that easy the writing of operations."
+print("--- Or with a field proxy that easy the writing of operations.")
 fieldProxy0 = FieldProxy(fieldHandler0)
 fieldProxy1 = FieldProxy(fieldHandler1)
 
 resHandler = fieldProxy0 + fieldProxy1
 if resHandler is None:
-    print "Error: result handler is None!"
+    print("Error: result handler is None!")
 else:
-    print "--- Result handler:\n%s" % resHandler
-    print "OK"
+    print("--- Result handler:\n%s" % resHandler)
+    print("OK")
 
-print
+print()
 
 
-print "======================================================================"
-print "           %d. Test Paravis " % step; step+=1
-print "======================================================================"
+print("======================================================================")
+print("           %d. Test Paravis " % step); step+=1
+print("======================================================================")
 
 if salome.hasDesktop(): # in gui mode
 
-    print "**** Importing pvserver... It can take some time."
+    print("**** Importing pvserver... It can take some time.")
     import pvserver
     import pvsimple
     
     #====================Stage1: Importing MED file====================
     
-    print "**** Stage1: Importing MED file"
+    print("**** Stage1: Importing MED file")
     
-    print 'Import "ResOK_0000.med"...............',
+    print('Import "ResOK_0000.med"...............', end=' ')
     medFileName = "ResOK_0000.med"
     medFile = os.path.join(os.getenv('DATA_DIR'), 'MedFiles', medFileName)
     pvsimple.MEDReader( FileName=medFile )
     med_reader = pvsimple.GetActiveSource()
     
     if med_reader is None:
-        print "FAILED"
+        print("FAILED")
     else:
-        print "OK"
+        print("OK")
     
     #====================Stage2: Displaying presentation===============
     
-    print "**** Stage2: Displaying presentation"
+    print("**** Stage2: Displaying presentation")
     
-    print 'Get view...................',
+    print('Get view...................', end=' ')
     view = pvsimple.GetRenderView()
     if view is None:
-        print "FAILED"
+        print("FAILED")
     else:
-        print "OK"
+        print ("OK")
     
-    print "Creating presentation.......",
+    print("Creating presentation.......",end='')
     prs = pvsimple.GetRepresentation(med_reader)
     if prs is None:
-        print "FAILED"
+        print("FAILED")
     else:
-       rep_list = view.Representations
-       for rep in rep_list:
+        rep_list = view.Representations
+        for rep in rep_list:
             if hasattr(rep, 'Visibility'):
                 rep.Visibility = (rep == prs)
         pvsimple.Render(view=view) 
@@ -396,16 +397,16 @@ if salome.hasDesktop(): # in gui mode
         prs.SetRepresentationType('Surface')
         view.ResetCamera()
 
-        print "OK"
+        print ("OK")
     
 else: # not in gui mode, Paravis can not be tested
     
-    print
-    print "PARAVIS module requires SALOME to be running in GUI mode."
-    print
-    print "Skipping test for PARAVIS..."
+    print()
+    print("PARAVIS module requires SALOME to be running in GUI mode.")
+    print()
+    print("Skipping test for PARAVIS...")
     pass
 
 # ---- update object browser
 if salome.hasDesktop():
-    salome.sg.updateObjBrowser(True);
+    salome.sg.updateObjBrowser();
index a17424a15b05beb87c8ae8d93d6a778953c558b2..1642ed9a7a4f1b9da943ef08785b8c8510d7a11c 100644 (file)
@@ -49,7 +49,7 @@ def getVersion( mod = "KERNEL", full = False ):
     global _salome_versions
     mod = mod.upper()
     dev_flag = { True : "dev", False : "" }
-    if not _salome_versions.has_key( mod ):
+    if mod not in _salome_versions:
         _salome_versions[ mod ] = [ None, "" ]
         import os
         root_dir = os.getenv( "%s_ROOT_DIR" % mod )
index 7feaf8a2dafc67d0e137f3052e78fc82852b90e1..02341d11e59042599cf434fe0fabaea5fe41b237 100644 (file)
@@ -60,8 +60,8 @@ bool TEST_getLifeCycleCORBA() {
   return true;
 }
 
-bool TEST_getStudyManager() {
-  SALOMEDS::Study_ptr myTestStudy = KERNEL::getStudyManager()->NewStudy("kerneltest");
+bool TEST_getStudy() {
+  SALOMEDS::Study_ptr myTestStudy = KERNEL::getStudyServant();
   if ( CORBA::is_nil(myTestStudy) ) {
     return false;
   }
@@ -70,9 +70,8 @@ bool TEST_getStudyManager() {
   myTestStudy->SetString("material","wood");
   myTestStudy->SetReal("volume",3.23);
 
-  // The study is characterized by an ID
-  int myTestStudyId = myTestStudy->StudyId();
-  LOG("TestComponentImpl::testkernel: study id = "<<myTestStudyId);
+  // The study with properties was opened
+  LOG("TestComponentImpl::testkernel: study with properties was opened");
   return true;
 }
 
@@ -114,7 +113,7 @@ bool TEST_getSalomeLauncher() {
 int main (int argc, char * argv[]) {
   TEST_corba();
   TEST_getLifeCycleCORBA();
-  TEST_getStudyManager();
+  TEST_getStudy();
   TEST_getSalomeLauncher();
   return 0;
 }
index 58153720ee08aca42e00425d782e104363633628..5b14e24e77242454e2ff28560bdeb76b9d0b7d97 100644 (file)
   };
 
 //===========================================================================
-  SALOMEDS::SObject_ptr SALOMEDS_DriverDefaultImpl::PublishInStudy(SALOMEDS::Study_ptr theStudy,
-                                                  SALOMEDS::SObject_ptr theSObject,
-                                                  CORBA::Object_ptr theObject,
-                                                  const char* theName)
+  SALOMEDS::SObject_ptr SALOMEDS_DriverDefaultImpl::PublishInStudy(SALOMEDS::SObject_ptr theSObject,
+                                                                                          CORBA::Object_ptr     theObject,
+                                                                                          const char*           theName)
     throw (SALOME::SALOME_Exception)
   {
     MESSAGE("-----------------------------------------");
index a71fb5777ff7dfb818c85a257300ea4b6dc25276..ea748e66ab489ad1bed93e64495a93b43ca3ce9f 100644 (file)
@@ -87,12 +87,10 @@ class KERNELHELPERS_EXPORT SALOMEDS_DriverDefaultImpl:
 
     virtual bool CanPublishInStudy(CORBA::Object_ptr theIOR);
 
-    virtual SALOMEDS::SObject_ptr PublishInStudy
-                             (SALOMEDS::Study_ptr theStudy,
-                  SALOMEDS::SObject_ptr theSObject,
-            CORBA::Object_ptr theObject,
-            const char* theName) 
-              throw (SALOME::SALOME_Exception);
+    virtual SALOMEDS::SObject_ptr PublishInStudy(SALOMEDS::SObject_ptr theSObject,
+                                                 CORBA::Object_ptr     theObject,
+                                                 const char*           theName)
+      throw (SALOME::SALOME_Exception);
 
     virtual CORBA::Boolean CanCopy(SALOMEDS::SObject_ptr theObject);
 
index da50bdb075ca1530a1bd690bd0a7f75269a36411..6616ab8a6e3c2046e4a654af2bab9a089661a205 100644 (file)
@@ -61,18 +61,17 @@ namespace KERNEL {
 
 
   /**
-   * This returns a static reference to the SALOME study manager. The
-   * study manager can be used to retrieve a study or to get
-   * information about a study.
+   * This returns a static reference to the SALOME study. The
+   * study can be used to get informations about it.
    */
-  SALOMEDS::StudyManager_ptr getStudyManager() {
-    static SALOMEDS::StudyManager_ptr aStudyManager;
-    if(CORBA::is_nil(aStudyManager)){
+  SALOMEDS::Study_ptr getStudyServant() {
+    static SALOMEDS::Study_ptr aStudy;
+    if(CORBA::is_nil(aStudy)){
       SALOME_NamingService *aNamingService = getNamingService();
-      CORBA::Object_ptr anObject = aNamingService->Resolve("/myStudyManager");
-      aStudyManager = SALOMEDS::StudyManager::_narrow(anObject);
+      CORBA::Object_ptr anObject = aNamingService->Resolve("/Study");
+      aStudy = SALOMEDS::Study::_narrow(anObject);
     }
-    return aStudyManager;
+    return aStudy;
   }
 
   /**
@@ -117,27 +116,6 @@ namespace KERNEL {
     return resourcesManager;
   }
 
-  /**
-   * This returns the study with the specified id if it's defined in
-   * the SALOME study manager. Returns null otherwise.
-   * Please not that it is just a shortcut, and you may prefer use
-   * directly the study manager:
-   *    KERNEL::getStudyManager()->GetStudyByID(aStudyId)
-   */
-  SALOMEDS::Study_ptr getStudyById(int aStudyId) {
-    if ( aStudyId < 0 ) {
-      INFOS("ERR: trying to get a study with ID<0");
-      return SALOMEDS::Study::_nil();
-    }
-    return getStudyManager()->GetStudyByID(aStudyId);
-  }
-
-  int getStudyId(SALOMEDS::Study_ptr study) {
-    if( CORBA::is_nil(study) ) return -1;
-    return study->StudyId();
-  }
-
-
   /**
    * This function retrieve the CORBA object reference from the study
    * object wrapping it.
index 5c0f39edcf6776a0f4b42dbf1596064b0728826c..4353d44f1a25d3184cc0544166f19e9d69596ab0 100644 (file)
@@ -41,7 +41,7 @@ namespace KERNEL {
   KERNELHELPERS_EXPORT SALOME_NamingService *        getNamingService();
   KERNELHELPERS_EXPORT SALOME_LifeCycleCORBA *       getLifeCycleCORBA();
   KERNELHELPERS_EXPORT SALOME::Session_ptr           getSalomeSession();
-  KERNELHELPERS_EXPORT SALOMEDS::StudyManager_ptr    getStudyManager();
+  KERNELHELPERS_EXPORT SALOMEDS::Study_ptr           getStudyServant();
   KERNELHELPERS_EXPORT Engines::SalomeLauncher_ptr   getSalomeLauncher();
   KERNELHELPERS_EXPORT Engines::ResourcesManager_ptr getResourcesManager();
 
@@ -49,8 +49,6 @@ namespace KERNEL {
   // SALOME KERNEL services to deal with a SALOME study, SObject and
   // SComponent.
   //
-  KERNELHELPERS_EXPORT SALOMEDS::Study_ptr getStudyById(int aStudyId);
-  KERNELHELPERS_EXPORT int                 getStudyId(SALOMEDS::Study_ptr study);
   KERNELHELPERS_EXPORT CORBA::Object_ptr   IORToObject(char * IOR);
   KERNELHELPERS_EXPORT CORBA::Object_ptr   SObjectToObject(SALOMEDS::SObject_ptr);
   
index 6eabba0e0202a32d8bef744b6da4f76621e60712..16391639cbd1841fa10e5c0e67bd27d228f7e032 100644 (file)
 
 /** Canonic constructor. The object can't be used without a setStudy() */
 SALOME_StudyEditor::SALOME_StudyEditor() {
-}
-
-void SALOME_StudyEditor::setStudy(SALOMEDS::Study_ptr study) {
-  _study = study;
-  _sbuilder = _study->NewBuilder();    
-}
-
-void SALOME_StudyEditor::setStudyById(int studyId) {
-  this->setStudy(KERNEL::getStudyManager()->GetStudyByID(studyId));
-}
-
-int SALOME_StudyEditor::getStudyId() {
-  if ( _study->_is_nil() ) return UNDEFINED; 
-  return _study->StudyId();
-}
-
-SALOME_StudyEditor::SALOME_StudyEditor(int studyId) {
-  this->setStudyById(studyId);
-}
-SALOME_StudyEditor::SALOME_StudyEditor(SALOMEDS::Study_ptr study) {
-  this->setStudy(study);
+  _sbuilder = KERNEL::getStudyServant()->NewBuilder();
 }
 
 SALOMEDS::SObject_ptr SALOME_StudyEditor::newObject(SALOMEDS::SObject_ptr parent) {
@@ -51,7 +31,7 @@ SALOMEDS::SObject_ptr SALOME_StudyEditor::newObject(SALOMEDS::SObject_ptr parent
 }
 
 SALOMEDS::SObject_ptr SALOME_StudyEditor::findObject(const char * entry) {
-  SALOMEDS::SObject_var sobject = _study->FindObjectID(entry);
+  SALOMEDS::SObject_var sobject = KERNEL::getStudyServant()->FindObjectID(entry);
   return sobject._retn();
 }
 
@@ -78,7 +58,7 @@ bool SALOME_StudyEditor::bindEngine(SALOMEDS::SComponent_var studyRoot,
 }
 
 SALOMEDS::SComponent_ptr SALOME_StudyEditor::findRoot(const char * moduleName) {
-  return _study->FindComponent(moduleName);
+  return KERNEL::getStudyServant()->FindComponent(moduleName);
 }
 
 void SALOME_StudyEditor::setName(SALOMEDS::SObject_var sobject, const char * value) {
index 23329461d7900ac104f5eb4039f178516be3f8a6..334f953b944101fe028df42ccb25fc60cc81340a 100644 (file)
@@ -32,8 +32,7 @@
 class KERNELHELPERS_EXPORT SALOME_StudyEditor {
 
 public:
-  SALOME_StudyEditor(int studyId);
-  SALOME_StudyEditor(SALOMEDS::Study_ptr study);
+  SALOME_StudyEditor();
 
   typedef std::vector<SALOMEDS::SObject_ptr> SObjectList;
 
@@ -55,14 +54,6 @@ public:
 
   static const int UNDEFINED = -1;
 
-protected:
-  SALOME_StudyEditor();
-  void setStudy(SALOMEDS::Study_ptr study);
-  void setStudyById(int studyId);
-  int getStudyId();
-
-  SALOMEDS::Study_var _study;
-
 private:
   SALOMEDS::StudyBuilder_var _sbuilder;
 };
index a3aa4cbb72b2037b335bad20cdd215861b9788d1..7aa3bc43601c82fd62002d188d0be441e46a9bda 100644 (file)
@@ -77,30 +77,16 @@ void KernelHelpersUnitTests::TEST_getLifeCycleCORBA() {
   CPPUNIT_ASSERT( strcmp(coucou_res, coucou_ref) == 0 );
 }
 
-void KernelHelpersUnitTests::TEST_getStudyManager() {
-  SALOMEDS::StudyManager_var studyManager = KERNEL::getStudyManager();
-
-  #ifndef ALLOW_MULTI_STUDIES
-  SALOMEDS::ListOfOpenStudies_var _list_open_studies =  studyManager->GetOpenStudies();
-  for (unsigned int ind = 0; ind < _list_open_studies->length();ind++)
-    {
-      LOG("Close study : " << _list_open_studies[ind]);
-      SALOMEDS::Study_var study = studyManager->GetStudyByName(_list_open_studies[0]);
-      if(study)
-        studyManager->Close(study);
-    }
-  #endif
-
-  SALOMEDS::Study_ptr myTestStudy = studyManager->NewStudy("kerneltest");
+void KernelHelpersUnitTests::TEST_getStudy() {
+  SALOMEDS::Study_ptr myTestStudy = KERNEL::getStudyServant();
   CPPUNIT_ASSERT(!CORBA::is_nil(myTestStudy));
 
   // One can use the study to store some general properties
   myTestStudy->SetString("material","wood");
   myTestStudy->SetReal("volume",3.23);
 
-  // The study is characterized by an ID
-  int myTestStudyId = myTestStudy->StudyId();
-  LOG("TestComponentImpl::testkernel: study id = "<<myTestStudyId);
+  // The study with properties was opened
+  LOG("TestComponentImpl::testkernel: study with properties was opened");
 }
 
 void KernelHelpersUnitTests::TEST_getSalomeLauncher() {
index 1f6e778f52f4d7378e10bbc4144430180ed8d4c3..ebacc674a45147088e639bba43994943cf9a600d 100644 (file)
@@ -40,7 +40,7 @@ class KERNELHELPERSTEST_EXPORT KernelHelpersUnitTests : public CppUnit::TestFixt
   CPPUNIT_TEST_SUITE( KernelHelpersUnitTests );
   CPPUNIT_TEST( TEST_corba );
   CPPUNIT_TEST( TEST_getLifeCycleCORBA );
-  CPPUNIT_TEST( TEST_getStudyManager );
+  CPPUNIT_TEST( TEST_getStudy );
   CPPUNIT_TEST( TEST_getSalomeLauncher );
   CPPUNIT_TEST_SUITE_END();
 
@@ -51,7 +51,7 @@ public:
 
   void TEST_corba();
   void TEST_getLifeCycleCORBA();
-  void TEST_getStudyManager();
+  void TEST_getStudy();
   void TEST_getSalomeLauncher();
 };
 
index 23855be65e3d1c05831dcecbec45c248c8667eb2..c94b5d55c5360aafacf9904c5f57237773e43b78 100644 (file)
@@ -21,7 +21,7 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-import sys, os,signal,string,commands
+import sys, os,signal,string,subprocess
 import subprocess
 import runSalome
 import setenv
index 59803aa7b57612f9af56ac1d728c50ef276d2739..41c2d079a41bb99831b336e928cdb2bfe9f0a5fc 100755 (executable)
@@ -58,7 +58,7 @@ class TestCompo(unittest.TestCase):
       text = f.read()
       f.close()
       self.assertEqual(text, content)
-    except IOError,ex:
+    except IOError as ex:
       self.fail("IO exception:" + str(ex));
 
   ##############################
@@ -107,7 +107,7 @@ f.close()
     launcher = salome.naming_service.Resolve('/SalomeLauncher')
 
     for resource in self.ressources:
-      print "Testing python_salome job on ", resource
+      print("Testing python_salome job on ", resource)
       job_params.result_directory = local_result_dir + resource
       job_params.job_name = "PyJob" + resource
       job_params.resource_required.name = resource
@@ -117,11 +117,11 @@ f.close()
       launcher.launchJob(job_id)
 
       jobState = launcher.getJobState(job_id)
-      print "Job %d state: %s" % (job_id,jobState)
+      print("Job %d state: %s" % (job_id,jobState))
       while jobState != "FINISHED" and jobState != "FAILED" :
         time.sleep(5)
         jobState = launcher.getJobState(job_id)
-        print "Job %d state: %s" % (job_id,jobState)
+        print("Job %d state: %s" % (job_id,jobState))
         pass
 
       self.assertEqual(jobState, "FINISHED")
@@ -209,7 +209,7 @@ f.close()
     resManager= salome.lcc.getResourcesManager()
 
     for resource in self.ressources:
-      print "Testing command job on ", resource
+      print("Testing command job on ", resource)
       job_params.result_directory = local_result_dir + resource
       job_params.job_name = "CommandJob_" + resource
       job_params.resource_required.name = resource
@@ -224,11 +224,11 @@ f.close()
       launcher.launchJob(job_id)
       # wait for the end of the job
       jobState = launcher.getJobState(job_id)
-      print "Job %d state: %s" % (job_id,jobState)
+      print("Job %d state: %s" % (job_id,jobState))
       while jobState != "FINISHED" and jobState != "FAILED" :
         time.sleep(3)
         jobState = launcher.getJobState(job_id)
-        print "Job %d state: %s" % (job_id,jobState)
+        print("Job %d state: %s" % (job_id,jobState))
         pass
 
       # verify the results
@@ -274,7 +274,6 @@ f.close()
     # job script
     script_text = """<?xml version='1.0' encoding='iso-8859-1' ?>
 <proc name="newSchema_1">
-   <property name="DefaultStudyID" value="1"/>
    <container name="DefaultContainer">
       <property name="container_kind" value="Salome"/>
       <property name="attached_on_cloning" value="0"/>
@@ -315,7 +314,7 @@ f.close()
     resManager= salome.lcc.getResourcesManager()
 
     for resource in self.ressources:
-      print "Testing yacs job on ", resource
+      print("Testing yacs job on ", resource)
       job_params.result_directory = local_result_dir + resource
       job_params.job_name = "YacsJob_" + resource
       job_params.resource_required.name = resource
@@ -331,14 +330,14 @@ f.close()
       jobState = launcher.getJobState(job_id)
 
       yacs_dump_success = False
-      print "Job %d state: %s" % (job_id,jobState)
+      print("Job %d state: %s" % (job_id,jobState))
       while jobState != "FINISHED" and jobState != "FAILED" :
         time.sleep(5)
         jobState = launcher.getJobState(job_id)
 #        yacs_dump_success = launcher.getJobWorkFile(job_id, "dumpState_mySchema.xml",
         yacs_dump_success = launcher.getJobDumpState(job_id,
                                               job_params.result_directory)
-        print "Job %d state: %s - dump: %s" % (job_id,jobState, yacs_dump_success)
+        print("Job %d state: %s - dump: %s" % (job_id,jobState, yacs_dump_success))
         pass
 
       self.assertEqual(jobState, "FINISHED")
@@ -379,7 +378,6 @@ f.close()
     # job script
     script_text = """<?xml version='1.0' encoding='iso-8859-1' ?>
 <proc name="myschema">
-   <property name="DefaultStudyID" value="1"/>
    <type name="string" kind="string"/>
    <type name="bool" kind="bool"/>
    <type name="double" kind="double"/>
@@ -430,7 +428,7 @@ f.close()
     resManager= salome.lcc.getResourcesManager()
 
     for resource in self.ressources:
-      print "Testing yacs job with options on ", resource
+      print("Testing yacs job with options on ", resource)
       job_params.result_directory = local_result_dir + resource
       job_params.job_name = "YacsJobOpt_" + resource
       job_params.resource_required.name = resource
@@ -446,11 +444,11 @@ f.close()
       jobState = launcher.getJobState(job_id)
 
       yacs_dump_success = False
-      print "Job %d state: %s" % (job_id,jobState)
+      print("Job %d state: %s" % (job_id,jobState))
       while jobState != "FINISHED" and jobState != "FAILED" :
         time.sleep(5)
         jobState = launcher.getJobState(job_id)
-        print "Job %d state: %s " % (job_id,jobState)
+        print("Job %d state: %s " % (job_id,jobState))
         pass
 
       self.assertEqual(jobState, "FINISHED")
index cf181f04e194100de5915fd8a1f67dbe1a12acbc..0bbed6c9208fc0c0ddc545d0980b742666bb0391 100644 (file)
@@ -132,14 +132,12 @@ SALOME_LifeCycleCORBA::~SALOME_LifeCycleCORBA()
  *
  *  \param params         container parameters like type or name...
  *  \param componentName  the name of component class
- *  \param studyId        default = 0  : multistudy instance
  *  \return a CORBA reference of the component instance, or _nil if not found
  */
 //=============================================================================
 Engines::EngineComponent_ptr
 SALOME_LifeCycleCORBA::FindComponent(const Engines::ContainerParameters& params,
-                                     const char *componentName,
-                                     int studyId)
+                                     const char *componentName)
 {
   if (! isKnownComponentClass(componentName))
     return Engines::EngineComponent::_nil();
@@ -160,7 +158,6 @@ SALOME_LifeCycleCORBA::FindComponent(const Engines::ContainerParameters& params,
 
   Engines::EngineComponent_var compo = _FindComponent(new_params,
                                                 componentName,
-                                                studyId,
                                                 listOfResources);
 
   return compo._retn();
@@ -171,15 +168,13 @@ SALOME_LifeCycleCORBA::FindComponent(const Engines::ContainerParameters& params,
  *
  *  \param params         container parameters like type or name...
  *  \param componentName  the name of component class
- *  \param studyId        default = 0  : multistudy instance
  *  \return a CORBA reference of the component instance, or _nil if problem
  */
 //=============================================================================
 
 Engines::EngineComponent_ptr
 SALOME_LifeCycleCORBA::LoadComponent(const Engines::ContainerParameters& params,
-                                     const char *componentName,
-                                     int studyId)
+                                     const char *componentName)
 {
   // --- Check if Component Name is known in ModuleCatalog
 
@@ -203,8 +198,7 @@ SALOME_LifeCycleCORBA::LoadComponent(const Engines::ContainerParameters& params,
   new_params.resource_params.resList = listOfResources;
 
   Engines::EngineComponent_var compo = _LoadComponent(new_params,
-                                                componentName,
-                                                studyId);
+                                                      componentName);
 
   return compo._retn();
 }
@@ -215,7 +209,6 @@ SALOME_LifeCycleCORBA::LoadComponent(const Engines::ContainerParameters& params,
  *
  *  \param params         container parameters like type or name...
  *  \param componentName  the name of component class
- *  \param studyId        default = 0  : multistudy instance
  *  \return a CORBA reference of the component instance, or _nil if problem
  */
 //=============================================================================
@@ -223,8 +216,7 @@ SALOME_LifeCycleCORBA::LoadComponent(const Engines::ContainerParameters& params,
 Engines::EngineComponent_ptr
 SALOME_LifeCycleCORBA::
 FindOrLoad_Component(const Engines::ContainerParameters& params,
-                     const char *componentName,
-                     int studyId)
+                     const char *componentName)
 {
   // --- Check if Component Name is known in ModuleCatalog
 
@@ -247,16 +239,14 @@ FindOrLoad_Component(const Engines::ContainerParameters& params,
     }
 
   Engines::EngineComponent_var compo = _FindComponent(new_params,
-                                                componentName,
-                                                studyId,
-                                                listOfResources);
+                                                      componentName,
+                                                      listOfResources);
 
   if(CORBA::is_nil(compo))
   {
     new_params.resource_params.resList = listOfResources;
     compo = _LoadComponent(new_params,
-                           componentName,
-                           studyId);
+                           componentName);
   }
 
   return compo._retn();
@@ -475,10 +465,10 @@ void SALOME_LifeCycleCORBA::shutdownServers()
   // 2) SALOMEDS
   try
     {
-      CORBA::Object_var objSDS = _NS->Resolve("/myStudyManager");
-      SALOMEDS::StudyManager_var studyManager = SALOMEDS::StudyManager::_narrow(objSDS) ;
-      if ( !CORBA::is_nil(studyManager) && ( pid != studyManager->getPID() ) )
-        studyManager->Shutdown();
+      CORBA::Object_var objSDS = _NS->Resolve("/Study");
+      SALOMEDS::Study_var study = SALOMEDS::Study::_narrow(objSDS) ;
+      if ( !CORBA::is_nil(study) && ( pid != study->getPID() ) )
+        study->Shutdown();
     }
   catch(const CORBA::Exception& e)
     {
@@ -599,7 +589,7 @@ void SALOME_LifeCycleCORBA::killOmniNames()
   std::string portNumber (::getenv ("NSPORT") );
   std::string python_exe;
 
-  python_exe = std::string("python");
+  python_exe = std::string("python3");
 
   if ( !portNumber.empty() )
   {
@@ -639,7 +629,6 @@ void SALOME_LifeCycleCORBA::killOmniNames()
  *
  *  \param params         machine parameters like type or name...
  *  \param componentName  the name of component class
- *  \param studyId        default = 0  : multistudy instance
  *  \param listOfMachines list of machine address
  *  \return a CORBA reference of the component instance, or _nil if not found
  */
@@ -649,7 +638,6 @@ Engines::EngineComponent_ptr
 SALOME_LifeCycleCORBA::
 _FindComponent(const Engines::ContainerParameters& params,
                const char *componentName,
-               int studyId,
                const Engines::ResourceList& listOfResources)
 {
   // --- build the list of machines on which the component is already running
@@ -700,7 +688,6 @@ _FindComponent(const Engines::ContainerParameters& params,
  *
  *  \param params         machine parameters like type or name...
  *  \param componentName  the name of component class
- *  \param studyId        default = 0  : multistudy instance
  *  \return a CORBA reference of the component instance, or _nil if problem
  */
 //=============================================================================
@@ -708,8 +695,7 @@ _FindComponent(const Engines::ContainerParameters& params,
 Engines::EngineComponent_ptr
 SALOME_LifeCycleCORBA::
 _LoadComponent(const Engines::ContainerParameters& params,
-              const char *componentName,
-              int studyId)
+              const char *componentName)
 {
   MESSAGE("_LoadComponent, required " << params.container_name <<
           " " << componentName << " " << NbProc(params));
@@ -730,7 +716,7 @@ _LoadComponent(const Engines::ContainerParameters& params,
   CORBA::string_free(reason);
 
   Engines::EngineComponent_var myInstance =
-    cont->create_component_instance(componentName, studyId);
+    cont->create_component_instance(componentName);
   return myInstance._retn();
 }
 
@@ -739,14 +725,12 @@ _LoadComponent(const Engines::ContainerParameters& params,
  *
  *  \param params         machine parameters like type or name...
  *  \param componentName  the name of component class
- *  \param studyId        default = 0  : multistudy instance
  *  \return a CORBA reference of the parallel component instance, or _nil if problem
  */
 //=============================================================================
 Engines::EngineComponent_ptr
 SALOME_LifeCycleCORBA::Load_ParallelComponent(const Engines::ContainerParameters& params,
-                                              const char *componentName,
-                                              int studyId)
+                                              const char *componentName)
 {
   MESSAGE("Entering LoadParallelComponent");
 
@@ -782,7 +766,7 @@ SALOME_LifeCycleCORBA::Load_ParallelComponent(const Engines::ContainerParameters
   // @PARALLEL@ permits to identify that the component requested
   // is a parallel component.
   std::string name = std::string(componentName);
-  Engines::EngineComponent_var myInstance = cont->create_component_instance(name.c_str(), studyId);
+  Engines::EngineComponent_var myInstance = cont->create_component_instance(name.c_str());
   if (CORBA::is_nil(myInstance))
     INFOS("create_component_instance returns a NULL component !");
   return myInstance._retn();
index 8713d570580a8658c47c4e9b31afdc9bb25e2229..4da31b0d92c23699584b192d8b37fa37c42840ca 100644 (file)
@@ -66,18 +66,15 @@ public:
 
   Engines::EngineComponent_ptr 
   FindComponent(const Engines::ContainerParameters& params,
-                const char *componentName,
-                int studyId=0);
+                const char *componentName);
 
   Engines::EngineComponent_ptr
   LoadComponent(const Engines::ContainerParameters& params,
-                const char *componentName,
-                int studyId=0);
+                const char *componentName);
 
   Engines::EngineComponent_ptr 
   FindOrLoad_Component(const Engines::ContainerParameters& params,
-                       const char *componentName,
-                       int studyId =0);
+                       const char *componentName);
 
   Engines::EngineComponent_ptr
   FindOrLoad_Component(const char *containerName,
@@ -86,8 +83,7 @@ public:
   // Parallel extension
   Engines::EngineComponent_ptr 
     Load_ParallelComponent(const Engines::ContainerParameters& params,
-                           const char *componentName,
-                           int studyId);
+                           const char *componentName);
 
   bool isKnownComponentClass(const char *componentName);
 
@@ -115,13 +111,11 @@ protected:
   Engines::EngineComponent_ptr 
   _FindComponent(const Engines::ContainerParameters& params,
                  const char *componentName,
-                 int studyId,
                  const Engines::ResourceList& listOfResources);
 
   Engines::EngineComponent_ptr
   _LoadComponent(const Engines::ContainerParameters& params,
-                 const char *componentName,
-                 int studyId);
+                 const char *componentName);
 
   SALOME_NamingService *_NS;
   SALOME_NamingService *_NSnew;
index 68d582703ab2e577705855d6cc5a6b4c9f954807..6d52cebcefc6ea40cdfaecfc4def2d00f076c90a 100644 (file)
@@ -21,7 +21,7 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-import sys, os,signal,string,commands
+import sys, os,signal,string,subprocess
 import subprocess
 import runSalome
 import setenv
index 38e526dface6962954e8d4dbef3f4b13cc6a7fef..4a8decb55341075c918891ddc0d807d54a9e435b 100755 (executable)
 INCLUDE(${SWIG_USE_FILE})
 
 SET_SOURCE_FILES_PROPERTIES(libSALOME_LifeCycleCORBA.i PROPERTIES CPLUSPLUS ON)
-SET_SOURCE_FILES_PROPERTIES(libSALOME_LifeCycleCORBA.i PROPERTIES SWIG_DEFINITIONS "-shadow")
+SET_SOURCE_FILES_PROPERTIES(libSALOME_LifeCycleCORBA.i PROPERTIES SWIG_FLAGS "-py3")
 ADD_DEFINITIONS(${OMNIORB_DEFINITIONS})
 
 INCLUDE_DIRECTORIES(
   ${PYTHON_INCLUDE_DIRS}
   ${PTHREAD_INCLUDE_DIR}
   ${OMNIORB_INCLUDE_DIR}
+  ${OMNIORBPY_INCLUDE_DIR}
   ${PROJECT_BINARY_DIR}/salome_adm
   ${CMAKE_CURRENT_SOURCE_DIR}
   ${CMAKE_CURRENT_BINARY_DIR}
index 6690b5193f8c09ce55e41957d3713d6083da62c1..303d2cc1b00ec23a614ec11e73dc21c81e22244b 100644 (file)
@@ -177,7 +177,7 @@ class LifeCycleCORBA_SWIGTest(unittest.TestCase):
         containerName += "/swTheContainer"
         try:
             cp1=self.lcc.FindOrLoad_Component(containerName,"SalomeTestComponent")
-        except RuntimeError,ex :
+        except RuntimeError as ex :
             self.assertEqual(ex.args[0],'unknown host')
         pass
 
index 36f2a570c3bf40df4c8efd1f354ad085e14c364b..073af7047a5c47501457d7986249eda5e32603f1 100644 (file)
@@ -26,7 +26,7 @@
 #  Module : SALOME
 #  $Header$
 #
-import sys, os,signal,string,commands
+import sys, os,signal,string,subprocess
 import subprocess
 import runSalome
 import setenv
index b0800d53d335676ae4d644d1bc877e5239c00f94..e4ad078635075f18e8166b6b37ff670ff42e4a1c 100644 (file)
@@ -44,7 +44,7 @@ try :
     engine=lcc.FindComponent(param,'SalomeTestComponent')
     engine.Coucou(1)
 except :
-    print 'lcc.FindOrLoad_Component("FactoryServer","SalomeTestComponent") failed'
+    print('lcc.FindOrLoad_Component("FactoryServer","SalomeTestComponent") failed')
 
 import sys
 from omniORB import CORBA
@@ -71,7 +71,7 @@ try :
     engineCPP=lcc.FindComponent(myContainerparamsCPP,'SalomeTestComponent')
     engineCPP.Coucou(1)
 except :
-    print 'ContainerManager.FindOrStartContainer( myContainerparams , computerlist ) C++ failed'
+    print('ContainerManager.FindOrStartContainer( myContainerparams , computerlist ) C++ failed')
 
 try :
     myContainerparamsPy = LifeCycleCORBA.ContainerParameters()
@@ -85,5 +85,5 @@ try :
     enginePy=lcc.FindComponent(myContainerparamsPy,'SALOME_TestComponentPy')
     enginePy.Coucou(1)
 except :
-    print 'ContainerManager.FindOrStartContainer( myContainerparams , computerlist ) Python failed'
+    print('ContainerManager.FindOrStartContainer( myContainerparams , computerlist ) Python failed')
 
index 2f80c10c134976eb33469904cbcb1932b829bce9..0cce5c6ee21d1974914e3d44173b082badfb5bce 100644 (file)
@@ -45,27 +45,9 @@ typedef int Py_ssize_t;
 #define PY_SSIZE_T_MIN INT_MIN
 #endif
 
-//--- from omniORBpy.h (not present on Debian Sarge packages)
-
-struct omniORBpyAPI {
-
-  PyObject* (*cxxObjRefToPyObjRef)(const CORBA::Object_ptr cxx_obj,
-                                   CORBA::Boolean hold_lock);
-  // Convert a C++ object reference to a Python object reference.
-  // If <hold_lock> is true, caller holds the Python interpreter lock.
-
-  CORBA::Object_ptr (*pyObjRefToCxxObjRef)(PyObject* py_obj,
-                                           CORBA::Boolean hold_lock);
-  // Convert a Python object reference to a C++ object reference.
-  // Raises BAD_PARAM if the Python object is not an object reference.
-  // If <hold_lock> is true, caller holds the Python interpreter lock.
-
-
-  omniORBpyAPI();
-  // Constructor for the singleton. Sets up the function pointers.
-};
-
-omniORBpyAPI* api;
+#include <Python.h>
+#include <omniORBpy.h>
+omniORBpyAPI* api=0;
 
 %}
 
@@ -81,10 +63,10 @@ omniORBpyAPI* api;
   if (!omnipy)
   {
     PyErr_SetString(PyExc_ImportError, (char*)"Cannot import _omnipy");
-    return;
+    return NULL;
   }
   PyObject* pyapi = PyObject_GetAttrString(omnipy, (char*)"API");
-  api = (omniORBpyAPI*)PyCObject_AsVoidPtr(pyapi);
+  api = (omniORBpyAPI*)PyCapsule_GetPointer(pyapi,"_omnipy.API");
   Py_DECREF(pyapi);
 %}
 
index f2cc791a38647dc4d7c8d401a7a1da9f80136e69..faf4c342153d6090f4589e0cde28b5da83937620 100644 (file)
@@ -33,7 +33,7 @@ import time
 import os
 
 trace="local"
-if (os.environ.has_key("SALOME_trace")):
+if ("SALOME_trace" in os.environ):
   if (os.environ["SALOME_trace"] == "with_logger"):
     trace="logger"
 
@@ -57,22 +57,22 @@ class SALOME_Trace :
                 if not self.m_pInterfaceLogger is None:
                   ok = 1
 
-              except CosNaming.NamingContext.NotFound, e :
-                    if steps == 1: print "Caught exception: Naming Service can't found Logger"
+              except CosNaming.NamingContext.NotFound as e :
+                    if steps == 1: print("Caught exception: Naming Service can't found Logger")
               except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
-                    if steps == 1: print "Caught CORBA::SystemException CommFailure"
-              except CORBA.SystemException, e:
-                    if steps == 1: print "Caught CORBA::SystemException."
-              except CORBA.Exception, e:
-                    if steps == 1: print "Caught CORBA::Exception."
-              except Exception, e:
-                    if steps == 1: print "Caught unknown exception."
+                    if steps == 1: print("Caught CORBA::SystemException CommFailure")
+              except CORBA.SystemException as e:
+                    if steps == 1: print("Caught CORBA::SystemException.")
+              except CORBA.Exception as e:
+                    if steps == 1: print("Caught CORBA::Exception.")
+              except Exception as e:
+                    if steps == 1: print("Caught unknown exception.")
 
               time.sleep(0.25)
               steps = steps - 1
 
     def putMessage ( self, LogMsg ) :
         if (CORBA.is_nil(self.m_pInterfaceLogger)):
-            print  LogMsg;
+            print(LogMsg);
         else:
             self.m_pInterfaceLogger.putMessage (LogMsg)
index a05bfd39af6bed524d68baa6378c2e69ee291d4d..d84ad9db6a2cc2a32f3d4e394921b5ef0ff889eb 100644 (file)
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-import sys, os,signal,string,commands
+import sys, os,signal,subprocess
 
 def getCurrentPort():
     fic=os.environ['OMNIORB_CONFIG']
     with open(fic,'r') as f:
         line=f.readline()
-    port=string.split(line,':')[-1][0:4]
+    port=line.split(':')[-1][0:4]
     return port
 
 
@@ -35,7 +35,7 @@ def closeSalome():
     port = getCurrentPort()
     try:
         from PortManager import releasePort
-        print "### release current port:", port
+        print("### release current port:", port)
         releasePort(port)
     except:
         pass
@@ -50,12 +50,12 @@ def killNamingService():
     """
     port = getCurrentPort()
     command='ps -eo pid,command | grep "omniNames -start '+str(port)+'" | grep --invert-match grep'
-    output_com = commands.getoutput(command)
+    output_com = subprocess.getoutput(command)
     try:
-      pid=string.split(output_com)[0]
+      pid=output_com.split()[0]
       os.kill(int(pid),signal.SIGKILL)
     except:
-      print "killNamingService failed."
+      print("killNamingService failed.")
 
 
 def killProcess(process_id):
@@ -64,12 +64,12 @@ def killProcess(process_id):
     generated by runSalome.Server() class and derived, (method run).
     kills also local Naming server.
     """
-    for pid, cmd in process_id.items():
-        print "stop process %s : %s"% (pid, cmd[0])
+    for pid, cmd in list(process_id.items()):
+        print("stop process %s : %s"% (pid, cmd[0]))
         try:
             os.kill(int(pid),signal.SIGKILL)
         except:
-            print "  ---- process %s : %s inexistant"% (pid, cmd[0])
+            print("  ---- process %s : %s inexistant"% (pid, cmd[0]))
             pass
         del process_id[pid]
         pass
index 2dc8598574d14c7573b4cf1359df6bb34a556c34..e2fd703e4d00d8a67456592f10cfb6bd0f15e4fa 100644 (file)
@@ -202,7 +202,7 @@ bool Engines_MPIContainer_i::Lload_component_Library(const char* componentName)
       PyObject *result = PyObject_CallMethod(pyCont,
                                              (char*)"import_component",
                                              (char*)"s",componentName);
-      std::string ret= PyString_AsString(result);
+      std::string ret= PyUnicode_AsUTF8(result);
       SCRUTE(ret);
       Py_RELEASE_NEW_THREAD;
   
@@ -219,7 +219,6 @@ bool Engines_MPIContainer_i::Lload_component_Library(const char* componentName)
 // Create an instance of component
 Engines::EngineComponent_ptr
 Engines_MPIContainer_i::create_component_instance_env( const char* componentName,
-                                                       CORBA::Long studyId,
                                                        const Engines::FieldsDict& env,
                                                        CORBA::String_out reason)
 {
@@ -233,12 +232,11 @@ Engines_MPIContainer_i::create_component_instance_env( const char* componentName
       st->ip = ip;
       st->tior = _tior;
       st->compoName = componentName;
-      st->studyId = studyId;
       pthread_create(&(th[ip]),NULL,th_createcomponentinstance,(void*)st);
     }
   }
 
-  Engines::EngineComponent_ptr cptr = Lcreate_component_instance(componentName,studyId);
+  Engines::EngineComponent_ptr cptr = Lcreate_component_instance(componentName);
 
   if(_numproc == 0){
     for(int ip=1;ip<_nbproc;ip++)
@@ -250,13 +248,8 @@ Engines_MPIContainer_i::create_component_instance_env( const char* componentName
 }
 
 Engines::EngineComponent_ptr
-Engines_MPIContainer_i::Lcreate_component_instance( const char* genericRegisterName, CORBA::Long studyId)
+Engines_MPIContainer_i::Lcreate_component_instance( const char* genericRegisterName )
 {
-  if (studyId < 0) {
-    INFOS("studyId must be > 0 for mono study instance, =0 for multiStudy");
-    return Engines::EngineComponent::_nil() ;
-  }
-
   Engines::EngineComponent_var iobject = Engines::EngineComponent::_nil() ;
   Engines::MPIObject_var pobj;
 
@@ -283,10 +276,9 @@ Engines_MPIContainer_i::Lcreate_component_instance( const char* genericRegisterN
     PyObject *pyCont = PyDict_GetItemString(globals, "pyCont");
     PyObject *result = PyObject_CallMethod(pyCont,
                                            (char*)"create_component_instance",
-                                           (char*)"ssl",
+                                           (char*)"ss",
                                            aCompName.c_str(),
-                                           instanceName.c_str(),
-                                           studyId);
+                                           instanceName.c_str());
     const char *ior;
     const char *error;
     PyArg_ParseTuple(result,"ss", &ior, &error);
@@ -316,8 +308,7 @@ Engines_MPIContainer_i::Lcreate_component_instance( const char* genericRegisterN
     {
       void* handle = _library_map[impl_name];
       iobject = createMPIInstance(genericRegisterName,
-                                    handle,
-                                    studyId);
+                                  handle);
       return iobject._retn();
     }
 
@@ -326,8 +317,7 @@ Engines_MPIContainer_i::Lcreate_component_instance( const char* genericRegisterN
 
 Engines::EngineComponent_ptr
 Engines_MPIContainer_i::createMPIInstance(std::string genericRegisterName,
-                                          void *handle,
-                                          int studyId)
+                                          void *handle)
 {
   Engines::EngineComponent_var iobject;
   Engines::MPIObject_var pobj;
@@ -377,27 +367,14 @@ Engines_MPIContainer_i::createMPIInstance(std::string genericRegisterName,
       PortableServer::ObjectId *id ; //not owner, do not delete (nore use var)
       id = (MPIComponent_factory) ( _orb, _poa, _id, instanceName.c_str(), aGenRegisterName.c_str() ) ;
 
-      // --- get reference & servant from id
+      // --- get reference from id
 
       CORBA::Object_var obj = _poa->id_to_reference(*id);
       iobject = Engines::EngineComponent::_narrow( obj ) ;
       pobj = Engines::MPIObject::_narrow(obj) ;
 
-      Engines_Component_i *servant =
-        dynamic_cast<Engines_Component_i*>(_poa->reference_to_servant(iobject));
-      ASSERT(servant);
-      //SCRUTE(servant->pd_refCount);
-      servant->_remove_ref(); // compensate previous id_to_reference 
-      //SCRUTE(servant->pd_refCount);
       _listInstances_map[instanceName] = iobject;
       _cntInstances_map[aGenRegisterName] += 1;
-      //SCRUTE(servant->pd_refCount);
-#ifndef _DEBUG_
-      servant->setStudyId(studyId);
-#else
-      bool ret_studyId = servant->setStudyId(studyId);
-      ASSERT(ret_studyId);
-#endif
 
       // --- register the engine under the name
       //     containerName(.dir)/instanceName(.object)
@@ -616,7 +593,7 @@ void *th_loadcomponentlibrary(void *s)
 void *th_createcomponentinstance(void *s)
 {
   thread_st *st = (thread_st*)s;
-  (Engines::MPIContainer::_narrow((*(st->tior))[st->ip]))->create_component_instance(st->compoName.c_str(),st->studyId);
+  (Engines::MPIContainer::_narrow((*(st->tior))[st->ip]))->create_component_instance(st->compoName.c_str());
   return NULL;
 }
 
index c53cdefd56706e5f843414e39b7c6723cddfece2..3a8ed1deb1bf8fdaf7d554878710850f2d77a860 100644 (file)
@@ -41,7 +41,6 @@ typedef struct {
   Engines::IORTab* tior;
   std::string compoName;
   std::string nameToRegister;
-  long studyId;
   Engines::EngineComponent_ptr cptr;
 } thread_st;
 
@@ -71,7 +70,6 @@ class Engines_MPIContainer_i : public POA_Engines::MPIContainer,
   // synchronous version for process 0
   virtual Engines::EngineComponent_ptr
   create_component_instance_env( const char* componentName,
-                                 CORBA::Long studyId,          // 0 for multiStudy
                                  const Engines::FieldsDict& env,
                                  CORBA::String_out reason);
 
@@ -90,15 +88,13 @@ class Engines_MPIContainer_i : public POA_Engines::MPIContainer,
  private:
   bool Lload_component_Library(const char* componentName);
   Engines::EngineComponent_ptr
-  Lcreate_component_instance( const char* componentName,
-                              CORBA::Long studyId); // 0 for multiStudy
+  Lcreate_component_instance(const char* componentName);
   Engines::EngineComponent_ptr Lload_impl(const char* nameToRegister,
                                     const char* componentName);
 
   Engines::EngineComponent_ptr
   createMPIInstance(std::string genericRegisterName,
-                    void *handle,
-                    int studyId);
+                    void *handle);
 
 };
 #endif
index 5ee49c0be2218e1689c822d9c9f25e87a26b0b18..9e574d2747cca4c8d965122c71e9b0b0cfc20c20 100644 (file)
@@ -42,8 +42,7 @@ static int MYDEBUG = 0;
 //----------------------------------------------------------------------
 // Function : SALOME_ModuleCatalog_AcomponentImpl
 // Purpose  : Constructor
-//            Affect the component name, type, icon, and bool to define 
-//            if it's multi-study or not.
+//            Affect the component name, type,icon
 //            Affect too the constraint and the interfaces of the component
 //            and the path prefixes for all computers
 //----------------------------------------------------------------------  
@@ -399,16 +398,6 @@ char* SALOME_ModuleCatalog_AcomponentImpl::componentusername()
   return CORBA::string_dup(_Component.username);
 }
 
-//----------------------------------------------------------------------
-// Function : multistudy
-// Purpose  : define if a component can be multistudy or not
-//----------------------------------------------------------------------
-CORBA::Boolean SALOME_ModuleCatalog_AcomponentImpl::multistudy()
-{
-  return _Component.multistudy ;
-}
-
-
 //----------------------------------------------------------------------
 // Function : implementation type
 // Purpose  : return the implementation type :  C++ (dyn lib), Python (module) or executable
index 5078c95f4d2da6cdf3424a4371be6dc3a76526e3..d84bd08daa5ba611f397b3031f13c2477b92778a 100644 (file)
@@ -121,12 +121,6 @@ public:
   */
   virtual char* componentusername();
 
-  //! method to define if a component can be multistudy or not
-  /*!
-    \return true if the component supports multistudy
-  */
-  virtual CORBA::Boolean multistudy();
-
   //! method to define the type of the component
   /*!
     \return the component type
index 8ed79652e0005184dc932037b24ceea718c1df41..858cc45a75b3f261ad3101876fdc0fd12edf97a5 100644 (file)
@@ -152,7 +152,6 @@ int main(int argc,char **argv)
 void PrintComponent(SALOME_ModuleCatalog::Acomponent_ptr C)
 {
   MESSAGE("Name : " <<  C->componentname());
-  MESSAGE("Type : " << C->component_type() << " multistudy : " << C->multistudy());
   MESSAGE("Constraint : " << C->constraint());
   MESSAGE("Icon : " << C->component_icone());
 
index 693ec8b439c5097a7c62b4d566f14d0a63c85d51..b12bec2b125f315ba8f3a723559d4268800188a5 100644 (file)
@@ -64,7 +64,6 @@ SALOME_ModuleCatalog_Handler::SALOME_ModuleCatalog_Handler(ParserPathPrefixes& p
   test_component_name       = "component-name";
   test_component_username   = "component-username";
   test_component_type       = "component-type" ;
-  test_component_multistudy = "component-multistudy";
   test_component_icon       = "component-icone" ;
   test_component_impltype   = "component-impltype";
   test_component_implname   = "component-implname";
@@ -477,10 +476,6 @@ void SALOME_ModuleCatalog_Handler::ProcessXmlDocument(xmlDocPtr theDoc)
               _aModule.type = OTHER ;
           }
 
-          // Tag test_component_multistudy
-          if ( !xmlStrcmp(aComponentSubNode->name, (const xmlChar*)test_component_multistudy) )
-            _aModule.multistudy = atoi( aContent.c_str() ) != 0;
-
           // Tag test_component_impltype
           if ( !xmlStrcmp(aComponentSubNode->name, (const xmlChar*)test_component_impltype) )
             _aModule.implementationType = aContent;
index f75ca4ae24e6cba2c3e2ccf75f692c83aa4f3f29..1ad92fab99ee5a1fb783e75f6db2fbaef32881b5 100644 (file)
@@ -65,7 +65,6 @@ private:
   const char *test_component_name;
   const char *test_component_username;
   const char *test_component_type ;
-  const char *test_component_multistudy ;
   const char *test_component_icon ;
   const char *test_component_impltype;
   const char *test_component_implname;
index 622af9b9e6661caac71a6dc1486c7db2dd0cf8a8..9f1e4a6cd1dd837db1f65b52b6e80dcab6ff3f25 100644 (file)
@@ -91,7 +91,6 @@ struct ParserComponent
   std::string         name;
   std::string         username;
   ParserComponentType type;
-  bool                multistudy;
   std::string         icon;
   std::string         constraint;
   ParserInterfaces    interfaces;
index 29a9f25c2b3977c48cab6f7605e6e3af8ece632c..26f7c7838ec206c76d0b48823866766a17c22db2 100644 (file)
@@ -124,8 +124,6 @@ std::ostream & operator<< (std::ostream & f,
     << "    name :       " << C.name << std::endl;
   f << "    user name :  " << C.username << std::endl;
   f << "    type :       " << C.type << std::endl;
-  f << "    multistudy : " << (C.multistudy ? "yes" : "no")
-    << std::endl;
   f << "    icon :       " << C.icon << std::endl;
   f << "    constraint : " << C.constraint << std::endl;
 
index 56580e4c8a2515c8b9635da7bcf2457026452b27..9924f6687c304acafaa6060ef54f543ea70674d6 100644 (file)
@@ -897,7 +897,6 @@ void SALOME_ModuleCatalogImpl::Private::duplicate
 {
   C_corba.name = CORBA::string_dup(C_parser.name.c_str());
   C_corba.username = CORBA::string_dup(C_parser.username.c_str());
-  C_corba.multistudy = C_parser.multistudy;
   C_corba.icon = CORBA::string_dup(C_parser.icon.c_str());
   C_corba.type = ComponentTypeConvert[C_parser.type];
   if(C_parser.implementationType == "EXE")
index 9e89c6a6dedd52e4a6778387c045dfc331b6dbe2..de3c69a6acd823fe1f134d265bbe9bbb8d011940 100755 (executable)
 import batchmode_salome
 import SALOME_ModuleCatalog
 
-print
-print "======================================================================"
-print "           XML Catalog file generation from idl file"
-print "======================================================================"
+print()
+print("======================================================================")
+print("           XML Catalog file generation from idl file")
+print("======================================================================")
 
 import os
 os.system('runIDLparser -Wbcatalog=x \
                  ${KERNEL_ROOT_DIR}/idl/salome/SALOME_TestModuleCatalog.idl')
 
-print "======================================================================"
-print "           Get Catalog "
-print "======================================================================"
+print("======================================================================")
+print("           Get Catalog ")
+print("======================================================================")
 obj = batchmode_salome.naming_service.Resolve('Kernel/ModulCatalog')
 catalog = obj._narrow(SALOME_ModuleCatalog.ModuleCatalog)
 catalog.GetComponentList()
 
-print 
-print "======================================================================"
-print "           Import xml file "
-print "======================================================================"
+print() 
+print("======================================================================")
+print("           Import xml file ")
+print("======================================================================")
 catalog.ImportXmlCatalogFile("x.xml")
 
 name = "AddComponent"
-print 
-print "======================================================================"
-print "           Dump component <", name, "> "
-print "======================================================================"
+print() 
+print("======================================================================")
+print("           Dump component <", name, "> ")
+print("======================================================================")
 C = catalog.GetComponent(name)
 
-print "name       : ", C._get_componentname()
-print "username   : ", C._get_componentusername()
-print "type       : ", C._get_component_type()
-print "constraint : ", C._get_constraint()
-print "icon       : ", C._get_component_icone()
+print("name       : ", C._get_componentname())
+print("username   : ", C._get_componentusername())
+print("type       : ", C._get_component_type())
+print("constraint : ", C._get_constraint())
+print("icon       : ", C._get_component_icone())
 
 for iL in C.GetInterfaceList():
     I = C.GetInterface(iL)
-    print "interface  : ", I.interfacename
+    print("interface  : ", I.interfacename)
     for S in I.interfaceservicelist:
-        print "  service : ", S.ServiceName
-        print "    ", len(S.ServiceinParameter), "in params : "
+        print("  service : ", S.ServiceName)
+        print("    ", len(S.ServiceinParameter), "in params : ")
         for iP in S.ServiceinParameter:
-            print '      ' + iP.Parametername + '(' + iP.Parametertype + ')'
+            print('      ' + iP.Parametername + '(' + iP.Parametertype + ')')
             pass
-        print "    ", len(S.ServiceoutParameter), "out params : "
+        print("    ", len(S.ServiceoutParameter), "out params : ")
         for iP in S.ServiceoutParameter:
-            print '      ' + iP.Parametername + '(' + iP.Parametertype + ')'
+            print('      ' + iP.Parametername + '(' + iP.Parametertype + ')')
             pass
-        print "    ", len(S.ServiceinDataStreamParameter), "in datastream params : "
+        print("    ", len(S.ServiceinDataStreamParameter), "in datastream params : ")
         for iP in S.ServiceinDataStreamParameter:
-            print '      ' + iP.Parametername + '(' + str(iP.Parametertype) + ', ' + \
-                  str(iP.Parameterdependency) + ')'
+            print('      ' + iP.Parametername + '(' + str(iP.Parametertype) + ', ' + \
+                  str(iP.Parameterdependency) + ')')
             pass
-        print "    ", len(S.ServiceoutDataStreamParameter), "out datastream params : "
+        print("    ", len(S.ServiceoutDataStreamParameter), "out datastream params : ")
         for iP in S.ServiceoutDataStreamParameter:
-            print '      ' + iP.Parametername + '(' + str(iP.Parametertype) + ', ' + \
-                  str(iP.Parameterdependency) + ')'
+            print('      ' + iP.Parametername + '(' + str(iP.Parametertype) + ', ' + \
+                  str(iP.Parameterdependency) + ')')
             pass
         pass
     pass
index 0f2ab825d22cc68f57ff36b8c9cad02ea9bb32ca..b2107353af7824a8ea1681aeb556c4571b2f64ad 100644 (file)
@@ -39,7 +39,6 @@ common_data={"AUTHOR"     : "",
              "COMP_TYPE"  : "",
              "COMP_NAME"  : "",
              "COMP_UNAME" : "",
-             "COMP_MULT"  : "",
              "COMP_IMPL"  : ""
              }
 
@@ -68,7 +67,7 @@ def getParamValue( param_name, default_value, args ):
 # print error message
 #--------------------------------------------------
 def error (message):
-    print "ERROR : ", message
+    print("ERROR : ", message)
 
 
 #--------------------------------------------------
@@ -119,7 +118,7 @@ class Tree:
         if self.name != '':
             s = string.ljust('', 4*depth)
             s += '<' + self.name
-            for k,v in self.attrs.items():
+            for k,v in list(self.attrs.items()):
               s += ' ' + k + '="' + v + '"'
             s += '>'
             if self.content != '':
@@ -145,7 +144,7 @@ class Tree:
         if levels == 0: return
 
         s = string.ljust('', 4*depth)
-        print s, self, self.content
+        print(s, self, self.content)
         for i in self.childs:
             i.Dump(levels-1, depth+1)
 
@@ -296,8 +295,7 @@ def parseComment(comment):
             ## the remaining part of input string
             m = re.match(pattern, sPorts)
             if m is None:
-                raise LookupError, \
-                      'format error in DataStreamPort definition : '+sPorts
+                raise LookupError('format error in DataStreamPort definition : '+sPorts)
             sPorts = sPorts[m.end():]
             result.append(m.groups())
 
@@ -402,9 +400,8 @@ class Interface(Tree):
             if type == 'DataStreamPorts':
                 Service = self.findService(key)
                 if Service is None:
-                    raise LookupError, \
-                          'service ' + key + \
-                          ' not found in interface : ' + self.key
+                    raise LookupError('service ' + key + \
+                          ' not found in interface : ' + self.key)
                 for p in result:
                 ## process next DataStreamPort
                     Service.createDataStreamParameter(p)
@@ -437,7 +434,6 @@ class Component(Tree):
         self.addNamedChild('component-author',     common_data["AUTHOR"])
         self.addNamedChild('component-version',    common_data["VERSION"])
         self.addNamedChild('component-comment',    'unknown')
-        self.addNamedChild('component-multistudy', common_data["COMP_MULT"])
         self.addNamedChild('component-impltype',   common_data["COMP_IMPL"])
         self.addNamedChild('component-icone',      common_data["ICON"])
         self.addNamedChild('constraint')
@@ -456,7 +452,7 @@ class Component(Tree):
 
         for i in ['component-username', 'component-author',
                   'component-type', 'component-icone', 'component-version',
-                  'component-multistudy', 'component-impltype', 'constraint']:
+                  'component-impltype', 'constraint']:
             ext = C.getChild(i)
             int = self.getChild(i)
             if int is None:
@@ -503,14 +499,14 @@ class Catalog(ContentHandler, Tree):
         complist = self.getNode('component-list')
         idx = 0
         if complist is None:
-            print "Catalog.removeComponent() : 'component-list' is not found"
+            print("Catalog.removeComponent() : 'component-list' is not found")
             return
         for comp in complist.childs:
             cname = comp.getChild('component-name')
             if cname is not None:
                 if cname.content == name:
                     complist.childs.pop(idx)
-                    print "Component " + name + " is removed"
+                    print("Component " + name + " is removed")
             idx += 1
 
     def startDocument(self):
@@ -571,10 +567,10 @@ class Catalog(ContentHandler, Tree):
                 break;
 
         if present == 0:
-            print '   add component', i_ext.getChild('component-name').content
+            print('   add component', i_ext.getChild('component-name').content)
             L_int.addChild(i_ext)
         else:
-            print '   replace component', i_ext.getChild('component-name').content
+            print('   replace component', i_ext.getChild('component-name').content)
             i_int.merge(i_ext)
 
     def mergeType(self, type):
@@ -833,23 +829,22 @@ def run(tree, args):
     common_data["COMP_NAME"]  = getParamValue("name",       "",                args)
     common_data["COMP_UNAME"] = getParamValue("username",   "",                args)
     common_data["COMP_TYPE"]  = getParamValue("type",       "OTHER",           args)
-    common_data["COMP_MULT"]  = getParamValue("multistudy", "1",               args)
     common_data["COMP_IMPL"]  = getParamValue("impltype",   "1",               args)
 
-    print common_data
+    print(common_data)
 
     remove_comp = getParamValue("remove", "", args)
 
     #==================================================
 
     if (os.path.exists(CatalogFileName)):
-        print "Importing", CatalogFileName
+        print("Importing", CatalogFileName)
         C = Catalog(CatalogFileName)
     else:
-        print "Creating ",CatalogFileName
+        print("Creating ",CatalogFileName)
         C = Catalog()
 
-    print "Reading idl file"
+    print("Reading idl file")
 
     visitor = ModuleCatalogVisitor(C)
     tree.accept(visitor)
@@ -860,12 +855,12 @@ def run(tree, args):
         C.removeComponent(remove_comp)
 
     if (os.path.exists(CatalogFileName)):
-        print "Updating", CatalogFileName
+        print("Updating", CatalogFileName)
         CatalogFileName_old = CatalogFileName + '_old'
         os.rename(CatalogFileName, CatalogFileName_old)
     else:
         CatalogFileName_old = ""
-        print "Writing", CatalogFileName
+        print("Writing", CatalogFileName)
 
     CatalogFileName_new = CatalogFileName + '_new'
     f=open(CatalogFileName_new, 'w')
@@ -877,10 +872,10 @@ def run(tree, args):
     if ((CatalogFileName_old != "") & os.path.exists(CatalogFileName_old)):
         os.unlink(CatalogFileName_old)
 
-    print
+    print()
 
 
 if __name__ == "__main__":
-    print
-    print "Usage : omniidl -bIDLparser [-I<catalog files directory>]* -Wbcatalog=<my_catalog.xml>[,icon=<pngfile>][,version=<num>][,author=<name>][,name=<component_name>][,username=<component_username>][,multistudy=<component_multistudy>][,impltype=<implementation type : 0 (python), 1 (C++)>] <file.idl>"
-    print
+    print()
+    print("Usage : omniidl -bIDLparser [-I<catalog files directory>]* -Wbcatalog=<my_catalog.xml>[,icon=<pngfile>][,version=<num>][,author=<name>][,name=<component_name>][,username=<component_username>][,impltype=<implementation type : 0 (python), 1 (C++)>] <file.idl>")
+    print()
index bdc345db903d61ed7cda0fd6081a76ba1a5962c7..d041a89a6a3e73fd6cb635c61ee1cf6fb7619728 100755 (executable)
@@ -20,7 +20,7 @@
 INCLUDE(${SWIG_USE_FILE})
 
 SET_SOURCE_FILES_PROPERTIES(NOTIFICATION.i PROPERTIES CPLUSPLUS ON)
-SET_SOURCE_FILES_PROPERTIES(NOTIFICATION.i PROPERTIES SWIG_DEFINITIONS "-shadow")
+SET_SOURCE_FILES_PROPERTIES(NOTIFICATION.i PROPERTIES SWIG_FLAGS "-py3")
 SET_SOURCE_FILES_PROPERTIES(NOTIFICATIONPYTHON_wrap.cxx PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} -DHAVE_CONFIG_H")
 
 INCLUDE_DIRECTORIES(
index 4233797e604932acc97dd278049b9993dfc1ef26..7ca7f90fdbbb5b5b27db56aad2a105cc4802a58c 100644 (file)
@@ -101,7 +101,7 @@ class SALOME_NamingServicePy_i(object):
             #delete first '/' before split
             Path=Path[1:]
 
-        result_resolve_path = string.split(Path,'/')
+        result_resolve_path = Path.split('/')
         if len(result_resolve_path)>1:
             # A directory is treated (not only an object name)
             # We had to test if the directory where ObjRef should be recorded 
@@ -114,11 +114,11 @@ class SALOME_NamingServicePy_i(object):
             try:
                 obj = self._current_context.resolve(_context_name)
                 self._current_context = obj._narrow(CosNaming.NamingContext)
-            except CosNaming.NamingContext.NotFound, ex:
+            except CosNaming.NamingContext.NotFound as ex:
                 _not_exist = 1
-            except CosNaming.NamingContext.InvalidName, ex:
+            except CosNaming.NamingContext.InvalidName as ex:
                 MESSAGE ( "Register : CosNaming.NamingContext.InvalidName" )
-            except CosNaming.NamingContext.CannotProceed, ex:
+            except CosNaming.NamingContext.CannotProceed as ex:
                 MESSAGE ( "Register : CosNaming.NamingContext.CannotProceed" )
             except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
                 MESSAGE ( "Register : CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE" )
@@ -133,7 +133,7 @@ class SALOME_NamingServicePy_i(object):
                     try:
                         obj = self._current_context.resolve(_context_name)
                         self._current_context = obj._narrow(CosNaming.NamingContext)
-                    except CosNaming.NamingContext.NotFound, ex:
+                    except CosNaming.NamingContext.NotFound as ex:
                         #This context is not created. It will be done
                         self._current_context = self._current_context.bind_new_context(_context_name)
 
@@ -143,13 +143,13 @@ class SALOME_NamingServicePy_i(object):
         _context_name = [CosNaming.NameComponent(result_resolve_path[len(result_resolve_path)-1],"object")]
         try:
             self._current_context.bind(_context_name,ObjRef)
-        except CosNaming.NamingContext.NotFound, ex:
+        except CosNaming.NamingContext.NotFound as ex:
             MESSAGE ( "Register : CosNaming.NamingContext.NotFound" )
-        except CosNaming.NamingContext.InvalidName, ex:
+        except CosNaming.NamingContext.InvalidName as ex:
             MESSAGE ( "Register : CosNaming.NamingContext.InvalidName" )
-        except CosNaming.NamingContext.CannotProceed, ex:
+        except CosNaming.NamingContext.CannotProceed as ex:
             MESSAGE ( "Register : CosNaming.NamingContext.CannotProceed" )
-        except CosNaming.NamingContext.AlreadyBound, ex:
+        except CosNaming.NamingContext.AlreadyBound as ex:
             MESSAGE ( "Register : CosNaming.NamingContext.AlreadyBound, object will be rebind" )
             self._current_context.rebind(_context_name,ObjRef)
         except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
@@ -169,20 +169,20 @@ class SALOME_NamingServicePy_i(object):
             #delete first '/' before split
             Path=Path[1:]
 
-        result_resolve_path = string.split(Path,'/')
+        result_resolve_path = Path.split('/')
         _context_name=[]
         for i in range(len(result_resolve_path)-1):
             _context_name.append(CosNaming.NameComponent(result_resolve_path[i],"dir"))
         _context_name.append(CosNaming.NameComponent(result_resolve_path[len(result_resolve_path)-1],"object"))
         try:
             self._obj = self._current_context.resolve(_context_name)
-        except CosNaming.NamingContext.NotFound, ex:
+        except CosNaming.NamingContext.NotFound as ex:
             MESSAGE ( "Resolve : CosNaming.NamingContext.NotFound" )
             self._obj = None
-        except CosNaming.NamingContext.InvalidName, ex:
+        except CosNaming.NamingContext.InvalidName as ex:
             MESSAGE ( "Resolve : CosNaming.NamingContext.InvalidName" )
             self._obj = None
-        except CosNaming.NamingContext.CannotProceed, ex:
+        except CosNaming.NamingContext.CannotProceed as ex:
             MESSAGE ( "Resolve : CosNaming.NamingContext.CannotProceed" )
             self._obj = None
         except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
@@ -206,18 +206,18 @@ class SALOME_NamingServicePy_i(object):
             #delete first '/' before split
             Path=Path[1:]
 
-        result_resolve_path = string.split(Path,'/')
+        result_resolve_path = Path.split('/')
         _context_name = []
         for i in range(len(result_resolve_path)):
             _context_name[CosNaming.NameComponent(result_resolve_path[i],"dir")]            
             try:
                 obj = self._current_context.resolve(_context_name)
                 self._current_context = obj._narrow(CosNaming.NamingContext)
-            except CosNaming.NamingContext.NotFound, ex:
+            except CosNaming.NamingContext.NotFound as ex:
                 self._current_context = self._current_context.bind_new_context(_context_name)
-            except CosNaming.NamingContext.InvalidName, ex:
+            except CosNaming.NamingContext.InvalidName as ex:
                 MESSAGE ( "Create_Directory : CosNaming.NamingContext.InvalidName" )
-            except CosNaming.NamingContext.CannotProceed, ex:
+            except CosNaming.NamingContext.CannotProceed as ex:
                 MESSAGE ( "Create_Directory : CosNaming.NamingContext.CannotProceed" )
             except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE):
                 MESSAGE ( "Create_Directory : CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE" )
@@ -227,7 +227,7 @@ class SALOME_NamingServicePy_i(object):
 
         remove a name in naming service
       """
-      resolve_path=string.split(Path,'/')
+      resolve_path=Path.split('/')
       if resolve_path[0] == '': del resolve_path[0]
       dir_path=resolve_path[:-1]
       context_name=[]
@@ -237,9 +237,9 @@ class SALOME_NamingServicePy_i(object):
       
       try:
         self._root_context.unbind(context_name)
-      except CosNaming.NamingContext.NotFound, ex:
+      except CosNaming.NamingContext.NotFound as ex:
         return
-      except CORBA.Exception,ex:
+      except CORBA.Exception as ex:
         return
 
     def Destroy_FullDirectory(self,Path):
@@ -248,15 +248,15 @@ class SALOME_NamingServicePy_i(object):
         remove recursively a directory
       """
       context_name=[]
-      for e in string.split(Path,'/'):
+      for e in Path.split('/'):
         if e == '':continue
         context_name.append(CosNaming.NameComponent(e,"dir"))
 
       try:
         context=self._root_context.resolve(context_name)
-      except CosNaming.NamingContext.NotFound, ex:
+      except CosNaming.NamingContext.NotFound as ex:
         return
-      except CORBA.Exception,ex:
+      except CORBA.Exception as ex:
         return
 
       bl,bi=context.list(0)
index 51fe25b2d9aed6295c204cc340ca9c8b827089db..e8c2a82031c7c06f8f8dadf388debbdf204cdf30 100644 (file)
@@ -21,7 +21,7 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-import sys, os,signal,string,commands
+import sys, os,signal,string,subprocess
 import subprocess
 import runSalome
 import setenv
index f5fb351fcfec955efc3ec92e4b48b487e0390cbd..ddbdb04bd4b5cba5726584a19bb979da75b222dc 100644 (file)
@@ -22,7 +22,7 @@
 
 //  SALOME_ParallelComponent : implementation of container and engine for Parallel Kernel
 //  File   : SALOME_ParallelComponent_i.cxx
-//  Author : André RIBES, EDF
+//  Author : Andr� RIBES, EDF
 //  Author : Paul RASCLE, EDF - MARC TAJCHMAN, CEA
 //
 #include "SALOME_ParallelComponent_i.hxx"
@@ -53,7 +53,6 @@ int SIGUSR11 = 1000;
 extern bool _Sleeping ;
 static Engines_Parallel_Component_i * theEngines_Component ;
 
-bool Engines_Parallel_Component_i::_isMultiStudy = true;
 bool Engines_Parallel_Component_i::_isMultiInstance = false;
 
 //=============================================================================
@@ -90,7 +89,6 @@ Engines_Parallel_Component_i::Engines_Parallel_Component_i(CORBA::ORB_ptr orb, c
   _Executed(false) ,
   _graphName("") ,
   _nodeName(""),
-  _studyId(-1),
   _destroyed(false),
   _CanceledThread(false)
 {
@@ -160,20 +158,6 @@ char* Engines_Parallel_Component_i::interfaceName()
   return CORBA::string_dup(_interfaceName.c_str()) ;
 }
 
-//=============================================================================
-/*! 
- *  CORBA method: Get study Id
- *  \return -1: not initialised (Internal Error)
- *           0: multistudy component instance
- *          >0: study id associated to this instance
- */
-//=============================================================================
-
-CORBA::Long Engines_Parallel_Component_i::getStudyId()
-{
-  return _studyId;
-}
-
 //=============================================================================
 /*! 
  *  CORBA method: Test if instance is alive and responds
@@ -517,31 +501,6 @@ Engines_Parallel_Container_i *Engines_Parallel_Component_i::GetContainerPtr()
   return dynamic_cast<Engines_Parallel_Container_i*>(_poa->id_to_servant(*_contId)) ;
 }
 
-//=============================================================================
-/*! 
- *  C++ method: set study Id
- *  \param studyId         0 if instance is not associated to a study, 
- *                         >0 otherwise (== study id)
- *  \return true if the set of study Id is OK
- *  must be set once by Container, at instance creation,
- *  and cannot be changed after.
- */
-//=============================================================================
-
-CORBA::Boolean Engines_Parallel_Component_i::setStudyId(CORBA::Long studyId)
-{
-  ASSERT( studyId >= 0);
-  CORBA::Boolean ret = false;
-  if (_studyId < 0) // --- not yet initialized 
-    {
-      _studyId = studyId;
-      ret = true;
-    }
-  else
-    if ( _studyId == studyId) ret = true;
-  return ret;
-}
-
 //=============================================================================
 /*! 
  *  C++ method: return CORBA instance id, the id is set in derived class
@@ -846,12 +805,11 @@ std::string Engines_Parallel_Component_i::GetDynLibraryName(const char *componen
  */
 //=============================================================================
 
-Engines::TMPFile* Engines_Parallel_Component_i::DumpPython(CORBA::Object_ptr theStudy, 
-                                                           CORBA::Boolean isPublished, 
+Engines::TMPFile* Engines_Parallel_Component_i::DumpPython(CORBA::Boolean isPublished,
                                                            CORBA::Boolean isMultiFile,
                                                            CORBA::Boolean& isValidScript)
 {
-  const char* aScript = isMultiFile ? "def RebuildData(theStudy): pass" : "";
+  const char* aScript = isMultiFile ? "def RebuildData(): pass" : "";
   char* aBuffer = new char[strlen(aScript)+1];
   strcpy(aBuffer, aScript);
   CORBA::Octet* anOctetBuf =  (CORBA::Octet*)aBuffer;
index a5d41f2707adf260d51445e681b9bcf47906ea64..9ab9b5cb567b01bd2d37111fbcd8680344f4544e 100644 (file)
@@ -22,7 +22,7 @@
 
 //  SALOME_ParallelComponent : implementation of container and engine for Parallel Kernel
 //  File   : SALOME_ParallelComponent_i.hxx
-//  Author : André RIBES, EDF
+//  Author : Andr� RIBES, EDF
 //  Author : Paul RASCLE, EDF - MARC TAJCHMAN, CEA
 //
 #ifndef _SALOME_PARALLEL_COMPONENT_I_HXX_
@@ -80,7 +80,6 @@ public:
   void ping();
   void destroy();
 
-  CORBA::Long getStudyId();
   Engines::Container_ptr GetContainerRef();
 
   void setProperties(const Engines::FieldsDict& dico);
@@ -93,8 +92,7 @@ public:
   bool Resume_impl();
   CORBA::Long CpuUsed_impl() ;
 
- virtual Engines::TMPFile* DumpPython(CORBA::Object_ptr theStudy,
-                                      CORBA::Boolean isPublished,
+ virtual Engines::TMPFile* DumpPython(CORBA::Boolean isPublished,
                                       CORBA::Boolean isMultiFile,
                                       CORBA::Boolean& isValidScript);
 
@@ -116,15 +114,13 @@ public:
 
   // Object information
   virtual bool hasObjectInfo() { return false; }
-  virtual char* getObjectInfo(CORBA::Long studyId, const char* entry) { return ""; }
+  virtual char* getObjectInfo(const char* entry) { return ""; }
 
   // --- local C++ methods
 
   PortableServer::ObjectId * getId(); 
   Engines_Parallel_Container_i *GetContainerPtr();
 
-  bool setStudyId(CORBA::Long studyId);
-  static bool isMultiStudy();
   static bool isMultiInstance();
   static std::string GetDynLibraryName(const char *componentName);
 
@@ -146,8 +142,6 @@ public:
                                     Engines::Parallel_Salome_file_proxy_impl * file);
 
 protected:
-  int _studyId; // -1: not initialised; 0: multiStudy; >0: study
-  static bool _isMultiStudy;
   static bool _isMultiInstance;
 
   std::string _instanceName ;
index c3ef5afcf452ef82fe514e9afa65ad45c9969df4..3e4445d72c2ca1a9b1635a6d027f98c67ead78e5 100644 (file)
@@ -216,7 +216,7 @@ Container_proxy_impl_final::load_component_Library(const char* componentName, CO
       PyObject *result = PyObject_CallMethod(pyCont,
                                              (char*)"import_component",
                                              (char*)"s",componentName);
-      std::string ret_p= PyString_AsString(result);
+      std::string ret_p= PyUnicode_AsUTF8(result);
       Py_XDECREF(result);
       Py_RELEASE_NEW_THREAD;
 
@@ -275,11 +275,11 @@ Container_proxy_impl_final::load_component_Library(const char* componentName, CO
 }
 
 Engines::EngineComponent_ptr 
-Container_proxy_impl_final::create_component_instance(const char* componentName, ::CORBA::Long studyId)
+Container_proxy_impl_final::create_component_instance(const char* componentName)
 {
   Engines::FieldsDict_var env = new Engines::FieldsDict;
   char* reason;
-  Engines::EngineComponent_ptr compo = create_component_instance_env(componentName, studyId, env, reason);
+  Engines::EngineComponent_ptr compo = create_component_instance_env(componentName, env, reason);
   CORBA::string_free(reason);
   return compo;
 }
@@ -289,7 +289,7 @@ Container_proxy_impl_final::create_component_instance(const char* componentName,
 // Composant parallèle -> création du proxy ici puis appel de la création de chaque objet participant
 // au composant parallèle
 Engines::EngineComponent_ptr 
-Container_proxy_impl_final::create_component_instance_env(const char* componentName, ::CORBA::Long studyId,
+Container_proxy_impl_final::create_component_instance_env(const char* componentName,
                                                           const Engines::FieldsDict& env, CORBA::String_out reason)
 {
   reason=CORBA::string_dup("");
@@ -309,7 +309,7 @@ Container_proxy_impl_final::create_component_instance_env(const char* componentN
     _numInstance++;
     _numInstanceMutex.unlock();
     Engines::PACO_Container_proxy_impl::updateInstanceNumber();
-    return Engines::Container_proxy_impl::create_component_instance(componentName, studyId);
+    return Engines::Container_proxy_impl::create_component_instance(componentName);
   }
 
   // Parallel Component !
@@ -361,7 +361,7 @@ Container_proxy_impl_final::create_component_instance_env(const char* componentN
                                                  instanceName.c_str(), 
                                                  _parallel_object_topology.total);
 
-    // --- get reference & servant from id
+    // --- get reference from id
     CORBA::Object_var obj = _poa->id_to_reference(*(proxy->proxy_id));
     component_proxy = Engines::EngineComponent::_narrow(obj);
     proxy->proxy_corba_ref = component_proxy;
@@ -400,7 +400,7 @@ Container_proxy_impl_final::create_component_instance_env(const char* componentN
     {
       try 
       {
-        node->create_paco_component_node_instance(componentName, _containerName.c_str(), studyId);
+        node->create_paco_component_node_instance(componentName, _containerName.c_str());
         MESSAGE("Call create_paco_component_node_instance done on node : " << i);
       }
       catch (SALOME::SALOME_Exception & ex)
index 3949f0f8203f5e777cdced87c7a975fe4e0974e1..d825dec4582e71ee2a783d3e88843b35c3dcbdec 100644 (file)
@@ -54,10 +54,8 @@ class Container_proxy_impl_final :
     virtual void Shutdown();
 
     virtual ::CORBA::Boolean load_component_Library(const char* componentName,CORBA::String_out reason);
-    virtual Engines::EngineComponent_ptr create_component_instance (const char* componentName,
-                                                                    ::CORBA::Long studyId);
+    virtual Engines::EngineComponent_ptr create_component_instance (const char* componentName);
     virtual Engines::EngineComponent_ptr create_component_instance_env (const char* componentName,
-                                                                        CORBA::Long studyId,    // 0 for multiStudy
                                                                         const Engines::FieldsDict& env,
                                                                         CORBA::String_out reason);
 
index e4f1c1254cdc6b09863fb622a4d301742e9e269b..d0a58336ea2c6f4d4685a6698d01751219c3fddc 100644 (file)
@@ -353,7 +353,7 @@ Engines_Parallel_Container_i::load_component_Library(const char* componentName,
     PyObject *result = PyObject_CallMethod(pyCont,
                                            (char*)"import_component",
                                            (char*)"s",componentName);
-    std::string ret_p= PyString_AsString(result);
+    std::string ret_p= PyUnicode_AsUTF8(result);
     Py_XDECREF(result);
     Py_RELEASE_NEW_THREAD;
 
@@ -380,18 +380,15 @@ Engines_Parallel_Container_i::load_component_Library(const char* componentName,
  *  The servant registers itself to naming service and Registry.
  *  \param genericRegisterName  Name of the component instance to register
  *                         in Registry & Name Service (without _inst_n suffix)
- *  \param studyId         0 for multiStudy instance, 
- *                         study Id (>0) otherwise
  *  \return a loaded component
  */
 //=============================================================================
 Engines::EngineComponent_ptr
-Engines_Parallel_Container_i::create_component_instance(const char*genericRegisterName,
-                                                        CORBA::Long studyId)
+Engines_Parallel_Container_i::create_component_instance(const char*genericRegisterName)
 {
   Engines::FieldsDict_var env = new Engines::FieldsDict;
   char* reason;
-  Engines::EngineComponent_ptr compo = create_component_instance_env(genericRegisterName,studyId,env, reason);
+  Engines::EngineComponent_ptr compo = create_component_instance_env(genericRegisterName,env, reason);
   CORBA::string_free(reason);
   return compo;
 }
@@ -403,8 +400,6 @@ Engines_Parallel_Container_i::create_component_instance(const char*genericRegist
  *  The servant registers itself to naming service and Registry.
  *  \param genericRegisterName  Name of the component instance to register
  *                         in Registry & Name Service (without _inst_n suffix)
- *  \param studyId         0 for multiStudy instance, 
- *                         study Id (>0) otherwise
  *  \param env             dict of environment variables
  *  \return a loaded component
  */
@@ -412,19 +407,12 @@ Engines_Parallel_Container_i::create_component_instance(const char*genericRegist
 
 Engines::EngineComponent_ptr
 Engines_Parallel_Container_i::create_component_instance_env(const char*genericRegisterName,
-                                                            CORBA::Long studyId,
                                                             const Engines::FieldsDict& env,
                                                             CORBA::String_out reason)
 {
   MESSAGE("Begin of create_component_instance in node : " << getMyRank());
   reason=CORBA::string_dup("");
 
-  if (studyId < 0)
-  {
-    INFOS("studyId must be > 0 for mono study instance, =0 for multiStudy");
-    return Engines::EngineComponent::_nil() ;
-  }
-
   std::string aCompName = genericRegisterName;
 #ifndef WIN32
 #ifdef __APPLE__
@@ -456,9 +444,9 @@ Engines_Parallel_Container_i::create_component_instance_env(const char*genericRe
 
   Engines::EngineComponent_var iobject = Engines::EngineComponent::_nil();
   if (type_of_lib == "cpp")
-    iobject = createCPPInstance(aCompName, handle, studyId);
+    iobject = createCPPInstance(aCompName, handle);
   else
-    iobject = createPythonInstance(aCompName, studyId);
+    iobject = createPythonInstance(aCompName);
 
   _numInstanceMutex.unlock();
   return iobject._retn();
@@ -470,14 +458,11 @@ Engines_Parallel_Container_i::create_component_instance_env(const char*genericRe
  *  CORBA method: Finds a servant instance of a component
  *  \param registeredName  Name of the component in Registry or Name Service,
  *                         without instance suffix number
- *  \param studyId         0 if instance is not associated to a study, 
- *                         >0 otherwise (== study id)
- *  \return the first instance found with same studyId
+ *  \return the first found instance
  */
 //=============================================================================
 
-Engines::EngineComponent_ptr Engines_Parallel_Container_i::find_component_instance( const char* registeredName,
-                                                                              CORBA::Long studyId)
+Engines::EngineComponent_ptr Engines_Parallel_Container_i::find_component_instance(const char* registeredName)
 {
   Engines::EngineComponent_var anEngine = Engines::EngineComponent::_nil();
   std::map<std::string,Engines::EngineComponent_var>::iterator itm =_listInstances_map.begin();
@@ -488,10 +473,7 @@ Engines::EngineComponent_ptr Engines_Parallel_Container_i::find_component_instan
     if (instance.find(registeredName) == 0)
     {
       anEngine = (*itm).second;
-      if (studyId == anEngine->getStudyId())
-      {
-        return anEngine._retn();
-      }
+      return anEngine._retn();
     }
     itm++;
   }
@@ -737,22 +719,11 @@ Engines_Parallel_Container_i::find_or_create_instance(std::string genericRegiste
     CORBA::Object_var obj = _NS->ResolveFirst(component_registerBase.c_str());
     if (CORBA::is_nil( obj ))
     {
-      iobject = create_component_instance(genericRegisterName.c_str(), 
-                                          0); // force multiStudy instance here !
+      iobject = create_component_instance(genericRegisterName.c_str());
     }
     else
     { 
       iobject = Engines::EngineComponent::_narrow(obj) ;
-      Engines_Component_i *servant = dynamic_cast<Engines_Component_i*>(_poa->reference_to_servant(iobject));
-      ASSERT(servant)
-      int studyId = servant->getStudyId();
-      ASSERT (studyId >= 0);
-      if (studyId != 0)  // monoStudy instance: NOK
-      {
-        iobject = Engines::EngineComponent::_nil();
-        INFOS("load_impl & find_component_instance methods "
-              << "NOT SUITABLE for mono study components");
-      }
     }
   }
   catch (...)
@@ -770,8 +741,6 @@ Engines_Parallel_Container_i::find_or_create_instance(std::string genericRegiste
  *                                in Registry & Name Service,
  *                                (without _inst_n suffix, like "COMPONENT")
  *  \param handle                 loaded library handle
- *  \param studyId                0 for multiStudy instance, 
- *                                study Id (>0) otherwise
  *  \return a loaded component
  * 
  *  example with names:
@@ -784,7 +753,7 @@ Engines_Parallel_Container_i::find_or_create_instance(std::string genericRegiste
  */
 //=============================================================================
 Engines::EngineComponent_ptr
-Engines_Parallel_Container_i::createPythonInstance(std::string genericRegisterName, int studyId)
+Engines_Parallel_Container_i::createPythonInstance(std::string genericRegisterName)
 {
 
   Engines::EngineComponent_var iobject = Engines::EngineComponent::_nil();
@@ -801,10 +770,9 @@ Engines_Parallel_Container_i::createPythonInstance(std::string genericRegisterNa
   PyObject *pyCont = PyDict_GetItemString(globals, "pyCont");
   PyObject *result = PyObject_CallMethod(pyCont,
                                          (char*)"create_component_instance",
-                                         (char*)"ssl",
+                                         (char*)"ss",
                                          genericRegisterName.c_str(),
-                                         instanceName.c_str(),
-                                         studyId);
+                                         instanceName.c_str());
   const char *ior;
   const char *error;
   PyArg_ParseTuple(result,"ss", &ior, &error);
@@ -832,8 +800,6 @@ Engines_Parallel_Container_i::createPythonInstance(std::string genericRegisterNa
  *                                in Registry & Name Service,
  *                                (without _inst_n suffix, like "COMPONENT")
  *  \param handle                 loaded library handle
- *  \param studyId                0 for multiStudy instance, 
- *                                study Id (>0) otherwise
  *  \return a loaded component
  * 
  *  example with names:
@@ -847,8 +813,7 @@ Engines_Parallel_Container_i::createPythonInstance(std::string genericRegisterNa
 //=============================================================================
 Engines::EngineComponent_ptr
 Engines_Parallel_Container_i::createCPPInstance(std::string genericRegisterName,
-                                                void *handle,
-                                                int studyId)
+                                                void *handle)
 {
   MESSAGE("Entering Engines_Parallel_Container_i::createCPPInstance");
 
@@ -902,22 +867,12 @@ Engines_Parallel_Container_i::createCPPInstance(std::string genericRegisterName,
       return iobject._retn();
     }
 
-    // --- get reference & servant from id
+    // --- get reference from id
     CORBA::Object_var obj = _poa->id_to_reference(*id);
     iobject = Engines::EngineComponent::_narrow(obj);
 
-    Engines_Component_i *servant = 
-      dynamic_cast<Engines_Component_i*>(_poa->reference_to_servant(iobject));
-    ASSERT(servant);
-    servant->_remove_ref(); // compensate previous id_to_reference 
     _listInstances_map[instanceName] = iobject;
     _cntInstances_map[aGenRegisterName] += 1;
-#if defined(_DEBUG_) || defined(_DEBUG)
-    bool ret_studyId = servant->setStudyId(studyId);
-    ASSERT(ret_studyId);
-#else
-    servant->setStudyId(studyId);
-#endif
 
     // --- register the engine under the name
     //     containerName(.dir)/instanceName(.object)
@@ -933,8 +888,7 @@ Engines_Parallel_Container_i::createCPPInstance(std::string genericRegisterName,
 
 void
 Engines_Parallel_Container_i::create_paco_component_node_instance(const char* componentName,
-                                                                  const char* proxy_containerName,
-                                                                  CORBA::Long studyId)
+                                                                  const char* proxy_containerName)
 {
   // Init de la méthode
   char * proxy_ior;
@@ -1003,7 +957,7 @@ Engines_Parallel_Container_i::create_paco_component_node_instance(const char* co
     id = (Component_factory) (_orb, proxy_ior, getMyRank(), _poa, _id, instanceName.c_str(), componentName);
     CORBA::string_free(proxy_ior);
 
-    // --- get reference & servant from id
+    // --- get reference from id
     CORBA::Object_var obj = _poa->id_to_reference(*id);
     work_node = Engines::EngineComponent_PaCO::_narrow(obj) ;
     if (CORBA::is_nil(work_node))
index b99f8f7823dcd7be2a92adf1416eee709d8e70d1..52d232dce8f70ef35b9156f1297d00a3e74b0dc0 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //  File   : SALOME_ParallelContainer_i.hxx
-//  Author : André RIBES, EDF
+//  Author : Andr� RIBES, EDF
 
 #ifndef _SALOME_PARALLEL_CONTAINER_I_HXX_
 #define _SALOME_PARALLEL_CONTAINER_I_HXX_
@@ -73,12 +73,10 @@ public:
   virtual bool load_component_Library(const char* componentName, CORBA::String_out reason);
 
   virtual Engines::EngineComponent_ptr
-  create_component_instance( const char* componentName,
-                             CORBA::Long studyId); // 0 for multiStudy
+  create_component_instance( const char* componentName);
 
   virtual Engines::EngineComponent_ptr
   create_component_instance_env( const char* componentName,
-                                 CORBA::Long studyId,          // 0 for multiStudy
                                  const Engines::FieldsDict& env,
                                  CORBA::String_out reason);
 
@@ -87,8 +85,7 @@ public:
                                  CORBA::String_out reason);
 
   Engines::EngineComponent_ptr
-  find_component_instance( const char* registeredName,
-                           CORBA::Long studyId); // 0 for multiStudy
+  find_component_instance( const char* registeredName);
 
   Engines::EngineComponent_ptr
   load_impl(const char* nameToRegister,
@@ -96,8 +93,7 @@ public:
 
   void
   create_paco_component_node_instance(const char* componentName,
-                                      const char* proxy_containerName,
-                                      CORBA::Long studyId); // 0 for multiStudy
+                                      const char* proxy_containerName);
 
   void updateInstanceNumber();
 
@@ -123,12 +119,10 @@ public:
 
   Engines::EngineComponent_ptr
   createCPPInstance(std::string genericRegisterName,
-                    void *handle,
-                    int studyId);
+                    void *handle);
 
   Engines::EngineComponent_ptr
-  createPythonInstance(std::string genericRegisterName,
-                       int studyId);
+  createPythonInstance(std::string genericRegisterName);
 
   static bool isPythonContainer(const char* ContainerName);
   static void decInstanceCnt(std::string genericRegisterName);
@@ -167,8 +161,8 @@ protected:
   _fileRef_map_t _fileRef_map;
   _Salome_file_map_t _Salome_file_map;
 
-  // Cette map contient les references vers les différentes
-  // instances d'objets parallèles.
+  // Cette map contient les references vers les diff�rentes
+  // instances d'objets parall�les.
   std::map<std::string, PortableServer::ObjectId *> _par_obj_inst_map;
 
   typedef  PortableServer::ObjectId * (*FACTORY_FUNCTION) (CORBA::ORB_ptr, char *, int,
index 894e6f744489c06aa10f63da629310d50f5163e1..14ae8420828a8c3b19890c6189b0e76a25333661 100755 (executable)
@@ -57,13 +57,13 @@ SET(COMMON_LIBS
   SalomeGenericObj
   SalomeLifeCycleCORBA
   SalomeIDLKernel
+  SalomeDSClient
   ${HDF5_C_LIBRARIES}
 )
 
 SET(SalomeDS_SOURCES
   SALOMEDS.cxx
   SALOMEDS_Driver_i.cxx
-  SALOMEDS_StudyManager_i.cxx
   SALOMEDS_UseCaseBuilder_i.cxx
   SALOMEDS_UseCaseIterator_i.cxx
   SALOMEDS_ChildIterator_i.cxx
@@ -112,7 +112,6 @@ SET(SalomeDS_SOURCES
   SALOMEDS_UseCaseBuilder.cxx
   SALOMEDS_StudyBuilder.cxx
   SALOMEDS_Study.cxx
-  SALOMEDS_StudyManager.cxx
   SALOMEDS_AttributeStudyProperties.cxx
   SALOMEDS_AttributeComment.cxx
   SALOMEDS_AttributeDrawable.cxx
@@ -166,9 +165,7 @@ INSTALL(TARGETS SALOMEDS_Server SALOMEDS_Client
 SALOME_INSTALL_SCRIPTS(SALOME_DriverPy.py ${SALOME_INSTALL_SCRIPT_PYTHON})
 
 SET(COMMON_HEADERS_HXX
-  SALOMEDS_StudyManager_i.hxx
   SALOMEDS_Driver_i.hxx
-  SALOMEDS_StudyManager.hxx
   SALOMEDS_Study_i.hxx
   SALOMEDS_Study.hxx
   SALOMEDS_SObject_i.hxx
index 81a3ce56edc581a518e41ffcb1a24c7d3b9744e4..2d86b26de6f34157141879e41fcbb2e5891d8db9 100644 (file)
 //  $Header$
 //
 #include "SALOMEDS.hxx"
-#include "SALOMEDS_StudyManager.hxx"
 #include "SALOMEDS_Study.hxx"
+#include "SALOMEDS_Study_i.hxx"
 #include "SALOMEDS_StudyBuilder.hxx"
 #include "SALOMEDS_SObject.hxx"
 #include "SALOMEDS_SComponent.hxx"
 #include "SALOMEDSClient.hxx"
 #include "SALOMEDSClient_IParameters.hxx"
 #include "SALOMEDS_IParameters.hxx"
-#include "SALOMEDS_StudyManager_i.hxx"
 
 #include "SALOMEDS_Defines.hxx"
 
@@ -62,12 +61,10 @@ void SALOMEDS::lock()
 
 void SALOMEDS::unlock()
 {
-       SALOMEDS::Locker::MutexDS.unlock();
+  SALOMEDS::Locker::MutexDS.unlock();
 }
 
-
-
-// srn: Added new library methods that create basic SALOMEDS objects (StudyManager, Study, SComponent, SObject)
+// srn: Added new library methods that create basic SALOMEDS objects (Study, SComponent, SObject)
 
 //=============================================================================
 /*!
@@ -78,86 +75,73 @@ void SALOMEDS::unlock()
 
 extern "C"
 {
-SALOMEDS_EXPORT
-  SALOMEDSClient_StudyManager* StudyManagerFactory()
-{
-  return new SALOMEDS_StudyManager();
-}
-SALOMEDS_EXPORT
+  SALOMEDS_EXPORT
   SALOMEDSClient_Study* StudyFactory(SALOMEDS::Study_ptr theStudy)
-{
-  if(CORBA::is_nil(theStudy)) return NULL;
-  return new SALOMEDS_Study(theStudy);
-}
+  {
+    if(CORBA::is_nil(theStudy)) return NULL;
+    return new SALOMEDS_Study(theStudy);
+  }
 
-SALOMEDS_EXPORT
+  SALOMEDS_EXPORT
   SALOMEDSClient_SObject* SObjectFactory(SALOMEDS::SObject_ptr theSObject)
-{
-  if(CORBA::is_nil(theSObject)) return NULL;
-  return new SALOMEDS_SObject(theSObject);
-}
+  {
+    if(CORBA::is_nil(theSObject)) return NULL;
+    return new SALOMEDS_SObject(theSObject);
+  }
 
-SALOMEDS_EXPORT
+  SALOMEDS_EXPORT
   SALOMEDSClient_SComponent* SComponentFactory(SALOMEDS::SComponent_ptr theSComponent)
-{
-  if(CORBA::is_nil(theSComponent)) return NULL;
-  return new SALOMEDS_SComponent(theSComponent);
-}
+  {
+    if(CORBA::is_nil(theSComponent)) return NULL;
+    return new SALOMEDS_SComponent(theSComponent);
+  }
 
-SALOMEDS_EXPORT
+  SALOMEDS_EXPORT
   SALOMEDSClient_StudyBuilder* BuilderFactory(SALOMEDS::StudyBuilder_ptr theBuilder)
-{
-  if(CORBA::is_nil(theBuilder)) return NULL;
-  return new SALOMEDS_StudyBuilder(theBuilder);
-}
+  {
+    if(CORBA::is_nil(theBuilder)) return NULL;
+    return new SALOMEDS_StudyBuilder(theBuilder);
+  }
 
-SALOMEDS_EXPORT
-  SALOMEDSClient_StudyManager* CreateStudyManager(CORBA::ORB_ptr orb, PortableServer::POA_ptr root_poa)
-{
-  SALOME_NamingService namingService(orb);
-  CORBA::Object_var obj = namingService.Resolve( "/myStudyManager" );
-  SALOMEDS::StudyManager_var theManager = SALOMEDS::StudyManager::_narrow( obj );
-  if( CORBA::is_nil(theManager) ) {
-    SALOMEDS_StudyManager_i * aStudyManager_i = new  SALOMEDS_StudyManager_i(orb, root_poa);
-    // Activate the objects.  This tells the POA that the objects are ready to accept requests.
-    PortableServer::ObjectId_var aStudyManager_iid =  root_poa->activate_object(aStudyManager_i);
-    //give ownership to the poa : the object will be deleted by the poa
-    aStudyManager_i->_remove_ref();
-    aStudyManager_i->register_name((char*)"/myStudyManager");
+  SALOMEDS_EXPORT
+  void CreateStudy(CORBA::ORB_ptr orb, PortableServer::POA_ptr root_poa)
+  {
+    SALOME_NamingService namingService(orb);
+    CORBA::Object_var obj = namingService.Resolve( "/Study" );
+    SALOMEDS::Study_var aStudy = SALOMEDS::Study::_narrow( obj );
+    if( CORBA::is_nil(aStudy) ) {
+      SALOMEDS_Study_i* aStudy_i = new SALOMEDS_Study_i(orb);
+
+      // Activate the objects.  This tells the POA that the objects are ready to accept requests.
+      PortableServer::ObjectId_var aStudy_iid =  root_poa->activate_object(aStudy_i);
+      aStudy = aStudy_i->_this();
+      namingService.Register(aStudy, "/Study");
+      aStudy_i->GetImpl()->GetDocument()->SetModified(false);
+      aStudy_i->_remove_ref();
+    }
   }
-  return new SALOMEDS_StudyManager();
-}
 
-SALOMEDS_EXPORT
+  SALOMEDS_EXPORT
   SALOMEDSClient_IParameters* GetIParameters(const _PTR(AttributeParameter)& ap)
-{
-  return new SALOMEDS_IParameters(ap);
-}
+  {
+    return new SALOMEDS_IParameters(ap);
+  }
 
-SALOMEDS_EXPORT
+  SALOMEDS_EXPORT
   SALOMEDS::SObject_ptr ConvertSObject(const _PTR(SObject)& theSObject)
-{
-  
-  SALOMEDS_SObject* so = _CAST(SObject, theSObject);
-  if(!theSObject || !so) return SALOMEDS::SObject::_nil();
-  return so->GetSObject();
-}
-
-SALOMEDS_EXPORT
-  SALOMEDS::Study_ptr ConvertStudy(const _PTR(Study)& theStudy)
-{
-  SALOMEDS_Study* study = _CAST(Study, theStudy);
-  if(!theStudy || !study) return SALOMEDS::Study::_nil();
-  return study->GetStudy();
-}
+  {
+    SALOMEDS_SObject* so = _CAST(SObject, theSObject);
+    if ( !theSObject || !so )
+      return SALOMEDS::SObject::_nil();
+    return so->GetSObject();
+  }
 
-SALOMEDS_EXPORT
+  SALOMEDS_EXPORT
   SALOMEDS::StudyBuilder_ptr ConvertBuilder(const _PTR(StudyBuilder)& theBuilder)
-{
-  SALOMEDS_StudyBuilder* builder = _CAST(StudyBuilder, theBuilder);
-  if(!theBuilder || !builder) return SALOMEDS::StudyBuilder::_nil(); 
-  return builder->GetBuilder();
-}
-
-
+  {
+    SALOMEDS_StudyBuilder* builder = _CAST(StudyBuilder, theBuilder);
+    if ( !theBuilder || !builder )
+      return SALOMEDS::StudyBuilder::_nil();
+    return builder->GetBuilder();
+  }
 }
index 2650e1d0af08cd53a290511af5a62a25f3fc0ada..db0f0e245137dd402820f221519ff99754ed7ec0 100644 (file)
@@ -28,8 +28,9 @@
 //
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SALOMEDS)
-#include "SALOMEDS_StudyManager_i.hxx"
 #include "SALOMEDS_AttributeName_i.hxx"
+#include "SALOME_KernelServices.hxx"
+#include "Basics_Utils.hxx"
 #include "utilities.h"
 #include "HDFOI.hxx"
 
@@ -38,9 +39,9 @@
  *  Purpose  : 
  */
 //============================================================================
-static void DumpComponent(SALOMEDS::Study_ptr Study,SALOMEDS::SObject_ptr SO, int offset) {
+static void DumpComponent(SALOMEDS::SObject_ptr SO, int offset) {
   SALOMEDS::SObject_var RefSO;
-  SALOMEDS::ChildIterator_var it = Study->NewChildIterator(SO);
+  SALOMEDS::ChildIterator_var it = KERNEL::getStudyServant()->NewChildIterator(SO);
   for (; it->More();it->Next()){
     SALOMEDS::SObject_var CSO= it->Value();
     SALOMEDS::GenericAttribute_var anAttr;
@@ -57,7 +58,7 @@ static void DumpComponent(SALOMEDS::Study_ptr Study,SALOMEDS::SObject_ptr SO, in
         MESSAGE(" ");
       MESSAGE("*Reference"<<RefSO->GetID());
     }
-    DumpComponent(Study,CSO,offset+2);
+    DumpComponent(CSO,offset+2);
   }
 }
 
@@ -66,17 +67,17 @@ static void DumpComponent(SALOMEDS::Study_ptr Study,SALOMEDS::SObject_ptr SO, in
  *  Purpose  : 
  */
 //============================================================================
-static void DumpStudy (SALOMEDS::Study_ptr Study) {
+static void DumpStudy() {
   MESSAGE("Explore Study and Write name of each object if it exists");
   
   char* name;
-  SALOMEDS::SComponentIterator_var itcomp = Study->NewComponentIterator();
+  SALOMEDS::SComponentIterator_var itcomp = KERNEL::getStudyServant()->NewComponentIterator();
   int offset = 1;
   for (; itcomp->More(); itcomp->Next()) {
     SALOMEDS::SComponent_var SC = itcomp->Value();
     name = SC->ComponentDataType();
     MESSAGE("-> ComponentDataType is "<<name);  
-    DumpComponent(Study,SC,offset);
+    DumpComponent(SC,offset);
   }
 }
 
@@ -85,17 +86,16 @@ static void DumpStudy (SALOMEDS::Study_ptr Study) {
  *  Purpose  : 
  */
 //============================================================================
-static void Test(SALOMEDS::StudyManager_ptr myStudyMgr )
+static void Test()
 {
   try {
   char* name;
-  MESSAGE("Create New Study Study1");
-  SALOMEDS::Study_var myStudy = myStudyMgr->NewStudy("Study1");
+
+  SALOMEDS::Study_var myStudy = KERNEL::getStudyServant();
+
   MESSAGE("Create Builder ");
   SALOMEDS::StudyBuilder_var StudyBuild = myStudy->NewBuilder();
 
-
   // Create new components
   SALOMEDS::GenericAttribute_var anAttr;
   SALOMEDS::AttributeName_var Name;
@@ -186,62 +186,35 @@ static void Test(SALOMEDS::StudyManager_ptr myStudyMgr )
   Name->SetValue("mesh_cylinder_0");
   StudyBuild->CommitCommand();
 
-  MESSAGE("Test GetStudy");
-  SALOMEDS::Study_var stu = mesh_cylinder->GetStudy();
-  MESSAGE ("-> Study Name is "<<stu->Name());
-
-  DumpStudy(myStudy);
+  DumpStudy();
 
   StudyBuild->Undo();
   // Study should have no trace of object mesh_cylinder
-  DumpStudy(myStudy);
-
-  //myStudyMgr->Open ((char*)name);
-  //MESSAGE("Name " << name);
-
-  // GetOpenStudies
-  MESSAGE("GetOpenStudies list");
-  SALOMEDS::ListOfOpenStudies_var _list_open_studies =  myStudyMgr->GetOpenStudies();
-
-  for (unsigned int ind = 0; ind < _list_open_studies->length();ind++)
-    {
-      MESSAGE("Open studies list : " << _list_open_studies[ind]);  
-    }
-
-
-  // GetStudyByName
-  SALOMEDS::Study_var myStudy1 =myStudyMgr->GetStudyByName(_list_open_studies[0]);
-  MESSAGE("GetStudyByName done");
+  DumpStudy();
   
   // Save as
-  myStudyMgr->SaveAs("/home/edeville/Study1.hdf",myStudy1, false);
+  myStudy->SaveAs(Kernel_Utils::decode("/home/edeville/Study1.hdf"), false, false);
 
   // Get Persistent Reference of the study test
-  name = myStudy1->GetPersistentReference();
+  name = myStudy->GetPersistentReference();
   MESSAGE("Persitent Reference of the study " << name);
 
-  // Get Transient Reference of the study test
-  name = myStudy1->GetTransientReference();
-  MESSAGE("Transient Reference of the study " << name);
-
   // FindComponent Test
-  SALOMEDS::SComponent_var compo = myStudy1->FindComponent("GEOM");
+  SALOMEDS::SComponent_var compo = myStudy->FindComponent("GEOM");
   // Get ComponentDataType test
   MESSAGE("Find ComponentDataType of compo");
   name = compo->ComponentDataType();
-  MESSAGE("-> ComponentDataType is "<<name);  
+  MESSAGE("-> ComponentDataType is "<<name);
 
-  
   // FindComponentID Test
-  SALOMEDS::SComponent_var compo1 = myStudy1->FindComponentID("0:1:2");
+  SALOMEDS::SComponent_var compo1 = myStudy->FindComponentID("0:1:2");
   // Get ComponentDataType test
   MESSAGE("Find ComponentDataType of compo1");
   name = compo1->ComponentDataType();
-  MESSAGE("-> ComponentDataType is "<<name);  
-
+  MESSAGE("-> ComponentDataType is "<<name);
+  
   // FindObject Test
-  SALOMEDS::SObject_var objn = myStudy1->FindObject("cylinder_0");
+  SALOMEDS::SObject_var objn = myStudy->FindObject("cylinder_0");
  // Test FindAttribute function : get AttributeName attribute
   MESSAGE("Find Name in object objn");
   if (objn->FindAttribute(anAttr, "AttributeName")) {
@@ -254,7 +227,7 @@ static void Test(SALOMEDS::StudyManager_ptr myStudyMgr )
   }
 
   // FindObjectID Test
-  SALOMEDS::SObject_var obj = myStudy1->FindObjectID("0:1:2:1:1");
+  SALOMEDS::SObject_var obj = myStudy->FindObjectID("0:1:2:1:1");
  // Test FindAttribute function : get AttributeName attribute
   MESSAGE("Find Name in object obj");
   if (obj->FindAttribute(anAttr, "AttributeName")) {
@@ -265,7 +238,7 @@ static void Test(SALOMEDS::StudyManager_ptr myStudyMgr )
   else {
     MESSAGE("-> Name is not found");
   }
-  //DumpStudy(myStudy1);
+  //DumpStudy();
   }
   catch(HDFexception)
     {
@@ -289,19 +262,13 @@ int main(int argc, char** argv)
     CORBA::Object_var obj = orb->resolve_initial_references("RootPOA");
     PortableServer::POA_var poa = PortableServer::POA::_narrow(obj);
 
-    SALOME_NamingService * salomens = new SALOME_NamingService(orb);
-
-    MESSAGE("Find StudyManager ");
-    CORBA::Object_ptr obj2 = salomens->Resolve("myStudyManager");
-    SALOMEDS::StudyManager_var myStudyMgr = SALOMEDS::StudyManager::_narrow(obj2);
-
     // Obtain a POAManager, and tell the POA to start accepting
     // requests on its objects.
     PortableServer::POAManager_var pman = poa->the_POAManager();
     pman->activate();
 
     // Test basic services
-    Test(myStudyMgr);
+    Test();
 
     orb->run();
     orb->destroy();
index c0f78849f8af755b4cf7a846f6939513501250c8..3c6116ad4eef63992952cba44849d354486540c9 100644 (file)
@@ -28,6 +28,7 @@
 #include "SALOMEDS_Study_i.hxx"
 #include "SALOMEDS.hxx"
 #include <SALOMEDSImpl_IParameters.hxx>
+#include <SALOME_KernelServices.hxx>
 #include <stdlib.h>
 
 #include CORBA_CLIENT_HEADER(SALOME_Session)
@@ -321,22 +322,18 @@ std::string SALOMEDS_Driver_i::PasteInto(const unsigned char* theStream,
   return entry;
 }
 
-SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::DumpPython(SALOMEDSImpl_Study* theStudy,
-                                                    bool isPublished,
+SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::DumpPython(bool isPublished,
                                                     bool isMultiFile,
                                                     bool& isValidScript,
                                                     long& theStreamLength)
 {
-  SALOMEDS_Study_i *  st_servant = SALOMEDS_Study_i::GetStudyServant(theStudy, _orb);//new SALOMEDS_Study_i (theStudy, _orb);
-  SALOMEDS::Study_var st  = SALOMEDS::Study::_narrow(st_servant->_this());
-
   SALOMEDS::unlock();
 
   Engines::TMPFile_var aStream;
   CORBA::Boolean aValidScript = true; // VSR: maybe should be false by default ???
 
   if ( !CORBA::is_nil( _engine ) )
-    aStream = _engine->DumpPython(st.in(), isPublished, isMultiFile, aValidScript);
+    aStream = _engine->DumpPython(isPublished, isMultiFile, aValidScript);
 
   SALOMEDSImpl_TMPFile* aTMPFile = new Engines_TMPFile_i(aStream._retn());
   theStreamLength = aTMPFile->Size();
index c07c30eb4eefad8ca86d167b132095712370518e..1b1809b3095a2ad585f2a931aee11382b424df7f 100644 (file)
@@ -98,8 +98,7 @@ public:
                                 int theObjectID,
                                 const SALOMEDSImpl_SObject& theObject);
 
-  virtual SALOMEDSImpl_TMPFile* DumpPython(SALOMEDSImpl_Study* theStudy, 
-                                           bool isPublished, 
+  virtual SALOMEDSImpl_TMPFile* DumpPython(bool isPublished,
                                            bool isMultiFile,
                                            bool& isValidScript,
                                            long& theStreamLength);
index 8329a78ef93074330c02e6d50523aea18261f2a4..a7104f459907ff663501f7711336e16f4bcb8317 100644 (file)
@@ -21,6 +21,8 @@
 //
 
 #include "SALOMEDS_IParameters.hxx"
+#include <SALOMEDSClient_ClientFactory.hxx>
+#include <SALOME_KernelServices.hxx>
 #include <utilities.h>
 
 #define PT_INTEGER   0
@@ -46,8 +48,6 @@ SALOMEDS_IParameters::SALOMEDS_IParameters(const _PTR(AttributeParameter)& ap)
 {
   if(!ap) return;
   _ap = ap;
-  _PTR(SObject) so = _ap->GetSObject();
-  _study = so->GetStudy();
 }
 
 SALOMEDS_IParameters::~SALOMEDS_IParameters()
@@ -258,14 +258,13 @@ std::string SALOMEDS_IParameters::encodeEntry(const std::string& entry, const st
 
 std::string SALOMEDS_IParameters::decodeEntry(const std::string& entry)
 {
-  if(!_study) return entry;
   int pos = entry.rfind("_");
   if(pos < 0 || pos >= entry.length()) return entry;
 
   std::string compName(entry, 0, pos), compID, tail(entry, pos+1, entry.length()-1);
   
   if(_compNames.find(compName) == _compNames.end()) {
-    _PTR(SObject) so = _study->FindComponent(compName);
+    _PTR(SObject) so = ClientFactory::Study(KERNEL::getStudyServant())->FindComponent(compName);
     if(!so) return entry;
     compID = so->GetID();
     _compNames[compName] = compID;
@@ -278,23 +277,23 @@ std::string SALOMEDS_IParameters::decodeEntry(const std::string& entry)
   return newEntry;
 }
 
-void SALOMEDS_IParameters::setDumpPython(_PTR(Study) study, const std::string& theID)
+void SALOMEDS_IParameters::setDumpPython(const std::string& theID)
 {
   std::string anID;
   if(theID == "") anID = getDefaultVisualComponent();
   else anID = theID;
 
-  _PTR(AttributeParameter) ap = study->GetCommonParameters(anID, 0);
-  ap->SetBool(_AP_DUMP_PYTHON_, !isDumpPython(study, theID));
+  _PTR(AttributeParameter) ap = ClientFactory::Study(KERNEL::getStudyServant())->GetCommonParameters(anID, 0);
+  ap->SetBool(_AP_DUMP_PYTHON_, !isDumpPython(theID));
 }
 
-bool SALOMEDS_IParameters::isDumpPython(_PTR(Study) study, const std::string& theID)
+bool SALOMEDS_IParameters::isDumpPython(const std::string& theID)
 {
   std::string anID;
   if(theID == "") anID = getDefaultVisualComponent();
   else anID = theID;
 
-  _PTR(AttributeParameter) ap = study->GetCommonParameters(anID, 0);
+  _PTR(AttributeParameter) ap = ClientFactory::Study(KERNEL::getStudyServant())->GetCommonParameters(anID, 0);
   if(!ap) return false;
   if(!ap->IsSet(_AP_DUMP_PYTHON_, PT_BOOLEAN)) return false;
   return (bool)ap->GetBool(_AP_DUMP_PYTHON_);
index 24468d0113ce2d265f9a8762b120f9ed75adf700..197eace7d34154c9c367506f4361ae23917f865a 100644 (file)
@@ -142,12 +142,12 @@ public:
   /*!
     Enables/Disables the dumping visual parameters
    */
-  virtual void setDumpPython(_PTR(Study) study, const std::string& theID = "");
+  virtual void setDumpPython(const std::string& theID = "");
 
   /*!
     Returns whether there is the dumping visual parameters
    */
-  virtual bool isDumpPython(_PTR(Study) study, const std::string& theID = "");  
+  virtual bool isDumpPython(const std::string& theID = "");
 
   /*!
     Returns a default name of the component where the visula parameters are stored.
@@ -156,7 +156,6 @@ public:
 
 private:
   _PTR(AttributeParameter) _ap;
-  _PTR(Study) _study;
   std::map<std::string, std::string> _compNames;
 };
 
index 2a6adb8c4137731965924abc38be0ec17c6e72a4..6f3332f6b6314f60949f669231ae157572a38bba 100644 (file)
@@ -196,16 +196,6 @@ bool SALOMEDS_SObject::FindSubObject(int theTag, _PTR(SObject)& theObject)
   return ret;   
 }
 
-_PTR(Study) SALOMEDS_SObject::GetStudy()
-{
-  if (_isLocal) {
-    SALOMEDS::Locker lock;
-    return _PTR(Study)(new SALOMEDS_Study(_local_impl->GetStudy()));
-  }
-  SALOMEDS::Study_var study=_corba_impl->GetStudy();
-  return _PTR(Study)(new SALOMEDS_Study(study));
-}
-
 std::string SALOMEDS_SObject::Name()
 {
   std::string aName;
index 4635829ae82001af6f268883c297c67876fa62d5..da8bf79fd699d81506be3bb164f74169187649bc 100644 (file)
@@ -60,7 +60,6 @@ public:
   virtual bool FindAttribute(_PTR(GenericAttribute)& anAttribute, const std::string& aTypeOfAttribute);
   virtual bool ReferencedObject(_PTR(SObject)& theObject);
   virtual bool FindSubObject(int theTag, _PTR(SObject)& theObject);
-  virtual _PTR(Study) GetStudy();
   virtual std::string Name();
   virtual void  Name(const std::string& theName);
   virtual std::vector<_PTR(GenericAttribute)> GetAllAttributes();
index 210e0fa68217ad2a69d83c4bf17afbe39d3ed9f5..2cf28a4cc388ef647e5fb7b153f065dd9d8fcaf6 100644 (file)
@@ -28,7 +28,6 @@
 #include "SALOMEDS_SObject_i.hxx"
 #include "SALOMEDS_SComponent_i.hxx"
 #include "SALOMEDS_GenericAttribute_i.hxx"
-#include "SALOMEDS_StudyManager_i.hxx"
 #include "SALOMEDS.hxx"
 #include "SALOMEDSImpl_GenericAttribute.hxx"
 #include "SALOMEDSImpl_SComponent.hxx"
@@ -71,7 +70,6 @@ SALOMEDS_SObject_i::SALOMEDS_SObject_i(const SALOMEDSImpl_SObject& impl, CORBA::
      }
   }
   _orb = CORBA::ORB::_duplicate(orb);
-   //SALOME::GenericObj_i::myPOA = SALOMEDS_StudyManager_i::GetPOA(GetStudy());
 }
 
 
@@ -132,27 +130,6 @@ SALOMEDS::SObject_ptr SALOMEDS_SObject_i::GetFather()
   return so._retn();
 }
 
-//============================================================================
-/*! Function :
- *  Purpose  :
- */
-//============================================================================
-SALOMEDS::Study_ptr SALOMEDS_SObject_i::GetStudy()
-{
-  SALOMEDS::Locker lock;
-  SALOMEDSImpl_Study* aStudy = _impl->GetStudy();
-  if(!aStudy) {
-    MESSAGE("Problem GetStudy");
-    return SALOMEDS::Study::_nil();
-  }
-
-  std::string IOR = aStudy->GetTransientReference();
-  CORBA::Object_var obj = _orb->string_to_object(IOR.c_str());
-  SALOMEDS::Study_var Study = SALOMEDS::Study::_narrow(obj) ;
-  ASSERT(!CORBA::is_nil(Study));
-  return SALOMEDS::Study::_duplicate(Study);
-}
-
 //============================================================================
 /*! Function : FindAttribute
  *  Purpose  : Find attribute of given type on this SObject
index f996197fb2f8e70a41e5a63a82a9b05030b778f8..fea6ecab604db64433dc9a35d6530332c6c23848 100644 (file)
@@ -62,7 +62,6 @@ public:
   virtual CORBA::Boolean ReferencedObject(SALOMEDS::SObject_out obj) ;
   virtual CORBA::Boolean FindSubObject(CORBA::Long atag, SALOMEDS::SObject_out obj );
 
-  virtual SALOMEDS::Study_ptr    GetStudy() ;
   virtual char* Name();
   virtual void  Name(const char*);
   virtual SALOMEDS::ListOfAttributes* GetAllAttributes();
index 17a6583b0b6f7fe26c48ce8ed3b0defe4a613849..5116addc31956781377d778459d2347df34db8bb 100644 (file)
@@ -30,7 +30,7 @@
 #include "Utils_SINGLETON.hxx"
 
 #include "SALOME_NamingService.hxx"
-#include "SALOMEDS_StudyManager_i.hxx"
+#include "SALOMEDS_Study_i.hxx"
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SALOMEDS)
@@ -58,7 +58,8 @@ int main(int argc, char** argv)
       CORBA::ORB_var orb = CORBA::ORB_init( argc, argv, "omniORB4" ) ;
 #else
       CORBA::ORB_var orb = CORBA::ORB_init( argc, argv, "omniORB3" );
-#endif      
+#endif
+      SALOME_NamingService* NS = 0;
       // Obtain a reference to the root POA.
       long TIMESleep = 500000000;
       int NumberOfTries = 40;
@@ -108,8 +109,8 @@ int main(int argc, char** argv)
                     if(EnvL==1)
                       {
                         CORBA::ORB_var orb1 = CORBA::ORB_init(argc,argv) ;
-                        SALOME_NamingService &NS = *SINGLETON_<SALOME_NamingService>::Instance() ;
-                        NS.init_orb( orb1 ) ;
+                        NS = SINGLETON_<SALOME_NamingService>::Instance() ;
+                        NS->init_orb( orb1 ) ;
                         for(int j=1; j<=NumberOfTries; j++)
                           {
                             if (j!=1) 
@@ -154,13 +155,19 @@ int main(int argc, char** argv)
       // We allocate the objects on the heap.  Since these are reference
       // counted objects, they will be deleted by the POA when they are no
       // longer needed.    
-      SALOMEDS_StudyManager_i * myStudyManager_i = new  SALOMEDS_StudyManager_i(orb,poa);
+      SALOMEDS_Study_i * myStudy_i = new  SALOMEDS_Study_i(orb);
  
       // Activate the objects.  This tells the POA that the objects are
       // ready to accept requests.
-      PortableServer::ObjectId_var myStudyManager_iid = poa->activate_object(myStudyManager_i);
-      myStudyManager_i->register_name("/myStudyManager");
-      myStudyManager_i->_remove_ref();
+      PortableServer::ObjectId_var myStudy_iid = poa->activate_object(myStudy_i);
+      SALOMEDS::Study_var Study = myStudy_i->_this();
+      if (!NS)
+      {
+        NS = SINGLETON_<SALOME_NamingService>::Instance();
+        NS->init_orb( orb );
+      }
+      NS->Register(Study, "/Study");
+      myStudy_i->_remove_ref();
        
       // Obtain a POAManager, and tell the POA to start accepting
       // requests on its objects.
index 63d44b5ac2acb37fbfc6279e84fbeeea2295e5b9..86629e27142cfb4d9cb0a410b318bbf2327ff5ff 100644 (file)
@@ -48,6 +48,8 @@
 #include "SALOMEDSImpl_GenericVariable.hxx"
 #include "SALOMEDSImpl_UseCaseBuilder.hxx"
 
+#include <SALOME_KernelServices.hxx>
+
 #include "SALOMEDS_Driver_i.hxx"
 #include "SALOMEDS_Study_i.hxx"
 
@@ -68,7 +70,7 @@ SALOMEDS_Study::SALOMEDS_Study(SALOMEDSImpl_Study* theStudy)
   _isLocal = true;
   _local_impl = theStudy;
   _corba_impl = SALOMEDS::Study::_nil();
-  init_orb();
+  InitORB();
 }
 
 SALOMEDS_Study::SALOMEDS_Study(SALOMEDS::Study_ptr theStudy)
@@ -89,32 +91,171 @@ SALOMEDS_Study::SALOMEDS_Study(SALOMEDS::Study_ptr theStudy)
     _corba_impl = SALOMEDS::Study::_duplicate(theStudy);
   }
 
-  init_orb();
+  InitORB();
 }
 
 SALOMEDS_Study::~SALOMEDS_Study()
 {
 }
 
-std::string SALOMEDS_Study::GetPersistentReference()
+void SALOMEDS_Study::InitORB()
 {
-  std::string aRef;
+  ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance();
+  ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
+  _orb = init(0 , 0 ) ;
+}
+
+void SALOMEDS_Study::Init()
+{
+  if(CORBA::is_nil(_corba_impl))
+    return;
+
+  _corba_impl->Init();
+}
+
+void SALOMEDS_Study::Clear()
+{
+  if(CORBA::is_nil(_corba_impl))
+    return;
+
+  _corba_impl->Clear();
+}
+
+bool SALOMEDS_Study::Open(const std::string& theStudyUrl)
+{
+  if(CORBA::is_nil(_corba_impl))
+    return false;
+  std::wstring wtheStudyUrl = std::wstring(theStudyUrl.begin(), theStudyUrl.end());
+  
+  if (!_corba_impl->Open( (wchar_t*)wtheStudyUrl.c_str() ) )
+    return false;
+
+  return true;
+}
+
+bool SALOMEDS_Study::Save(bool theMultiFile, bool theASCII)
+{
+  if(CORBA::is_nil(_corba_impl))
+    return false;
+
+  return _corba_impl->Save(theMultiFile, theASCII);
+}
+
+bool SALOMEDS_Study::SaveAs(const std::string& theUrl, bool theMultiFile, bool theASCII)
+{
+  if(CORBA::is_nil(_corba_impl))
+    return false;
+
+  return _corba_impl->SaveAs(Kernel_Utils::decode_s(theUrl), theMultiFile, theASCII);
+}
+
+SALOMEDS_Driver_i* GetDriver(const SALOMEDSImpl_SObject& theObject, CORBA::ORB_ptr orb)
+{
+  SALOMEDS_Driver_i* driver = NULL;
+
+  SALOMEDSImpl_SComponent aSCO = theObject.GetFatherComponent();
+  if(!aSCO.IsNull()) {
+    std::string IOREngine = aSCO.GetIOR();
+    if(!IOREngine.empty()) {
+      CORBA::Object_var obj = orb->string_to_object(IOREngine.c_str());
+      Engines::EngineComponent_var Engine = Engines::EngineComponent::_narrow(obj) ;
+      driver = new SALOMEDS_Driver_i(Engine, orb);
+    }
+  }
+
+  return driver;
+}
+
+bool SALOMEDS_Study::CanCopy(const _PTR(SObject)& theSO)
+{
+  SALOMEDS_SObject* aSO = dynamic_cast<SALOMEDS_SObject*>(theSO.get());
+  bool ret;
+
   if (_isLocal) {
     SALOMEDS::Locker lock;
-    aRef = _local_impl->GetPersistentReference();
+
+    SALOMEDSImpl_SObject aSO_impl = *(aSO->GetLocalImpl());
+    SALOMEDS_Driver_i* aDriver = GetDriver(aSO_impl, _orb);
+    ret = _local_impl->CanCopy(aSO_impl, aDriver);
+    delete aDriver;
   }
-  else aRef = (CORBA::String_var)_corba_impl->GetPersistentReference();
-  return aRef;
+  else {
+    ret = _corba_impl->CanCopy(aSO->GetCORBAImpl());
+  }
+
+  return ret;
+}
+
+bool SALOMEDS_Study::Copy(const _PTR(SObject)& theSO)
+{
+  SALOMEDS_SObject* aSO = dynamic_cast<SALOMEDS_SObject*>(theSO.get());
+  bool ret;
+  if (_isLocal) {
+    SALOMEDS::Locker lock;
+
+    SALOMEDSImpl_SObject aSO_impl = *(aSO->GetLocalImpl());
+    SALOMEDS_Driver_i* aDriver = GetDriver(aSO_impl, _orb);
+    ret = _local_impl->Copy(aSO_impl, aDriver);
+    delete aDriver;
+  }
+  else {
+    ret = _corba_impl->Copy(aSO->GetCORBAImpl());
+  }
+  return ret;
+}
+
+bool SALOMEDS_Study::CanPaste(const _PTR(SObject)& theSO)
+{
+  SALOMEDS_SObject* aSO = dynamic_cast<SALOMEDS_SObject*>(theSO.get());
+  bool ret;
+
+  if (_isLocal) {
+    SALOMEDS::Locker lock;
+
+    SALOMEDSImpl_SObject aSO_impl = *(aSO->GetLocalImpl());
+    SALOMEDS_Driver_i* aDriver = GetDriver(aSO_impl, _orb);
+    ret = _local_impl->CanPaste(aSO_impl, aDriver);
+    delete aDriver;
+  }
+  else {
+    ret = _corba_impl->CanPaste(aSO->GetCORBAImpl());
+  }
+
+  return ret;
+}
+
+_PTR(SObject) SALOMEDS_Study::Paste(const _PTR(SObject)& theSO)
+{
+  SALOMEDS_SObject* aSO = dynamic_cast<SALOMEDS_SObject*>(theSO.get());
+  SALOMEDSClient_SObject* aResult = NULL;
+
+  if (_isLocal) {
+    SALOMEDS::Locker lock;
+
+    SALOMEDSImpl_SObject aSO_impl = *(aSO->GetLocalImpl());
+    SALOMEDS_Driver_i* aDriver = GetDriver(aSO_impl, _orb);
+    SALOMEDSImpl_SObject aNewSO = _local_impl->Paste(aSO_impl, aDriver);
+    delete aDriver;
+    if(aNewSO.IsNull()) return _PTR(SObject)(aResult);
+    aResult = new SALOMEDS_SObject(aNewSO);
+  }
+  else {
+    SALOMEDS::SObject_ptr aNewSO = _corba_impl->Paste(aSO->GetCORBAImpl());
+    if(CORBA::is_nil(aNewSO)) return _PTR(SObject)(aResult);
+    aResult = new SALOMEDS_SObject(aNewSO);
+  }
+
+  return _PTR(SObject)(aResult);
 }
 
-std::string SALOMEDS_Study::GetTransientReference()
+std::string SALOMEDS_Study::GetPersistentReference()
 {
   std::string aRef;
   if (_isLocal) {
     SALOMEDS::Locker lock;
-    aRef = _local_impl->GetTransientReference();
+    aRef = _local_impl->GetPersistentReference();
   }
-  else aRef = _corba_impl->GetTransientReference();
+  else aRef = (CORBA::String_var)_corba_impl->GetPersistentReference();
   return aRef;
 }
  
@@ -299,91 +440,6 @@ std::string SALOMEDS_Study::GetObjectPath(const _PTR(SObject)& theSO)
   return aPath;
 }
 
-void SALOMEDS_Study::SetContext(const std::string& thePath)
-{
-  if (_isLocal) {
-    SALOMEDS::Locker lock;
-    _local_impl->SetContext(thePath);
-  }
-  else _corba_impl->SetContext((char*)thePath.c_str());
-}
-
-std::string SALOMEDS_Study::GetContext()  
-{
-  std::string aPath;
-  if (_isLocal) {
-    SALOMEDS::Locker lock;
-    aPath = _local_impl->GetContext();
-  }
-  else aPath = _corba_impl->GetContext();
-  return aPath;
-}
-
-std::vector<std::string> SALOMEDS_Study::GetObjectNames(const std::string& theContext)
-{
-  std::vector<std::string> aVector;
-  int aLength, i;
-  if (_isLocal) {
-    SALOMEDS::Locker lock;
-    aVector = _local_impl->GetObjectNames(theContext);
-  }
-  else {
-    SALOMEDS::ListOfStrings_var aSeq = _corba_impl->GetObjectNames((char*)theContext.c_str());
-    aLength = aSeq->length();
-    for (i = 0; i < aLength; i++) aVector.push_back(std::string((std::string)aSeq[i].in()));
-  }
-  return aVector;
-}
-std::vector<std::string> SALOMEDS_Study::GetDirectoryNames(const std::string& theContext)
-{
-  std::vector<std::string> aVector;
-  int aLength, i;
-  if (_isLocal) {
-    SALOMEDS::Locker lock;
-    aVector = _local_impl->GetDirectoryNames(theContext);
-  }
-  else {
-    SALOMEDS::ListOfStrings_var aSeq = _corba_impl->GetDirectoryNames((char*)theContext.c_str());
-    aLength = aSeq->length();
-    for (i = 0; i < aLength; i++) aVector.push_back((char*)aSeq[i].in());
-  }
-  return aVector;
-}
-std::vector<std::string> SALOMEDS_Study::GetFileNames(const std::string& theContext)
-{
-  std::vector<std::string> aVector;
-  int aLength, i;
-  if (_isLocal) {
-    SALOMEDS::Locker lock;
-    aVector = _local_impl->GetFileNames(theContext);
-  }
-  else {
-    SALOMEDS::ListOfStrings_var aSeq = _corba_impl->GetFileNames((char*)theContext.c_str());
-    aLength = aSeq->length();
-
-    for (i = 0; i < aLength; i++) aVector.push_back((char*)aSeq[i].in());
-  }
-  return aVector;
-}
-std::vector<std::string> SALOMEDS_Study::GetComponentNames(const std::string& theContext)
-{
-  std::vector<std::string> aVector;
-  int aLength, i;
-  if (_isLocal) {
-    SALOMEDS::Locker lock;
-    aVector = _local_impl->GetComponentNames(theContext);
-  }
-  else {
-    SALOMEDS::ListOfStrings_var aSeq = _corba_impl->GetComponentNames((char*)theContext.c_str());
-    aLength = aSeq->length();
-    for (i = 0; i < aLength; i++) aVector.push_back((char*)aSeq[i].in());
-  }
-  return aVector;
-}
-
 _PTR(ChildIterator) SALOMEDS_Study::NewChildIterator(const _PTR(SObject)& theSO)
 {
   SALOMEDS_SObject* aSO = dynamic_cast<SALOMEDS_SObject*>(theSO.get());
@@ -442,7 +498,7 @@ std::string SALOMEDS_Study::Name()
     SALOMEDS::Locker lock;
     aName = _local_impl->Name();
   }
-  else aName = _corba_impl->Name();
+  else aName = Kernel_Utils::encode_s(_corba_impl->Name());
   return aName;
 }
 
@@ -452,7 +508,7 @@ void SALOMEDS_Study::Name(const std::string& theName)
     SALOMEDS::Locker lock;
     _local_impl->Name(theName);
   }
-  else _corba_impl->Name((char*)theName.c_str());
+  else _corba_impl->Name(Kernel_Utils::decode_s(theName));
 }
 
 bool SALOMEDS_Study::IsSaved()
@@ -503,7 +559,8 @@ std::string SALOMEDS_Study::URL()
     SALOMEDS::Locker lock;
     aURL = _local_impl->URL();
   }
-  else aURL = _corba_impl->URL();
+  else 
+      aURL = Kernel_Utils::encode_s(_corba_impl->URL());
   return aURL;
 }
 
@@ -513,27 +570,7 @@ void SALOMEDS_Study::URL(const std::string& url)
     SALOMEDS::Locker lock;
     _local_impl->URL(url);
   }
-  else _corba_impl->URL((char*)url.c_str());
-}
-
-int SALOMEDS_Study::StudyId()
-{
-  int anID;
-  if (_isLocal) {
-    SALOMEDS::Locker lock;
-    anID = _local_impl->StudyId();
-  }
-  else anID = _corba_impl->StudyId();
-  return anID;
-}
-void SALOMEDS_Study::StudyId(int id) 
-{
-  if (_isLocal) {
-    SALOMEDS::Locker lock;
-    _local_impl->StudyId(id);
-  }
-  else _corba_impl->StudyId(id);  
+  else _corba_impl->URL(Kernel_Utils::decode_s(url));
 }
 
 std::vector<_PTR(SObject)> SALOMEDS_Study::FindDependances(const _PTR(SObject)& theSO)
@@ -614,15 +651,6 @@ _PTR(UseCaseBuilder) SALOMEDS_Study::GetUseCaseBuilder()
   return _PTR(UseCaseBuilder)(aUB);
 }
 
-void SALOMEDS_Study::Close()
-{
-  if (_isLocal) {
-    SALOMEDS::Locker lock;
-    _local_impl->Close();
-  }
-  else _corba_impl->Close();
-}
-
 void SALOMEDS_Study::EnableUseCaseAutoFilling(bool isEnabled)
 {
   if(_isLocal) _local_impl->EnableUseCaseAutoFilling(isEnabled);
@@ -634,10 +662,10 @@ bool SALOMEDS_Study::DumpStudy(const std::string& thePath,
                                bool isPublished,
                                bool isMultiFile)
 {
-  //SRN: Pure CORBA DumpStudy as it does more cleaning than the local one
-  if(CORBA::is_nil(_corba_impl)) GetStudy(); //If CORBA implementation is null then retrieve it
-  bool ret = _corba_impl->DumpStudy(thePath.c_str(), theBaseName.c_str(), isPublished, isMultiFile);
-  return ret;
+  if(CORBA::is_nil(_corba_impl))
+    return false;
+
+  return _corba_impl->DumpStudy(thePath.c_str(), theBaseName.c_str(), isPublished, isMultiFile);
 }     
 
 void SALOMEDS_Study::SetStudyLock(const std::string& theLockerID)
@@ -938,40 +966,6 @@ CORBA::Object_ptr SALOMEDS_Study::ConvertIORToObject(const std::string& theIOR)
   return _orb->string_to_object(theIOR.c_str()); 
 } 
 
-void SALOMEDS_Study::init_orb()
-{
-  ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance() ;
-  ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting()); 
-  _orb = init(0 , 0 ) ;     
-}
-
-SALOMEDS::Study_ptr SALOMEDS_Study::GetStudy()
-{
-  if (_isLocal) {
-    SALOMEDS::Locker lock;
-
-    if (!CORBA::is_nil(_corba_impl)) return SALOMEDS::Study::_duplicate(_corba_impl);
-    std::string anIOR = _local_impl->GetTransientReference();
-    SALOMEDS::Study_var aStudy;
-    if (!_local_impl->IsError() && anIOR != "") {
-      aStudy = SALOMEDS::Study::_narrow(_orb->string_to_object(anIOR.c_str()));
-    }
-    else {
-      SALOMEDS_Study_i *aStudy_servant = new SALOMEDS_Study_i(_local_impl, _orb);
-      aStudy = aStudy_servant->_this();
-      _local_impl->SetTransientReference(_orb->object_to_string(aStudy));
-    }
-    _corba_impl = SALOMEDS::Study::_duplicate(aStudy);
-    return aStudy._retn();
-  }
-  else {
-    return SALOMEDS::Study::_duplicate(_corba_impl);
-  }
-
-  return SALOMEDS::Study::_nil();
-}
-
-
 _PTR(AttributeParameter) SALOMEDS_Study::GetCommonParameters(const std::string& theID, int theSavePoint)
 {
   SALOMEDSClient_AttributeParameter* AP = NULL;
@@ -1005,12 +999,16 @@ _PTR(AttributeParameter) SALOMEDS_Study::GetModuleParameters(const std::string&
 
 void SALOMEDS_Study::attach(SALOMEDS::Observer_ptr theObserver,bool modify)
 {
-  if(CORBA::is_nil(_corba_impl)) GetStudy(); //If CORBA implementation is null then retrieve it
+  if(CORBA::is_nil(_corba_impl))
+    return;
+
   _corba_impl->attach(theObserver,modify);
 }
 
 void SALOMEDS_Study::detach(SALOMEDS::Observer_ptr theObserver)
 {
-  if(CORBA::is_nil(_corba_impl)) GetStudy(); //If CORBA implementation is null then retrieve it
+  if(CORBA::is_nil(_corba_impl))
+    return;
+
   _corba_impl->detach(theObserver);
 }
index af663d63373fefac1e4c9c5d8995c98425f8ca38..affbad4fcb48764803aaa502b04c844f1f4bc7c8 100644 (file)
@@ -52,8 +52,20 @@ public:
   SALOMEDS_Study(SALOMEDS::Study_ptr theStudy);
   ~SALOMEDS_Study();
 
+  virtual void Clear();
+  virtual void Init();
+
+  virtual bool Open(const std::string& theStudyUrl);
+
+  virtual bool Save(bool theMultiFile, bool theASCII);
+  virtual bool SaveAs(const std::string& theUrl, bool theMultiFile, bool theASCII);
+
+  virtual bool CanCopy(const _PTR(SObject)& theSO);
+  virtual bool Copy(const _PTR(SObject)& theSO);
+  virtual bool CanPaste(const _PTR(SObject)& theSO);
+  virtual _PTR(SObject) Paste(const _PTR(SObject)& theSO);
+
   virtual std::string GetPersistentReference();
-  virtual std::string GetTransientReference();
   virtual bool IsEmpty();
   virtual _PTR(SComponent) FindComponent (const std::string& aComponentName);
   virtual _PTR(SComponent) FindComponentID(const std::string& aComponentID);
@@ -64,12 +76,6 @@ public:
   virtual _PTR(SObject) FindObjectIOR(const std::string& anObjectIOR);
   virtual _PTR(SObject) FindObjectByPath(const std::string& thePath);
   virtual std::string GetObjectPath(const _PTR(SObject)& theSO);
-  virtual void SetContext(const std::string& thePath);
-  virtual std::string GetContext();  
-  virtual std::vector<std::string> GetObjectNames(const std::string& theContext);
-  virtual std::vector<std::string> GetDirectoryNames(const std::string& theContext);
-  virtual std::vector<std::string> GetFileNames(const std::string& theContext);
-  virtual std::vector<std::string> GetComponentNames(const std::string& theContext);
   virtual _PTR(ChildIterator) NewChildIterator(const _PTR(SObject)& theSO);
   virtual _PTR(SComponentIterator) NewComponentIterator();
   virtual _PTR(StudyBuilder) NewBuilder();
@@ -81,14 +87,11 @@ public:
   virtual void Modified();
   virtual std::string URL();
   virtual void  URL(const std::string& url);
-  virtual int StudyId();
-  virtual void  StudyId(int id);
   virtual std::vector<_PTR(SObject)> FindDependances(const _PTR(SObject)& theSO);
   virtual _PTR(AttributeStudyProperties) GetProperties();
   virtual std::string GetLastModificationDate();
   virtual std::vector<std::string> GetModificationsDate();
   virtual _PTR(UseCaseBuilder) GetUseCaseBuilder();
-  virtual void Close();
   virtual void EnableUseCaseAutoFilling(bool isEnabled);
   virtual bool DumpStudy(const std::string& thePath,const std::string& theBaseName,bool isPublished,bool isMultiFile); 
   virtual _PTR(AttributeParameter) GetCommonParameters(const std::string& theID, int theSavePoint);
@@ -127,13 +130,11 @@ public:
 
   std::string ConvertObjectToIOR(CORBA::Object_ptr theObject);
   CORBA::Object_ptr ConvertIORToObject(const std::string& theIOR);     
-
-  SALOMEDS::Study_ptr GetStudy();
   
   SALOMEDSImpl_Study* GetLocalImpl() { return _local_impl; }
-  
+
 private:
-  void init_orb();
+  void InitORB();
 
 };
 #endif
index f23777af12fda26bbf3ff4aff6cd8f2c73e7e522..c67b195731aa66b4007ec4254b339a8da8a76140 100644 (file)
@@ -32,7 +32,6 @@
 #include "SALOMEDS_SObject.hxx"
 #include "SALOMEDS_SComponent.hxx"
 #include "SALOMEDS_GenericAttribute.hxx"
-#include "SALOMEDS_StudyManager.hxx"
 #include "SALOMEDS_StudyBuilder_i.hxx"
 
 #include "SALOMEDS_Driver_i.hxx"
@@ -171,23 +170,6 @@ _PTR(SObject) SALOMEDS_StudyBuilder::NewObjectToTag(const _PTR(SObject)& theFath
   return _PTR(SObject)(aSO);
 }
 
-void SALOMEDS_StudyBuilder::AddDirectory(const std::string& thePath)
-{
-  if (_isLocal) {
-    CheckLocked();
-    SALOMEDS::Locker lock;
-
-    _local_impl->AddDirectory((char*)thePath.c_str());
-    if (_local_impl->IsError()) {
-      std::string anErrorCode = _local_impl->GetErrorCode();
-      if (anErrorCode == "StudyNameAlreadyUsed")  throw SALOMEDS::Study::StudyNameAlreadyUsed(); 
-      if (anErrorCode == "StudyInvalidDirectory") throw SALOMEDS::Study::StudyInvalidDirectory(); 
-      if (anErrorCode == "StudyInvalidComponent") throw SALOMEDS::Study::StudyInvalidComponent();  
-    }
-  }
-  else _corba_impl->AddDirectory((char*)thePath.c_str());
-}
-
 void SALOMEDS_StudyBuilder::LoadWith(const _PTR(SComponent)& theSCO, const std::string& theIOR)
 {
   if(!theSCO) return;
index b7e3a616078aa80fe7f3c4ef84a0170720a737a7..a57ab0a516cffeb46f60e8c5b6b9a4964279f7fb 100644 (file)
@@ -55,7 +55,6 @@ public:
   virtual void RemoveComponent(const _PTR(SComponent)& theSCO);
   virtual _PTR(SObject) NewObject(const _PTR(SObject)& theFatherObject);
   virtual _PTR(SObject) NewObjectToTag(const _PTR(SObject)& theFatherObject, int theTag);
-  virtual void AddDirectory(const std::string& thePath);
   virtual void LoadWith(const _PTR(SComponent)& theSCO, const std::string& theIOR);
   virtual void Load(const _PTR(SObject)& theSCO);
   virtual void RemoveObject(const _PTR(SObject)& theSO);
index a31fda64c6d16eebd6a2ce09bac1eec4228a136b..9ba49a3264f4d9b015a836287f7dbbc6e50758ac 100644 (file)
@@ -320,26 +320,6 @@ void SALOMEDS_StudyBuilder_i::RemoveReference(SALOMEDS::SObject_ptr me)
   _impl->RemoveReference(aSO);
 }
 
-
-//============================================================================
-/*! Function : AddDirectory
- *  Purpose  : adds a new directory with a path = thePath
- */
-//============================================================================
-void SALOMEDS_StudyBuilder_i::AddDirectory(const char* thePath) 
-{
-  SALOMEDS::Locker lock;
-  CheckLocked();
-  if(thePath == NULL || strlen(thePath) == 0) throw SALOMEDS::Study::StudyInvalidDirectory();
-  if(!_impl->AddDirectory(std::string(thePath))) {
-    std::string anErrorCode = _impl->GetErrorCode();
-    if(anErrorCode == "StudyNameAlreadyUsed") throw SALOMEDS::Study::StudyNameAlreadyUsed(); 
-    if(anErrorCode == "StudyInvalidDirectory") throw SALOMEDS::Study::StudyInvalidDirectory(); 
-    if(anErrorCode == "StudyInvalidComponent") throw SALOMEDS::Study::StudyInvalidComponent();  
-  }
-}
-
-
 //============================================================================
 /*! Function : SetGUID
  *  Purpose  : 
index d4c30fb74bf155ada22b44a6f972487692e503e8..07778737b498e230e72c9719d97405aeec542992 100644 (file)
@@ -88,11 +88,6 @@ public:
   */
   virtual SALOMEDS::SObject_ptr NewObjectToTag(SALOMEDS::SObject_ptr theFatherObject, CORBA::Long atag);
 
-  /*!
-    The methods adds a new subdirectory, the path can be absolute or relative (then the current context is used)
-  */
-  virtual void AddDirectory(const char* thePath);
-
   virtual void LoadWith(SALOMEDS::SComponent_ptr sco, SALOMEDS::Driver_ptr Engine)
     throw(SALOME::SALOME_Exception);
   virtual void Load(SALOMEDS::SObject_ptr sco);
diff --git a/src/SALOMEDS/SALOMEDS_StudyManager.cxx b/src/SALOMEDS/SALOMEDS_StudyManager.cxx
deleted file mode 100644 (file)
index ba0a8f2..0000000
+++ /dev/null
@@ -1,326 +0,0 @@
-// Copyright (C) 2007-2016  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, or (at your option) any later version.
-//
-// 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
-//
-
-//  File   : SALOMEDSClient_StudyManager.cxx
-//  Author : Sergey RUIN
-//  Module : SALOME
-//
-#include "SALOMEDS_StudyManager.hxx"
-
-#include "SALOMEDS.hxx"
-#include "SALOMEDS_Study.hxx"
-#include "SALOMEDS_SObject.hxx"
-#include "SALOMEDS_Driver_i.hxx"
-
-#include "SALOMEDSImpl_Study.hxx"
-
-#include "Utils_ORB_INIT.hxx"
-#include "Utils_SINGLETON.hxx"
-#include "utilities.h"
-
-#include "Basics_Utils.hxx"
-
-#ifdef WIN32
-#include <process.h>
-#else
-#include <sys/types.h>
-#include <unistd.h>
-#endif
-
-SALOMEDS_Driver_i* GetDriver(const SALOMEDSImpl_SObject& theObject, CORBA::ORB_ptr orb);
-
-SALOMEDS_StudyManager::SALOMEDS_StudyManager(SALOMEDS::StudyManager_ptr theManager)
-{
-
-#ifdef WIN32
-  long pid =  (long)_getpid();
-#else
-  long pid =  (long)getpid();
-#endif
-
-  CORBA::LongLong addr = theManager->GetLocalImpl(Kernel_Utils::GetHostname().c_str(), pid, _isLocal);
-  if(_isLocal) {
-    _local_impl = reinterpret_cast<SALOMEDSImpl_StudyManager*>(addr);
-    _corba_impl = SALOMEDS::StudyManager::_duplicate(theManager);
-  }
-  else {
-    _local_impl = NULL;
-    _corba_impl = SALOMEDS::StudyManager::_duplicate(theManager);
-  }
-
-  init_orb();
-}
-
-SALOMEDS_StudyManager::SALOMEDS_StudyManager()
-{
-  init_orb();
-
-  SALOME_NamingService namingService(_orb);
-  CORBA::Object_var obj = namingService.Resolve( "/myStudyManager" );
-  SALOMEDS::StudyManager_var theManager = SALOMEDS::StudyManager::_narrow( obj );
-  ASSERT( !CORBA::is_nil(theManager) );
-
-#ifdef WIN32
-  long pid =  (long)_getpid();
-#else
-  long pid =  (long)getpid();
-#endif
-
-  CORBA::LongLong addr = theManager->GetLocalImpl(Kernel_Utils::GetHostname().c_str(), pid, _isLocal);
-  if(_isLocal) {
-    _local_impl = reinterpret_cast<SALOMEDSImpl_StudyManager*>(addr);
-    _corba_impl = SALOMEDS::StudyManager::_duplicate(theManager);
-  }
-  else {
-    _local_impl = NULL;
-    _corba_impl = SALOMEDS::StudyManager::_duplicate(theManager);
-  }
-}
-
-SALOMEDS_StudyManager::~SALOMEDS_StudyManager()
-{
-}
-
-_PTR(Study) SALOMEDS_StudyManager::NewStudy(const std::string& study_name)
-{
-  //SRN: Pure CORBA NewStudy as it does more initialization than the local one
-  SALOMEDSClient_Study* aStudy = NULL;
-
-  SALOMEDS::Study_var aStudy_impl = _corba_impl->NewStudy((char*)study_name.c_str());
-  if(CORBA::is_nil(aStudy_impl)) return _PTR(Study)(aStudy);
-  aStudy = new SALOMEDS_Study(aStudy_impl);
-
-  return _PTR(Study)(aStudy);
-}
-
-_PTR(Study) SALOMEDS_StudyManager::Open(const std::string& theStudyUrl)
-{
-  //SRN: Pure CORBA Open as it does more initialization than the local one
-  SALOMEDSClient_Study* aStudy = NULL;
-
-  SALOMEDS::Study_var aStudy_impl = _corba_impl->Open((char*)theStudyUrl.c_str());
-  if(CORBA::is_nil(aStudy_impl)) return  _PTR(Study)(aStudy);
-
-  aStudy = new SALOMEDS_Study(aStudy_impl.in());
-
-  return _PTR(Study)(aStudy);
-}
-
-void SALOMEDS_StudyManager::Close(const _PTR(Study)& theStudy)
-{
-  //SRN: Pure CORBA close as it does more cleaning than the local one
-  SALOMEDS::Study_var aStudy = _corba_impl->GetStudyByID(theStudy->StudyId());
-  _corba_impl->Close(aStudy);
-}
-
-bool SALOMEDS_StudyManager::Save(const _PTR(Study)& theStudy, bool theMultiFile)
-{
-  //SRN: Pure CORBA save as the save operation require CORBA in any case
-  SALOMEDS::Study_var aStudy = _corba_impl->GetStudyByID(theStudy->StudyId());
-  return _corba_impl->Save(aStudy, theMultiFile);
-}
-
-bool SALOMEDS_StudyManager::SaveASCII(const _PTR(Study)& theStudy, bool theMultiFile)
-{
-  //SRN: Pure CORBA save as the save operation require CORBA in any case
-  SALOMEDS::Study_var aStudy = _corba_impl->GetStudyByID(theStudy->StudyId());
-  return _corba_impl->SaveASCII(aStudy, theMultiFile);
-}
-
-bool SALOMEDS_StudyManager::SaveAs(const std::string& theUrl,  const _PTR(Study)& theStudy, bool theMultiFile)
-{
-  //SRN: Pure CORBA save as the save operation require CORBA in any case
-  SALOMEDS::Study_var aStudy = _corba_impl->GetStudyByID(theStudy->StudyId());
-  return _corba_impl->SaveAs((char*)theUrl.c_str(), aStudy, theMultiFile);
-}
-
-bool SALOMEDS_StudyManager::SaveAsASCII(const std::string& theUrl,  const _PTR(Study)& theStudy, bool theMultiFile)
-{
-  //SRN: Pure CORBA save as the save operation require CORBA in any case
-  SALOMEDS::Study_var aStudy = _corba_impl->GetStudyByID(theStudy->StudyId());
-  return _corba_impl->SaveAsASCII((char*)theUrl.c_str(), aStudy, theMultiFile);
-}
-
-std::vector<std::string> SALOMEDS_StudyManager::GetOpenStudies()
-{
-  std::vector<std::string> aVector;
-  int aLength, i;
-
-  if (_isLocal) {
-    SALOMEDS::Locker lock;
-
-    std::vector<SALOMEDSImpl_Study*> aSeq = _local_impl->GetOpenStudies();
-    aLength = aSeq.size();
-    for(i = 0; i < aLength; i++)
-      aVector.push_back(aSeq[i]->Name());
-  }
-  else {
-    SALOMEDS::ListOfOpenStudies_var aSeq = _corba_impl->GetOpenStudies();
-    aLength = aSeq->length();
-    for(i = 0; i < aLength; i++)
-      aVector.push_back(aSeq[i].in());
-  }
-  return aVector;
-}
-
-_PTR(Study) SALOMEDS_StudyManager::GetStudyByName(const std::string& theStudyName)
-{
-  SALOMEDSClient_Study* aStudy = NULL;
-  if (_isLocal) {
-    SALOMEDS::Locker lock;
-
-    SALOMEDSImpl_Study* aStudy_impl = _local_impl->GetStudyByName(theStudyName);
-    if(!aStudy_impl) return _PTR(Study)(aStudy);
-    aStudy = new SALOMEDS_Study(aStudy_impl);
-  }
-  else  {
-    SALOMEDS::Study_var aStudy_impl = _corba_impl->GetStudyByName((char*)theStudyName.c_str());
-    if(CORBA::is_nil(aStudy_impl)) return _PTR(Study)(aStudy);
-    aStudy = new SALOMEDS_Study(aStudy_impl);
-  }
-  return _PTR(Study)(aStudy);
-}
-
-_PTR(Study) SALOMEDS_StudyManager::GetStudyByID(int theStudyID)
-{
-  SALOMEDSClient_Study* aStudy = NULL;
-  if (_isLocal) {
-    SALOMEDS::Locker lock;
-
-    SALOMEDSImpl_Study* aStudy_impl = _local_impl->GetStudyByID(theStudyID);
-    if(!aStudy_impl) return _PTR(Study)(aStudy);
-    aStudy = new SALOMEDS_Study(aStudy_impl);
-  }
-  else {
-    SALOMEDS::Study_var aStudy_impl = _corba_impl->GetStudyByID(theStudyID);
-    if(CORBA::is_nil(aStudy_impl)) return _PTR(Study)(aStudy);
-    aStudy = new SALOMEDS_Study(aStudy_impl);
-  }
-  return _PTR(Study)(aStudy);
-}
-
-bool SALOMEDS_StudyManager::CanCopy(const _PTR(SObject)& theSO)
-{
-  SALOMEDS_SObject* aSO = dynamic_cast<SALOMEDS_SObject*>(theSO.get());
-  bool ret;
-
-  if (_isLocal) {
-    SALOMEDS::Locker lock;
-
-    SALOMEDSImpl_SObject aSO_impl = *(aSO->GetLocalImpl());
-    SALOMEDS_Driver_i* aDriver = GetDriver(aSO_impl, _orb);
-    ret = _local_impl->CanCopy(aSO_impl, aDriver);
-    delete aDriver;
-  }
-  else {
-    ret = _corba_impl->CanCopy(aSO->GetCORBAImpl());
-  }
-
-  return ret;
-}
-
-bool SALOMEDS_StudyManager::Copy(const _PTR(SObject)& theSO)
-{
-  SALOMEDS_SObject* aSO = dynamic_cast<SALOMEDS_SObject*>(theSO.get());
-  bool ret;
-  if (_isLocal) {
-    SALOMEDS::Locker lock;
-
-    SALOMEDSImpl_SObject aSO_impl = *(aSO->GetLocalImpl());
-    SALOMEDS_Driver_i* aDriver = GetDriver(aSO_impl, _orb);
-    ret = _local_impl->Copy(aSO_impl, aDriver);
-    delete aDriver;
-  }
-  else {
-    ret = _corba_impl->Copy(aSO->GetCORBAImpl());
-  }
-  return ret;
-}
-
-bool SALOMEDS_StudyManager::CanPaste(const _PTR(SObject)& theSO)
-{
-  SALOMEDS_SObject* aSO = dynamic_cast<SALOMEDS_SObject*>(theSO.get());
-  bool ret;
-
-  if (_isLocal) {
-    SALOMEDS::Locker lock;
-
-    SALOMEDSImpl_SObject aSO_impl = *(aSO->GetLocalImpl());
-    SALOMEDS_Driver_i* aDriver = GetDriver(aSO_impl, _orb);
-    ret = _local_impl->CanPaste(aSO_impl, aDriver);
-    delete aDriver;
-  }
-  else {
-    ret = _corba_impl->CanPaste(aSO->GetCORBAImpl());
-  }
-
-  return ret;
-}
-
-_PTR(SObject) SALOMEDS_StudyManager::Paste(const _PTR(SObject)& theSO)
-{
-  SALOMEDS_SObject* aSO = dynamic_cast<SALOMEDS_SObject*>(theSO.get());
-  SALOMEDSClient_SObject* aResult = NULL;
-
-  if (_isLocal) {
-    SALOMEDS::Locker lock;
-
-    SALOMEDSImpl_SObject aSO_impl = *(aSO->GetLocalImpl());
-    SALOMEDS_Driver_i* aDriver = GetDriver(aSO_impl, _orb);
-    SALOMEDSImpl_SObject aNewSO = _local_impl->Paste(aSO_impl, aDriver);
-    delete aDriver;
-    if(aNewSO.IsNull()) return _PTR(SObject)(aResult);
-    aResult = new SALOMEDS_SObject(aNewSO);
-  }
-  else {
-    SALOMEDS::SObject_ptr aNewSO = _corba_impl->Paste(aSO->GetCORBAImpl());
-    if(CORBA::is_nil(aNewSO)) return _PTR(SObject)(aResult);
-    aResult = new SALOMEDS_SObject(aNewSO);
-  }
-
-  return _PTR(SObject)(aResult);
-}
-
-
-void SALOMEDS_StudyManager::init_orb()
-{
-  ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance();
-  ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
-  _orb = init(0 , 0 );
-}
-
-SALOMEDS_Driver_i* GetDriver(const SALOMEDSImpl_SObject& theObject, CORBA::ORB_ptr orb)
-{
-  SALOMEDS_Driver_i* driver = NULL;
-
-  SALOMEDSImpl_SComponent aSCO = theObject.GetFatherComponent();
-  if(!aSCO.IsNull()) {
-    std::string IOREngine = aSCO.GetIOR();
-    if(!IOREngine.empty()) {
-      CORBA::Object_var obj = orb->string_to_object(IOREngine.c_str());
-      Engines::EngineComponent_var Engine = Engines::EngineComponent::_narrow(obj) ;
-      driver = new SALOMEDS_Driver_i(Engine, orb);
-    }
-  }
-
-  return driver;
-}
diff --git a/src/SALOMEDS/SALOMEDS_StudyManager.hxx b/src/SALOMEDS/SALOMEDS_StudyManager.hxx
deleted file mode 100644 (file)
index 6006761..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright (C) 2007-2016  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, or (at your option) any later version.
-//
-// 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
-//
-
-//  File   : SALOMEDS_StudyManager.hxx
-//  Author : Sergey RUIN
-//  Module : SALOME
-//
-#ifndef __SALOMEDS_STUDYMANAGER_H__
-#define __SALOMEDS_STUDYMANAGER_H__
-
-#include <vector>
-#include <string>
-
-#include "SALOMEDSClient.hxx"
-#include "SALOMEDSImpl_StudyManager.hxx"
-
-// IDL headers
-
-#include <SALOMEconfig.h>
-#include CORBA_SERVER_HEADER(SALOMEDS)
-
-class Standard_EXPORT SALOMEDS_StudyManager: public SALOMEDSClient_StudyManager
-{
-private:
-  bool                              _isLocal;
-  SALOMEDSImpl_StudyManager*        _local_impl;
-  SALOMEDS::StudyManager_var        _corba_impl;
-  CORBA::ORB_var                    _orb;
-
-public:
-
-  SALOMEDS_StudyManager(SALOMEDS::StudyManager_ptr theManager);
-  SALOMEDS_StudyManager();
-  ~SALOMEDS_StudyManager();
-
-  virtual _PTR(Study) NewStudy(const std::string& study_name);
-  virtual _PTR(Study) Open(const std::string& theStudyUrl);
-  virtual void Close(const _PTR(Study)& theStudy);
-  virtual bool Save(const _PTR(Study)& theStudy, bool theMultiFile);
-  virtual bool SaveASCII(const _PTR(Study)& theStudy, bool theMultiFile);
-  virtual bool SaveAs(const std::string& theUrl,  const _PTR(Study)& theStudy, bool theMultiFile);
-  virtual bool SaveAsASCII(const std::string& theUrl,  const _PTR(Study)& theStudy, bool theMultiFile);
-  virtual std::vector<std::string> GetOpenStudies();
-  virtual _PTR(Study) GetStudyByName(const std::string& theStudyName) ;
-  virtual _PTR(Study) GetStudyByID(int theStudyID) ;
-  virtual bool CanCopy(const _PTR(SObject)& theSO);
-  virtual bool Copy(const _PTR(SObject)& theSO);
-  virtual bool CanPaste(const _PTR(SObject)& theSO);
-  virtual _PTR(SObject) Paste(const _PTR(SObject)& theSO);
-
-private:
-  void init_orb();
-};
-
-#endif
diff --git a/src/SALOMEDS/SALOMEDS_StudyManager_i.cxx b/src/SALOMEDS/SALOMEDS_StudyManager_i.cxx
deleted file mode 100644 (file)
index c5eefdf..0000000
+++ /dev/null
@@ -1,535 +0,0 @@
-// Copyright (C) 2007-2016  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, or (at your option) any later version.
-//
-// 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
-//
-
-//  File   : SALOMEDS_StudyManager_i.cxx
-//  Author : Sergey RUIN
-//  Module : SALOME
-//
-#include "utilities.h"
-#include "SALOME_LifeCycleCORBA.hxx"
-#include "SALOMEDS_StudyManager_i.hxx"
-#include "SALOMEDS_Study_i.hxx"
-#include "SALOMEDS_SComponent_i.hxx"
-#include "SALOMEDS_Driver_i.hxx"
-#include "SALOMEDS.hxx"
-
-#include "SALOMEDSImpl_Study.hxx"
-#include "SALOMEDSImpl_SObject.hxx"
-#include "SALOMEDSImpl_SComponent.hxx"
-#include "SALOMEDSImpl_AttributeIOR.hxx"
-
-#include "Utils_CorbaException.hxx"
-#include "Utils_ExceptHandlers.hxx"
-#include "Basics_Utils.hxx"
-#include "SALOME_GenericObj_i.hh"
-
-#include <sstream>
-#include <vector>
-#include <map>
-
-#ifdef WIN32
-#include <process.h>
-#else
-#include <sys/types.h>
-#include <unistd.h>
-#endif
-
-UNEXPECT_CATCH(SalomeException,SALOME::SALOME_Exception);
-UNEXPECT_CATCH(LockProtection, SALOMEDS::StudyBuilder::LockProtection);
-
-static SALOMEDS_Driver_i* GetDriver(const SALOMEDSImpl_SObject& theObject, CORBA::ORB_ptr orb);
-
-static std::map<int, PortableServer::POA_ptr> _mapOfPOA;
-
-//============================================================================
-/*! Function : SALOMEDS_StudyManager_i
- *  Purpose  : SALOMEDS_StudyManager_i constructor
- */
-//============================================================================
-SALOMEDS_StudyManager_i::SALOMEDS_StudyManager_i(CORBA::ORB_ptr orb, PortableServer::POA_ptr thePOA)
-{
-  _orb = CORBA::ORB::_duplicate(orb);
-  _poa = PortableServer::POA::_duplicate(thePOA);
-  _name_service = new SALOME_NamingService(_orb);
-  // Study directory creation in the naming service : to register all
-  // open studies in the session
-  _name_service->Create_Directory("/Study");
-  _impl = new SALOMEDSImpl_StudyManager;
-  _factory = new SALOMEDS_DriverFactory_i(_orb);
-}
-
-//============================================================================
-/*! Function : ~SALOMEDS_StudyManager_i
- *  Purpose  : SALOMEDS_StudyManager_i destructor
- */
-//============================================================================
-SALOMEDS_StudyManager_i::~SALOMEDS_StudyManager_i()
-{
-  // Destroy directory to register open studies
-  _name_service->Destroy_Directory("/Study");
-  delete _name_service;
-  delete _factory;
-  delete _impl;
-}
-
-//============================================================================
-/*! Function : register_name
- *  Purpose  : Register the study Manager in the naming service under the
- *             context name
- */
-//============================================================================
-void SALOMEDS_StudyManager_i::register_name(const char * name)
-{
-  SALOMEDS::StudyManager_var aManager(_this());
-  _name_service->Register(aManager.in(), name);
-}
-
-
-//============================================================================
-/*! Function : NewStudy
- *  Purpose  : Create a New Study of name study_name
- */
-//============================================================================
-SALOMEDS::Study_ptr SALOMEDS_StudyManager_i::NewStudy(const char* study_name)
-     throw(SALOME::SALOME_Exception)
-{
-  SALOMEDS::Locker lock;
-
-#ifndef ALLOW_MULTI_STUDIES
-  std::vector<SALOMEDSImpl_Study*> anOpened = _impl->GetOpenStudies();
-  int aLength = anOpened.size();
-
-  if(aLength)
-    {
-      MESSAGE("There is already an active study in this session. Launch a new session, or close the study");
-      THROW_SALOME_CORBA_EXCEPTION("Problem on New Study.\nThere is already an active study in this session.\nLaunch a new session, or close the study", SALOME::BAD_PARAM)
-    }
-#endif // !ALLOW_MULTI_STUDIES
-
-  SALOMEDSImpl_Study* aStudyImpl = _impl->NewStudy(study_name);
-  if(!aStudyImpl) {
-    MESSAGE("NewStudy : Error : " << _impl->GetErrorCode());
-    return SALOMEDS::Study::_nil();
-  }
-
-  MESSAGE("NewStudy : Creating the CORBA servant holding it... ");
-
-  SALOMEDS_Study_i *Study_servant = SALOMEDS_Study_i::GetStudyServant(aStudyImpl, _orb);
-  PortableServer::ObjectId_var servantid = _poa->activate_object(Study_servant); // to use poa registered in _mapOfPOA
-  SALOMEDS::Study_var Study = Study_servant->_this();
-
-  // Register study in the naming service
-  // Path to access the study
-  if(!_name_service->Change_Directory("/Study"))
-      MESSAGE( "Unable to access the study directory" )
-  else
-      _name_service->Register(Study, study_name);
-
-  // Assign the value of the IOR in the study->root
-  CORBA::String_var IORStudy = _orb->object_to_string(Study);
-
-  aStudyImpl->SetTransientReference((char*)IORStudy.in());
-
-  _mapOfPOA[Study->StudyId()] = _poa;
-
-  return Study._retn();
-}
-
-//============================================================================
-/*! Function : Open
- *  Purpose  : Open a Study from it's persistent reference
- */
-//============================================================================
-SALOMEDS::Study_ptr  SALOMEDS_StudyManager_i::Open(const char* aUrl)
-     throw(SALOME::SALOME_Exception)
-{
-  SALOMEDS::Locker lock;
-
-  Unexpect aCatch(SalomeException);
-  MESSAGE("Begin of SALOMEDS_StudyManager_i::Open");
-
-  #ifndef ALLOW_MULTI_STUDIES
-  std::vector<SALOMEDSImpl_Study*> anOpened = _impl->GetOpenStudies();
-  int aLength = anOpened.size();
-
-  if(aLength)
-    {
-      MESSAGE("There is already an active study in this session. Launch a new session, or close the study.");
-      THROW_SALOME_CORBA_EXCEPTION("Problem on Open Study.\nThere is already an active study in this session.\nLaunch a new session, or close the study.", SALOME::BAD_PARAM)
-    }
-#endif // ;ALLOW_MULTI_STUDIES
-
-  SALOMEDSImpl_Study* aStudyImpl = _impl->Open(std::string(aUrl));
-
-  if ( !aStudyImpl )
-    THROW_SALOME_CORBA_EXCEPTION("Impossible to Open study from file", SALOME::BAD_PARAM)
-
-  MESSAGE("Open : Creating the CORBA servant holding it... ");
-
-  // Temporary aStudyUrl in place of study name
-  SALOMEDS_Study_i * Study_servant = SALOMEDS_Study_i::GetStudyServant(aStudyImpl, _orb);
-  PortableServer::ObjectId_var servantid = _poa->activate_object(Study_servant); // to use poa register in _mapOfPOA
-  SALOMEDS::Study_var Study = Study_servant->_this();
-
-  // Assign the value of the IOR in the study->root
-  CORBA::String_var IORStudy = _orb->object_to_string(Study);
-  aStudyImpl->SetTransientReference((char*)IORStudy.in());
-
-  _mapOfPOA[Study->StudyId()] = _poa;
-
-  // Register study in the naming service
-  // Path to access the study
-  if(!_name_service->Change_Directory("/Study")) MESSAGE( "Unable to access the study directory" )
-  else _name_service->Register(Study, aStudyImpl->Name().c_str());
-
-  return Study._retn();
-}
-
-
-
-//============================================================================
-/*! Function : Close
- *  Purpose  : Close a study.
- *             If the study hasn't been saved, ask the user to confirm the
- *             close action without saving
- */
-//============================================================================
-void SALOMEDS_StudyManager_i::Close(SALOMEDS::Study_ptr aStudy)
-{
-  SALOMEDS::Locker lock;
-
-  if(aStudy->_is_nil()) return;
-
-  // Destroy study name in the naming service
-  if(_name_service->Change_Directory("/Study")){
-    CORBA::String_var aString(aStudy->Name());
-    _name_service->Destroy_Name(aString.in());
-  }
-
-  SALOMEDS::unlock();
-  aStudy->Close();
-  SALOMEDS::lock();
-
-  //remove study servant
-  PortableServer::POA_ptr poa=GetPOA(aStudy);
-  PortableServer::ServantBase* aservant=poa->reference_to_servant(aStudy);
-  PortableServer::ObjectId_var anObjectId = poa->servant_to_id(aservant);
-  poa->deactivate_object(anObjectId.in());
-  aservant->_remove_ref(); // decrement for the call to reference_to_servant
-  aservant->_remove_ref(); // to delete the object
-}
-
-//============================================================================
-/*! Function : Save
- *  Purpose  : Save a Study to it's persistent reference
- */
-//============================================================================
-CORBA::Boolean SALOMEDS_StudyManager_i::Save(SALOMEDS::Study_ptr aStudy, CORBA::Boolean theMultiFile)
-{
-  SALOMEDS::Locker lock;
-
-  if(aStudy->_is_nil()) {
-    MESSAGE("Save error: Study is null");
-    return false;
-  }
-
-  SALOMEDSImpl_Study* aStudyImpl = _impl->GetStudyByID(aStudy->StudyId());
-  return _impl->Save(aStudyImpl, _factory, theMultiFile);
-}
-
-CORBA::Boolean SALOMEDS_StudyManager_i::SaveASCII(SALOMEDS::Study_ptr aStudy, CORBA::Boolean theMultiFile)
-{
-  SALOMEDS::Locker lock;
-
-  if(aStudy->_is_nil()) {
-    MESSAGE("SaveASCII error: Study is null");
-    return false;
-  }
-
-  SALOMEDSImpl_Study* aStudyImpl = _impl->GetStudyByID(aStudy->StudyId());
-  return _impl->SaveASCII(aStudyImpl, _factory, theMultiFile);
-}
-
-//=============================================================================
-/*! Function : SaveAs
- *  Purpose  : Save a study to the persistent reference aUrl
- */
-//============================================================================
-CORBA::Boolean SALOMEDS_StudyManager_i::SaveAs(const char* aUrl, SALOMEDS::Study_ptr aStudy, CORBA::Boolean theMultiFile)
-{
-  SALOMEDS::Locker lock;
-
-  if(aStudy->_is_nil()) {
-    MESSAGE("SaveASCII error: Study is null");
-    return false;
-  }
-
-  SALOMEDSImpl_Study* aStudyImpl = _impl->GetStudyByID(aStudy->StudyId());
-  return _impl->SaveAs(std::string(aUrl), aStudyImpl, _factory, theMultiFile);
-}
-
-CORBA::Boolean SALOMEDS_StudyManager_i::SaveAsASCII(const char* aUrl, SALOMEDS::Study_ptr aStudy, CORBA::Boolean theMultiFile)
-{
-  SALOMEDS::Locker lock;
-
-  if(aStudy->_is_nil()) {
-    MESSAGE("SaveASCII error: Study is null");
-    return false;
-  }
-
-  SALOMEDSImpl_Study* aStudyImpl = _impl->GetStudyByID(aStudy->StudyId());
-  return _impl->SaveAsASCII(std::string(aUrl), aStudyImpl, _factory, theMultiFile);
-}
-
-//============================================================================
-/*! Function : GetOpenStudies
- *  Purpose  : Get name list of open studies in the session
- */
-//============================================================================
-SALOMEDS::ListOfOpenStudies*  SALOMEDS_StudyManager_i::GetOpenStudies()
-{
-  SALOMEDS::Locker lock;
-
-  std::vector<SALOMEDSImpl_Study*> anOpened = _impl->GetOpenStudies();
-  int aLength = anOpened.size();
-
-  SALOMEDS::ListOfOpenStudies_var _list_open_studies = new SALOMEDS::ListOfOpenStudies;
-  _list_open_studies->length(aLength);
-
-  if(!aLength)
-    {
-      MESSAGE("No active study in this session");
-    }
-  else
-    {
-      for (unsigned int ind=0; ind < aLength; ind++)
-        {
-          _list_open_studies[ind] = CORBA::string_dup(anOpened[ind]->Name().c_str());
-          SCRUTE(_list_open_studies[ind]) ;
-        }
-    }
-  return _list_open_studies._retn();
-}
-
-//============================================================================
-/*! Function : GetStudyByName
- *  Purpose  : Get a study from its name
- */
-//============================================================================
-SALOMEDS::Study_ptr SALOMEDS_StudyManager_i::GetStudyByName(const char* aStudyName)
-{
-  SALOMEDS::Locker lock;
-
-  SALOMEDSImpl_Study* aStudyImpl = _impl->GetStudyByName(std::string(aStudyName));
-
-  if (!aStudyImpl)
-  {
-    MESSAGE(_impl->GetErrorCode().c_str());
-    return SALOMEDS::Study::_nil();
-  }
-
-  SALOMEDS_Study_i* aStudy_servant = SALOMEDS_Study_i::GetStudyServant(aStudyImpl, _orb);
-  return aStudy_servant->_this();
-}
-
-//============================================================================
-/*! Function : GetStudyByID
- *  Purpose  : Get a study from its ID
- */
-//============================================================================
-SALOMEDS::Study_ptr SALOMEDS_StudyManager_i::GetStudyByID(CORBA::Short aStudyID)
-{
-  SALOMEDS::Locker lock;
-
-  SALOMEDSImpl_Study* aStudyImpl = _impl->GetStudyByID(aStudyID);
-
-  if (!aStudyImpl)
-  {
-    MESSAGE(_impl->GetErrorCode().c_str());
-    return SALOMEDS::Study::_nil();
-  }
-
-  SALOMEDS_Study_i* aStudy_servant = SALOMEDS_Study_i::GetStudyServant(aStudyImpl, _orb);
-  return aStudy_servant->_this();
-}
-
-
-//============================================================================
-/*! Function : CanCopy
- *  Purpose  :
- */
-//============================================================================
-CORBA::Boolean SALOMEDS_StudyManager_i::CanCopy(SALOMEDS::SObject_ptr theObject)
-{
-  SALOMEDS::Locker lock;
-
-  SALOMEDS::Study_var aStudy = theObject->GetStudy();
-  SALOMEDSImpl_Study* aStudyImpl = _impl->GetStudyByID(aStudy->StudyId());
-  CORBA::String_var anID = theObject->GetID();
-  SALOMEDSImpl_SObject anObject = aStudyImpl->GetSObject(anID.in());
-
-  SALOMEDS_Driver_i* aDriver = GetDriver(anObject, _orb);
-  bool ret = _impl->CanCopy(anObject, aDriver);
-  delete aDriver;
-  return ret;
-}
-
-//============================================================================
-/*! Function : Copy
- *  Purpose  :
- */
-//============================================================================
-CORBA::Boolean SALOMEDS_StudyManager_i::Copy(SALOMEDS::SObject_ptr theObject)
-{
-  SALOMEDS::Locker lock;
-
-  SALOMEDS::Study_var aStudy = theObject->GetStudy();
-  SALOMEDSImpl_Study* aStudyImpl = _impl->GetStudyByID(aStudy->StudyId());
-  CORBA::String_var anID = theObject->GetID();
-  SALOMEDSImpl_SObject anObject = aStudyImpl->GetSObject(anID.in());
-
-  SALOMEDS_Driver_i* aDriver = GetDriver(anObject, _orb);
-  bool ret = _impl->Copy(anObject, aDriver);
-  delete aDriver;
-  return ret;
-}
-
-//============================================================================
-/*! Function : CanPaste
- *  Purpose  :
- */
-//============================================================================
-CORBA::Boolean SALOMEDS_StudyManager_i::CanPaste(SALOMEDS::SObject_ptr theObject)
-{
-  SALOMEDS::Locker lock;
-
-  SALOMEDS::Study_var aStudy = theObject->GetStudy();
-  SALOMEDSImpl_Study* aStudyImpl = _impl->GetStudyByID(aStudy->StudyId());
-  CORBA::String_var anID = theObject->GetID();
-  SALOMEDSImpl_SObject anObject = aStudyImpl->GetSObject(anID.in());
-
-  SALOMEDS_Driver_i* aDriver = GetDriver(anObject, _orb);
-  bool ret = _impl->CanPaste(anObject, aDriver);
-  delete aDriver;
-  return ret;
-}
-
-//============================================================================
-/*! Function : Paste
- *  Purpose  :
- */
-//============================================================================
-SALOMEDS::SObject_ptr SALOMEDS_StudyManager_i::Paste(SALOMEDS::SObject_ptr theObject)
-     throw(SALOMEDS::StudyBuilder::LockProtection)
-{
-  SALOMEDS::Locker lock;
-
-  Unexpect aCatch(LockProtection);
-  SALOMEDS::Study_var aStudy = theObject->GetStudy();
-
-  SALOMEDSImpl_Study* aStudyImpl = _impl->GetStudyByID(aStudy->StudyId());
-  CORBA::String_var anID = theObject->GetID();
-  SALOMEDSImpl_SObject anObject = aStudyImpl->GetSObject(anID.in());
-  SALOMEDSImpl_SObject aNewSO;
-
-  try {
-    SALOMEDS_Driver_i* aDriver = GetDriver(anObject, _orb);
-    aNewSO =  _impl->Paste(anObject, aDriver);
-    delete aDriver;
-  }
-  catch (...) {
-    throw SALOMEDS::StudyBuilder::LockProtection();
-  }
-
-  SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (aNewSO, _orb);
-  return so._retn();
-}
-
-
-SALOMEDS_Driver_i* GetDriver(const SALOMEDSImpl_SObject& theObject, CORBA::ORB_ptr orb)
-{
-  SALOMEDS_Driver_i* driver = NULL;
-
-  SALOMEDSImpl_SComponent aSCO = theObject.GetFatherComponent();
-  if(!aSCO.IsNull()) {
-    std::string IOREngine = aSCO.GetIOR();
-    if(!IOREngine.empty()) {
-      CORBA::Object_var obj = orb->string_to_object(IOREngine.c_str());
-      Engines::EngineComponent_var Engine = Engines::EngineComponent::_narrow(obj) ;
-      driver = new SALOMEDS_Driver_i(Engine, orb);
-    }
-  }
-
-  return driver;
-}
-
-PortableServer::POA_ptr SALOMEDS_StudyManager_i::GetPOA(const SALOMEDS::Study_ptr theStudy) {
-  if (_mapOfPOA.find(theStudy->StudyId()) != _mapOfPOA.end()) return _mapOfPOA[theStudy->StudyId()];
-  return PortableServer::POA::_nil();
-}
-
-CORBA::Long SALOMEDS_StudyManager_i::getPID()
-{
-#ifdef WIN32
-  return (CORBA::Long)_getpid();
-#else
-  return (CORBA::Long)getpid();
-#endif
-}
-
-void SALOMEDS_StudyManager_i::ShutdownWithExit()
-{
-  exit( EXIT_SUCCESS );
-}
-
-//===========================================================================
-//   PRIVATE FUNCTIONS
-//===========================================================================
-CORBA::LongLong SALOMEDS_StudyManager_i::GetLocalImpl(const char* theHostname, CORBA::Long thePID, CORBA::Boolean& isLocal)
-{
-#ifdef WIN32
-  long pid = (long)_getpid();
-#else
-  long pid = (long)getpid();
-#endif
-  isLocal = (strcmp(theHostname, Kernel_Utils::GetHostname().c_str()) == 0 && pid == thePID)?1:0;
-  return reinterpret_cast<CORBA::LongLong>(_impl);
-}
-
-//===========================================================================
-namespace SALOMEDS
-{
-  PortableServer::ServantBase_var
-  GetServant(CORBA::Object_ptr theObject, PortableServer::POA_ptr thePOA)
-  {
-    if(CORBA::is_nil(theObject))
-      return NULL;
-    try{
-      return thePOA->reference_to_servant(theObject);
-    }catch(...){
-      return NULL;
-    }
-  }
-
-}
-
-//===========================================================================
diff --git a/src/SALOMEDS/SALOMEDS_StudyManager_i.hxx b/src/SALOMEDS/SALOMEDS_StudyManager_i.hxx
deleted file mode 100644 (file)
index ba1daf0..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright (C) 2007-2016  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, or (at your option) any later version.
-//
-// 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
-//
-
-//  File   : SALOMEDS_StudyManager_i.hxx
-//  Author : Sergey RUIN
-//  Module : SALOME
-//
-#ifndef __SALOMEDS_STUDYMANAGER_I_H__
-#define __SALOMEDS_STUDYMANAGER_I_H__
-
-// std C++ headers
-#include <iostream>
-
-#ifndef WIN32
-#include <unistd.h>
-#endif
-
-// IDL headers
-#include <SALOMEconfig.h>
-#include CORBA_SERVER_HEADER(SALOMEDS)
-
-// Naming Service header
-#include "SALOME_NamingService.hxx"
-
-#include <stdlib.h>
-
-#include "SALOMEDS_Driver_i.hxx"
-#include "SALOMEDSImpl_StudyManager.hxx"
-
-namespace SALOMEDS{
-
-  // To convert CORBA::Object to  PortableServer::ServantBase
-  PortableServer::ServantBase_var GetServant(CORBA::Object_ptr, PortableServer::POA_ptr);
-
-}
-
-class Standard_EXPORT SALOMEDS_StudyManager_i: public POA_SALOMEDS::StudyManager
-{
-private:
-
-  CORBA::ORB_var                    _orb;
-  PortableServer::POA_var           _poa;
-  SALOMEDSImpl_StudyManager*        _impl;
-  SALOME_NamingService*             _name_service;
-  SALOMEDS_DriverFactory_i*         _factory;
-
-public:
-
-  //! standard constructor
-  SALOMEDS_StudyManager_i(CORBA::ORB_ptr orb, PortableServer::POA_ptr thePOA);
-
-  //! standard destructor
-  virtual  ~SALOMEDS_StudyManager_i();
-
- //! method to Register study Manager in the naming service
-  /*!
-    \param char* arguments, the context to register the study manager in the NS
-  */
-  void register_name(const char * name);
-
- //! method to Create a New Study of name study_name
-  /*!
-    \param char* arguments, the new study name
-    \return Study_ptr arguments
-  */
-  virtual SALOMEDS::Study_ptr NewStudy(const char* study_name) throw (SALOME::SALOME_Exception);
-
-  //! method to Open a Study from it's persistent reference
-  /*!
-    \param char* arguments, the study URL
-    \return Study_ptr arguments
-  */
-  virtual SALOMEDS::Study_ptr Open(const char* aStudyUrl) throw (SALOME::SALOME_Exception);
-
-
-  //! method to close a Study
-  /*!
-    \param Study_ptr arguments
-  */
-  virtual void Close( SALOMEDS::Study_ptr aStudy);
-
-  //! method to save a Study
-  /*!
-    \param Study_ptr arguments
-  */
-  virtual CORBA::Boolean Save( SALOMEDS::Study_ptr aStudy, CORBA::Boolean theMultiFile);
-
-  virtual CORBA::Boolean SaveASCII( SALOMEDS::Study_ptr aStudy, CORBA::Boolean theMultiFile);
-
-  //! method to save a Study to the persistent reference aUrl
-  /*!
-    \param char* arguments, the new URL of the study
-    \param Study_ptr arguments
-  */
-  virtual CORBA::Boolean SaveAs(const char* aUrl,  SALOMEDS::Study_ptr aStudy, CORBA::Boolean theMultiFile);
-  virtual CORBA::Boolean SaveAsASCII(const char* aUrl,  SALOMEDS::Study_ptr aStudy, CORBA::Boolean theMultiFile);
-
- //! method to Get name list of open studies in the session
-  /*!
-    \return ListOfOpenStudies* arguments
-  */
-  virtual SALOMEDS::ListOfOpenStudies* GetOpenStudies();
-
-  //! method to get a Study from it's name
-  /*!
-    \param char* arguments, the study name
-    \return Study_ptr arguments
-  */
-  virtual SALOMEDS::Study_ptr GetStudyByName(const char* aStudyName) ;
-
-  //! method to get a Study from it's ID
-  /*!
-    \param char* arguments, the study ID
-    \return Study_ptr arguments
-  */
-  virtual SALOMEDS::Study_ptr GetStudyByID(CORBA::Short aStudyID) ;
-
-  virtual CORBA::Boolean CanCopy(SALOMEDS::SObject_ptr theObject);
-  virtual CORBA::Boolean Copy(SALOMEDS::SObject_ptr theObject);
-  virtual CORBA::Boolean CanPaste(SALOMEDS::SObject_ptr theObject);
-  virtual SALOMEDS::SObject_ptr Paste(SALOMEDS::SObject_ptr theObject) throw(SALOMEDS::StudyBuilder::LockProtection);
-
-  virtual char* ConvertObjectToIOR(CORBA::Object_ptr theObject) {return _orb->object_to_string(theObject); }
-  virtual CORBA::Object_ptr ConvertIORToObject(const char* theIOR) { return _orb->string_to_object(theIOR); };
-
-  void ping(){};
-  CORBA::Long getPID();
-  void ShutdownWithExit();
-
-  virtual CORBA::LongLong GetLocalImpl(const char* theHostname, CORBA::Long thePID, CORBA::Boolean& isLocal);
-
-  static PortableServer::POA_ptr GetPOA(const SALOMEDS::Study_ptr theStudy);
-
-  void Shutdown() { if(!CORBA::is_nil(_orb)) _orb->shutdown(0); }
-};
-
-#endif
index d0b936acc08a635d67697e4f9b2a857f180ef0fc..19abf1b64cd4e0a6278636dc4c9590f72c802073 100644 (file)
@@ -27,7 +27,6 @@
 #include "utilities.h"
 #include <sstream>
 #include "SALOMEDS_Study_i.hxx"
-#include "SALOMEDS_StudyManager_i.hxx"
 #include "SALOMEDS_UseCaseIterator_i.hxx"
 #include "SALOMEDS_GenericAttribute_i.hxx"
 #include "SALOMEDS_AttributeStudyProperties_i.hxx"
@@ -48,6 +47,8 @@
 #include "DF_Label.hxx"
 #include "DF_Attribute.hxx"
 
+#include "Utils_ExceptHandlers.hxx"
+
 #include "Basics_Utils.hxx"
 #include "SALOME_KernelServices.hxx"
 
 #include <unistd.h>
 #endif
 
+UNEXPECT_CATCH(SalomeException,SALOME::SALOME_Exception);
+UNEXPECT_CATCH(LockProtection, SALOMEDS::StudyBuilder::LockProtection);
+
+static SALOMEDS_Driver_i* GetDriver(const SALOMEDSImpl_SObject& theObject, CORBA::ORB_ptr orb);
+
 namespace SALOMEDS
 {
   class Notifier: public SALOMEDSImpl_AbstractCallback
@@ -159,10 +165,10 @@ namespace SALOMEDS
     {
       for (ObsListIter it (myObservers.begin()); it != myObservers.end(); ++it)
       {
-       if ( it->first->_is_equivalent(theObs) ) {
-         myObservers.erase( it );
-         break;
-       }
+           if ( it->first->_is_equivalent(theObs) ) {
+             myObservers.erase( it );
+             break;
+           }
       }
     }
 
@@ -219,25 +225,58 @@ namespace SALOMEDS
 
 } // namespace SALOMEDS
 
-std::map<SALOMEDSImpl_Study* , SALOMEDS_Study_i*> SALOMEDS_Study_i::_mapOfStudies;
-
 //============================================================================
 /*! Function : SALOMEDS_Study_i
  *  Purpose  : SALOMEDS_Study_i constructor
  */
 //============================================================================
-SALOMEDS_Study_i::SALOMEDS_Study_i(SALOMEDSImpl_Study* theImpl,
-                                   CORBA::ORB_ptr      orb)
+SALOMEDS_Study_i::SALOMEDS_Study_i(CORBA::ORB_ptr orb)
+{
+  _orb     = CORBA::ORB::_duplicate(orb);
+  _impl    = new SALOMEDSImpl_Study();
+  _factory = new SALOMEDS_DriverFactory_i(_orb);
+  _closed  = true;
+
+  Init();
+}
+
+//============================================================================
+/*! Function : ~SALOMEDS_Study_i
+ *  Purpose  : SALOMEDS_Study_i destructor
+ */
+//============================================================================
+SALOMEDS_Study_i::~SALOMEDS_Study_i()
+{
+  Clear();
+  delete _factory;
+  delete _impl;
+}
+
+//============================================================================
+/*! Function : Init
+ *  Purpose  : Initialize study components
+ */
+//============================================================================
+void SALOMEDS_Study_i::Init()
 {
-  _orb            = CORBA::ORB::_duplicate(orb);
-  _impl           = theImpl;
+  if (!_closed)
+    throw SALOMEDS::Study::StudyInvalidReference();
+
+  SALOMEDS::Locker lock;
+  
+  if ( !_impl->GetDocument() )
+    _impl->Init();
+
   _builder        = new SALOMEDS_StudyBuilder_i(_impl->NewBuilder(), _orb);  
   _notifier       = new SALOMEDS::Notifier(_orb);
   _genObjRegister = new SALOMEDS::GenObjRegister(_orb);
   _closed         = false;
 
-  theImpl->setNotifier(_notifier);
-  theImpl->setGenObjRegister( _genObjRegister );
+  _impl->setNotifier(_notifier);
+  _impl->setGenObjRegister( _genObjRegister );
+
+  // update desktop title with new study name
+  NameChanged();
 
   // Notify GUI that study was created
   SALOME_NamingService *aNamingService = KERNEL::getNamingService();
@@ -245,58 +284,261 @@ SALOMEDS_Study_i::SALOMEDS_Study_i(SALOMEDSImpl_Study* theImpl,
   SALOME::Session_var aSession = SALOME::Session::_narrow(obj);
   if ( !CORBA::is_nil(aSession) ) {
     std::stringstream ss;
-    ss << "studyCreated:" << theImpl->StudyId();
+    ss << "studyCreated";
     std::string str = ss.str();
     SALOMEDS::unlock();
     aSession->emitMessageOneWay(str.c_str());
     SALOMEDS::lock();
   }
 }
-  
+
 //============================================================================
-/*! Function : ~SALOMEDS_Study_i
- *  Purpose  : SALOMEDS_Study_i destructor
+/*! Function : Clear
+ *  Purpose  : Clear study components
  */
 //============================================================================
-SALOMEDS_Study_i::~SALOMEDS_Study_i()
+void SALOMEDS_Study_i::Clear()
 {
+  if (_closed)
+    return;
+
+  SALOMEDS::Locker lock;
+
   //delete the builder servant
   PortableServer::POA_var poa=_builder->_default_POA();
   PortableServer::ObjectId_var anObjectId = poa->servant_to_id(_builder);
   poa->deactivate_object(anObjectId.in());
   _builder->_remove_ref();
-  
+
+  RemovePostponed(-1);
+
+  if (_impl->GetDocument()) {
+    SALOMEDS::SComponentIterator_var itcomponent = NewComponentIterator();
+    for (; itcomponent->More(); itcomponent->Next()) {
+      SALOMEDS::SComponent_var sco = itcomponent->Value();
+      CORBA::String_var compodatatype=sco->ComponentDataType();
+      MESSAGE ( "Look for an engine for data type :"<< compodatatype);
+      // if there is an associated Engine call its method for closing
+      CORBA::String_var IOREngine;
+      if (sco->ComponentIOR(IOREngine)) {
+        // we have found the associated engine to write the data
+        MESSAGE ( "We have found an engine for data type :"<< compodatatype);
+        //_narrow can throw a corba exception
+        try {
+             CORBA::Object_var obj = _orb->string_to_object(IOREngine);
+             if (!CORBA::is_nil(obj)) {
+               SALOMEDS::Driver_var anEngine = SALOMEDS::Driver::_narrow(obj) ;
+               if (!anEngine->_is_nil())  {
+                 SALOMEDS::unlock();
+                 anEngine->Close(sco);
+                 SALOMEDS::lock();
+               }
+             }
+        }
+        catch (CORBA::Exception&) {
+        }
+      }
+      sco->UnRegister();
+    }
+
+    //Does not need any more this iterator
+    itcomponent->UnRegister();
+  }
+
+  // Notify GUI that study is cleared
+  SALOME_NamingService *aNamingService = KERNEL::getNamingService();
+  CORBA::Object_ptr obj = aNamingService->Resolve("/Kernel/Session");
+  SALOME::Session_var aSession = SALOME::Session::_narrow(obj);
+  if ( !CORBA::is_nil(aSession) ) {
+    std::stringstream ss;
+    ss << "studyCleared";
+    std::string str = ss.str();
+    SALOMEDS::unlock();
+    aSession->emitMessageOneWay(str.c_str());
+    SALOMEDS::lock();
+  }
+
+  _impl->Clear();
   _impl->setNotifier(0);
   delete _notifier;
   delete _genObjRegister;
-  //delete implementation
-  delete _impl;
-  _mapOfStudies.erase(_impl);
-}  
+  _notifier = NULL;
+
+  _closed = true;
+}
 
 //============================================================================
-/*! Function : GetPersistentReference
- *  Purpose  : Get persistent reference of study (idem URL())
+/*! Function : Open
+ *  Purpose  : Open a Study from it's persistent reference
  */
 //============================================================================
-char* SALOMEDS_Study_i::GetPersistentReference()
+bool SALOMEDS_Study_i::Open(const wchar_t* aWUrl)
+  throw(SALOME::SALOME_Exception)
 {
-  SALOMEDS::Locker lock; 
+  if (!_closed)
+    Clear();
+  Init();
+  SALOMEDS::Locker lock;
+
+  Unexpect aCatch(SalomeException);
+  MESSAGE("Begin of SALOMEDS_Study_i::Open");
+  
+  std::string aUrl = Kernel_Utils::encode_s(aWUrl);
+  bool res = _impl->Open(std::string(aUrl));
+
+  // update desktop title with new study name
+  NameChanged();
+
+  if ( !res )
+    THROW_SALOME_CORBA_EXCEPTION("Impossible to Open study from file", SALOME::BAD_PARAM)
+  return res;
+}
+
+//============================================================================
+/*! Function : Save
+ *  Purpose  : Save a Study to it's persistent reference
+ */
+//============================================================================
+CORBA::Boolean SALOMEDS_Study_i::Save(CORBA::Boolean theMultiFile, CORBA::Boolean theASCII)
+{
+  SALOMEDS::Locker lock;
   if (_closed)
-    throw SALOMEDS::Study::StudyInvalidReference();  
-  return CORBA::string_dup(_impl->GetPersistentReference().c_str());
+    throw SALOMEDS::Study::StudyInvalidReference();
+  return _impl->Save(_factory, theMultiFile, theASCII);
+}
+
+//=============================================================================
+/*! Function : SaveAs
+ *  Purpose  : Save a study to the persistent reference aUrl
+ */
+//============================================================================
+CORBA::Boolean SALOMEDS_Study_i::SaveAs(const wchar_t* aWUrl, CORBA::Boolean theMultiFile, CORBA::Boolean theASCII)
+{
+  SALOMEDS::Locker lock;
+  if (_closed)
+    throw SALOMEDS::Study::StudyInvalidReference();
+  
+  std::string aUrl = Kernel_Utils::encode_s(aWUrl);
+  return _impl->SaveAs(std::string(aUrl), _factory, theMultiFile, theASCII);
+}
+
+//============================================================================
+/*! Function : CanCopy
+ *  Purpose  :
+ */
+//============================================================================
+CORBA::Boolean SALOMEDS_Study_i::CanCopy(SALOMEDS::SObject_ptr theObject)
+{
+  SALOMEDS::Locker lock;
+  if (_closed)
+    throw SALOMEDS::Study::StudyInvalidReference();
+
+  CORBA::String_var anID = theObject->GetID();
+  SALOMEDSImpl_SObject anObject = _impl->GetSObject(anID.in());
+
+  SALOMEDS_Driver_i* aDriver = GetDriver(anObject, _orb);
+  bool ret = _impl->CanCopy(anObject, aDriver);
+  delete aDriver;
+  return ret;
+}
+
+//============================================================================
+/*! Function : Copy
+ *  Purpose  :
+ */
+//============================================================================
+CORBA::Boolean SALOMEDS_Study_i::Copy(SALOMEDS::SObject_ptr theObject)
+{
+  SALOMEDS::Locker lock;
+  if (_closed)
+    throw SALOMEDS::Study::StudyInvalidReference();
+
+  CORBA::String_var anID = theObject->GetID();
+  SALOMEDSImpl_SObject anObject = _impl->GetSObject(anID.in());
+
+  SALOMEDS_Driver_i* aDriver = GetDriver(anObject, _orb);
+  bool ret = _impl->Copy(anObject, aDriver);
+  delete aDriver;
+  return ret;
+}
+
+//============================================================================
+/*! Function : CanPaste
+ *  Purpose  :
+ */
+//============================================================================
+CORBA::Boolean SALOMEDS_Study_i::CanPaste(SALOMEDS::SObject_ptr theObject)
+{
+  SALOMEDS::Locker lock;
+  if (_closed)
+    throw SALOMEDS::Study::StudyInvalidReference();
+
+  CORBA::String_var anID = theObject->GetID();
+  SALOMEDSImpl_SObject anObject = _impl->GetSObject(anID.in());
+
+  SALOMEDS_Driver_i* aDriver = GetDriver(anObject, _orb);
+  bool ret = _impl->CanPaste(anObject, aDriver);
+  delete aDriver;
+  return ret;
+}
+
+//============================================================================
+/*! Function : Paste
+ *  Purpose  :
+ */
+//============================================================================
+SALOMEDS::SObject_ptr SALOMEDS_Study_i::Paste(SALOMEDS::SObject_ptr theObject)
+     throw(SALOMEDS::StudyBuilder::LockProtection)
+{
+  SALOMEDS::Locker lock;
+
+  Unexpect aCatch(LockProtection);
+
+  CORBA::String_var anID = theObject->GetID();
+  SALOMEDSImpl_SObject anObject = _impl->GetSObject(anID.in());
+  SALOMEDSImpl_SObject aNewSO;
+
+  try {
+    SALOMEDS_Driver_i* aDriver = GetDriver(anObject, _orb);
+    aNewSO =  _impl->Paste(anObject, aDriver);
+    delete aDriver;
+  }
+  catch (...) {
+    throw SALOMEDS::StudyBuilder::LockProtection();
+  }
+
+  SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (aNewSO, _orb);
+  return so._retn();
 }
+
+SALOMEDS_Driver_i* GetDriver(const SALOMEDSImpl_SObject& theObject, CORBA::ORB_ptr orb)
+{
+  SALOMEDS_Driver_i* driver = NULL;
+
+  SALOMEDSImpl_SComponent aSCO = theObject.GetFatherComponent();
+  if(!aSCO.IsNull()) {
+    std::string IOREngine = aSCO.GetIOR();
+    if(!IOREngine.empty()) {
+      CORBA::Object_var obj = orb->string_to_object(IOREngine.c_str());
+      Engines::EngineComponent_var Engine = Engines::EngineComponent::_narrow(obj) ;
+      driver = new SALOMEDS_Driver_i(Engine, orb);
+    }
+  }
+
+  return driver;
+}
+
 //============================================================================
-/*! Function : GetTransientReference
- *  Purpose  : Get IOR of the Study (registered in OCAF document in doc->Root)
+/*! Function : GetPersistentReference
+ *  Purpose  : Get persistent reference of study (idem URL())
  */
 //============================================================================
-char* SALOMEDS_Study_i::GetTransientReference()
+char* SALOMEDS_Study_i::GetPersistentReference()
 {
   SALOMEDS::Locker lock; 
   if (_closed)
     throw SALOMEDS::Study::StudyInvalidReference();  
-  return CORBA::string_dup(_impl->GetTransientReference().c_str());
+  return CORBA::string_dup(_impl->GetPersistentReference().c_str());
 }
 
 //============================================================================
@@ -529,157 +771,6 @@ char* SALOMEDS_Study_i::GetObjectPath(CORBA::Object_ptr theObject)
   return CORBA::string_dup(aPath.c_str());
 }
 
-
-//============================================================================
-/*! Function : SetContext
- *  Purpose  : Sets the current context
- */
-//============================================================================
-void SALOMEDS_Study_i::SetContext(const char* thePath) 
-{
-  SALOMEDS::Locker lock; 
-
-  if (_closed)
-    throw SALOMEDS::Study::StudyInvalidReference();  
-
-  _impl->SetContext(std::string((char*)thePath));
-  if (_impl->IsError() && _impl->GetErrorCode() == "InvalidContext") 
-    throw SALOMEDS::Study::StudyInvalidContext();  
-}
-
-//============================================================================
-/*! Function : GetContext
- *  Purpose  : Gets the current context
- */
-//============================================================================
-char* SALOMEDS_Study_i::GetContext() 
-{
-  SALOMEDS::Locker lock; 
-  
-  if (_closed)
-    throw SALOMEDS::Study::StudyInvalidReference();  
-
-  if (!_impl->HasCurrentContext()) throw SALOMEDS::Study::StudyInvalidContext();
-
-  return CORBA::string_dup(_impl->GetContext().c_str());
-}
-
-//============================================================================
-/*! Function : GetObjectNames
- *  Purpose  : method to get all object names in the given context (or in the current context, if 'theContext' is empty)
- */
-//============================================================================
-SALOMEDS::ListOfStrings* SALOMEDS_Study_i::GetObjectNames(const char* theContext) 
-{
-  SALOMEDS::Locker lock; 
-
-  if (_closed)
-    throw SALOMEDS::Study::StudyInvalidReference();  
-
-  SALOMEDS::ListOfStrings_var aResult = new SALOMEDS::ListOfStrings;
-
-  if (strlen(theContext) == 0 && !_impl->HasCurrentContext())
-    throw SALOMEDS::Study::StudyInvalidContext();
-  
-  std::vector<std::string> aSeq = _impl->GetObjectNames(std::string((char*)theContext));
-  if (_impl->GetErrorCode() == "InvalidContext")
-    throw SALOMEDS::Study::StudyInvalidContext();
-
-  int aLength = aSeq.size();
-  aResult->length(aLength);
-  for (int anIndex = 0; anIndex < aLength; anIndex++) {
-    aResult[anIndex] = CORBA::string_dup(aSeq[anIndex].c_str());
-  }
-
-  return aResult._retn();
-}
-
-//============================================================================
-/*! Function : GetDirectoryNames
- *  Purpose  : method to get all directory names in the given context (or in the current context, if 'theContext' is empty)
- */
-//============================================================================
-SALOMEDS::ListOfStrings* SALOMEDS_Study_i::GetDirectoryNames(const char* theContext) 
-{
-  SALOMEDS::Locker lock; 
-
-  if (_closed)
-    throw SALOMEDS::Study::StudyInvalidReference();  
-
-  SALOMEDS::ListOfStrings_var aResult = new SALOMEDS::ListOfStrings;
-
-  if (strlen(theContext) == 0 && !_impl->HasCurrentContext())
-    throw SALOMEDS::Study::StudyInvalidContext();
-  
-  std::vector<std::string> aSeq = _impl->GetDirectoryNames(std::string((char*)theContext));
-  if (_impl->GetErrorCode() == "InvalidContext")
-    throw SALOMEDS::Study::StudyInvalidContext();
-
-  int aLength = aSeq.size();
-  aResult->length(aLength);
-  for (int anIndex = 0; anIndex < aLength; anIndex++) {
-    aResult[anIndex] = CORBA::string_dup(aSeq[anIndex].c_str());
-  }
-  
-  return aResult._retn();
-}
-
-//============================================================================
-/*! Function : GetFileNames
- *  Purpose  : method to get all file names in the given context (or in the current context, if 'theContext' is empty)
- */
-//============================================================================
-SALOMEDS::ListOfStrings* SALOMEDS_Study_i::GetFileNames(const char* theContext) 
-{
-  SALOMEDS::Locker lock; 
-
-  if (_closed)
-    throw SALOMEDS::Study::StudyInvalidReference();  
-
-  SALOMEDS::ListOfStrings_var aResult = new SALOMEDS::ListOfStrings;
-
-  if (strlen(theContext) == 0 && !_impl->HasCurrentContext())
-    throw SALOMEDS::Study::StudyInvalidContext();
-  
-  std::vector<std::string> aSeq = _impl->GetFileNames(std::string((char*)theContext));
-  if (_impl->GetErrorCode() == "InvalidContext")
-    throw SALOMEDS::Study::StudyInvalidContext();
-
-  int aLength = aSeq.size();
-  aResult->length(aLength);
-  for (int anIndex = 0; anIndex < aLength; anIndex++) {
-    aResult[anIndex] = CORBA::string_dup(aSeq[anIndex].c_str());
-  }
-
-  return aResult._retn();
-}
-
-//============================================================================
-/*! Function : GetComponentNames
- *  Purpose  : method to get all components names
- *  SRN:       Note, theContext can be any, it doesn't matter
- */
-//============================================================================
-SALOMEDS::ListOfStrings* SALOMEDS_Study_i::GetComponentNames(const char* theContext) 
-{
-  SALOMEDS::Locker lock; 
-
-  if (_closed)
-    throw SALOMEDS::Study::StudyInvalidReference();  
-
-  SALOMEDS::ListOfStrings_var aResult = new SALOMEDS::ListOfStrings;
-
-  std::vector<std::string> aSeq = _impl->GetComponentNames(std::string((char*)theContext));
-
-  int aLength = aSeq.size();
-  aResult->length(aLength);
-  for(int anIndex = 0; anIndex < aLength; anIndex++) {
-    aResult[anIndex] = CORBA::string_dup(aSeq[anIndex].c_str());
-  }
-
-  return aResult._retn();
-}
-
 //============================================================================
 /*! Function : NewChildIterator
  *  Purpose  : Create a ChildIterator from an SObject
@@ -744,11 +835,11 @@ SALOMEDS::StudyBuilder_ptr SALOMEDS_Study_i::NewBuilder()
  *  Purpose  : get study name
  */
 //============================================================================
-char* SALOMEDS_Study_i::Name()
+wchar_t* SALOMEDS_Study_i::Name()
 {
   SALOMEDS::Locker lock; 
   // Name is specified as IDL attribute: user exception cannot be raised
-  return CORBA::string_dup(_impl->Name().c_str());
+  return CORBA::wstring_dup(Kernel_Utils::decode_s(_impl->Name()));
 }
 
 //============================================================================
@@ -756,11 +847,11 @@ char* SALOMEDS_Study_i::Name()
  *  Purpose  : set study name
  */
 //============================================================================
-void SALOMEDS_Study_i::Name(const char* name)
+void SALOMEDS_Study_i::Name(const wchar_t* wname)
 {
-  SALOMEDS::Locker lock;  
+  SALOMEDS::Locker lock;
   // Name is specified as IDL attribute: user exception cannot be raised
-  _impl->Name(std::string(name));
+  _impl->Name(Kernel_Utils::encode_s(wname));
 }
 
 //============================================================================
@@ -823,11 +914,11 @@ void SALOMEDS_Study_i::Modified()
  *  Purpose  : get URL of the study (persistent reference of the study)
  */
 //============================================================================
-char* SALOMEDS_Study_i::URL()
+wchar_t* SALOMEDS_Study_i::URL()
 {
-  SALOMEDS::Locker lock; 
+  SALOMEDS::Locker lock;
   // URL is specified as IDL attribute: user exception cannot be raised
-  return CORBA::string_dup(_impl->URL().c_str());
+  return CORBA::wstring_dup(Kernel_Utils::decode_s(_impl->URL()));
 }
 
 //============================================================================
@@ -835,25 +926,14 @@ char* SALOMEDS_Study_i::URL()
  *  Purpose  : set URL of the study (persistent reference of the study)
  */
 //============================================================================
-void SALOMEDS_Study_i::URL(const char* url)
+void SALOMEDS_Study_i::URL(const wchar_t* wurl)
 {
   SALOMEDS::Locker lock; 
   // URL is specified as IDL attribute: user exception cannot be raised
-  _impl->URL(std::string((char*)url));
-}
+  _impl->URL(Kernel_Utils::encode_s(wurl));
 
-CORBA::Short SALOMEDS_Study_i::StudyId()
-{
-  SALOMEDS::Locker lock; 
-  // StudyId is specified as IDL attribute: user exception cannot be raised
-  return _impl->StudyId();
-}
-
-void SALOMEDS_Study_i::StudyId(CORBA::Short id)
-{ 
-  SALOMEDS::Locker lock; 
-  // StudyId is specified as IDL attribute: user exception cannot be raised
-  _impl->StudyId(id);
+  // update desktop title with new study name
+  NameChanged();
 }
 
 void SALOMEDS_Study_i::UpdateIORLabelMap(const char* anIOR, const char* anEntry) 
@@ -866,35 +946,6 @@ void SALOMEDS_Study_i::UpdateIORLabelMap(const char* anIOR, const char* anEntry)
   _impl->UpdateIORLabelMap(std::string((char*)anIOR), std::string((char*)anEntry));
 }
 
-SALOMEDS::Study_ptr SALOMEDS_Study_i::GetStudy(const DF_Label& theLabel, CORBA::ORB_ptr orb) 
-{
-  SALOMEDS::Locker lock; 
-
-  SALOMEDSImpl_AttributeIOR* Att = NULL;
-  if ((Att=(SALOMEDSImpl_AttributeIOR*)theLabel.Root().FindAttribute(SALOMEDSImpl_AttributeIOR::GetID()))){
-    char* IOR = CORBA::string_dup(Att->Value().c_str());
-    CORBA::Object_var obj = orb->string_to_object(IOR);
-    SALOMEDS::Study_ptr aStudy = SALOMEDS::Study::_narrow(obj) ;
-    ASSERT(!CORBA::is_nil(aStudy));
-    return SALOMEDS::Study::_duplicate(aStudy);
-  } else {
-    MESSAGE("GetStudy: Problem to get study");
-  }
-  return SALOMEDS::Study::_nil();
-}
-
-SALOMEDS_Study_i* SALOMEDS_Study_i::GetStudyServant(SALOMEDSImpl_Study* aStudyImpl, CORBA::ORB_ptr orb)
-{
-  if (_mapOfStudies.find(aStudyImpl) != _mapOfStudies.end()) 
-    return _mapOfStudies[aStudyImpl];
-  else
-  {
-    SALOMEDS_Study_i *Study_servant = new SALOMEDS_Study_i(aStudyImpl, orb);
-    _mapOfStudies[aStudyImpl]=Study_servant;
-    return Study_servant;
-  }
-}
-
 void SALOMEDS_Study_i::IORUpdated(SALOMEDSImpl_AttributeIOR* theAttribute) 
 {
   SALOMEDS::Locker lock; 
@@ -978,69 +1029,6 @@ SALOMEDS::UseCaseBuilder_ptr SALOMEDS_Study_i::GetUseCaseBuilder()
   return uc._retn();
 }
 
-
-//============================================================================
-/*! Function : Close
- *  Purpose  : 
- */
-//============================================================================
-void SALOMEDS_Study_i::Close()
-{
-  SALOMEDS::Locker lock; 
-
-  if (_closed)
-    throw SALOMEDS::Study::StudyInvalidReference();  
-
-  RemovePostponed(-1);
-  
-  SALOMEDS::SComponentIterator_var itcomponent = NewComponentIterator();
-  for (; itcomponent->More(); itcomponent->Next()) {
-    SALOMEDS::SComponent_var sco = itcomponent->Value();
-    CORBA::String_var compodatatype=sco->ComponentDataType();
-    MESSAGE ( "Look for an engine for data type :"<< compodatatype);
-    // if there is an associated Engine call its method for closing
-    CORBA::String_var IOREngine;
-    if (sco->ComponentIOR(IOREngine)) {
-      // we have found the associated engine to write the data 
-      MESSAGE ( "We have found an engine for data type :"<< compodatatype);
-      //_narrow can throw a corba exception
-      try {
-       CORBA::Object_var obj = _orb->string_to_object(IOREngine);
-       if (!CORBA::is_nil(obj)) {
-         SALOMEDS::Driver_var anEngine = SALOMEDS::Driver::_narrow(obj) ;
-         if (!anEngine->_is_nil())  { 
-           SALOMEDS::unlock();
-           anEngine->Close(sco);
-           SALOMEDS::lock();
-         }
-       }
-      } 
-      catch (CORBA::Exception&) {
-      }
-    }
-    sco->UnRegister();
-  }
-  
-  //Does not need any more this iterator
-  itcomponent->UnRegister();
-  
-  // Notify GUI that study is closed
-  SALOME_NamingService *aNamingService = KERNEL::getNamingService();
-  CORBA::Object_ptr obj = aNamingService->Resolve("/Kernel/Session");
-  SALOME::Session_var aSession = SALOME::Session::_narrow(obj);
-  if ( !CORBA::is_nil(aSession) ) {
-    std::stringstream ss;
-    ss << "studyClosed:" << _impl->StudyId();
-    std::string str = ss.str();
-    SALOMEDS::unlock();
-    aSession->emitMessageOneWay(str.c_str());
-    SALOMEDS::lock();
-  }
-  
-  _impl->Close();
-  _closed = true;
-}
-
 //============================================================================
 /*! Function : AddPostponed
  *  Purpose  : 
@@ -1580,6 +1568,27 @@ void SALOMEDS_Study_i::EnableUseCaseAutoFilling(CORBA::Boolean isEnabled)
   }
 }
 
+
+CORBA::Long SALOMEDS_Study_i::getPID()
+{
+#ifdef WIN32
+  return (CORBA::Long)_getpid();
+#else
+  return (CORBA::Long)getpid();
+#endif
+}
+
+void SALOMEDS_Study_i::ShutdownWithExit()
+{
+  exit( EXIT_SUCCESS );
+}
+
+void SALOMEDS_Study_i::Shutdown()
+{
+  if(!CORBA::is_nil(_orb))
+    _orb->shutdown(0);
+}
+
 //============================================================================
 /*! Function : attach
  *  Purpose  : This function attach an observer to the study
@@ -1616,3 +1625,19 @@ CORBA::LongLong SALOMEDS_Study_i::GetLocalImpl(const char* theHostname, CORBA::L
   isLocal = (strcmp(theHostname, Kernel_Utils::GetHostname().c_str()) == 0 && pid == thePID)?1:0;
   return reinterpret_cast<CORBA::LongLong>(_impl);
 }
+
+void SALOMEDS_Study_i::NameChanged()
+{
+  // Notify GUI that the name of study was changed
+  SALOME_NamingService *aNamingService = KERNEL::getNamingService();
+  CORBA::Object_var obj = aNamingService->Resolve("/Kernel/Session");
+  SALOME::Session_var aSession = SALOME::Session::_narrow(obj);
+  if ( !CORBA::is_nil(aSession) ) {
+    std::stringstream ss;
+    ss << "studyNameChanged";
+    std::string str = ss.str();
+    SALOMEDS::unlock();
+    aSession->emitMessageOneWay(str.c_str());
+    SALOMEDS::lock();
+  }
+}
index a767e6414162f8bad9fe11e04bebfbc20df52160..d1c3d7f22eb546f915d980acaa785fa7aba609cb 100644 (file)
@@ -42,6 +42,7 @@
 #include "SALOMEDS_StudyBuilder_i.hxx"
 #include "SALOMEDS_SObject_i.hxx"
 #include "SALOMEDS_UseCaseBuilder_i.hxx"
+#include "SALOMEDS_Driver_i.hxx"
 
 #include "SALOMEDSImpl_Study.hxx"
 #include "SALOMEDSImpl_AttributeIOR.hxx"
 class Standard_EXPORT SALOMEDS_Study_i: public POA_SALOMEDS::Study
 {
 private:
+
+  void                            NameChanged();
   CORBA::ORB_var                 _orb;
   SALOMEDSImpl_Study*            _impl;  
   SALOMEDS_StudyBuilder_i*       _builder;    
-  static std::map<SALOMEDSImpl_Study*, SALOMEDS_Study_i*> _mapOfStudies;
   SALOMEDSImpl_AbstractCallback* _notifier;
   SALOMEDSImpl_AbstractCallback* _genObjRegister;
+  SALOMEDS_DriverFactory_i*      _factory;
   bool                           _closed;
 
 public:
 
   //! standard constructor
-  SALOMEDS_Study_i(SALOMEDSImpl_Study*, CORBA::ORB_ptr);
+  SALOMEDS_Study_i(CORBA::ORB_ptr);
   
   //! standard destructor
-  virtual ~SALOMEDS_Study_i(); 
+  virtual ~SALOMEDS_Study_i();
   
+  virtual void Init();
+  virtual void Clear();
+
+  //! method to Open a Study
+  /*!
+    \param char* arguments, the study URL
+    \return Study_ptr arguments
+  */
+  virtual bool Open(const wchar_t* aStudyUrl) throw (SALOME::SALOME_Exception);
+
+  //! method to save a Study
+  virtual CORBA::Boolean Save(CORBA::Boolean theMultiFile, CORBA::Boolean theASCII);
+
+  //! method to save a Study to the persistent reference aUrl
+  /*!
+    \param char* arguments, the new URL of the study
+  */
+  virtual CORBA::Boolean SaveAs(const wchar_t* aUrl, CORBA::Boolean theMultiFile, CORBA::Boolean theASCII);
+
+  //! method to copy the object
+  /*!
+    \param theObject object to copy
+  */
+  virtual CORBA::Boolean Copy(SALOMEDS::SObject_ptr theObject);
+  virtual CORBA::Boolean CanCopy(SALOMEDS::SObject_ptr theObject);
+  //! method to paste the object in study
+  /*!
+    \param theObject object to paste
+  */
+  virtual SALOMEDS::SObject_ptr Paste(SALOMEDS::SObject_ptr theObject) throw(SALOMEDS::StudyBuilder::LockProtection);
+  virtual CORBA::Boolean CanPaste(SALOMEDS::SObject_ptr theObject);
+
   //! method to Get persistent reference of study (idem URL())
   /*!
     \sa URL()
@@ -72,13 +107,6 @@ public:
   */  
   virtual char* GetPersistentReference();
 
-
-  //! method to Get transient reference of study
-  /*!
-    \return char* arguments, the transient reference of the study
-  */  
-  virtual char* GetTransientReference();
-
   //! method to detect if a study is empty
   /*!
     \return bool arguments, true if study is empty
@@ -151,36 +179,6 @@ public:
   */
   virtual char* GetObjectPath(CORBA::Object_ptr theObject);
 
-  //! method to set a context: root ('/') is UserData component
-  /*!
-  */
-  virtual void SetContext(const char* thePath);
-
-  //! method to get a context
-  /*!
-  */
-  virtual char* GetContext();  
-
-  //! method to get all object names in the given context (or in the current context, if 'theContext' is empty)
-  /*!
-  */
-  virtual SALOMEDS::ListOfStrings* GetObjectNames(const char* theContext);
-
-  //! method to get all directory names in the given context (or in the current context, if 'theContext' is empty)
-  /*!
-  */
-  virtual SALOMEDS::ListOfStrings* GetDirectoryNames(const char* theContext);
-
-  //! method to get all file names in the given context (or in the current context, if 'theContext' is empty)
-  /*!
-  */
-  virtual SALOMEDS::ListOfStrings* GetFileNames(const char* theContext);
-
-  //! method to get all components names
-  /*!
-  */
-  virtual SALOMEDS::ListOfStrings* GetComponentNames(const char* theContext);
-
   //! method to Create a ChildIterator from an SObject 
   /*!
     \param aSO  SObject_ptr arguments
@@ -204,13 +202,13 @@ public:
   /*!
     \return char* arguments, the study name
   */
-  virtual char* Name();
+  virtual wchar_t* Name();
 
   //! method to set study name
   /*!
     \param name char* arguments, the study name
   */
-  virtual void  Name(const char* name);
+  virtual void Name(const wchar_t* name);
 
   //! method to get if study has been saved
   /*!
@@ -237,19 +235,13 @@ public:
   /*!
     \return char* arguments, the study URL 
   */
-  virtual char* URL();
+  virtual wchar_t* URL();
 
  //! method to set URL of the study
   /*!
     \param url char* arguments, the study URL
   */
-  virtual void  URL(const char* url);
-
-  virtual CORBA::Short StudyId();
-  virtual void  StudyId(CORBA::Short id);
-
-  static SALOMEDS::Study_ptr GetStudy(const DF_Label& theLabel, CORBA::ORB_ptr orb);
-  static SALOMEDS_Study_i* GetStudyServant(SALOMEDSImpl_Study*, CORBA::ORB_ptr orb);
+  virtual void URL(const wchar_t* url);
 
   static void IORUpdated(SALOMEDSImpl_AttributeIOR* theAttribute);
 
@@ -268,8 +260,6 @@ public:
 
   virtual SALOMEDS::UseCaseBuilder_ptr GetUseCaseBuilder();
 
-  virtual void Close();
-
   void EnableUseCaseAutoFilling(CORBA::Boolean isEnabled); 
 
   // postponed destroying of CORBA object functionality
@@ -344,6 +334,12 @@ public:
 
   virtual CORBA::LongLong GetLocalImpl(const char* theHostname, CORBA::Long thePID, CORBA::Boolean& isLocal);
 
+  void ping(){};
+  CORBA::Long getPID();
+  void ShutdownWithExit();
+
+  void Shutdown();
+
   virtual void attach(SALOMEDS::Observer_ptr theObs, CORBA::Boolean modify);
   virtual void detach(SALOMEDS::Observer_ptr theObs);
 };
index c2e4cf58aa9aec836ba5566f430fdc5f3b3a1f91..9757721b6de3594a2a5dd9f9db7e1217e31bf54b 100644 (file)
@@ -70,7 +70,7 @@ class SALOME_DriverPy_i(SALOMEDS__POA.Driver):
     def CanPublishInStudy(self, theIOR):
         return 1
 
-    def PublishInStudy(self, theStudy, theSObject, theObject, theName):
+    def PublishInStudy(self, theSObject, theObject, theName):
         return None
 
     def CanCopy(self, theObject):
index 679a7feb2ace6b93c4af815a17e7cb23eea6bd11..00d4f77adcc2b930d2433a39c8e657e2c97620c0 100755 (executable)
@@ -40,6 +40,7 @@ INCLUDE_DIRECTORIES(
   ${CMAKE_CURRENT_SOURCE_DIR}/../../DF
   ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMEDSImpl
   ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMEDSImpl/Test
+  ${CMAKE_CURRENT_SOURCE_DIR}/../../GenericObj
   ${PROJECT_BINARY_DIR}/idl
 )
 
@@ -62,6 +63,7 @@ SET(COMMON_LIBS
  SalomeDSImpl
  SalomeDSClient
  SalomeDS
+ SalomeGenericObj
  SalomeIDLKernel
 )
 
index e9ddc40b6f99875661acec4b0482d7e1588fc165..173ef842547153bb62ab5f3c5a3663fbfbb5a0a5 100644 (file)
@@ -22,8 +22,6 @@
 
 #include "SALOMEDSTest.hxx"
 
-
-#include "SALOMEDS_StudyManager_i.hxx"
 #include "utilities.h"
 #include "Utils_SINGLETON.hxx"
 #include "Utils_ORB_INIT.hxx"
@@ -37,8 +35,7 @@
 #include <cstdlib>
 
 #include "SALOMEDSClient.hxx"
-#include "SALOMEDS_StudyManager_i.hxx"
-#include "SALOMEDS_StudyManager.hxx"
+#include "SALOMEDS_Study.hxx"
 #include "SALOMEDS_SObject.hxx"
 
 
@@ -58,10 +55,10 @@ void SALOMEDSTest::setUp()
   ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
   _orb = init(argc , argv ) ;
   SALOME_NamingService NS(_orb);
-  CORBA::Object_var obj = NS.Resolve( "/myStudyManager" );
-  _sm = SALOMEDS::StudyManager::_narrow( obj );
+  CORBA::Object_var obj = NS.Resolve( "/Study" );
+  _study = SALOMEDS::Study::_narrow( obj );
 
-  CPPUNIT_ASSERT( !CORBA::is_nil(_sm) ); 
+  CPPUNIT_ASSERT( !CORBA::is_nil(_study) );
 }
 
 // ============================================================================
@@ -72,13 +69,9 @@ void SALOMEDSTest::setUp()
 
 void SALOMEDSTest::tearDown()
 {
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-  std::vector<std::string> v = sm->GetOpenStudies();
-  for(int i = 0; i<v.size(); i++) {
-    _PTR(Study) study = sm->GetStudyByName(v[i]);
-    if(study)
-      sm->Close(study);
-  }
+  _PTR(Study) study ( new SALOMEDS_Study(_study) );
+  if(study)
+    study->Clear();
 }
 
 #include "SALOMEDSTest_AttributeComment.cxx"
@@ -116,7 +109,6 @@ void SALOMEDSTest::tearDown()
 #include "SALOMEDSTest_SObject.cxx"
 #include "SALOMEDSTest_Study.cxx"
 #include "SALOMEDSTest_StudyBuilder.cxx"
-#include "SALOMEDSTest_StudyManager.cxx"
 #include "SALOMEDSTest_UseCase.cxx"
 
 
@@ -135,8 +127,8 @@ void SALOMEDSTest_Embedded::setUp()
   ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
   _orb = init(argc , argv ) ;
   SALOME_NamingService NS(_orb);
-  CORBA::Object_var obj = NS.Resolve( "/myStudyManager_embedded" );
-  _sm = SALOMEDS::StudyManager::_narrow( obj );
+  CORBA::Object_var obj = NS.Resolve( "/Study_embedded" );
+  _study = SALOMEDS::Study::_narrow( obj );
 
-  CPPUNIT_ASSERT( !CORBA::is_nil(_sm) ); 
+  CPPUNIT_ASSERT( !CORBA::is_nil(_study) );
 }
index c51ecf4e0e295d3e9fbb5631077e974ad9c1edf5..ac6207baf5e5252d53387fc2d9f4145ccd2fbd97 100644 (file)
@@ -79,7 +79,6 @@ class SALOMEDSTEST_EXPORT SALOMEDSTest : public CppUnit::TestFixture
   CPPUNIT_TEST( testSObject );
   CPPUNIT_TEST( testStudy );  
   CPPUNIT_TEST( testStudyBuilder );
-  CPPUNIT_TEST( testStudyManager );
   CPPUNIT_TEST( testUseCase );
 
 
@@ -128,13 +127,12 @@ public:
   void testSObject();
   void testStudy();
   void testStudyBuilder();
-  void testStudyManager();
   void testUseCase();
 
 protected:
 
-SALOMEDS::StudyManager_var _sm;
-CORBA::ORB_var             _orb;
+SALOMEDS::Study_var _study;
+CORBA::ORB_var      _orb;
                 
 };
 
@@ -182,7 +180,6 @@ class SALOMEDSTEST_EXPORT SALOMEDSTest_Embedded : public SALOMEDSTest
   CPPUNIT_TEST( testStudy );
   CPPUNIT_TEST( testStudyBuilder ); 
   CPPUNIT_TEST( testChildIterator );
-  CPPUNIT_TEST( testStudyManager );
   CPPUNIT_TEST( testUseCase );
   
   CPPUNIT_TEST_SUITE_END();
index 6c93cd649dbdcf287a5e8fb53a1ea19f3c72fdae..07f9e976b68ea663a9c9eb480024dca83fa36ba0 100755 (executable)
  * Use code of SALOMEDS_AttributeComment.cxx
  */
 
+//#include "Basics_Utils.hxx"
+
 void SALOMEDSTest::testAttributeComment()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm(new SALOMEDS_StudyManager(_sm));
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  std::vector<std::string> ost(sm->GetOpenStudies());
-  _PTR(Study) study;
-  if(ost.empty())
-    study = sm->NewStudy("Test");
-  else
-    study = sm->GetStudyByName(ost[0]);
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -73,8 +65,7 @@ void SALOMEDSTest::testAttributeComment()
   _attr->SetValue("");
   CPPUNIT_ASSERT(_attr->Value() == "");
 
-
-  sm->Close(study);
+  study->Clear();
 }
 
 
index 0292fec2023801c7f516a04adffd5755ea966c8b..8fd7230f1cdca9df257be0e1f7dce2efb444f8d4 100755 (executable)
 
 void SALOMEDSTest::testAttributeDrawable()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm(new SALOMEDS_StudyManager(_sm));
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -67,7 +62,7 @@ void SALOMEDSTest::testAttributeDrawable()
 
   CPPUNIT_ASSERT(!_attr->IsDrawable());
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index a36edbaf648ee8084f497ec1cf679d1d61e77d44..85158e9d87a2fb55a8705a7daded2ee845ab54cd 100755 (executable)
  */
 void SALOMEDSTest::testAttributeExpandable()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -66,7 +61,7 @@ void SALOMEDSTest::testAttributeExpandable()
 
   CPPUNIT_ASSERT(_attr->IsExpandable());
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index 3da5e7e8e7ba301964d05e059ccf3fed6aa42fb0..2800f9a8291977d05ce0cad5f5daa3cfa176528b 100755 (executable)
  */
 void SALOMEDSTest::testAttributeExternalFileDef()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -68,8 +63,7 @@ void SALOMEDSTest::testAttributeExternalFileDef()
   _attr->SetValue("");
   CPPUNIT_ASSERT(_attr->Value() == "");
 
-
-  sm->Close(study);
+  study->Clear();
 }
 
 
index 31babb73b7834e68c0e14a7ce9f2257e37befee8..1860a9ceb9558c1f0f7200c59060aadf5c08a257 100755 (executable)
  */
 void SALOMEDSTest::testAttributeFileType()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -68,8 +63,7 @@ void SALOMEDSTest::testAttributeFileType()
   _attr->SetValue("");
   CPPUNIT_ASSERT(_attr->Value() == "");
 
-
-  sm->Close(study);
+  study->Clear();
 }
 
 
index 7f05338545ae40469d596e4f405e81e431e8a983..cb20fb1dcd6f6cd0cf757ccb4e1bf25c57746541 100755 (executable)
  */
 void SALOMEDSTest::testAttributeFlags()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -71,7 +66,7 @@ void SALOMEDSTest::testAttributeFlags()
 
   CPPUNIT_ASSERT(!_attr->Get(4));
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index 79c09769f81e988596fa37aaf548838f7a1dbf49..279a9198f3b9e8b8abb06a01a4ada9dadbbd41fd 100755 (executable)
  */
 void SALOMEDSTest::testAttributeGraphic()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -68,7 +63,7 @@ void SALOMEDSTest::testAttributeGraphic()
   _attr->SetVisibility(-1, true);
   CPPUNIT_ASSERT(_attr->GetVisibility(-1));
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index 25660a648113370a74a157ba09a2219e197b558a..101af8f73f4affd8c323fa77f0c6affe613146e5 100755 (executable)
  */
 void SALOMEDSTest::testAttributeIOR()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -57,14 +52,14 @@ void SALOMEDSTest::testAttributeIOR()
 
   CPPUNIT_ASSERT(value.empty());
 
-  std::string ior = _orb->object_to_string(_sm);
+  std::string ior = _orb->object_to_string(_study);
 
   //Check method SetValue
   _attr->SetValue(ior);
 
   CPPUNIT_ASSERT(ior == _attr->Value());
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index b5bb2d72e442b7f0a88dfe9d87c00c88e21432c1..5c79a1586fa3195085bb8eaae743b94e31429b1e 100755 (executable)
  */
 void SALOMEDSTest::testAttributeInteger()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -60,7 +55,7 @@ void SALOMEDSTest::testAttributeInteger()
   //Check method Value
   CPPUNIT_ASSERT(_attr->Value() == value);
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index 44757f2d2cce0468cb90848ba57faba7e7a9826d..aa57ad4d7264732b5be7c429e5fd03e0340ef8f3 100755 (executable)
  */
 void SALOMEDSTest::testAttributeLocalID()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -60,7 +55,7 @@ void SALOMEDSTest::testAttributeLocalID()
   //Check method Value
   CPPUNIT_ASSERT(_attr->Value() == value);
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index 4b1fb4a947b7bf7eb9432654e2792f3e1c19b64e..257d10a95637ce382a9e06c0bdb890b12652b764 100755 (executable)
  */
 void SALOMEDSTest::testAttributeName()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+ //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -68,7 +63,7 @@ void SALOMEDSTest::testAttributeName()
   _attr->SetValue("");
   CPPUNIT_ASSERT(_attr->Value() == "");
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index 722ce80d624d6afd00c0d33f1f6f4517981521fe..79f6abe412e3205dab0788458f160af1584b378e 100755 (executable)
  */
 void SALOMEDSTest::testAttributeOpened()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -66,7 +61,7 @@ void SALOMEDSTest::testAttributeOpened()
 
   CPPUNIT_ASSERT(!_attr->IsOpened());
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index f2da850aa8f4c4d016840bd77549c323faf7a4b2..eacfafe715482826bbd39fba006779f4ca53c863 100755 (executable)
  */
 void SALOMEDSTest::testAttributeParameter()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -141,7 +136,7 @@ void SALOMEDSTest::testAttributeParameter()
   CPPUNIT_ASSERT(_attr->IsSet("StrArray", PT_STRARRAY) && _attr->GetStrArray("StrArray")[1] == "world");
   */
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index a915c47132a76c14d51c8dc06c48b61eaaa39cb8..3a8ddd9fd1c38c488c2807d8f0ecc5ccd4a82bf8 100755 (executable)
  */
 void SALOMEDSTest::testAttributePersistentRef()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -68,7 +63,7 @@ void SALOMEDSTest::testAttributePersistentRef()
   _attr->SetValue("");
   CPPUNIT_ASSERT(_attr->Value() == "");
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index abce9ee840c335a0583dbc05e8ecdd9644bdb26e..076bdb70f061fe3c1beb25cb6918e2cc0ca69060 100755 (executable)
  */
 void SALOMEDSTest::testAttributePixMap()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -68,8 +63,7 @@ void SALOMEDSTest::testAttributePixMap()
   _attr->SetPixMap("");
   CPPUNIT_ASSERT(_attr->GetPixMap() == "");
 
-
-  sm->Close(study);
+  study->Clear();
 }
 
 
index 774aa09ab167e1173ecfa6228e1b9abf52ccbc30..1e8bbed750bc3f1c097d4a64de8d00337c38a09b 100755 (executable)
  */
 void SALOMEDSTest::testAttributePythonObject()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -69,7 +64,7 @@ void SALOMEDSTest::testAttributePythonObject()
   _attr->SetObject("", true);
   CPPUNIT_ASSERT(_attr->GetObject() == "" && _attr->IsScript());
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index 991f922d13a59672d2f5d098430312c53bcbf213..8061ced5c99f0873e23402e6c98294e1d8befb50 100755 (executable)
  */
 void SALOMEDSTest::testAttributeReal()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -60,7 +55,7 @@ void SALOMEDSTest::testAttributeReal()
   //Check method Value
   CPPUNIT_ASSERT(_attr->Value() == value);
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index adcf52d6fc9c3f4d1055a028dcce079524294f1b..ebf0ec2b1ddcd23cdfcdd0cd090812430920f2a3 100755 (executable)
  */
 void SALOMEDSTest::testAttributeSelectable()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -66,7 +61,7 @@ void SALOMEDSTest::testAttributeSelectable()
 
   CPPUNIT_ASSERT(_attr->IsSelectable());
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index 273edef440dbd13e2726fd7229074407ac3eb508..9adef01903a345a02b7329fc2b16b1080f16ee63 100755 (executable)
  */
 void SALOMEDSTest::testAttributeSequenceOfInteger()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -122,7 +117,7 @@ void SALOMEDSTest::testAttributeSequenceOfInteger()
   }
   CPPUNIT_ASSERT(isRaised);
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index 48b988ad6d702931a973271f506b17ff7bd0c851..481732bd3c14f55175c409c33fd8b3b4bad6fdbb 100755 (executable)
  */
 void SALOMEDSTest::testAttributeSequenceOfReal()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -116,7 +111,7 @@ void SALOMEDSTest::testAttributeSequenceOfReal()
   }
   CPPUNIT_ASSERT(isRaised);
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index 2f06bd76c8599ed6bfb2143a98a84c30c61dbae0..00dd040db509bc92fe59147cb6cf98e8a91798cb 100755 (executable)
  */
 void SALOMEDSTest::testAttributeStudyProperties()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -108,7 +103,7 @@ void SALOMEDSTest::testAttributeStudyProperties()
   _attr->GetModificationsList(vs, vi[0], vi[1], vi[2], vi[3], vi[4], true);
   CPPUNIT_ASSERT(vs[0] == "srn" && vi[0][0] == 1 && vi[1][0] == 2 && vi[2][0] == 3 && vi[3][0] == 4 && vi[4][0] == 5);
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index e3acb4407f1c0999826173bf67deed9c178e9f2c..c8740823886107955de73ca74ddb62afac7937fa 100755 (executable)
  */
 void SALOMEDSTest::testAttributeTableOfInteger()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -185,7 +180,7 @@ void SALOMEDSTest::testAttributeTableOfInteger()
 
   CPPUNIT_ASSERT(data2.size() == 3 && data2[0] == 11 && data2[1] == -22 && data2[2] == -33);
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index 5a20a4aa1853e537d12c45c942d1992a1f6a111b..6c9905d4794ea8e69de33706d021d96180873ebb 100755 (executable)
  */
 void SALOMEDSTest::testAttributeTableOfReal()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -184,7 +179,7 @@ void SALOMEDSTest::testAttributeTableOfReal()
 
   CPPUNIT_ASSERT(data2.size() == 3 && data2[0] == 11.11 && data2[1] == -22.22 && data2[2] == -33.33);
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index 172323cbca3c1a18b19d9c69227dfd51ab797d9a..5a3baea4f1caf904f9d8bbd38b40f90dd6ab5018 100755 (executable)
  */
 void SALOMEDSTest::testAttributeTableOfString()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -185,7 +180,7 @@ void SALOMEDSTest::testAttributeTableOfString()
 
   CPPUNIT_ASSERT(data2.size() == 3 && data2[0] == "11" && data2[1] == "-22" && data2[2] == "-33");
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index 251e9bacab0d1926381d2629305ff505ca52e319..15cea2b79817337820378274ed3fca2d6dbd153f 100755 (executable)
  */
 void SALOMEDSTest::testAttributeTarget()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -84,7 +79,7 @@ void SALOMEDSTest::testAttributeTarget()
 
   CPPUNIT_ASSERT(v[0]->GetID() == "0:1:3");
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index 3886947fcc3068666f5f7d7c1d532033a120c6a6..a86a6d011190bc759b87fb654d916ea5971d0445 100755 (executable)
  */
 void SALOMEDSTest::testAttributeTextColor()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -69,7 +64,7 @@ void SALOMEDSTest::testAttributeTextColor()
 
   CPPUNIT_ASSERT(color.B == color2.B);
 
-  sm->Close(study);  
+  study->Clear();
 }
 
 
index 418a0a3a49dc8f05a2f3f3f650f2dd53129d3644..d7068e542a734b2bd2cc8c6d02079d679d981816 100755 (executable)
  */
 void SALOMEDSTest::testAttributeTextHighlightColor()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -69,7 +64,7 @@ void SALOMEDSTest::testAttributeTextHighlightColor()
 
   CPPUNIT_ASSERT(color.B == color2.B);
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index a2258b8cf2bdff3f1e0ff28d2ba818108aef95d4..d8a8affb7366daef8103514c4b8c56cfb5dd653d 100755 (executable)
 #define SALOMEDS_ALL_TESTS
 void SALOMEDSTest::testAttributeTreeNode()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -190,7 +185,7 @@ void SALOMEDSTest::testAttributeTreeNode()
   _PTR(AttributeTreeNode) _attr_guid = studyBuilder->FindOrCreateAttribute(so, "AttributeTreeNodeGUID"+value);
   CPPUNIT_ASSERT(_attr_guid && _attr_guid->GetTreeID() == value);
   
-  sm->Close(study);
+  study->Clear();
 }
 #undef SALOMEDS_ALL_TESTS
 
index cb7e4021446fa84d6299ad2a6896a663053590fc..be68164b0fa5124e23666974d5b1620667158c10 100755 (executable)
  */
 void SALOMEDSTest::testAttributeUserID()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -65,7 +60,7 @@ void SALOMEDSTest::testAttributeUserID()
   _PTR(AttributeUserID) _attr2 = studyBuilder->FindOrCreateAttribute(so, "AttributeUserID"+value);
   CPPUNIT_ASSERT(_attr2 && _attr2->Value() == value);
   
-  sm->Close(study);
+  study->Clear();
 }
 
 
index d4c2bdf5d0b655d1ab9fd1e30d39b147c75c9992..55d9a224f760052862308b086c2274d89deadbaa 100755 (executable)
  */
 void SALOMEDSTest::testChildIterator()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -74,7 +69,7 @@ void SALOMEDSTest::testChildIterator()
   //Check that there are two SObject under so
   CPPUNIT_ASSERT(count == 2);
   
-  sm->Close(study);
+  study->Clear();
 }
 
 
index 8bd02ae3525f4e1ebbb081212ec758ab6249ecfb..bba4bd906e9c4e37261d17f4d818e2f4bfa6ef80 100755 (executable)
  */
 void SALOMEDSTest::testSComponent()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -54,7 +49,7 @@ void SALOMEDSTest::testSComponent()
 
   //Check method ComponentIOR
 
-  std::string ior = _orb->object_to_string(_sm);
+  std::string ior = _orb->object_to_string(_study);
 
   _attr->SetValue(ior);
   std::string new_ior;
@@ -65,7 +60,7 @@ void SALOMEDSTest::testSComponent()
   //Check method ComponentDataType
   CPPUNIT_ASSERT(sco->ComponentDataType() == "Test");
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index cba69b2f4b7d5492e681679c139c3296200761a2..76224f2115e113e15865365f334e625785dd92f2 100755 (executable)
  */
 void SALOMEDSTest::testSComponentIterator()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -60,7 +55,7 @@ void SALOMEDSTest::testSComponentIterator()
     CPPUNIT_ASSERT(ci->Value()->ComponentDataType() == v[i]);
   }
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index 542a6865d427d8196db794cc5b844c1b7eb512f9..4da0748a895d15b16a064e9e4e4bdc18e197deb1 100755 (executable)
 
 void SALOMEDSTest::testSObject()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("TestSObject");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -71,7 +66,7 @@ void SALOMEDSTest::testSObject()
   _PTR(AttributeName) _attrName = studyBuilder->FindOrCreateAttribute(so, "AttributeName");
   _PTR(AttributeComment) _attrComment = studyBuilder->FindOrCreateAttribute(so, "AttributeComment"); 
 
-   std::string ior = _orb->object_to_string(_sm);
+   std::string ior = _orb->object_to_string(_study);
   _attrIOR->SetValue(ior);
   _attrName->SetValue("SO name");
   _attrComment->SetValue("SO comment");
@@ -92,9 +87,6 @@ void SALOMEDSTest::testSObject()
   CPPUNIT_ASSERT(so->FindSubObject(1, so2));
   CPPUNIT_ASSERT(so2->GetID() == so1->GetID());
 
-  //Check method GetStudy
-  CPPUNIT_ASSERT(so->GetStudy()->StudyId() == study->StudyId());
-
   //Check methods Name
   so->Name("test");
   CPPUNIT_ASSERT(so->Name() == "test");
@@ -120,7 +112,7 @@ void SALOMEDSTest::testSObject()
   CORBA::Object_var obj = dynamic_cast<SALOMEDS_SObject*>(so.get())->GetObject();
   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
 
-  sm->Close(study);
+  study->Clear();
 }
 
 
index f7fe1bd721d839b38a312a9a63b4e8aff5d1617f..3c1574cc94b279aaa22d284d64f6857a102cc17a 100755 (executable)
 
 void SALOMEDSTest::testStudy()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("Test");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   //Check the creation of the study
   CPPUNIT_ASSERT(study);
@@ -47,18 +42,6 @@ void SALOMEDSTest::testStudy()
 
   CPPUNIT_ASSERT(componentIterator);
 
-  //Check method GetTransientReference
-  CPPUNIT_ASSERT(!study->GetTransientReference().empty());
-
-  //Check method StudyId
-  CPPUNIT_ASSERT(study->StudyId() > 0);
-
-  //Check method Name (get/set)
-  CPPUNIT_ASSERT(study->Name() == "Test");
-  study->Name("New name");
-  CPPUNIT_ASSERT(study->Name() == "New name");
-  study->Name("Test");
-
   //Check method URL (get/set)
   study->URL("");
   CPPUNIT_ASSERT(study->URL() == "");
@@ -101,10 +84,6 @@ void SALOMEDSTest::testStudy()
   //Try to find component with empty type
   CPPUNIT_ASSERT(!study->FindComponent(""));
 
-  //Check method GetComponentNames
-  std::vector<std::string> components = study->GetComponentNames(""); //The context doesn't matter
-  CPPUNIT_ASSERT(components.size() == 1 && components[0] == "sco1");
-
   //Check method FindComponentID
   _PTR(SComponent) sco3 = study->FindComponentID(sco1->GetID());
   CPPUNIT_ASSERT(sco3 && sco3->GetID() == sco1->GetID());
@@ -122,7 +101,7 @@ void SALOMEDSTest::testStudy()
   _PTR(AttributeIOR) ior_attr_so1 = studyBuilder->FindOrCreateAttribute(so1, "AttributeIOR");
   CPPUNIT_ASSERT(ior_attr_so1);
 
-  std::string ior = _orb->object_to_string(_sm);
+  std::string ior = _orb->object_to_string(_study);
   ior_attr_so1->SetValue(ior);
   
   _PTR(SObject) so2 = studyBuilder->NewObject(so1);
@@ -171,10 +150,6 @@ void SALOMEDSTest::testStudy()
   path = study->GetObjectPath(emptySO);
   CPPUNIT_ASSERT(path.empty());
 
-  //Check method SetContext
-  study->SetContext("/sco1"); 
-  CPPUNIT_ASSERT(study->GetContext() == "/sco1");
-
   //Check method FindObjectByPath
   _PTR(SObject) so6 = study->FindObjectByPath("so1");
   CPPUNIT_ASSERT(so6 && so6->GetID() == so1->GetID());
@@ -184,40 +159,6 @@ void SALOMEDSTest::testStudy()
   _PTR(SObject) tmp = study->FindObjectByPath(""); //Must return the Context SObject
   CPPUNIT_ASSERT(tmp && tmp->GetID() == sco1->GetID());
 
-  study->SetContext("/"); //Root
-
-  //Check method GetObjectNames
-  std::vector<std::string> vs = study->GetObjectNames("/sco1");  
-  CPPUNIT_ASSERT(vs.size() == 2);
-    
-  //Check method GetDirectoryNames
-  _PTR(AttributeLocalID) locid_attr_sco1 = studyBuilder->FindOrCreateAttribute(sco1, "AttributeLocalID");
-  CPPUNIT_ASSERT(locid_attr_sco1);
-  locid_attr_sco1->SetValue(16661); //DIRECTORYID
-  _PTR(AttributeLocalID) locid_attr_so1 = studyBuilder->FindOrCreateAttribute(so1, "AttributeLocalID");
-  CPPUNIT_ASSERT(locid_attr_so1);
-  locid_attr_so1->SetValue(16661); //DIRECTORYID
-  vs = study->GetDirectoryNames(""); //Empty context (the current is taken)
-  CPPUNIT_ASSERT(vs.size() == 2);
-
-  //Check method GetFileNames
-  locid_attr_sco1->SetValue(26662); //FILELOCALID
-  _PTR(AttributePersistentRef) persref_attr_sco1 = studyBuilder->FindOrCreateAttribute(sco1, "AttributePersistentRef");
-  CPPUNIT_ASSERT(persref_attr_sco1);
-  persref_attr_sco1->SetValue("FILE: filename1");
-  locid_attr_so1->SetValue(26662); //FILELOCALID
-  _PTR(AttributePersistentRef) persref_attr_so1 = studyBuilder->FindOrCreateAttribute(so1, "AttributePersistentRef");
-  CPPUNIT_ASSERT(persref_attr_so1);
-  persref_attr_so1->SetValue("FILE: filename2");
-  vs = study->GetFileNames("");
-  CPPUNIT_ASSERT(vs.size() == 2 && vs[0] == "filename1" && vs[1] == "filename2");
-
-  //Check method StudyId (get/set)
-  int id = study->StudyId();
-  study->StudyId(-1);
-  CPPUNIT_ASSERT(study->StudyId() == -1);
-  study->StudyId(id);
-
   //Check method FindDependances
   studyBuilder->Addreference(so2, so1);
   studyBuilder->Addreference(sco1, so1);
@@ -257,7 +198,7 @@ void SALOMEDSTest::testStudy()
   CPPUNIT_ASSERT(date == "08/09/0010 07:06");
 
   //Check method GetModificationsDate
-  vs = study->GetModificationsDate();
+  std::vector<std::string> vs = study->GetModificationsDate();
   CPPUNIT_ASSERT(vs.size() == 2 && vs[0] == "03/04/0005 02:01" && vs[1] == "08/09/0010 07:06");
 
   //Check method GetCommonParameters
@@ -337,10 +278,10 @@ void SALOMEDSTest::testStudy()
   system("rm -f SRN.py");
   CPPUNIT_ASSERT(line.substr(0,50) == "### This file is generated automatically by SALOME");
 
-  //Check method Close 
+  //Check method Clear
   bool isException = false;
   try {
-    sm->Close(study);  //Close is called inside StudyManager::Close
+    study->Clear();  //Clear is called inside Study::Clear()
   }
   catch(...) {
     isException = true;
index a116d70a1c5cb23aa7bf496aed7dc17ca8bd3e64..84df3faf9f9e6b5fe65581a942c5e95c95a75d60 100755 (executable)
 
 void SALOMEDSTest::testStudyBuilder()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("TestStudyBuilder");
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
   CPPUNIT_ASSERT(study);
 
@@ -48,7 +43,7 @@ void SALOMEDSTest::testStudyBuilder()
   CPPUNIT_ASSERT(sco1 && sco1->ComponentDataType() == "Test");
 
   //Check method DefineComponentInstance
-  std::string ior = _orb->object_to_string(_sm);
+  std::string ior = _orb->object_to_string(_study);
   studyBuilder->DefineComponentInstance(sco1, ior);
   std::string newior;
   sco1->ComponentIOR(newior);
@@ -165,10 +160,10 @@ void SALOMEDSTest::testStudyBuilder()
   studyBuilder->SetIOR(so1, ior);
   CPPUNIT_ASSERT(so1->GetIOR() == ior);
 
-  sm->Close(study);
+  study->Clear();
 
   //Check method LoadWith
-  _PTR(Study) study2 = sm->NewStudy("Study2");
+  _PTR(Study) study2(new SALOMEDS_Study(new SALOMEDSImpl_Study()));
   
   SALOME_NamingService NS(_orb);
   CORBA::Object_var obj = SALOME_LifeCycleCORBA(&NS).FindOrLoad_Component("FactoryServer", "SMESH");
@@ -185,10 +180,11 @@ void SALOMEDSTest::testStudyBuilder()
   ior = _orb->object_to_string(drv);
   sb2->DefineComponentInstance(sco, ior);
 
-  sm->SaveAs("srn_SALOMEDS_UnitTests.hdf", study2, false);
-  sm->Close(study2);
+  study2->SaveAs("srn_SALOMEDS_UnitTests.hdf", false, false);
+  study2->Clear();
 
-  _PTR(Study) study3 = sm->Open("srn_SALOMEDS_UnitTests.hdf");
+  _PTR(Study) study3(new SALOMEDS_Study(new SALOMEDSImpl_Study()));
+  study3->Open("srn_SALOMEDS_UnitTests.hdf");
   _PTR(StudyBuilder) sb3 = study3->NewBuilder();
   _PTR(SComponent) aComp = study3->FindComponent("SMESH");
   CPPUNIT_ASSERT(aComp);
@@ -207,7 +203,6 @@ void SALOMEDSTest::testStudyBuilder()
     isRaised = true;
   }
 
-
   CPPUNIT_ASSERT(!isRaised);
 
   ior = "";
@@ -216,37 +211,5 @@ void SALOMEDSTest::testStudyBuilder()
 
   system("rm -f srn_SALOMEDS_UnitTests.hdf");
 
-  //Check method AddDirectory
-  _PTR(AttributeName) na1 = sb3->FindOrCreateAttribute(aComp, "AttributeName");
-  na1->SetValue("Component");
-
-  isRaised = false;
-  try {
-    sb3->AddDirectory("/Component/Dir1");
-  } catch(...) {
-    isRaised = true;
-  }
-
-
-  CPPUNIT_ASSERT(!isRaised);
-  _PTR(SObject) so5 = study3->FindObjectByPath("/Component/Dir1");
-  CPPUNIT_ASSERT(so5);
-
-  isRaised = false;
-  try {
-    sb3->AddDirectory("/Component/Dir1"); //Attempt to create the same directory
-  } catch(...) {
-    isRaised = true;
-  }
-  CPPUNIT_ASSERT(isRaised);
-
-  isRaised = false;
-  try {
-    sb3->AddDirectory("/MyComponent/Dir1"); //Attempt to create the invalid directory
-  } catch(...) {
-    isRaised = true;
-  }
-  CPPUNIT_ASSERT(isRaised);
-
-  sm->Close(study3);  
+  study3->Clear();
 }
diff --git a/src/SALOMEDS/Test/SALOMEDSTest_StudyManager.cxx b/src/SALOMEDS/Test/SALOMEDSTest_StudyManager.cxx
deleted file mode 100755 (executable)
index 1e4ce4e..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-// Copyright (C) 2007-2016  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, or (at your option) any later version.
-//
-// 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
-//
-
-/*!
- * Check all methods of SALOMEDS_StudyManager
- * Use code of SALOMEDS_StudyManager.cxx
- */
-void SALOMEDSTest::testStudyManager()
-{
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-
-  CPPUNIT_ASSERT(sm);
-
-  //Check method NewStudy
-  _PTR(Study) study1 = sm->NewStudy("Study1");
-  CPPUNIT_ASSERT(study1);
-
-  //Check method GetStudyByName
-  _PTR(Study) study3 = sm->GetStudyByName("Study1");
-  CPPUNIT_ASSERT(study3->StudyId() == study1->StudyId());
-  CPPUNIT_ASSERT(study3->Name() == study1->Name());
-
-  //Check method GetOpenStudies
-  std::vector<std::string> v = sm->GetOpenStudies();
-  CPPUNIT_ASSERT(v.size() == 1);
-
-  //Check method GetStudyByID for invalid ID
-  CPPUNIT_ASSERT(!sm->GetStudyByID(-1));
-
-  //Check methods CanPaste, CanCopy, Copy, Paste
-  _PTR(StudyBuilder) sb1 = study1->NewBuilder();
-  _PTR(SComponent) sco1 = sb1->NewComponent("Test");
-  _PTR(SObject) so1 = sb1->NewObject(sco1);
-  _PTR(AttributeName) na1 = sb1->FindOrCreateAttribute(so1, "AttributeName");
-  CPPUNIT_ASSERT(na1);
-  na1->SetValue("Some name");
-
-  CPPUNIT_ASSERT(!sm->CanCopy(so1)); //The father component has no IOR
-  
-  CPPUNIT_ASSERT(sm->Copy(so1));
-
-  CPPUNIT_ASSERT(!sm->CanPaste(so1)); //The father component has no IOR
-
-  _PTR(SObject) so1_2 = sb1->NewObject(sco1);
-  _PTR(SObject) pasted_so = sm->Paste(so1_2);
-  CPPUNIT_ASSERT(pasted_so);
-
-  _PTR(AttributeName) na2 = sb1->FindOrCreateAttribute(pasted_so, "AttributeName");
-  CPPUNIT_ASSERT(na2 && na2->Value() == "Some name");
-
-
-  //Check method SaveAs
-  sm->SaveAs("srn_UnitTest_Save.hdf", study1, false);
-  std::string url = study1->URL();
-  sm->Close(study1);
-
-  //Check method Open
-  _PTR(Study) study1_opened = sm->Open("srn_UnitTest_Save.hdf");  //Contains Test component
-  system("rm -f srn_UnitTest_Save.hdf");
-  url = study1_opened->URL();
-  CPPUNIT_ASSERT(study1_opened);
-  CPPUNIT_ASSERT(url == "srn_UnitTest_Save.hdf");
-
-  //Check method Save
-  _PTR(StudyBuilder) sb3 = study1_opened->NewBuilder();
-  _PTR(SComponent) sco3 = study1_opened->FindComponent("Test");
-  CPPUNIT_ASSERT(sco3);
-  //   Add a new SObject with AttributeName that contains "Saved study" string
-  _PTR(SObject) so3 = sb3->NewObject(sco3);
-  std::string soID = so3->GetID();
-  _PTR(AttributeName) na3 = sb3->FindOrCreateAttribute(so3, "AttributeName");
-  CPPUNIT_ASSERT(na3);
-  na3->SetValue("Saved study");
-
-  //   Save and close the study
-  sm->Save(study1_opened, false);
-
-  sm->Close(study1_opened);
-
-  //  Open saved study and find the created SObject with AttributeName, then compare the stored string
-  _PTR(Study) study2_opened = sm->Open("srn_UnitTest_Save.hdf");
-
-  system("rm -f srn_UnitTest_Save.hdf");
-
-  CPPUNIT_ASSERT(study2_opened);
-
-  _PTR(SObject) so4 = study2_opened->CreateObjectID(soID);
-  _PTR(StudyBuilder) sb4 = study2_opened->NewBuilder();
-  _PTR(AttributeName) na4 = sb4->FindOrCreateAttribute(so4, "AttributeName");
-  CPPUNIT_ASSERT(na4 && na4->Value() == "Saved study"); //Compare the value of restored attribute with string that has to be saved.
-  //Check method SaveAsASCII
-  sm->SaveAsASCII("srn_UnitTest_SaveASCII.hdf", study2_opened, false);
-  url = study2_opened->URL();
-  sm->Close(study2_opened);
-
-  _PTR(Study) study3_opened = sm->Open("srn_UnitTest_SaveASCII.hdf");  //Contains Test component
-  system("rm -f srn_UnitTest_SaveASCII.hdf");
-  CPPUNIT_ASSERT(study3_opened);
-  CPPUNIT_ASSERT(url == "srn_UnitTest_SaveASCII.hdf");
-
-  //Check method SaveASCII
-  _PTR(StudyBuilder) sb5 = study3_opened->NewBuilder();
-  _PTR(SComponent) sco5 = study3_opened->FindComponent("Test");
-  CPPUNIT_ASSERT(sco5);
-  //   Add a new SObject with AttributeName that contains "Saved study" string
-  _PTR(SObject) so5 = sb5->NewObject(sco5);
-  soID = so5->GetID();
-  _PTR(AttributeName) na5 = sb5->FindOrCreateAttribute(so5, "AttributeName");
-  CPPUNIT_ASSERT(na5);
-  na5->SetValue("Saved study ASCII");
-  //   Save and close the study
-  sm->Save(study3_opened, false);
-  sm->Close(study3_opened);
-
-  //  Open saved study and find the created SObject with AttributeName, then compare the stored string
-  _PTR(Study) study4_opened = sm->Open("srn_UnitTest_SaveASCII.hdf");
-  system("rm -f srn_UnitTest_SaveASCII.hdf");
-  CPPUNIT_ASSERT(study4_opened);
-  _PTR(SObject) so6 = study4_opened->CreateObjectID(soID);
-  _PTR(StudyBuilder) sb6 = study4_opened->NewBuilder();
-  _PTR(AttributeName) na6 = sb6->FindOrCreateAttribute(so6, "AttributeName");
-  CPPUNIT_ASSERT(na6 && na6->Value() == "Saved study ASCII"); //Compare the value of restored attribute with string that has to be saved.
-}
-
-
-
index 7db8cd10956483d9a8c9d7f0154fe6454751d846..30455b5caa51b502c9e065d55346b9cc1cc98e63 100755 (executable)
 
 void SALOMEDSTest::testUseCase()
 {
-  //Create or find the Study manager
-  _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
-  CPPUNIT_ASSERT(sm);
+  //Create Study
+  _PTR(Study) study(new SALOMEDS_Study(_study));
 
-  //Create a new study
-  _PTR(Study) study = sm->NewStudy("TestSObject");
   CPPUNIT_ASSERT(study);
 
   //Create Study Builder
@@ -148,7 +145,7 @@ void SALOMEDSTest::testUseCase()
   CPPUNIT_ASSERT(it->More());
   CPPUNIT_ASSERT(it->Value()->GetID() == so1->GetID());
 
-  sm->Close(study);
+  study->Clear();
 }
 #undef SALOMEDS_ALL_TESTS
 
index f3773deaf2ccd955157e4d6c68fcecb63c036108..d47bc004fb1a66d5c3b5cdc16d2a97c514b7c7e8 100644 (file)
@@ -51,7 +51,7 @@ CPPUNIT_TEST_SUITE_REGISTRATION( SALOMEDSTest_Embedded );
 #include "Basics_Utils.hxx"
 #include "SALOME_NamingService.hxx"
 #include "NamingService_WaitForServerReadiness.hxx"
-#include "SALOMEDS_StudyManager_i.hxx"
+#include "SALOMEDS_Study_i.hxx"
 
 #ifdef WIN32
 #include <winsock2.h>
@@ -75,13 +75,13 @@ int main(int argc, char* argv[])
 
   SALOME_NamingService NS(orb);
   if(host.empty())
-    NamingService_WaitForServerReadiness(&NS, "/myStudyManager");
+    NamingService_WaitForServerReadiness(&NS, "/Study");
   else {
     std::string serverName = "/Containers/"+host+"/SuperVisionContainer";
     NamingService_WaitForServerReadiness(&NS, serverName);
   }
 
-  CORBA::Object_var obj = NS.Resolve( "/myStudyManager" );
+  CORBA::Object_var obj = NS.Resolve( "/Study" );
   if(CORBA::is_nil(obj)) {
      system("killSalome.py");
      return 1;
@@ -96,10 +96,11 @@ int main(int argc, char* argv[])
   if(!CORBA::is_nil(poaObj)) {
                 PortableServer::POA_var poa = PortableServer::POA::_narrow(poaObj);
 
-    SALOMEDS_StudyManager_i * aStudyManager_i = new  SALOMEDS_StudyManager_i(orb, poa);
+    SALOMEDS_Study_i* aStudy_i = new SALOMEDS_Study_i(orb);
     // Activate the objects.  This tells the POA that the objects are ready to accept requests.
-    PortableServer::ObjectId_var aStudyManager_iid =  poa->activate_object(aStudyManager_i);
-    aStudyManager_i->register_name("/myStudyManager_embedded");
+    PortableServer::ObjectId_var aStudy_iid =  poa->activate_object(aStudy_i);
+    SALOMEDS::Study_var Study = aStudy_i->_this();
+    NS.Register(Study.in(), "/Study_embedded");
 
     // Obtain a POAManager, and tell the POA to start accepting
     // requests on its objects.
index 863a12eabb44cdf7631d7f3746af8f043377a4c8..2551d4bdbb4e66fc820ee1647761d82ce1f8729c 100644 (file)
@@ -21,7 +21,7 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-import sys, os,signal,string,commands
+import sys, os,signal,string,subprocess
 import subprocess
 import runSalome
 import orbmodule
index 9a1598467e28157f948c46c24c60c29bfcb106e8..aeba1bbad884350430ccb56a7db37aa5ac4d44ae 100644 (file)
@@ -61,7 +61,6 @@
 #include "SALOMEDSClient_SObject.hxx"
 #include "SALOMEDSClient_Study.hxx"
 #include "SALOMEDSClient_StudyBuilder.hxx"
-#include "SALOMEDSClient_StudyManager.hxx"
 #include "SALOMEDSClient_UseCaseBuilder.hxx"
 #include "SALOMEDSClient_UseCaseIterator.hxx"
 
index f1571a2abc4be198408adf86b01d99594a912d8b..2d0a83644141fd8740cdbddd46d61b5565fabcc4 100644 (file)
@@ -39,35 +39,29 @@ static void* _libHandle = NULL;
 #define SOBJECT_FACTORY      "SObjectFactory"
 #define SCOMPONENT_FACTORY   "SComponentFactory"
 #define STUDY_FACTORY        "StudyFactory"
+#define STUDY_CREATE         "CreateStudy"
 #define BUILDER_FACTORY      "BuilderFactory"
-#define STUDYMANAGER_FACTORY "StudyManagerFactory"
-#define STUDYMANAGER_CREATE  "CreateStudyManager"
 #define GET_PARAMETERS       "GetIParameters"
 #define CONVERT_SOBJECT      "ConvertSObject"
-#define CONVERT_STUDY        "ConvertStudy"
 #define CONVERT_BUILDER      "ConvertBuilder"
 
 typedef SALOMEDSClient_SObject* (*SOBJECT_FACTORY_FUNCTION) (SALOMEDS::SObject_ptr);
 typedef SALOMEDSClient_SComponent* (*SCOMPONENT_FACTORY_FUNCTION) (SALOMEDS::SComponent_ptr);
 typedef SALOMEDSClient_Study* (*STUDY_FACTORY_FUNCTION) (SALOMEDS::Study_ptr);
-typedef SALOMEDSClient_StudyManager* (*STUDYMANAGER_FACTORY_FUNCTION) ();
+typedef void                  (*STUDY_CREATE_FUNCTION) (CORBA::ORB_ptr, PortableServer::POA_ptr);
 typedef SALOMEDSClient_StudyBuilder* (*BUILDER_FACTORY_FUNCTION) (SALOMEDS::StudyBuilder_ptr);
-typedef SALOMEDSClient_StudyManager* (*STUDYMANAGER_CREATE_FUNCTION) (CORBA::ORB_ptr, PortableServer::POA_ptr);
 typedef SALOMEDSClient_IParameters* (*GET_PARAMETERS_FACTORY) (const _PTR(AttributeParameter)&);
 typedef SALOMEDS::SObject_ptr (*CONVERT_SOBJECT_FUNCTION) (const _PTR(SObject)&);
-typedef SALOMEDS::Study_ptr (*CONVERT_STUDY_FUNCTION) (const _PTR(Study)&);
 typedef SALOMEDS::StudyBuilder_ptr (*CONVERT_BUILDER_FUNCTION) (const _PTR(StudyBuilder)&);
 
 
 static SOBJECT_FACTORY_FUNCTION aSObjectFactory = NULL;
 static SCOMPONENT_FACTORY_FUNCTION aSComponentFactory = NULL;
 static STUDY_FACTORY_FUNCTION aStudyFactory = NULL;
+static STUDY_CREATE_FUNCTION aCreateFactory = NULL;
 static BUILDER_FACTORY_FUNCTION aBuilderFactory = NULL;
-static STUDYMANAGER_FACTORY_FUNCTION aManagerFactory = NULL;
-static STUDYMANAGER_CREATE_FUNCTION aCreateFactory = NULL;
 static GET_PARAMETERS_FACTORY aGetIParameters = NULL;
 static CONVERT_SOBJECT_FUNCTION aConvertSObject = NULL;
-static CONVERT_STUDY_FUNCTION aConvertStudy = NULL;
 static CONVERT_BUILDER_FUNCTION aConvertBuilder = NULL;
 
 _PTR(SObject) ClientFactory::SObject(SALOMEDS::SObject_ptr theSObject)
@@ -118,52 +112,33 @@ _PTR(Study) ClientFactory::Study(SALOMEDS::Study_ptr theStudy)
   return _PTR(Study)(study);
 }
 
-_PTR(StudyBuilder) ClientFactory::StudyBuilder(SALOMEDS::StudyBuilder_ptr theStudyBuilder)
-{
-  SALOMEDSClient_StudyBuilder* studyBuilder = NULL;
-
-#ifdef WIN32
-  if(!_libHandle) _libHandle = ::LoadLibrary(SALOMEDS_LIB_NAME);
-  if(!aBuilderFactory) aBuilderFactory = (BUILDER_FACTORY_FUNCTION)::GetProcAddress(_libHandle, BUILDER_FACTORY);
-#else
-  if(!_libHandle) _libHandle = dlopen(SALOMEDS_LIB_NAME, RTLD_LAZY | RTLD_GLOBAL);
-  if(!aBuilderFactory) aBuilderFactory = (BUILDER_FACTORY_FUNCTION) dlsym(_libHandle, BUILDER_FACTORY);
-#endif
-
-  if(aBuilderFactory) studyBuilder = aBuilderFactory(theStudyBuilder); 
-  return _PTR(StudyBuilder)(studyBuilder);
-}
-
-_PTR(StudyManager) ClientFactory::StudyManager()
+void ClientFactory::createStudy(CORBA::ORB_ptr orb, PortableServer::POA_ptr poa)
 {
-  SALOMEDSClient_StudyManager* manager = NULL;
-
 #ifdef WIN32
   if(!_libHandle) _libHandle = ::LoadLibrary(SALOMEDS_LIB_NAME);
-  if(!aManagerFactory) aManagerFactory = (STUDYMANAGER_FACTORY_FUNCTION)::GetProcAddress(_libHandle, STUDYMANAGER_FACTORY);
+  if(!aCreateFactory) aCreateFactory = (STUDY_CREATE_FUNCTION)::GetProcAddress(_libHandle, STUDY_CREATE);
 #else
   if(!_libHandle) _libHandle = dlopen(SALOMEDS_LIB_NAME, RTLD_LAZY | RTLD_GLOBAL);
-  if(!aManagerFactory) aManagerFactory = (STUDYMANAGER_FACTORY_FUNCTION) dlsym(_libHandle, STUDYMANAGER_FACTORY);
+  if(!aCreateFactory) aCreateFactory = (STUDY_CREATE_FUNCTION) dlsym(_libHandle, STUDY_CREATE);
 #endif
 
-  if(aManagerFactory) manager = aManagerFactory(); 
-  return _PTR(StudyManager)(manager);
+  if(aCreateFactory) aCreateFactory(orb, poa);
 }
 
-_PTR(StudyManager) ClientFactory::createStudyManager(CORBA::ORB_ptr orb, PortableServer::POA_ptr poa)
+_PTR(StudyBuilder) ClientFactory::StudyBuilder(SALOMEDS::StudyBuilder_ptr theStudyBuilder)
 {
-  SALOMEDSClient_StudyManager* manager = NULL;
+  SALOMEDSClient_StudyBuilder* studyBuilder = NULL;
 
 #ifdef WIN32
   if(!_libHandle) _libHandle = ::LoadLibrary(SALOMEDS_LIB_NAME);
-  if(!aCreateFactory) aCreateFactory = (STUDYMANAGER_CREATE_FUNCTION)::GetProcAddress(_libHandle, STUDYMANAGER_CREATE);
+  if(!aBuilderFactory) aBuilderFactory = (BUILDER_FACTORY_FUNCTION)::GetProcAddress(_libHandle, BUILDER_FACTORY);
 #else
   if(!_libHandle) _libHandle = dlopen(SALOMEDS_LIB_NAME, RTLD_LAZY | RTLD_GLOBAL);
-  if(!aCreateFactory) aCreateFactory = (STUDYMANAGER_CREATE_FUNCTION) dlsym(_libHandle, STUDYMANAGER_CREATE);
+  if(!aBuilderFactory) aBuilderFactory = (BUILDER_FACTORY_FUNCTION) dlsym(_libHandle, BUILDER_FACTORY);
 #endif
 
-  if(aCreateFactory)  manager = aCreateFactory(orb, poa);
-  return _PTR(StudyManager)(manager);
+  if(aBuilderFactory) studyBuilder = aBuilderFactory(theStudyBuilder); 
+  return _PTR(StudyBuilder)(studyBuilder);
 }
 
 _PTR(IParameters) ClientFactory::getIParameters(const _PTR(AttributeParameter)& ap)
@@ -200,25 +175,6 @@ SALOMEDS::SObject_ptr ClientFactory::crbSObject(const _PTR(SObject)& theSObject)
   return so._retn();
 }
 
-
-SALOMEDS::Study_ptr ClientFactory::crbStudy(const _PTR(Study)& theStudy)
-{
-  SALOMEDS::Study_var study;
-
-#ifdef WIN32
-  if(!_libHandle) _libHandle = ::LoadLibrary(SALOMEDS_LIB_NAME);
-  if(!aConvertStudy) aConvertStudy = (CONVERT_STUDY_FUNCTION)::GetProcAddress(_libHandle, CONVERT_STUDY);
-#else
-  if(!_libHandle) _libHandle = dlopen(SALOMEDS_LIB_NAME, RTLD_LAZY | RTLD_GLOBAL);
-  if(!aConvertStudy) aConvertStudy = (CONVERT_STUDY_FUNCTION) dlsym(_libHandle, CONVERT_STUDY);
-#endif
-
-  if(aConvertStudy) study = aConvertStudy(theStudy); 
-  
-  if(CORBA::is_nil(study)) return SALOMEDS::Study::_nil();
-  return study._retn();
-}
-
 SALOMEDS::StudyBuilder_ptr ClientFactory::crbStudyBuilder(const _PTR(StudyBuilder)& theStudyBuilder)
 {
   SALOMEDS::StudyBuilder_var studyBuilder;
index 59df14ea57e708b1ad0509bacf59b9641e378861..6293ce2941aa57cb0a6561ff8a8b1a073eb7f4c6 100644 (file)
@@ -32,7 +32,6 @@
 #include "SALOMEDSClient_SObject.hxx"
 #include "SALOMEDSClient_SComponent.hxx"
 #include "SALOMEDSClient_Study.hxx"
-#include "SALOMEDSClient_StudyManager.hxx"
 #include "SALOMEDSClient_IParameters.hxx"
 
 #include <string>
@@ -60,19 +59,14 @@ public:
   static _PTR(Study) Study(SALOMEDS::Study_ptr theStudy);
 
   /*!
-   *  Returns a client StudyBuilder wrapper that corresponds %theStudy
-   */
-  static _PTR(StudyBuilder) StudyBuilder(SALOMEDS::StudyBuilder_ptr theBuilder);
-
-  /*!
-   *  Returns a client StudyManager wrapper
+   *  Creates and returns a client Study wrapper
    */
-  static _PTR(StudyManager) StudyManager();
+  static void createStudy(CORBA::ORB_ptr orb, PortableServer::POA_ptr poa);
 
   /*!
-   *  Creates and returns a client StudyManager wrapper
+   *  Returns a client StudyBuilder wrapper that corresponds %theStudy
    */
-  static _PTR(StudyManager) createStudyManager(CORBA::ORB_ptr orb, PortableServer::POA_ptr poa);
+  static _PTR(StudyBuilder) StudyBuilder(SALOMEDS::StudyBuilder_ptr theBuilder);
 
   /*!
    * Returns an IParameters interface
@@ -85,11 +79,6 @@ public:
    */
   static SALOMEDS::SObject_ptr crbSObject(const _PTR(SObject)& theSObject);
 
-  /*!
-   *  Returns a CORBA Study that corresponds %theStudy
-   */
-  static SALOMEDS::Study_ptr crbStudy(const _PTR(Study)& theStudy);  
-
   /*!
    *  Returns a CORBA StudyBuilder that corresponds %theStudyBuilder
    */
index 78a8fc6ace79cdfa6ee9aca8aaed3ec508ae3215..1ceaabe1e14769b06113b4d1b1f01cffa8a101fc 100644 (file)
@@ -141,12 +141,12 @@ public:
   /*!
     Enables/Disables the dumping visual parameters, static implementation is supposed
    */
-  virtual void setDumpPython(_PTR(Study) study, const std::string& theID = "") = 0;
+  virtual void setDumpPython(const std::string& theID = "") = 0;
 
   /*!
     Returns whether there is the dumping visual parameters, static implementation is supposed
    */
-  virtual bool isDumpPython(_PTR(Study) study, const std::string& theID = "") = 0;  
+  virtual bool isDumpPython(const std::string& theID = "") = 0;
 
   /*!
     Returns a default name of the component where the visula parameters are stored.
index 9aa5812b14a5bd91894f6f46d3b0c9f79af00ece..29840b7f39252b99b81270218b49c40f15cd13e2 100644 (file)
@@ -49,7 +49,6 @@ public:
   virtual bool FindAttribute(_PTR(GenericAttribute)& anAttribute, const std::string& aTypeOfAttribute) = 0;
   virtual bool ReferencedObject(_PTR(SObject)& theObject) = 0;
   virtual bool FindSubObject(int theTag, _PTR(SObject)& theObject) = 0;
-  virtual _PTR(Study) GetStudy() = 0;
   virtual std::string Name() = 0;
   virtual void  Name(const std::string& theName)  = 0;
   virtual std::vector<_PTR(GenericAttribute)> GetAllAttributes() = 0;
index 7f7349f3b4586b806e7ced02ee5a5cbbc47b40c3..8732b23d50c39a24acbf0857f5c3f7627c78aeb6 100644 (file)
@@ -49,8 +49,12 @@ class SALOMEDSClient_Study
 public:
   virtual ~SALOMEDSClient_Study() {}
 
+  virtual void Init() = 0;
+  virtual void Clear() = 0;
+
+  virtual bool Open(const std::string& theStudyUrl) = 0;
+
   virtual std::string GetPersistentReference() = 0;
-  virtual std::string GetTransientReference() = 0;
   virtual bool IsEmpty() = 0;
   virtual _PTR(SComponent) FindComponent (const std::string& aComponentName) = 0;
   virtual _PTR(SComponent) FindComponentID(const std::string& aComponentID) = 0;
@@ -61,31 +65,30 @@ public:
   virtual _PTR(SObject) FindObjectIOR(const std::string& anObjectIOR) = 0;
   virtual _PTR(SObject) FindObjectByPath(const std::string& thePath) = 0;
   virtual std::string GetObjectPath(const _PTR(SObject)& theSO) = 0;
-  virtual void SetContext(const std::string& thePath) = 0;
-  virtual std::string GetContext() = 0;  
-  virtual std::vector<std::string> GetObjectNames(const std::string& theContext) = 0;
-  virtual std::vector<std::string> GetDirectoryNames(const std::string& theContext) = 0;
-  virtual std::vector<std::string> GetFileNames(const std::string& theContext) = 0;
-  virtual std::vector<std::string> GetComponentNames(const std::string& theContext) = 0;
   virtual _PTR(ChildIterator) NewChildIterator(const _PTR(SObject)& theSO) = 0;
   virtual _PTR(SComponentIterator) NewComponentIterator() = 0;
   virtual _PTR(StudyBuilder) NewBuilder() = 0;
   virtual std::string Name() = 0;
-  virtual void  Name(const std::string& name) = 0;
   virtual bool IsSaved() = 0;
   virtual void  IsSaved(bool save) = 0;
   virtual bool IsModified() = 0;
   virtual void Modified() = 0;
   virtual std::string URL() = 0;
   virtual void  URL(const std::string& url) = 0;
-  virtual int StudyId() = 0;
-  virtual void  StudyId(int id) = 0;
   virtual std::vector<_PTR(SObject)> FindDependances(const _PTR(SObject)& theSO) = 0;
   virtual _PTR(AttributeStudyProperties) GetProperties() = 0;
   virtual std::string GetLastModificationDate() = 0;
   virtual std::vector<std::string> GetModificationsDate() = 0;
   virtual _PTR(UseCaseBuilder) GetUseCaseBuilder() = 0;
-  virtual void Close() = 0;
+
+  virtual bool Save(bool theMultiFile, bool theASCII) = 0;
+  virtual bool SaveAs(const std::string& theUrl, bool theMultiFile, bool theASCII) = 0;
+
+  virtual bool CanCopy(const _PTR(SObject)& theSO) = 0;
+  virtual bool Copy(const _PTR(SObject)& theSO) = 0;
+  virtual bool CanPaste(const _PTR(SObject)& theSO) = 0;
+  virtual _PTR(SObject) Paste(const _PTR(SObject)& theSO) = 0;
+
   virtual void EnableUseCaseAutoFilling(bool isEnabled) = 0;
   virtual bool DumpStudy(const std::string& thePath, 
                          const std::string& theBaseName, 
index 968a8e397de30f605b9ab172b6c182dba4354426..9889d2d0ea9f651275c4ed17ae8ba5b8cabc71f9 100644 (file)
@@ -43,7 +43,6 @@ public:
   virtual void RemoveComponent(const _PTR(SComponent)& theSCO) = 0;
   virtual _PTR(SObject) NewObject(const _PTR(SObject)& theFatherObject) = 0;
   virtual _PTR(SObject) NewObjectToTag(const _PTR(SObject)& theFatherObject, int theTag) = 0;
-  virtual void AddDirectory(const std::string& thePath) = 0;
   virtual void LoadWith(const _PTR(SComponent)& theSCO, const std::string& theIOR) = 0;
   virtual void Load(const _PTR(SObject)& theSCO) = 0;
   virtual void RemoveObject(const _PTR(SObject)& theSO) = 0;
diff --git a/src/SALOMEDSClient/SALOMEDSClient_StudyManager.hxx b/src/SALOMEDSClient/SALOMEDSClient_StudyManager.hxx
deleted file mode 100644 (file)
index d536bfe..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (C) 2007-2016  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, or (at your option) any later version.
-//
-// 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
-//
-
-//  File   : SALOMEDSClient_StudyManager.hxx
-//  Author : Sergey RUIN
-//  Module : SALOME
-//
-#ifndef __SALOMEDSClient_STUDYMANAGER_H__
-#define __SALOMEDSClient_STUDYMANAGER_H__
-
-#include <vector>
-#include <string>
-
-#include "SALOMEDSClient_definitions.hxx"
-#include "SALOMEDSClient_Study.hxx"
-
-class SALOMEDSClient_StudyManager
-{
-public:
-  virtual ~SALOMEDSClient_StudyManager() {}
-
-  virtual _PTR(Study) NewStudy(const std::string& study_name) = 0;
-  virtual _PTR(Study) Open(const std::string& theStudyUrl) = 0;
-  virtual void Close(const _PTR(Study)& theStudy) = 0;
-  virtual bool Save(const _PTR(Study)& theStudy, bool theMultiFile) = 0;
-  virtual bool SaveASCII(const _PTR(Study)& theStudy, bool theMultiFile) = 0;
-  virtual bool SaveAs(const std::string& theUrl,  const _PTR(Study)& theStudy, bool theMultiFile) = 0;
-  virtual bool SaveAsASCII(const std::string& theUrl,  const _PTR(Study)& theStudy, bool theMultiFile) = 0;
-  virtual std::vector<std::string> GetOpenStudies() = 0;
-  virtual _PTR(Study) GetStudyByName(const std::string& theStudyName) = 0;
-  virtual _PTR(Study) GetStudyByID(int theStudyID) = 0;
-  virtual bool CanCopy(const _PTR(SObject)& theSO) = 0;
-  virtual bool Copy(const _PTR(SObject)& theSO) = 0;
-  virtual bool CanPaste(const _PTR(SObject)& theSO) = 0;
-  virtual _PTR(SObject) Paste(const _PTR(SObject)& theSO) = 0;
-};
-
-#endif
index a1e643b08447eaf7426967c03a501579d09d5ebf..d939f651b7a2718bd27fef744290ee67e367e86c 100755 (executable)
@@ -84,7 +84,6 @@ SET(SalomeDSImpl_SOURCES
   SALOMEDSImpl_SComponentIterator.cxx
   SALOMEDSImpl_StudyBuilder.cxx
   SALOMEDSImpl_Study.cxx
-  SALOMEDSImpl_StudyManager.cxx
   SALOMEDSImpl_IParameters.cxx
   SALOMEDSImpl_TMPFile.cxx
   SALOMEDSImpl_GenericVariable.cxx
index f5c8ec76464fdf2898f38a0164eb7d744b78b6af..0b3a7564c1689c6c95cde4f176743e5f2f69b47c 100644 (file)
@@ -68,7 +68,7 @@ void SALOMEDSImpl_AttributeIOR::SetValue(const std::string& theValue)
   //remove IOR entry in study
   if(theValue != myString)
     {
-      SALOMEDSImpl_Study* study=SALOMEDSImpl_Study::GetStudy(Label());
+      SALOMEDSImpl_Study* study=SALOMEDSImpl_Study::GetStudyImpl(Label());
       study->RegisterGenObj(theValue, Label());
       study->UnRegisterGenObj(myString, Label());
       study->DeleteIORLabelMapItem(myString);
index 93e7483b42f948e1e3d54a8dfc3e9d64ba0c7b50..804218c126eadcdaf348a7eab9a814928bebebfd 100644 (file)
@@ -87,8 +87,7 @@ public:
     int theObjectID,
     const SALOMEDSImpl_SObject& theObject) = 0;
 
-  virtual SALOMEDSImpl_TMPFile* DumpPython(SALOMEDSImpl_Study* theStudy, 
-    bool isPublished, 
+  virtual SALOMEDSImpl_TMPFile* DumpPython(bool isPublished,
     bool isMultiFile, 
     bool& isValidScript,
     long& theStreamLength) = 0;
index 2813fbc9aba9ead50ccd844b436d8083b9310cf8..f74bb71b2e429b2c89ff2fab77d4e4955811791e 100644 (file)
@@ -63,7 +63,7 @@ void SALOMEDSImpl_GenericAttribute::CheckLocked()
   DF_Label aLabel = Label();
   if(aLabel.IsNull()) return;
 
-  SALOMEDSImpl_Study* aStudy = SALOMEDSImpl_Study::GetStudy(aLabel);
+  SALOMEDSImpl_Study* aStudy = SALOMEDSImpl_Study::GetStudyImpl(aLabel);
   if(!aStudy) return;
   if(aStudy->IsLocked()) {
     aStudy->_errorCode = "LockProtection";
@@ -88,7 +88,7 @@ void SALOMEDSImpl_GenericAttribute::SetModifyFlag(int reason)
    DF_Label aLabel = Label();
    if(aLabel.IsNull()) return; 
 
-  SALOMEDSImpl_Study* aStudy = SALOMEDSImpl_Study::GetStudy(aLabel);
+  SALOMEDSImpl_Study* aStudy = SALOMEDSImpl_Study::GetStudyImpl(aLabel);
   if(aStudy) aStudy->modifySO_Notification(GetSObject(), reason);
   if(aStudy) aStudy->Modify();
 }
index 38acf7d96e0605d7ed9624a35501d3f31e97db36..ba8d24376076dfb9deb3faaef32e37451608c158 100644 (file)
@@ -40,8 +40,6 @@ SALOMEDSImpl_IParameters::SALOMEDSImpl_IParameters(SALOMEDSImpl_AttributeParamet
 {
   if(!ap) return;
   _ap = ap;
-  SALOMEDSImpl_SObject so = _ap->GetSObject();
-  _study = so.GetStudy();
 }
 
 SALOMEDSImpl_IParameters::~SALOMEDSImpl_IParameters()
@@ -222,14 +220,13 @@ std::vector<std::string> SALOMEDSImpl_IParameters::getProperties()
 
 std::string SALOMEDSImpl_IParameters::decodeEntry(const std::string& entry)
 {
-  if(!_study) return entry;
   int pos = entry.rfind("_");
   if(pos < 0 || pos >= entry.size()) return entry;
 
   std::string compName(entry, 0, pos), compID, tail(entry, pos+1, entry.length()-1);
   
   if(_compNames.find(compName) == _compNames.end()) {
-    SALOMEDSImpl_SObject so = _study->FindComponent(compName);
+    SALOMEDSImpl_SObject so = SALOMEDSImpl_Study::GetStudyImpl( _ap->GetSObject().GetLabel() )->FindComponent(compName);
     if(!so) return entry;
     compID = so.GetID();
     _compNames[compName] = compID;
@@ -344,7 +341,7 @@ std::string SALOMEDSImpl_IParameters::getDefaultScript(SALOMEDSImpl_Study* study
 
 
   dump += shift +"import iparameters\n";
-  dump += shift + "ipar = iparameters.IParameters(theStudy.GetModuleParameters(\""+anID+"\", \""+moduleName+"\", 1))\n\n";
+  dump += shift + "ipar = iparameters.IParameters(salome.myStudy.GetModuleParameters(\""+anID+"\", \""+moduleName+"\", 1))\n\n";
   
   std::vector<std::string> v = ip.getProperties();
   if(v.size() > 0) {
index 2366071020bf5894a397edbb3ad3ce3664a61498..ac12499f36192092f8bc786bcff926552b6f979f 100644 (file)
@@ -160,7 +160,6 @@ public:
 
 private:
   SALOMEDSImpl_AttributeParameter* _ap;
-  SALOMEDSImpl_Study* _study;
   std::map<std::string, std::string> _compNames;
 };
 
index f9542954ce8ffafcee1a7b01dd30a0bcdbe69790..91fefae3e24cf6eebf3c8951fc7443593263604b 100644 (file)
@@ -104,7 +104,7 @@ SALOMEDSImpl_SComponent SALOMEDSImpl_SObject::GetFatherComponent() const
 
   if(LF.IsRoot()) return sco;
 
-  return GetStudy()->GetSComponent(LF);
+  return SALOMEDSImpl_Study::SComponent(LF);
 }
 
 //============================================================================
@@ -114,7 +114,7 @@ SALOMEDSImpl_SComponent SALOMEDSImpl_SObject::GetFatherComponent() const
 //============================================================================
 SALOMEDSImpl_SObject SALOMEDSImpl_SObject::GetFather() const
 {
-  return GetStudy()->GetSObject(_lab.Father());
+  return SALOMEDSImpl_Study::SObject(_lab.Father());
 }
 
 //============================================================================
@@ -127,16 +127,6 @@ int SALOMEDSImpl_SObject::GetLastChildTag() const
   return _lab.LastChildTag();
 }
 
-//============================================================================
-/*! Function : GetStudy
- *  Purpose  :
- */
-//============================================================================
-SALOMEDSImpl_Study* SALOMEDSImpl_SObject::GetStudy() const
-{
-  return SALOMEDSImpl_Study::GetStudy(_lab);
-}
-
 //============================================================================
 /*! Function : FindAttribute
  *  Purpose  : Find attribute of given type on this SObject
@@ -182,7 +172,7 @@ bool SALOMEDSImpl_SObject::ReferencedObject(SALOMEDSImpl_SObject& theObject) con
   if (!(Ref=(SALOMEDSImpl_AttributeReference*)_lab.FindAttribute(SALOMEDSImpl_AttributeReference::GetID())))
     return false;
   
-  theObject =  GetStudy()->GetSObject(Ref->Get());
+  theObject =  SALOMEDSImpl_Study::SObject(Ref->Get());
   return true;
 }
 
@@ -196,7 +186,7 @@ bool SALOMEDSImpl_SObject::FindSubObject(int theTag, SALOMEDSImpl_SObject& theOb
   DF_Label L = _lab.FindChild(theTag, false);
   if (L.IsNull()) return false;
   
-  theObject = GetStudy()->GetSObject(L);
+  theObject = SALOMEDSImpl_Study::SObject(L);
   return true;
     
 }  
index eadad35021eac7f17af88b59a35256c8eb4b13af..0bce0b68212ec80b187a0543f13b5455df3ddf64 100644 (file)
@@ -60,7 +60,6 @@ public:
   virtual bool ReferencedObject(SALOMEDSImpl_SObject& theObject) const ;
   virtual bool FindSubObject(int theTag, SALOMEDSImpl_SObject& theObject);
 
-  virtual SALOMEDSImpl_Study*  GetStudy() const;
   virtual std::string Name() const { return _name; }
   virtual void Name(const std::string& theName) { _name = theName; }
   virtual std::vector<DF_Attribute*> GetAllAttributes() const; 
index c6932e569020dbe70a30985a6b569dd890a7fedc..e0814bab1cbdba125d84602545e03a093a6d0347 100644 (file)
@@ -29,6 +29,9 @@
 
 #include <KERNEL_version.h>
 #include <Basics_Utils.hxx>
+#include <Basics_DirUtils.hxx>
+
+#include "HDFexplorer.hxx"
 
 #include "DF_Application.hxx"
 #include "DF_ChildIterator.hxx"
@@ -41,7 +44,9 @@
 #include "SALOMEDSImpl_Tool.hxx"
 #include "SALOMEDSImpl_IParameters.hxx"
 #include "SALOMEDSImpl_ScalarVariable.hxx"
+#include "SALOMEDSImpl_SComponent.hxx"
 
+#include "HDFOI.hxx"
 #include <fstream>
 #include <sstream>
 #include <algorithm>
 #define FILEID            "FILE: "
 #define VARIABLE_SEPARATOR  ':'
 #define OPERATION_SEPARATOR '|'
+#define USE_CASE_LABEL_ID "0:2"
+
+static void SaveAttributes(const SALOMEDSImpl_SObject& SO, HDFgroup *hdf_group_sobject);
+static void ReadAttributes(SALOMEDSImpl_Study*, const SALOMEDSImpl_SObject&, HDFdataset* );
+static void BuildTree (SALOMEDSImpl_Study*, HDFgroup*);
+static void Translate_IOR_to_persistentID (const SALOMEDSImpl_SObject&,
+                                           SALOMEDSImpl_Driver*, bool isMultiFile, bool isASCII);
+static void ReadNoteBookVariables(SALOMEDSImpl_Study* theStudy, HDFgroup* theGroup);
+
+namespace {
+  class StudyUnlocker
+  {
+  public:
+    StudyUnlocker( SALOMEDSImpl_Study* study ): myStudy( study ), myLocked( false )
+    {
+      myPrevLocked = myStudy->GetProperties()->IsLocked();
+      resume();
+    }
+    ~StudyUnlocker()
+    {
+      suspend();
+    }
+    void suspend()
+    {
+      if (myLocked) {
+        myStudy->GetProperties()->SetLocked(true);
+        myPrevLocked = myLocked;
+        myLocked = false;
+      }
+    }
+    void resume()
+    {
+      if (myPrevLocked) {
+        myStudy->GetProperties()->SetLocked(false);
+        myLocked = myPrevLocked;
+        myPrevLocked = false;
+      }
+    }
+  private:
+    SALOMEDSImpl_Study* myStudy;
+    bool myLocked;
+    bool myPrevLocked;
+  };
+}
 
 //============================================================================
 /*! Function : SALOMEDSImpl_Study
  *  Purpose  : SALOMEDSImpl_Study constructor
  */
 //============================================================================
-SALOMEDSImpl_Study::SALOMEDSImpl_Study(const DF_Document* doc,
-                                       const std::string& study_name)
+SALOMEDSImpl_Study::SALOMEDSImpl_Study()
+{
+  _appli = new DF_Application();
+  _clipboard = _appli->NewDocument("SALOME_STUDY");
+
+  Init();
+}
+
+//============================================================================
+/*! Function : ~SALOMEDSImpl_Study
+ *  Purpose  : SALOMEDSImpl_Study destructor
+ */
+//============================================================================
+SALOMEDSImpl_Study::~SALOMEDSImpl_Study()
+{
+  Clear();
+  _appli->Close(_clipboard);
+  // Destroy application
+  delete _appli;
+}
+
+//============================================================================
+/*! Function : Init
+ *  Purpose  : Initialize study components
+ */
+//============================================================================
+void SALOMEDSImpl_Study::Init()
 {
-  _name = study_name;
-  _doc = (DF_Document*)doc;
-  _Saved = false ;
+  static int _id = 0;
+  std::stringstream sstrm;
+  sstrm << ++_id;
+  _name = "Study" + std::string(sstrm.str());
+  _doc = _appli->NewDocument("SALOME_STUDY");
+  _Saved = false;
   _URL = "";
-  _StudyId = -1;
   _autoFill = false;
   _errorCode = "";
   _useCaseBuilder = new SALOMEDSImpl_UseCaseBuilder(_doc);
@@ -78,65 +154,1047 @@ SALOMEDSImpl_Study::SALOMEDSImpl_Study(const DF_Document* doc,
   //Put on the root label a StudyHandle attribute to store the address of this object
   //It will be used to retrieve the study object by DF_Label that belongs to the study
   SALOMEDSImpl_StudyHandle::Set(_doc->Main().Root(), this);
-}
 
+  // set Study properties
+  SALOMEDSImpl_AttributeStudyProperties* aProp = GetProperties();
+
+  int month=0,day=0,year=0,hh=0,mn=0,ss=0;
+  SALOMEDSImpl_Tool::GetSystemDate(year, month, day, hh, mn, ss);
+  aProp->SetModification(SALOMEDSImpl_Tool::GetUserName(),
+                         mn, hh, day, month, year);
+  aProp->SetCreationMode(1);  //"from scratch"
+}
 
 //============================================================================
-/*! Function : ~SALOMEDSImpl_Study
- *  Purpose  : SALOMEDSImpl_Study destructor
+/*! Function : Clear
+ *  Purpose  : Clear study components
  */
 //============================================================================
-SALOMEDSImpl_Study::~SALOMEDSImpl_Study()
+void SALOMEDSImpl_Study::Clear()
 {
   delete _builder;
   delete _cb;
   delete _useCaseBuilder;
+  URL("");
+  _appli->Close(_doc);
+  _doc = NULL;
+  _mapOfSO.clear();
+  _mapOfSCO.clear();
 }
 
 //============================================================================
-/*! Function : GetPersistentReference
- *  Purpose  : Get persistent reference of study (idem URL())
+/*! Function : Open
+ *  Purpose  : Open a Study from it's persistent reference
  */
 //============================================================================
-std::string SALOMEDSImpl_Study::GetPersistentReference()
+bool SALOMEDSImpl_Study::Open(const std::string& aUrl)
 {
+  // Set "C" locale temporarily to avoid possible localization problems
+  Kernel_Utils::Localizer loc;
+
   _errorCode = "";
-  return URL();
+
+  // open the HDFFile
+  HDFfile *hdf_file =0;
+  HDFgroup *hdf_group_study_structure =0;
+  HDFgroup *hdf_notebook_vars = 0;
+
+  char* aC_HDFUrl;
+  std::string aHDFUrl;
+  bool isASCII = false;
+  if (HDFascii::isASCII(aUrl.c_str())) {
+    isASCII = true;
+    char* aResultPath = HDFascii::ConvertFromASCIIToHDF(aUrl.c_str());
+    if ( !aResultPath )
+      return NULL;
+    aC_HDFUrl = new char[strlen(aResultPath) + 19];
+    sprintf(aC_HDFUrl, "%shdf_from_ascii.hdf", aResultPath);
+    delete [] (aResultPath);
+    aHDFUrl = aC_HDFUrl;
+    delete [] aC_HDFUrl;
+  }
+  else {
+    aHDFUrl = aUrl;
+  }
+
+  hdf_file = new HDFfile((char*)aHDFUrl.c_str());
+  try {
+    hdf_file->OpenOnDisk(HDF_RDONLY);// mpv: was RDWR, but opened file can be write-protected too
+  }
+  catch (HDFexception)
+  {
+    char *eStr;
+    eStr = new char[strlen(aUrl.c_str())+17];
+    sprintf(eStr,"Can't open file %s",aUrl.c_str());
+    delete [] eStr;
+    _errorCode = std::string(eStr);
+    return NULL;
+  }
+
+  // Assign the value of the URL in the study object
+  URL(aUrl);
+
+  SALOMEDSImpl_AttributePersistentRef::Set(_doc->Main(), aUrl);
+
+  if (!hdf_file->ExistInternalObject("STUDY_STRUCTURE")) {
+     _errorCode = "Study is empty";
+    return false;
+  }
+
+  //Create  the Structure of the Document
+  hdf_group_study_structure = new HDFgroup("STUDY_STRUCTURE",hdf_file);
+
+  try {
+    BuildTree (this, hdf_group_study_structure);
+  }
+  catch (HDFexception)
+  {
+    char *eStr = new char [strlen(aUrl.c_str())+17];
+    sprintf(eStr,"Can't open file %s", aUrl.c_str());
+    _errorCode = std::string(eStr);
+    return false;
+  }
+
+  //Read and create notebook variables
+  if(hdf_file->ExistInternalObject("NOTEBOOK_VARIABLES")) {
+    hdf_notebook_vars  = new HDFgroup("NOTEBOOK_VARIABLES",hdf_file);
+    ReadNoteBookVariables(this, hdf_notebook_vars);
+    hdf_notebook_vars =0; //will be deleted by hdf_sco_group destructor
+  }
+
+  hdf_file->CloseOnDisk();
+  hdf_group_study_structure = new HDFgroup("STUDY_STRUCTURE",hdf_file);
+
+  if (isASCII) {
+    std::vector<std::string> aFilesToRemove;
+    aFilesToRemove.push_back("hdf_from_ascii.hdf");
+    SALOMEDSImpl_Tool::RemoveTemporaryFiles(SALOMEDSImpl_Tool::GetDirFromPath(aHDFUrl), aFilesToRemove, true);
+  }
+
+  delete hdf_file; // all related hdf objects will be deleted
+
+  // unlock study if it is locked, to set components versions
+  StudyUnlocker unlock(this);
+
+  //For old studies we have to add "unknown" version tag for all stored components
+  SALOMEDSImpl_SComponentIterator itcomponent = NewComponentIterator();
+  for (; itcomponent.More(); itcomponent.Next())
+  {
+    SALOMEDSImpl_SComponent sco = itcomponent.Value();
+    std::string aCompType = sco.GetComment();
+    if ( aCompType == SALOMEDSImpl_IParameters::getDefaultVisualComponent() ) continue;
+    if ( GetProperties()->GetComponentVersions( aCompType ).empty() )
+      GetProperties()->SetComponentVersion( aCompType, "" ); // empty version means "unknown"
+  }
+
+  return true;
 }
+
 //============================================================================
-/*! Function : GetTransientReference
- *  Purpose  : Get IOR of the Study (registered in Document in doc->Root)
+/*! Function : Save
+ *  Purpose  : Save a Study to it's persistent reference
  */
 //============================================================================
-std::string SALOMEDSImpl_Study::GetTransientReference()
+bool SALOMEDSImpl_Study::Save(SALOMEDSImpl_DriverFactory* aFactory,
+                              bool theMultiFile,
+                              bool theASCII)
 {
   _errorCode = "";
-  std::string IOR = "";
 
-  SALOMEDSImpl_AttributeIOR* Att;
-  DF_Label _lab = _doc->Root();
-  if ((Att=(SALOMEDSImpl_AttributeIOR*)_lab.FindAttribute(SALOMEDSImpl_AttributeIOR::GetID()))) {
-    IOR = Att->Value();
+  std::string url = URL();
+  if (url.empty()) {
+    _errorCode = "No path specified to save the study. Nothing done";
+    return false;
   }
   else {
-    _errorCode = "IOR is empty";
+    return Impl_SaveAs(url, aFactory, theMultiFile, theASCII);
   }
 
-  return IOR;
+  return false;
+}
+
+//=============================================================================
+/*! Function : SaveAs
+ *  Purpose  : Save a study to the persistent reference aUrl
+ */
+//============================================================================
+bool SALOMEDSImpl_Study::SaveAs(const std::string& aUrl,
+                                SALOMEDSImpl_DriverFactory* aFactory,
+                                bool theMultiFile,
+                                bool theASCII)
+{
+  _errorCode = "";
+  return Impl_SaveAs(aUrl, aFactory, theMultiFile, theASCII);
 }
 
-void SALOMEDSImpl_Study::SetTransientReference(const std::string& theIOR)
+//=============================================================================
+/*! Function : _SaveProperties
+ *  Purpose  : save the study properties in HDF file
+ */
+//============================================================================
+bool SALOMEDSImpl_Study::Impl_SaveProperties(HDFgroup *hdf_group)
 {
   _errorCode = "";
 
+  HDFdataset *hdf_dataset = 0;
+  hdf_size size[1];
+  hdf_int32 name_len;
+
+  // add modifications list (user and date of save)
   SALOMEDSImpl_AttributeStudyProperties* aProp = GetProperties();
-  int aLocked = aProp->IsLocked();
-  if (aLocked) aProp->SetLocked(false);
 
-  // Assign the value of the IOR in the study->root
-  SALOMEDSImpl_AttributeIOR::Set(_doc->Main().Root(), theIOR);
+  // unlock study if it is locked, to set modification date
+  StudyUnlocker unlock(this);
+
+  int month=0,day=0,year=0,hh=0,mn=0,ss=0;
+  SALOMEDSImpl_Tool::GetSystemDate(year, month, day, hh, mn, ss);
+  aProp->SetModification(SALOMEDSImpl_Tool::GetUserName(),
+                         mn, hh, day, month, year);
+
+  // lock study back if it was locked initially, to write correct value of Locked flag
+  unlock.suspend();
+
+  std::vector<std::string> aNames;
+  std::vector<int> aMinutes, aHours, aDays, aMonths, aYears;
+
+  aProp->GetModifications(aNames, aMinutes, aHours, aDays, aMonths, aYears);
+
+  std::string units = aProp->GetUnits();
+  std::string comment = aProp->GetComment();
+
+  std::map< std::string, std::vector<std::string> > allVersions = aProp->GetComponentsVersions();
+  std::map<std::string, std::string> versions;
+
+  int aLength = 0, aLength1 = 0, anIndex, i, unitsSize = 0, commentSize = 0;
+
+  for(i=1; i<=aNames.size(); i++)
+    aLength += aNames[i-1].size() + 1;
+
+  std::map< std::string, std::vector<std::string> >::const_iterator it;
+  for (it = allVersions.begin(); it != allVersions.end(); ++it ) {
+    std::string vlist = "";
+    std::vector<std::string> vl = it->second;
+    std::vector<std::string>::const_iterator vlit;
+    for ( vlit = vl.begin(); vlit != vl.end(); ++vlit ) {
+      if ( vlist != "" ) vlist += ";";
+      vlist += *vlit;
+    }
+    versions[ it->first ] = vlist;
+    aLength1 += it->first.size() + vlist.size() + 2;
+  }
+
+  unitsSize = units.size();
+  commentSize = comment.size();
+
+  //string format:
+  //locked flag, modified flag,
+  //minutes, hours, day, months, year, user name, char(1),
+  //minutes, hours, day, months, year, user name, char(1),
+  //.....................................................,
+  //.....................................................,
+  //.....................................................,
+  //minutes, hours, day, months, year, user name, char(1), char(30) <- !!!! used to define end of section with modifications !!!!
+  //units, char(1), comment, char(30) <- !!!! used to define start of section with components' versions !!!!
+  //component=versions, char(1),
+  //component=versions, char(1),
+  //...........................,
+  //component=versions, char(1), char(0)
+
+  //string length: 1 byte = locked flag, 1 byte = modified flag, (12 + name length + 1) for each name and date, 1 byte (char(30) section delimiter)
+  // unit length + 1, comment length, "zero" byte
+
+  char* aProperty = new char[3 + aLength + 12 * aNames.size() + 1 + unitsSize + 1 + commentSize + 1 + aLength1 ];
+
+  sprintf(aProperty,"%c%c", (char)aProp->GetCreationMode(),  (aProp->IsLocked())?'l':'u');
+
+  aLength = aNames.size();
+  int a = 2;
+  for(anIndex = 0; anIndex<aLength; anIndex++) {
+    sprintf(&(aProperty[a]),"%2d%2d%2d%2d%4d%s",
+            (int)(aMinutes[anIndex]),
+            (int)(aHours[anIndex]),
+            (int)(aDays[anIndex]),
+            (int)(aMonths[anIndex]),
+            (int)(aYears[anIndex]),
+            aNames[anIndex].c_str());
+    a = strlen(aProperty);
+    aProperty[a++] = 1;
+  }
+
+  //Write delimiter of the section to define end of the modifications section
+  aProperty[a++] = 30;
+
+  //Write units if need
+  if(units.size() > 0) {
+    sprintf(&(aProperty[a]),"%s",units.c_str());
+    a = strlen(aProperty);
+  }
+
+  aProperty[a++] = 1;
+
+  //Write comments if need
+  if(comment.size() > 0) {
+    sprintf(&(aProperty[a]),"%s",comment.c_str());
+    a = strlen(aProperty);
+  }
+
+  aProperty[a++] = 30; //delimiter of the component versions
+
+  std::map<std::string, std::string>::const_iterator versionsIt;
+  for ( versionsIt = versions.begin(); versionsIt != versions.end(); ++versionsIt ) {
+    sprintf(&(aProperty[a]),"%s=%s",
+            (char*)(versionsIt->first.c_str()),
+            (char*)(versionsIt->second.c_str()));
+    a = a + versionsIt->first.size() + versionsIt->second.size() + 1;
+    aProperty[a++] = 1;
+  }
+
+  aProperty[a] = 0;
+
+  name_len = (hdf_int32) a;
+  size[0] = name_len + 1 ;
+  hdf_dataset = new HDFdataset("AttributeStudyProperties",hdf_group,HDF_STRING,size,1);
+  hdf_dataset->CreateOnDisk();
+  hdf_dataset->WriteOnDisk(aProperty);
+  hdf_dataset->CloseOnDisk();
+  hdf_dataset=0; //will be deleted by hdf_sco_group destructor
+  delete [] aProperty;
+
+  aProp->SetModified(0);
+  return true;
+}
+
+//=============================================================================
+/*! Function : _SaveAs
+ *  Purpose  : save the study in HDF file
+ */
+//============================================================================
+bool SALOMEDSImpl_Study::Impl_SaveAs(const std::string& aStudyUrl,
+                                     SALOMEDSImpl_DriverFactory* aFactory,
+                                     bool theMultiFile,
+                                     bool theASCII)
+{
+  // Set "C" locale temporarily to avoid possible localization problems
+  Kernel_Utils::Localizer loc;
+
+  // HDF File will be composed of differents part :
+  // * For each ComponentDataType, all data created by the component
+  //   Information in data group hdf_group_datacomponent
+  // * Study Structure -> Exactly what is contained in Document
+  //   Information in data group hdf_group_study_structure
+
+  _errorCode = "";
+
+  HDFfile *hdf_file=0;
+  HDFgroup *hdf_group_study_structure =0;
+  HDFgroup *hdf_sco_group =0;
+  HDFgroup *hdf_sco_group2 =0;
+  HDFgroup *hdf_notebook_vars =0;
+  HDFgroup *hdf_notebook_var  = 0;
+
+  HDFgroup *hdf_group_datacomponent =0;
+  HDFdataset *hdf_dataset =0;
+  hdf_size size[1];
+  hdf_int32 name_len = 0;
+  std::string component_name;
+
+  // Store previous URL
+  std::string anOldName = URL();
+
+  // Map to store components' versions
+  std::map<std::string, std::string> componentVersions;
+
+  //Create a temporary url to which the study is saved
+  std::string aUrl = SALOMEDSImpl_Tool::GetTmpDir() + SALOMEDSImpl_Tool::GetNameFromPath(aStudyUrl);
+
+  // unlock study if it is locked, as some attributes need to be modified
+  StudyUnlocker unlock(this);
+
+  SALOMEDSImpl_StudyBuilder* SB= NewBuilder();
+  std::map<std::string, SALOMEDSImpl_Driver*> aMapTypeDriver;
+
+  try {
+    // mpv 15.12.2003: for saving components we have to load all data from all modules
+    SALOMEDSImpl_SComponentIterator itcomponent = NewComponentIterator();
+    for (; itcomponent.More(); itcomponent.Next()) {
+      SALOMEDSImpl_SComponent sco = itcomponent.Value();
+      // if there is an associated Engine call its method for saving
+      std::string IOREngine;
+      try {
+        SALOMEDSImpl_Driver* aDriver = NULL;
+        std::string aCompType = sco.GetComment();
+        if (!sco.ComponentIOR(IOREngine)) {
+          if (!aCompType.empty()) {
+            aDriver = aFactory->GetDriverByType(aCompType);
+            if (aDriver != NULL) {
+              if (!SB->LoadWith(sco, aDriver)) {
+                _errorCode = SB->GetErrorCode();
+                return false;
+              }
+            }
+          }
+        }
+       else {
+         aDriver = aFactory->GetDriverByIOR(IOREngine);
+       }
+       aMapTypeDriver[aCompType] = aDriver;
+      }
+      catch(...) {
+        _errorCode = "Can not restore information to resave it";
+        return false;
+      }
+    }
+
+    // VSR: set URL to new file name
+    // VSR: remember to set previous name if save operation fails
+    URL(aStudyUrl);
+
+    // To change for Save
+    // Do not have to do a new file but just a Open??? Rewrite all information after erasing evrything??
+    hdf_file = new HDFfile((char*)aUrl.c_str());
+    hdf_file->CreateOnDisk();
+
+    //-----------------------------------------------------------------------
+    // 1 - Create a groupe for each SComponent and Update the PersistanceRef
+    //-----------------------------------------------------------------------
+    hdf_group_datacomponent = new HDFgroup("DATACOMPONENT",hdf_file);
+    hdf_group_datacomponent->CreateOnDisk();
+
+    for (itcomponent.Init(); itcomponent.More(); itcomponent.Next()) {
+      SALOMEDSImpl_SComponent sco = itcomponent.Value();
+
+      std::string scoid = sco.GetID();
+      hdf_sco_group = new HDFgroup((char*)scoid.c_str(), hdf_group_datacomponent);
+      hdf_sco_group->CreateOnDisk();
+
+      std::string componentDataType = sco.ComponentDataType();
+      std::string IOREngine;
+      if (sco.ComponentIOR(IOREngine)) {
+       // Engine should be already in the map as it was to added before
+       SALOMEDSImpl_Driver* Engine = aMapTypeDriver[componentDataType];
+        if (Engine != NULL) {
+          SALOMEDSImpl_TMPFile* aStream = NULL;
+          long length = 0;
+
+          componentVersions[ componentDataType ] = Engine->Version();
+
+          if (theASCII) aStream = Engine->SaveASCII(sco,
+                                                    SALOMEDSImpl_Tool::GetDirFromPath(aUrl),
+                                                    length,
+                                                    theMultiFile);
+          else aStream = Engine->Save(sco,
+                                      SALOMEDSImpl_Tool::GetDirFromPath(aUrl),
+                                      length,
+                                      theMultiFile);
+          HDFdataset *hdf_dataset;
+          hdf_size aHDFSize[1];
+          if (length > 0) {  //The component saved some auxiliary files, then put them into HDF file
+            aHDFSize[0] = length;
+
+            HDFdataset *hdf_dataset = new HDFdataset("FILE_STREAM", hdf_sco_group, HDF_STRING, aHDFSize, 1);
+            hdf_dataset->CreateOnDisk();
+            hdf_dataset->WriteOnDisk(aStream->Data());  //Save the stream in the HDF file
+            hdf_dataset->CloseOnDisk();
+          }
+
+          if (aStream) delete aStream;
+
+          // store multifile state
+          aHDFSize[0] = 2;
+          hdf_dataset = new HDFdataset("MULTIFILE_STATE", hdf_sco_group, HDF_STRING, aHDFSize, 1);
+          hdf_dataset->CreateOnDisk();
+          hdf_dataset->WriteOnDisk((void*)(theMultiFile?"M":"S")); // save: multi or single
+          hdf_dataset->CloseOnDisk();
+          hdf_dataset=0; //will be deleted by hdf_sco_AuxFiles destructor
+          // store ASCII state
+          aHDFSize[0] = 2;
+          hdf_dataset = new HDFdataset("ASCII_STATE", hdf_sco_group, HDF_STRING, aHDFSize, 1);
+          hdf_dataset->CreateOnDisk();
+          hdf_dataset->WriteOnDisk((void*)(theASCII?"A":"B")); // save: ASCII or BINARY
+          hdf_dataset->CloseOnDisk();
+          hdf_dataset=0; //will be deleted by hdf_sco_AuxFiles destructor
+          // Creation of the persistence reference  attribute
+          Translate_IOR_to_persistentID (sco, Engine, theMultiFile, theASCII);
+        }
+      }
+      hdf_sco_group->CloseOnDisk();
+      hdf_sco_group=0; // will be deleted by hdf_group_datacomponent destructor
+    }
+    hdf_group_datacomponent->CloseOnDisk();
+    hdf_group_datacomponent =0;  // will be deleted by hdf_file destructor
+
+    //-----------------------------------------------------------------------
+    //3 - Write the Study Structure
+    //-----------------------------------------------------------------------
+    hdf_group_study_structure = new HDFgroup("STUDY_STRUCTURE",hdf_file);
+    hdf_group_study_structure->CreateOnDisk();
+    // save component attributes
+    for (itcomponent.Init(); itcomponent.More(); itcomponent.Next()) {
+      SALOMEDSImpl_SComponent SC = itcomponent.Value();
+      std::string scid = SC.GetID();
+      hdf_sco_group2 = new HDFgroup((char*)scid.c_str(), hdf_group_study_structure);
+      hdf_sco_group2->CreateOnDisk();
+      SaveAttributes(SC, hdf_sco_group2);
+      // ComponentDataType treatment
+      component_name = SC.ComponentDataType();
+      name_len = (hdf_int32)component_name.length();
+      size[0] = name_len +1 ;
+      hdf_dataset = new HDFdataset("COMPONENTDATATYPE",hdf_sco_group2,HDF_STRING,size,1);
+      hdf_dataset->CreateOnDisk();
+      hdf_dataset->WriteOnDisk((char*)component_name.c_str());
+      hdf_dataset->CloseOnDisk();
+      hdf_dataset=0; //will be deleted by hdf_sco_group destructor
+      Impl_SaveObject(SC, hdf_sco_group2);
+      hdf_sco_group2->CloseOnDisk();
+      hdf_sco_group2=0; // will be deleted by hdf_group_study_structure destructor
+    }
+    //-----------------------------------------------------------------------
+    //4 - Write the Study UseCases Structure
+    //-----------------------------------------------------------------------
+    SALOMEDSImpl_SObject aSO = FindObjectID(USE_CASE_LABEL_ID);
+    if (aSO) {
+      HDFgroup *hdf_soo_group = new HDFgroup(USE_CASE_LABEL_ID,hdf_group_study_structure);
+      hdf_soo_group->CreateOnDisk();
+      SaveAttributes(aSO, hdf_soo_group);
+      Impl_SaveObject(aSO, hdf_soo_group);
+      hdf_soo_group->CloseOnDisk();
+      hdf_soo_group=0; // will be deleted by hdf_group_study_structure destructor
+    }
+    //-----------------------------------------------------------------------
+    //5 - Write the NoteBook Variables
+    //-----------------------------------------------------------------------
+
+    //5.1 Create group to store all note book variables
+    hdf_notebook_vars = new HDFgroup("NOTEBOOK_VARIABLES",hdf_file);
+    hdf_notebook_vars->CreateOnDisk();
+
+    std::string varValue;
+    std::string varType;
+    std::string varIndex;
+
+    for (int i=0 ;i < myNoteBookVars.size(); i++ ) {
+      // For each variable create HDF group
+      hdf_notebook_var = new HDFgroup((char*)myNoteBookVars[i]->Name().c_str(),hdf_notebook_vars);
+      hdf_notebook_var->CreateOnDisk();
+
+      // Save Variable type
+      varType = myNoteBookVars[i]->SaveType();
+      name_len = (hdf_int32) varType.length();
+      size[0] = name_len +1 ;
+      hdf_dataset = new HDFdataset("VARIABLE_TYPE",hdf_notebook_var,HDF_STRING,size,1);
+      hdf_dataset->CreateOnDisk();
+      hdf_dataset->WriteOnDisk((char*)varType.c_str());
+      hdf_dataset->CloseOnDisk();
+      hdf_dataset=0; //will be deleted by hdf_sco_group destructor
+
+      char buffer[256];
+      sprintf(buffer,"%d",i);
+      varIndex= std::string(buffer);
+      name_len = (hdf_int32) varIndex.length();
+      size[0] = name_len +1 ;
+      hdf_dataset = new HDFdataset("VARIABLE_INDEX",hdf_notebook_var,HDF_STRING,size,1);
+      hdf_dataset->CreateOnDisk();
+      hdf_dataset->WriteOnDisk((char*)varIndex.c_str());
+      hdf_dataset->CloseOnDisk();
+      hdf_dataset=0; //will be deleted by hdf_sco_group destructor
+
+      // Save Variable value
+      varValue = myNoteBookVars[i]->Save();
+      name_len = (hdf_int32) varValue.length();
+      size[0] = name_len +1 ;
+      hdf_dataset = new HDFdataset("VARIABLE_VALUE",hdf_notebook_var,HDF_STRING,size,1);
+      hdf_dataset->CreateOnDisk();
+      hdf_dataset->WriteOnDisk((char*)varValue.c_str());
+      hdf_dataset->CloseOnDisk();
+      hdf_dataset=0; //will be deleted by hdf_sco_group destructor
+      hdf_notebook_var->CloseOnDisk();
+      hdf_notebook_var = 0; //will be deleted by hdf_sco_group destructor
+    }
+    hdf_notebook_vars->CloseOnDisk();
+    hdf_notebook_vars = 0; //will be deleted by hdf_sco_group destructor
+
+    // record component versions
+    std::map<std::string, std::string>::const_iterator itVersions;
+    for ( itVersions = componentVersions.begin(); itVersions != componentVersions.end(); ++itVersions )
+      GetProperties()->SetComponentVersion( itVersions->first, itVersions->second );
+
+    // lock study back if it was locked initially, to write correct value of Locked flag
+    unlock.suspend();
+
+    //-----------------------------------------------------------------------
+    //6 - Write the Study Properties
+    //-----------------------------------------------------------------------
+    std::string study_name = Name();
+    name_len = (hdf_int32) study_name.size();
+    size[0] = name_len +1 ;
+    hdf_dataset = new HDFdataset("STUDY_NAME",hdf_group_study_structure,HDF_STRING,size,1);
+    hdf_dataset->CreateOnDisk();
+    hdf_dataset->WriteOnDisk((char*)study_name.c_str());
+    hdf_dataset->CloseOnDisk();
+    hdf_dataset=0; // will be deleted by hdf_group_study_structure destructor
+
+    Impl_SaveProperties(hdf_group_study_structure);
+    hdf_group_study_structure->CloseOnDisk();
+    hdf_file->CloseOnDisk();
+
+    hdf_group_study_structure =0; // will be deleted by hdf_file destructor
+    delete hdf_file; // recursively deletes all hdf objects...
+  }
+  catch (HDFexception) {
+    _errorCode = "HDFexception ! ";
+    URL( anOldName ); // VSR: restore previous url if operation is failed
+    return false;
+  }
+  catch (std::exception& exc) {
+    _errorCode = const_cast<char*>(exc.what());
+    URL( anOldName ); // VSR: restore previous url if operation is failed
+    return false;
+  }
+  catch (...) {
+    _errorCode = "Unknown exception ! ";
+    URL( anOldName ); // VSR: restore previous url if operation is failed
+    return false;
+  }
+  if (theASCII) { // save file in ASCII format
+    HDFascii::ConvertFromHDFToASCII(aUrl.c_str(), true);
+  }
+
+  // Now it's necessary to copy files from the temporary directory to the user defined directory.
+  // The easiest way to get a list of file in the temporary directory
+
+  std::string aCmd, aTmpFileDir = SALOMEDSImpl_Tool::GetTmpDir();
+  std::string aTmpFile = aTmpFileDir +"files";
+  std::string aStudyTmpDir = SALOMEDSImpl_Tool::GetDirFromPath(aUrl);
+
+#ifdef WIN32
+  aCmd = "dir /B \"" + aStudyTmpDir +"\" > " + aTmpFile;
+#else
+  aCmd ="ls -1 \"" + aStudyTmpDir +"\" > " + aTmpFile;
+#endif
+  system(aCmd.c_str());
+
+  // Iterate and move files in the temporary directory
+  FILE* fp = fopen(aTmpFile.c_str(), "rb");
+  if (!fp) {
+    URL( anOldName ); // VSR: restore previous url if operation is failed
+    return false;
+  }
+  char* buffer = new char[2047];
+  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);
+#ifdef WIN32
+    aCmd = "move /Y \"" + aStudyTmpDir + std::string(buffer) + "\" \"" + SALOMEDSImpl_Tool::GetDirFromPath(aStudyUrl) +"\"";
+#else
+    aCmd = "mv -f \"" + aStudyTmpDir + std::string(buffer) + "\" \"" + SALOMEDSImpl_Tool::GetDirFromPath(aStudyUrl)+"\"";
+#endif
+    errors = system(aCmd.c_str());
+  }
+
+  delete []buffer;
+  fclose(fp);
+
+  // Perform cleanup
+#ifdef WIN32
+  DeleteFileA(aTmpFile.c_str());
+#else
+  unlink(aTmpFile.c_str());
+#endif
+
+#ifdef WIN32
+  RemoveDirectoryA(aTmpFileDir.c_str());
+  RemoveDirectoryA(aStudyTmpDir.c_str());
+#else
+  rmdir(aTmpFileDir.c_str());
+  rmdir(aStudyTmpDir.c_str());
+#endif
+
+  if ( !errors ) {
+    // VSR: finally, if all is done without errors, mark study as Saved
+    IsSaved(true);
+  }
+
+  std::map<std::string, SALOMEDSImpl_Driver*>::iterator n2dr = aMapTypeDriver.begin();
+  for ( ; n2dr != aMapTypeDriver.end(); ++n2dr )
+    delete n2dr->second;
+
+  return !errors;
+}
+
+//============================================================================
+/*! Function : Impl_SaveObject
+ *  Purpose  :
+ */
+//============================================================================
+bool SALOMEDSImpl_Study::Impl_SaveObject(const SALOMEDSImpl_SObject& SC,
+                                         HDFgroup *hdf_group_datatype)
+{
+  _errorCode = "";
+
+  // Write in group hdf_group_datatype all information of SObject SC
+  // Iterative function to parse all SObjects under a SComponent
+
+  HDFgroup *hdf_group_sobject = 0;
+
+  DF_ChildIterator itchild(SC.GetLabel());
+  for (; itchild.More(); itchild.Next()) {
+    // mpv: don't save empty labels
+    std::vector<DF_Attribute*> attr = itchild.Value().GetAttributes();
+    if (attr.size() == 0) {  //No attributes on the label
+      DF_ChildIterator subchild(itchild.Value());
+      if (!subchild.More()) {
+        continue;
+      }
+      subchild.Init(itchild.Value(), true);
+      bool anEmpty = true;
+      for (; subchild.More() && anEmpty; subchild.Next()) {
+        std::vector<DF_Attribute*> attr2 = subchild.Value().GetAttributes();
+        if (attr2.size()) {
+          anEmpty = false;  //There are attributes on the child label
+          break;
+        }
+      }
+      if (anEmpty) continue;
+    }
+
+    SALOMEDSImpl_SObject SO = SALOMEDSImpl_Study::SObject(itchild.Value());
+
+    std::string scoid = SO.GetID();
+    hdf_group_sobject = new HDFgroup(scoid.c_str(), hdf_group_datatype);
+    hdf_group_sobject->CreateOnDisk();
+    SaveAttributes(SO, hdf_group_sobject);
+    Impl_SaveObject(SO, hdf_group_sobject);
+    hdf_group_sobject->CloseOnDisk();
+    hdf_group_sobject =0; // will be deleted by father hdf object destructor
+  }
+  return true;
+}
+
+//============================================================================
+/*! Function : CanCopy
+ *  Purpose  :
+ */
+//============================================================================
+bool SALOMEDSImpl_Study::CanCopy(const SALOMEDSImpl_SObject& theObject,
+                                 SALOMEDSImpl_Driver* theEngine)
+{
+  _errorCode = "";
+  SALOMEDSImpl_SComponent aComponent = theObject.GetFatherComponent();
+  if (!aComponent) return false;
+  if (aComponent.GetLabel() == theObject.GetLabel()) return false;
+  std::string IOREngine;
+  if (!aComponent.ComponentIOR(IOREngine)) return false;
+  if (theEngine == NULL) return false;
+  return theEngine->CanCopy(theObject);
+}
+
+//============================================================================
+/*! Function : CopyLabel
+ *  Purpose  :
+ */
+//============================================================================
+bool SALOMEDSImpl_Study::CopyLabel(SALOMEDSImpl_Driver* theEngine,
+                                   const int theSourceStartDepth,
+                                   const DF_Label& theSource,
+                                   const DF_Label& theDestinationMain)
+{
+  _errorCode = "";
+
+  int a;
+  DF_Label aTargetLabel = theDestinationMain;
+  DF_Label aAuxTargetLabel = theDestinationMain.Father().FindChild(2);
+  for(a = theSource.Depth() - theSourceStartDepth; a > 0 ; a--) {
+    DF_Label aSourceLabel = theSource;
+    for(int aNbFather = 1; aNbFather < a; aNbFather++) aSourceLabel = aSourceLabel.Father();
+    aTargetLabel = aTargetLabel.FindChild(aSourceLabel.Tag());
+    aAuxTargetLabel = aAuxTargetLabel.FindChild(aSourceLabel.Tag());
+  }
+  // iterate attributes
+  std::vector<DF_Attribute*> attrList = theSource.GetAttributes();
+  for(int i = 0, len = attrList.size(); i<len; i++) {
+    DF_Attribute* anAttr = attrList[i];
+    std::string type = SALOMEDSImpl_GenericAttribute::Impl_GetType(anAttr);
+    if (type.substr(0, 17) == std::string("AttributeTreeNode")) continue; // never copy tree node attribute
+    if (type == std::string("AttributeTarget")) continue; // and target attribute
+
+    if (type == std::string("AttributeReference")) { // reference copied as Comment in aux tree
+      DF_Label aReferenced = dynamic_cast<SALOMEDSImpl_AttributeReference*>(anAttr)->Get();
+      std::string anEntry = aReferenced.Entry();
+      // store the value of name attribute of referenced label
+      SALOMEDSImpl_AttributeName* aNameAttribute;
+      if ((aNameAttribute=(SALOMEDSImpl_AttributeName*)aReferenced.FindAttribute(SALOMEDSImpl_AttributeName::GetID()))) {
+        anEntry += " ";
+        anEntry += aNameAttribute->Value();
+      }
+      SALOMEDSImpl_AttributeComment::Set(aAuxTargetLabel, anEntry);
+      continue;
+    }
+
+    if (type == std::string("AttributeIOR")) { // IOR => ID and TMPFile of Engine
+      std::string anEntry = theSource.Entry();
+      SALOMEDSImpl_SObject aSO = FindObjectID(anEntry);
+      int anObjID;
+      long aLen;
+      SALOMEDSImpl_TMPFile* aStream = theEngine->CopyFrom(aSO, anObjID, aLen);
+      std::string aResStr("");
+      for(a = 0; a < aLen; a++) {
+        aResStr += (char)(aStream->Get(a));
+      }
+
+      if(aStream) delete aStream;
+
+      SALOMEDSImpl_AttributeInteger::Set(aAuxTargetLabel, anObjID);
+      SALOMEDSImpl_AttributeName::Set(aAuxTargetLabel, aResStr);
+      continue;
+    }
+    DF_Attribute* aNewAttribute = anAttr->NewEmpty();
+    aTargetLabel.AddAttribute(aNewAttribute);
+    anAttr->Paste(aNewAttribute);
+  }
+
+  return true;
+}
+
+//============================================================================
+/*! Function : Copy
+ *  Purpose  :
+ */
+//============================================================================
+bool SALOMEDSImpl_Study::Copy(const SALOMEDSImpl_SObject& theObject,
+                                    SALOMEDSImpl_Driver* theEngine)
+{
+  _errorCode = "";
+
+  // adoptation for alliances datamodel copy: without IOR attributes !!!
+  bool aStructureOnly; // copy only SObjects and attributes without component help
+  aStructureOnly = !theObject.GetLabel().IsAttribute(SALOMEDSImpl_AttributeIOR::GetID());
+
+  if (!_doc) {
+    _errorCode = "Document is null";
+    return false;
+  }
+
+  //Clear the clipboard
+  _clipboard->Main().Root().ForgetAllAttributes(true);
+  _appli->Close(_clipboard);
+  _clipboard = _appli->NewDocument("SALOME_STUDY");
+
+  // set component data type to the name attribute of root label
+  if (!aStructureOnly) {
+    SALOMEDSImpl_AttributeComment::Set(_clipboard->Main().Root(),
+                                       theEngine->ComponentDataType());
+  }
+  // iterate all theObject's label children
+  DF_Label aStartLabel = theObject.GetLabel();
+  int aSourceStartDepth = aStartLabel.Depth();
+
+  // copy main source label
+  CopyLabel(theEngine, aSourceStartDepth, aStartLabel, _clipboard->Main());
+
+  // copy all subchildren of the main source label (all levels)
+  DF_ChildIterator anIterator(aStartLabel, true);
+  for(; anIterator.More(); anIterator.Next()) {
+    CopyLabel(theEngine, aSourceStartDepth, anIterator.Value(), _clipboard->Main());
+  }
+
+  return true;
+}
+
+//============================================================================
+/*! Function : CanPaste
+ *  Purpose  :
+ */
+//============================================================================
+bool SALOMEDSImpl_Study::CanPaste(const SALOMEDSImpl_SObject& theObject,
+                                         SALOMEDSImpl_Driver* theEngine)
+{
+  _errorCode = "";
+
+  if (!_clipboard) {
+    _errorCode = "Clipboard is null";
+    return false;
+  }
+
+  SALOMEDSImpl_AttributeComment* aCompName = NULL;
+  if (!(aCompName=(SALOMEDSImpl_AttributeComment*)_clipboard->Main().Root().FindAttribute(SALOMEDSImpl_AttributeComment::GetID()))) {
+    _errorCode = "Clipboard has no component type";
+    return false;
+  }
+  SALOMEDSImpl_AttributeInteger* anObjID;
+  if (!(anObjID=(SALOMEDSImpl_AttributeInteger*)_clipboard->Main().Father().FindChild(2).FindAttribute(SALOMEDSImpl_AttributeInteger::GetID()))) {
+    _errorCode = "Clipboard has no object id";
+    return false;
+  }
+  SALOMEDSImpl_SComponent aComponent = theObject.GetFatherComponent();
+  if (!aComponent) {
+    _errorCode = "Object doesn't belong to component";
+    return false;
+  }
+
+  std::string IOREngine;
+  if (!aComponent.ComponentIOR(IOREngine)) {
+    _errorCode = "component has no IOR";
+    return false;
+  }
+  return theEngine->CanPaste(aCompName->Value(), anObjID->Value());
+}
+
+//============================================================================
+/*! Function : PasteLabel
+ *  Purpose  :
+ */
+//============================================================================
+DF_Label SALOMEDSImpl_Study::PasteLabel(SALOMEDSImpl_Driver* theEngine,
+                                        const DF_Label& theSource,
+                                        const DF_Label& theDestinationStart,
+                                        const bool isFirstElement)
+{
+  _errorCode = "";
+
+  // get corresponding source, target and auxiliary labels
+  DF_Label aTargetLabel = theDestinationStart;
+
+  DF_Label aAuxSourceLabel = theSource.Root().FindChild(2);
+  int a;
+  if (!isFirstElement) {
+    for(a = theSource.Depth() - 1; a > 0 ; a--) {
+      DF_Label aSourceLabel = theSource;
+      for(int aNbFather = 1; aNbFather < a; aNbFather++) aSourceLabel = aSourceLabel.Father();
+      aTargetLabel = aTargetLabel.FindChild(aSourceLabel.Tag());
+      aAuxSourceLabel = aAuxSourceLabel.FindChild(aSourceLabel.Tag());
+    }
+    SALOMEDSImpl_SObject so = GetSObject(aTargetLabel);
+    addSO_Notification(so);
+  }
+
+  // check auxiliary label for TMPFile => IOR
+  SALOMEDSImpl_AttributeName* aNameAttribute = NULL;
+  if ((aNameAttribute=(SALOMEDSImpl_AttributeName*)aAuxSourceLabel.FindAttribute(SALOMEDSImpl_AttributeName::GetID()))) {
+    SALOMEDSImpl_AttributeInteger* anObjID = (SALOMEDSImpl_AttributeInteger*)aAuxSourceLabel.FindAttribute(SALOMEDSImpl_AttributeInteger::GetID());
+    SALOMEDSImpl_AttributeComment* aComponentName = (SALOMEDSImpl_AttributeComment*)theSource.Root().FindAttribute(SALOMEDSImpl_AttributeComment::GetID());
+    std::string aCompName = aComponentName->Value();
+
+    if (theEngine->CanPaste(aCompName, anObjID->Value())) {
+      std::string aTMPStr = aNameAttribute->Value();
+      int aLen = aTMPStr.size();
+      unsigned char* aStream = NULL;
+      if(aLen > 0) {
+        aStream = new unsigned char[aLen+10];
+        for(a = 0; a < aLen; a++) {
+          aStream[a] = aTMPStr[a];
+        }
+      }
+
+      std::string anEntry = aTargetLabel.Entry();
+      SALOMEDSImpl_SObject aPastedSO = FindObjectID(anEntry);
+
+      if (isFirstElement) {
+        std::string aDestEntry = theEngine->PasteInto(aStream,
+                                                      aLen,
+                                                      anObjID->Value(),
+                                                      aPastedSO.GetFatherComponent());
+        aTargetLabel = DF_Label::Label(theDestinationStart, aDestEntry);
+      } else
+        theEngine->PasteInto(aStream, aLen, anObjID->Value(), aPastedSO);
+
+      if(aStream != NULL) delete []aStream;
+    }
+  }
+
+  // iterate attributes
+  std::vector<DF_Attribute*> attrList = theSource.GetAttributes();
+  for(int i = 0, len = attrList.size(); i<len; i++) {
+    DF_Attribute* anAttr = attrList[i];
+    if (aTargetLabel.FindAttribute(anAttr->ID())) {
+      aTargetLabel.ForgetAttribute(anAttr->ID());
+    }
+    DF_Attribute* aNewAttribute = anAttr->NewEmpty();
+    aTargetLabel.AddAttribute(aNewAttribute);
+    anAttr->Paste(aNewAttribute);
+  }
+
+  // check auxiliary label for Comment => reference or name attribute of the referenced object
+  SALOMEDSImpl_AttributeComment* aCommentAttribute = NULL;
+  if ((aCommentAttribute=(SALOMEDSImpl_AttributeComment*)aAuxSourceLabel.FindAttribute(SALOMEDSImpl_AttributeComment::GetID()))) {
+    char * anEntry = new char[aCommentAttribute->Value().size() + 1];
+    strcpy(anEntry, std::string(aCommentAttribute->Value()).c_str());
+    char* aNameStart = strchr(anEntry, ' ');
+    if (aNameStart) {
+      *aNameStart = '\0';
+      aNameStart++;
+    }
+    // copy to the same study, reanimate reference
+    DF_Label aRefLabel = DF_Label::Label(aTargetLabel, anEntry);
+    SALOMEDSImpl_AttributeReference::Set(aTargetLabel, aRefLabel);
+    // target attributes structure support
+    SALOMEDSImpl_AttributeTarget::Set(aRefLabel)->Add(SALOMEDSImpl_Study::SObject(aTargetLabel));
+
+    delete [] anEntry;
+  }
+
+  return aTargetLabel;
+}
+
+//============================================================================
+/*! Function : Paste
+ *  Purpose  :
+ */
+//============================================================================
+SALOMEDSImpl_SObject SALOMEDSImpl_Study::Paste(const SALOMEDSImpl_SObject& theObject,
+                                               SALOMEDSImpl_Driver* theEngine)
+{
+  _errorCode = "";
+
+  SALOMEDSImpl_SObject so;
+
+  // if study is locked, then paste can't be done
+  if (GetProperties()->IsLocked()) {
+    _errorCode = "LockProtection";
+    throw LockProtection("LockProtection");
+  }
+
+  // if there is no component name, then paste only SObjects and attributes: without component help
+  SALOMEDSImpl_AttributeComment* aComponentName = NULL;
+  bool aStructureOnly = !(aComponentName=(SALOMEDSImpl_AttributeComment*)_clipboard->Main().Root().FindAttribute(SALOMEDSImpl_AttributeComment::GetID()));
+
+  // CAF document of current study usage
+  if (!_doc) {
+    _errorCode = "Document is null";
+    return so;
+  }
+
+  SALOMEDSImpl_SComponent aComponent = theObject.GetFatherComponent();
+
+  // fill root inserted SObject
+  DF_Label aStartLabel;
+  if (aStructureOnly) {
+    DF_Label anObjectLabel = DF_Label::Label(_doc->Main(), theObject.GetID());
+    aStartLabel = PasteLabel(theEngine, _clipboard->Main(), anObjectLabel, false);
+  } else {
+    DF_Label aComponentLabel = DF_Label::Label(_doc->Main(), aComponent.GetID());
+    aStartLabel = PasteLabel(theEngine, _clipboard->Main(), aComponentLabel, true);
+  }
+
+  // paste all sublebels
+  DF_ChildIterator anIterator(_clipboard->Main(), true);
+  for(; anIterator.More(); anIterator.Next()) {
+    PasteLabel(theEngine, anIterator.Value(), aStartLabel, false);
+  }
+
+  return SALOMEDSImpl_Study::SObject(aStartLabel);
+}
 
-  if (aLocked) aProp->SetLocked(true);
+//============================================================================
+/*! Function : GetPersistentReference
+ *  Purpose  : Get persistent reference of study (idem URL())
+ */
+//============================================================================
+std::string SALOMEDSImpl_Study::GetPersistentReference()
+{
+  _errorCode = "";
+  return URL();
 }
 
 //============================================================================
@@ -378,7 +1436,7 @@ SALOMEDSImpl_SObject SALOMEDSImpl_Study::FindObjectByPath(const std::string& the
   bool isRelative = false;
 
   if(aLength == 0) {  //Empty path - return the current context
-    return GetSObject(_current);
+    return aSO;
   }
 
   if(aPath[0] != '/')  //Relative path
@@ -389,8 +1447,7 @@ SALOMEDSImpl_SObject SALOMEDSImpl_Study::FindObjectByPath(const std::string& the
   SALOMEDSImpl_AttributeName* anAttr;
 
   if(isRelative) {
-    if(_current.IsNull()) return aSO;
-    anIterator.Init(_current, false);
+    return aSO;
   }
   else {
     if(aPath.size() == 1 && aPath[0] == '/') {    //Root
@@ -479,212 +1536,6 @@ std::string SALOMEDSImpl_Study::GetObjectPathByIOR(const std::string& theIOR)
   return GetObjectPath(so);
 }
 
-
-//============================================================================
-/*! Function : SetContext
- *  Purpose  : Sets the current context
- */
-//============================================================================
-bool SALOMEDSImpl_Study::SetContext(const std::string& thePath)
-{
-  _errorCode = "";
-  if(thePath.empty()) {
-    _errorCode = "InvalidPath";
-    return false;
-  }
-
-  std::string aPath(thePath), aContext("");
-  bool isInvalid = false;
-  SALOMEDSImpl_SObject aSO;
-
-  if(aPath[0] != '/') { //Relative path
-    aContext = GetContext();
-    aContext += '/';
-    aContext += aPath;
-  }
-  else
-    aContext = aPath;
-
-  try {
-    aSO = FindObjectByPath(aContext);
-  }
-  catch( ... ) {
-    isInvalid = true;
-  }
-
-  if(isInvalid || !aSO) {
-    _errorCode = "InvalidContext";
-    return false;
-  }
-
-  DF_Label aLabel = aSO.GetLabel();
-  if(aLabel.IsNull()) {
-    _errorCode = "InvalidContext";
-    return false;
-  }
-  else
-    _current = aLabel;  //Set the current context
-
-  return true;
-}
-
-//============================================================================
-/*! Function : GetContext
- *  Purpose  : Gets the current context
- */
-//============================================================================
-std::string SALOMEDSImpl_Study::GetContext()
-{
-  _errorCode = "";
-
-  if(_current.IsNull()) {
-    _errorCode = "InvaidContext";
-    return "";
-  }
-  SALOMEDSImpl_SObject so = GetSObject(_current);
-  return GetObjectPath(so);
-}
-
-//============================================================================
-/*! Function : GetObjectNames
- *  Purpose  : method to get all object names in the given context (or in the current context, if 'theContext' is empty)
- */
-//============================================================================
-std::vector<std::string> SALOMEDSImpl_Study::GetObjectNames(const std::string& theContext)
-{
-  _errorCode = "";
-
-  std::vector<std::string> aResultSeq;
-  DF_Label aLabel;
-  if (theContext.empty()) {
-    aLabel = _current;
-  } else {
-    DF_Label aTmp = _current;
-    SetContext(theContext);
-    aLabel = _current;
-    _current = aTmp;
-  }
-  if (aLabel.IsNull()) {
-    _errorCode = "InvalidContext";
-    return aResultSeq;
-  }
-
-  DF_ChildIterator anIter (aLabel, true); // iterate all subchildren at all sublevels
-  for (; anIter.More(); anIter.Next()) {
-    DF_Label aLabel = anIter.Value();
-    SALOMEDSImpl_AttributeName* aName;
-    if ((aName=(SALOMEDSImpl_AttributeName*)aLabel.FindAttribute(SALOMEDSImpl_AttributeName::GetID())))
-      aResultSeq.push_back(aName->Value());
-  }
-
-  return aResultSeq;
-}
-
-//============================================================================
-/*! Function : GetDirectoryNames
- *  Purpose  : method to get all directory names in the given context (or in the current context, if 'theContext' is empty)
- */
-//============================================================================
-std::vector<std::string> SALOMEDSImpl_Study::GetDirectoryNames(const std::string& theContext)
-{
-  _errorCode = "";
-
-  std::vector<std::string> aResultSeq;
-  DF_Label aLabel;
-  if (theContext.empty()) {
-    aLabel = _current;
-  } else {
-    DF_Label aTmp = _current;
-    SetContext(theContext);
-    aLabel = _current;
-    _current = aTmp;
-  }
-  if (aLabel.IsNull()) {
-    _errorCode = "InvalidContext";
-    return aResultSeq;
-  }
-
-  DF_ChildIterator anIter (aLabel, true); // iterate first-level children at all sublevels
-  for (; anIter.More(); anIter.Next()) {
-    DF_Label aLabel = anIter.Value();
-    SALOMEDSImpl_AttributeLocalID* anID;
-    if ((anID=(SALOMEDSImpl_AttributeLocalID*)aLabel.FindAttribute(SALOMEDSImpl_AttributeLocalID::GetID()))) {
-      if (anID->Value() == DIRECTORYID) {
-        SALOMEDSImpl_AttributeName* aName;
-        if ((aName=(SALOMEDSImpl_AttributeName*)aLabel.FindAttribute(SALOMEDSImpl_AttributeName::GetID()))) {
-          aResultSeq.push_back(aName->Value());
-        }
-      }
-    }
-  }
-
-  return aResultSeq;
-}
-
-//============================================================================
-/*! Function : GetFileNames
- *  Purpose  : method to get all file names in the given context (or in the current context, if 'theContext' is empty)
- */
-//============================================================================
-std::vector<std::string> SALOMEDSImpl_Study::GetFileNames(const std::string& theContext)
-{
-  _errorCode = "";
-
-  std::vector<std::string> aResultSeq;
-  DF_Label aLabel;
-  if (theContext.empty()) {
-    aLabel = _current;
-  } else {
-    DF_Label aTmp = _current;
-    SetContext(theContext);
-    aLabel = _current;
-    _current = aTmp;
-  }
-  if (aLabel.IsNull()) {
-    _errorCode = "InvalidContext";
-    return aResultSeq;
-  }
-
-  DF_ChildIterator anIter (aLabel, true); // iterate all subchildren at all sublevels
-  for (; anIter.More(); anIter.Next()) {
-    DF_Label aLabel = anIter.Value();
-    SALOMEDSImpl_AttributeLocalID* anID;
-    if ((anID=(SALOMEDSImpl_AttributeLocalID*)aLabel.FindAttribute(SALOMEDSImpl_AttributeLocalID::GetID()))) {
-      if (anID->Value() == FILELOCALID) {
-        SALOMEDSImpl_AttributePersistentRef* aName;
-        if ((aName=(SALOMEDSImpl_AttributePersistentRef*)aLabel.FindAttribute(SALOMEDSImpl_AttributePersistentRef::GetID()))) {
-          std::string aFileName = aName->Value();
-          if (aFileName.size() > 0)
-            aResultSeq.push_back(aFileName.substr(strlen(FILEID), aFileName.size()));
-        }
-      }
-    }
-  }
-
-  return aResultSeq;
-}
-
-//============================================================================
-/*! Function : GetComponentNames
- *  Purpose  : method to get all components names
- */
-//============================================================================
-std::vector<std::string> SALOMEDSImpl_Study::GetComponentNames(const std::string& theContext)
-{
-  _errorCode = "";
-
-  std::vector<std::string> aResultSeq;
-  DF_ChildIterator anIter(_doc->Main(), false); // iterate all subchildren at first level
-  for(; anIter.More(); anIter.Next()) {
-    DF_Label aLabel = anIter.Value();
-    SALOMEDSImpl_AttributeName* aName;
-    if ((aName=(SALOMEDSImpl_AttributeName*)aLabel.FindAttribute(SALOMEDSImpl_AttributeName::GetID())))
-      aResultSeq.push_back(aName->Value());
-  }
-
-  return aResultSeq;
-}
-
 //============================================================================
 /*! Function : NewChildIterator
  *  Purpose  : Create a ChildIterator from an SObject
@@ -733,7 +1584,7 @@ SALOMEDSImpl_StudyBuilder* SALOMEDSImpl_Study::NewBuilder()
 std::string SALOMEDSImpl_Study::Name()
 {
   _errorCode = "";
-  return _name;
+  return Kernel_Utils::GetBaseName( _name, false );
 }
 
 //============================================================================
@@ -805,6 +1656,7 @@ void SALOMEDSImpl_Study::URL(const std::string& url)
 {
   _errorCode = "";
   _URL = url;
+  _name = url;
 
   /*jfa: Now name of SALOMEDS study will correspond to name of SalomeApp study
   std::string tmp(_URL);
@@ -817,7 +1669,6 @@ void SALOMEDSImpl_Study::URL(const std::string& url)
       adr = strtok(NULL, "/");
     }
   Name(aName);*/
-  Name(url);
 }
 
 
@@ -942,10 +1793,10 @@ std::string SALOMEDSImpl_Study::_GetStudyVariablesScript()
  *  Purpose  :
  */
 //============================================================================
-std::string SALOMEDSImpl_Study::_GetNoteBookAccess(const std::string& theStudyVar)
+std::string SALOMEDSImpl_Study::_GetNoteBookAccess()
 {
   std::string notebook = "import salome_notebook\n";
-  notebook += _GetNoteBookAccessor() + " = salome_notebook.NoteBook(" + theStudyVar + ")" ;
+  notebook += _GetNoteBookAccessor() + " = salome_notebook.NoteBook()" ;
   return notebook;
 }
 
@@ -955,18 +1806,6 @@ bool SALOMEDSImpl_Study::IsLocked()
   return GetProperties()->IsLocked();
 }
 
-int SALOMEDSImpl_Study::StudyId()
-{
-  _errorCode = "";
-  return _StudyId;
-}
-
-void SALOMEDSImpl_Study::StudyId(int id)
-{
-  _errorCode = "";
-  _StudyId = id;
-}
-
 void SALOMEDSImpl_Study::UpdateIORLabelMap(const std::string& anIOR,const std::string& anEntry)
 {
   _errorCode = "";
@@ -986,7 +1825,7 @@ void SALOMEDSImpl_Study::DeleteIORLabelMapItem(const std::string& anIOR)
     }
 }
 
-SALOMEDSImpl_Study* SALOMEDSImpl_Study::GetStudy(const DF_Label& theLabel)
+SALOMEDSImpl_Study* SALOMEDSImpl_Study::GetStudyImpl(const DF_Label& theLabel)
 {
   SALOMEDSImpl_StudyHandle* Att;
   if ((Att=(SALOMEDSImpl_StudyHandle*)theLabel.Root().FindAttribute(SALOMEDSImpl_StudyHandle::GetID()))) {
@@ -997,19 +1836,19 @@ SALOMEDSImpl_Study* SALOMEDSImpl_Study::GetStudy(const DF_Label& theLabel)
 
 SALOMEDSImpl_SObject SALOMEDSImpl_Study::SObject(const DF_Label& theLabel)
 {
-  return GetStudy(theLabel)->GetSObject(theLabel);
+  return GetStudyImpl(theLabel)->GetSObject(theLabel);
 }
 
 SALOMEDSImpl_SComponent SALOMEDSImpl_Study::SComponent(const DF_Label& theLabel)
 {
-  return GetStudy(theLabel)->GetSComponent(theLabel);
+  return GetStudyImpl(theLabel)->GetSComponent(theLabel);
 }
 
 
 void SALOMEDSImpl_Study::IORUpdated(const SALOMEDSImpl_AttributeIOR* theAttribute)
 {
   std::string aString = theAttribute->Label().Entry();
-  GetStudy(theAttribute->Label())->UpdateIORLabelMap(theAttribute->Value(), aString);
+  GetStudyImpl(theAttribute->Label())->UpdateIORLabelMap(theAttribute->Value(), aString);
 }
 
 std::vector<SALOMEDSImpl_SObject> SALOMEDSImpl_Study::FindDependances(const SALOMEDSImpl_SObject& anObject)
@@ -1085,23 +1924,6 @@ SALOMEDSImpl_UseCaseBuilder* SALOMEDSImpl_Study::GetUseCaseBuilder()
   return _useCaseBuilder;
 }
 
-
-//============================================================================
-/*! Function : Close
- *  Purpose  :
- */
-//============================================================================
-void SALOMEDSImpl_Study::Close()
-{
-  _errorCode = "";
-  _notifier = 0;
-  _doc->GetApplication()->Close(_doc);
-  _doc = NULL;
-  _mapOfSO.clear();
-  _mapOfSCO.clear();
-}
-
-
 //============================================================================
 /*! Function : GetSComponent
  *  Purpose  :
@@ -1290,18 +2112,14 @@ bool SALOMEDSImpl_Study::DumpStudy(const std::string& thePath,
   sfp << "import sys" << std::endl;
   sfp << "import " << aBatchModeScript << std::endl << std::endl;
 
-  std::string aStudyVar = "salome.myStudy";
   // initialization function
   sfp << aBatchModeScript << ".salome_init()" << std::endl;
-  if ( !isMultiFile ) {
-    sfp << "theStudy = " << aStudyVar << std::endl << std::endl;
-    aStudyVar = "theStudy";
-  }
+
   // notebook initialization
-  sfp << _GetNoteBookAccess(aStudyVar) << std::endl;
+  sfp << _GetNoteBookAccess() << std::endl;
 
   // extend sys.path with the directory where the script is being dumped to
-  sfp << "sys.path.insert( 0, r\'" << thePath << "\')" << std::endl << std::endl;
+  sfp << "sys.path.insert(0, r\'" << thePath << "\')" << std::endl << std::endl;
 
   // dump NoteBook variables
   sfp << _GetStudyVariablesScript();
@@ -1356,7 +2174,7 @@ bool SALOMEDSImpl_Study::DumpStudy(const std::string& thePath,
 
     bool isValidScript;
     long aStreamLength  = 0;
-    SALOMEDSImpl_TMPFile* aStream = aDriver->DumpPython(this, isPublished, isMultiFile, isValidScript, aStreamLength);
+    SALOMEDSImpl_TMPFile* aStream = aDriver->DumpPython(isPublished, isMultiFile, isValidScript, aStreamLength);
     if ( !isValidScript )
       isOk = false;
 
@@ -1406,7 +2224,7 @@ bool SALOMEDSImpl_Study::DumpStudy(const std::string& thePath,
 
       //Add to the main script a call to RebuildData of the generated by the component the Python script
       sfp << "import " << aScriptName << std::endl;
-      sfp << aScriptName << ".RebuildData(" << aBatchModeScript << ".myStudy)" << std::endl;
+      sfp << aScriptName << ".RebuildData()" << std::endl;
     }
     else
       sfp << sfp2.str();
@@ -1416,7 +2234,7 @@ bool SALOMEDSImpl_Study::DumpStudy(const std::string& thePath,
 
   sfp << std::endl;
   sfp << "if salome.sg.hasDesktop():" << std::endl;
-  sfp << "\tsalome.sg.updateObjBrowser(True)" << std::endl;
+  sfp << "\tsalome.sg.updateObjBrowser()" << std::endl;
 
   if(isDumpVisuals) { //Output the call to Session's method restoreVisualState
     sfp << "\tiparameters.getSession().restoreVisualState(1)" << std::endl;
@@ -1438,7 +2256,7 @@ bool SALOMEDSImpl_Study::DumpStudy(const std::string& thePath,
 std::string SALOMEDSImpl_Study::GetDumpStudyComment(const char* theComponentName)
 {
   std::stringstream txt;
-  txt << "# -*- coding: utf-8 -*-" << std::endl << std::endl;
+  txt << "#!/usr/bin/env python" << std::endl << std::endl;
   txt << "###" << std::endl;
   txt << "### This file is generated automatically by SALOME v"
       << KERNEL_VERSION_STR
@@ -2165,3 +2983,213 @@ void SALOMEDSImpl_Study::UnRegisterGenObj(const std::string& theIOR, DF_Label la
   if ( SALOMEDSImpl_AbstractCallback* goRegister = getGenObjRegister( label.GetDocument() ))
     goRegister->UnRegisterGenObj( theIOR );
 }
+
+//#######################################################################################################
+//#                                     STATIC PRIVATE FUNCTIONS
+//#######################################################################################################
+
+//============================================================================
+/*! Function : SaveAttributes
+ *  Purpose  : Save attributes for object
+ */
+//============================================================================
+static void SaveAttributes(const SALOMEDSImpl_SObject& aSO, HDFgroup *hdf_group_sobject)
+{
+  hdf_size size[1];
+  std::vector<DF_Attribute*> attrList = aSO.GetLabel().GetAttributes();
+  DF_Attribute* anAttr = NULL;
+  for(int i = 0, len = attrList.size(); i<len; i++) {
+    anAttr = attrList[i];
+    //The following attributes are not supposed to be written to the file
+    std::string type = SALOMEDSImpl_GenericAttribute::Impl_GetType(anAttr);
+    if(type == std::string("AttributeIOR")) continue; //IOR attribute is not saved
+    std::string aSaveStr =anAttr->Save();
+    //cout << "Saving: " << aSO.GetID() << " type: "<< type<<"|" << endl;
+    size[0] = (hdf_int32) strlen(aSaveStr.c_str()) + 1;
+    HDFdataset *hdf_dataset = new HDFdataset((char*)type.c_str(), hdf_group_sobject, HDF_STRING,size, 1);
+    hdf_dataset->CreateOnDisk();
+    hdf_dataset->WriteOnDisk((char*)aSaveStr.c_str());
+    hdf_dataset->CloseOnDisk();
+    hdf_dataset=0; //will be deleted by hdf_sco_group destructor
+  }
+}
+
+//===========================================================================
+//Function : ReadAttributes
+//===========================================================================
+static void ReadAttributes(SALOMEDSImpl_Study* theStudy,
+                           const SALOMEDSImpl_SObject& aSO,
+                           HDFdataset* hdf_dataset)
+{
+  hdf_dataset->OpenOnDisk();
+
+  DF_Attribute* anAttr = NULL;
+  char* current_string = new char[hdf_dataset->GetSize()+1];
+  hdf_dataset->ReadFromDisk(current_string);
+  //cout << "Reading attr type = " << hdf_dataset->GetName() << "  SO = " << aSO.GetID() << endl;
+  if (!strcmp(hdf_dataset->GetName(),"COMPONENTDATATYPE")) {
+    anAttr = theStudy->NewBuilder()->FindOrCreateAttribute(aSO, "AttributeComment");
+  }
+  else if (!strcmp(hdf_dataset->GetName(),"AttributeReference") ||
+           !strcmp(hdf_dataset->GetName(),"Reference")) { // Old format maintenance
+    theStudy->NewBuilder()->Addreference(aSO, theStudy->CreateObjectID(current_string));
+    delete [] (current_string);
+    hdf_dataset->CloseOnDisk();
+    return;
+  }
+  else {
+    anAttr = theStudy->NewBuilder()->FindOrCreateAttribute(aSO, hdf_dataset->GetName());
+  }
+
+  if (anAttr) {
+    anAttr->Load(current_string);
+  }
+
+  delete [] (current_string);
+  hdf_dataset->CloseOnDisk();
+}
+
+//============================================================================
+//Function : BuildlTree
+//============================================================================
+static void BuildTree (SALOMEDSImpl_Study* theStudy, HDFgroup* hdf_current_group)
+{
+  hdf_current_group->OpenOnDisk();
+  SALOMEDSImpl_SObject aSO;
+  char* Entry = hdf_current_group->GetName();
+  if (strcmp(Entry,"STUDY_STRUCTURE") == 0) {
+    aSO = theStudy->CreateObjectID("0:1");
+  }
+  else {
+    aSO = theStudy->CreateObjectID(Entry);
+  }
+
+  char name[HDF_NAME_MAX_LEN+1];
+  int nbsons = hdf_current_group->nInternalObjects();
+  for (int i=0; i<nbsons; i++) {
+    hdf_current_group->InternalObjectIndentify(i,name);
+    if (strncmp(name, "INTERNAL_COMPLEX",16) == 0) continue;
+    hdf_object_type type = hdf_current_group->InternalObjectType(name);
+
+    if (type == HDF_DATASET) {
+      HDFdataset* new_dataset = new HDFdataset(name,hdf_current_group);
+      ReadAttributes(theStudy,aSO,new_dataset);
+      new_dataset = 0; // will be deleted by father destructor
+    }
+    else if (type == HDF_GROUP)   {
+      HDFgroup* new_group = new HDFgroup(name,hdf_current_group);
+      BuildTree (theStudy, new_group);
+      new_group = 0; // will be deleted by father destructor
+    }
+  }
+  hdf_current_group->CloseOnDisk();
+}
+
+
+//============================================================================
+//Function : Translate_IOR_to_persistentID
+//============================================================================
+static void Translate_IOR_to_persistentID (const SALOMEDSImpl_SObject& so,
+                                           SALOMEDSImpl_Driver*        engine,
+                                           bool                        isMultiFile,
+                                           bool                        isASCII)
+{
+  DF_ChildIterator itchild(so.GetLabel());
+  std::string ior_string,  persistent_string, curid;
+
+  for (; itchild.More(); itchild.Next()) {
+    SALOMEDSImpl_SObject current = SALOMEDSImpl_Study::SObject(itchild.Value());
+    SALOMEDSImpl_AttributeIOR* IOR = NULL;
+    if ((IOR=(SALOMEDSImpl_AttributeIOR*)current.GetLabel().FindAttribute(SALOMEDSImpl_AttributeIOR::GetID()))) {
+      ior_string = IOR->Value();
+
+      persistent_string = engine->IORToLocalPersistentID (current, ior_string, isMultiFile, isASCII);
+      SALOMEDSImpl_AttributePersistentRef::Set(current.GetLabel(), persistent_string);
+    }
+    Translate_IOR_to_persistentID (current, engine, isMultiFile, isASCII);
+  }
+}
+
+void ReadNoteBookVariables(SALOMEDSImpl_Study* theStudy, HDFgroup* theGroup)
+{
+  if(!theGroup)
+    return;
+
+  HDFgroup* new_group =0;
+  HDFdataset* new_dataset =0;
+
+  char aVarName[HDF_NAME_MAX_LEN+1];
+  char *currentVarType = 0;
+  char *currentVarValue = 0;
+  char *currentVarIndex = 0;
+  int order = 0;
+  //Open HDF group with notebook variables
+  theGroup->OpenOnDisk();
+
+  //Get Nb of variables
+  int aNbVars = theGroup->nInternalObjects();
+
+  std::map<int,SALOMEDSImpl_GenericVariable*> aVarsMap;
+
+  for( int iVar=0;iVar < aNbVars;iVar++ ) {
+    theGroup->InternalObjectIndentify(iVar,aVarName);
+    hdf_object_type type = theGroup->InternalObjectType(aVarName);
+    if(type == HDF_GROUP) {
+
+      //Read Variable
+      new_group = new HDFgroup(aVarName,theGroup);
+      new_group->OpenOnDisk();
+
+      //Read Type
+      new_dataset = new HDFdataset("VARIABLE_TYPE",new_group);
+      new_dataset->OpenOnDisk();
+      currentVarType = new char[new_dataset->GetSize()+1];
+      new_dataset->ReadFromDisk(currentVarType);
+      new_dataset->CloseOnDisk();
+      new_dataset = 0; //will be deleted by hdf_sco_group destructor
+
+      //Read Order
+      if(new_group->ExistInternalObject("VARIABLE_INDEX")) {
+        new_dataset = new HDFdataset("VARIABLE_INDEX",new_group);
+        new_dataset->OpenOnDisk();
+        currentVarIndex = new char[new_dataset->GetSize()+1];
+        new_dataset->ReadFromDisk(currentVarIndex);
+        new_dataset->CloseOnDisk();
+        new_dataset = 0; //will be deleted by hdf_sco_group destructor
+        order = atoi(currentVarIndex);
+        delete [] currentVarIndex;
+      }
+      else
+        order = iVar;
+
+      //Read Value
+      new_dataset = new HDFdataset("VARIABLE_VALUE",new_group);
+      new_dataset->OpenOnDisk();
+      currentVarValue = new char[new_dataset->GetSize()+1];
+      new_dataset->ReadFromDisk(currentVarValue);
+      new_dataset->CloseOnDisk();
+      new_dataset = 0; //will be deleted by hdf_sco_group destructor
+
+      new_group->CloseOnDisk();
+      new_group = 0;  //will be deleted by hdf_sco_group destructor
+
+      SALOMEDSImpl_GenericVariable::VariableTypes aVarType =
+        SALOMEDSImpl_GenericVariable::String2VariableType(std::string(currentVarType));
+      delete [] currentVarType;
+
+      //Create variable and add it in the study
+      SALOMEDSImpl_GenericVariable* aVariable =
+        new SALOMEDSImpl_ScalarVariable(aVarType,std::string(aVarName));
+      aVariable->Load(std::string(currentVarValue));
+      aVarsMap.insert(std::make_pair(order,aVariable));
+      delete [] currentVarValue;
+    }
+  }
+
+  std::map<int,SALOMEDSImpl_GenericVariable*>::const_iterator it= aVarsMap.begin();
+  for(;it!=aVarsMap.end();it++)
+    theStudy->AddVariable((*it).second);
+
+  theGroup->CloseOnDisk();
+}
+
index a4a07b9055804daeb6d0032b5b7cebaf1114a757..9ed178cf6dbb80d6c991ab970bdc812319b9338d 100644 (file)
@@ -51,7 +51,7 @@
 #include "SALOMEDSImpl_ChildIterator.hxx" 
 #include "SALOMEDSImpl_GenericVariable.hxx"
 
-class SALOMEDSImpl_StudyManager;
+class HDFgroup;
 class SALOMEDSImpl_GenericAttribute;
 
 
@@ -59,11 +59,11 @@ class SALOMEDSIMPL_EXPORT SALOMEDSImpl_Study
 {
 private:
   std::string              _name;  
+  DF_Application*          _appli;
   DF_Document*             _doc;  // Document
+  DF_Document*             _clipboard;
   bool                     _Saved; // True if the Study is saved
   std::string              _URL; //URL of the persistent reference of the study
-  int                      _StudyId; 
-  DF_Label                 _current;
   bool                     _autoFill; 
   std::string              _errorCode;
   std::vector<std::string> _lockers;
@@ -88,28 +88,67 @@ private:
 
   std::string _GetStudyVariablesScript();
   std::string _GetNoteBookAccessor();
-  std::string _GetNoteBookAccess(const std::string& theStudyVar);
+  std::string _GetNoteBookAccess();
 
 public:
 
-  static SALOMEDSImpl_Study* GetStudy(const DF_Label& theLabel);
+  static SALOMEDSImpl_Study* GetStudyImpl(const DF_Label& theLabel);
   static SALOMEDSImpl_SObject SObject(const DF_Label& theLabel);
   static SALOMEDSImpl_SComponent SComponent(const DF_Label& theLabel);
   static void IORUpdated(const SALOMEDSImpl_AttributeIOR* theAttribute);
 
    //! standard constructor
-   SALOMEDSImpl_Study(const DF_Document*, const std::string& study_name);
+   SALOMEDSImpl_Study();
   
   //! standard destructor
   virtual ~SALOMEDSImpl_Study(); 
   
-  //! method to Get persistent reference of study (idem URL())
-  virtual std::string GetPersistentReference();
+  virtual void Init();
+  virtual void Clear();
+
+  //! method to Open a Study from it's persistent reference
+  virtual bool Open(const std::string& aStudyUrl);
+
+  //! method to save a Study
+  virtual bool Save(SALOMEDSImpl_DriverFactory* aFactory,
+                    bool theMultiFile,
+                    bool theASCII);
+
+  //! method to save a Study to the persistent reference aUrl
+  virtual bool SaveAs(const std::string& aUrl,
+                      SALOMEDSImpl_DriverFactory* aFactory,
+                      bool theMultiFile,
+                      bool theASCII);
+
+  bool CopyLabel(SALOMEDSImpl_Driver* theEngine,
+                 const int theSourceStartDepth,
+                 const DF_Label& theSource,
+                 const DF_Label& theDestinationMain);
 
-  //! method to Get transient reference of study
-  virtual std::string GetTransientReference();
+  DF_Label PasteLabel(SALOMEDSImpl_Driver* theEngine,
+                      const DF_Label& theSource,
+                      const DF_Label& theDestinationStart,
+                      const bool isFirstElement);
 
-  virtual void SetTransientReference(const std::string& theIOR);
+  virtual bool CanCopy(const SALOMEDSImpl_SObject& theObject, SALOMEDSImpl_Driver* Engine);
+  virtual bool Copy(const SALOMEDSImpl_SObject& theObject, SALOMEDSImpl_Driver* Engine);
+  virtual bool CanPaste(const SALOMEDSImpl_SObject& theObject, SALOMEDSImpl_Driver* Engine);
+  virtual SALOMEDSImpl_SObject Paste(const SALOMEDSImpl_SObject& theObject, SALOMEDSImpl_Driver* Engine);
+
+  // _SaveAs private function called by Save and SaveAs
+  virtual bool Impl_SaveAs(const std::string& aUrl,
+                           SALOMEDSImpl_DriverFactory* aFactory,
+                           bool theMultiFile,
+                           bool theASCII);
+
+  // _SaveObject private function called by _SaveAs
+  virtual bool Impl_SaveObject(const SALOMEDSImpl_SObject& SC, HDFgroup *hdf_group_datatype);
+
+  virtual bool Impl_SaveProperties(HDFgroup *hdf_group);
+
+
+  //! method to Get persistent reference of study (idem URL())
+  virtual std::string GetPersistentReference();
 
   //! method to detect if a study is empty
   virtual bool IsEmpty();
@@ -145,24 +184,6 @@ public:
 
   std::string GetObjectPathByIOR(const std::string& theIOR);
 
-  //! method to set a context: root ('/') is UserData component
-  virtual bool SetContext(const std::string& thePath);
-
-  //! method to get a context
-  virtual std::string GetContext();  
-
-  //! method to get all object names in the given context (or in the current context, if 'theContext' is empty)
-  virtual std::vector<std::string> GetObjectNames(const std::string& theContext);
-
-  //! method to get all directory names in the given context (or in the current context, if 'theContext' is empty)
-  virtual std::vector<std::string> GetDirectoryNames(const std::string& theContext);
-
-  //! method to get all file names in the given context (or in the current context, if 'theContext' is empty)
-  virtual std::vector<std::string> GetFileNames(const std::string& theContext);
-
-  //! method to get all components names
-  virtual std::vector<std::string> GetComponentNames(const std::string& theContext);
-
   //! method to Create a ChildIterator from an SObject 
   virtual SALOMEDSImpl_ChildIterator NewChildIterator(const SALOMEDSImpl_SObject& aSO);
 
@@ -195,10 +216,6 @@ public:
 
   virtual bool IsLocked();
   
-  virtual int StudyId();
-
-  virtual void  StudyId(int id);
-  
   virtual void DeleteIORLabelMapItem(const std::string& anIOR);
   virtual void UpdateIORLabelMap(const std::string& anIOR, const std::string& aLabel);
   
@@ -212,8 +229,6 @@ public:
   
   virtual SALOMEDSImpl_UseCaseBuilder* GetUseCaseBuilder();
   
-  virtual void Close();
-  
   void EnableUseCaseAutoFilling(bool isEnabled);
   
   virtual std::string GetErrorCode() { return _errorCode; }
@@ -226,8 +241,6 @@ public:
   virtual DF_Attribute* GetAttribute(const std::string& theEntry, 
                                                      const std::string& theType);
 
-  virtual bool HasCurrentContext() { return !_current.IsNull(); }
-
   virtual bool DumpStudy(const std::string& thePath, 
                          const std::string& theBaseName, 
                          bool isPublished,
@@ -326,7 +339,6 @@ public:
   static void UnRegisterGenObj(const std::string& theIOR, DF_Label label);
   void setGenObjRegister(SALOMEDSImpl_AbstractCallback* theRegister);
 
-  friend class SALOMEDSImpl_StudyManager;    
   friend class SALOMEDSImpl_GenericAttribute;
   friend class SALOMEDSImpl_GenericVariable;
 };
index f3e53011249236c44c56f3af48f99cefe94cbaf1..0da25ddc7c79c136e559b4197c833bda5150d930 100644 (file)
@@ -52,11 +52,11 @@ static void Translate_persistentID_to_IOR(DF_Label& Lab, SALOMEDSImpl_Driver* dr
 //============================================================================
 SALOMEDSImpl_StudyBuilder::SALOMEDSImpl_StudyBuilder(const SALOMEDSImpl_Study* theOwner)
 {
-   _errorCode = "";
+  _errorCode = "";
   _callbackOnAdd=NULL;
   _callbackOnRemove = NULL;
-   _study = (SALOMEDSImpl_Study*)theOwner;
-   _doc = _study->GetDocument();
+  _study = (SALOMEDSImpl_Study*)theOwner;
+  _doc = _study->GetDocument();
 }
 
 //============================================================================
@@ -620,78 +620,6 @@ bool SALOMEDSImpl_StudyBuilder::RemoveReference(const SALOMEDSImpl_SObject& me)
   return true;
 }
 
-
-
-//============================================================================
-/*! Function : AddDirectory
- *  Purpose  : adds a new directory with a path = thePath
- */
-//============================================================================
-bool SALOMEDSImpl_StudyBuilder::AddDirectory(const std::string& thePath) 
-{
-  _errorCode = "";
-  CheckLocked();
-  if(thePath.empty()) {
-    _errorCode = "Invalid path";
-    return false;
-  }
-
-  std::string aPath(thePath), aContext(""), aFatherPath;
-  DF_Label aLabel;
-  SALOMEDSImpl_SObject anObject;
-
-  try { 
-    anObject = _study->FindObjectByPath(thePath); //Check if the directory already exists
-  }
-  catch(...) { }
-
-  if(anObject) {
-    _errorCode = "StudyNameAlreadyUsed";
-    return false; 
-  }
-
-  if(aPath[0] != '/') { //Relative path 
-    aPath.insert(aPath.begin(), '/');
-    aPath = _study->GetContext() + aPath;
-  }
-
-  std::vector<std::string> vs = SALOMEDSImpl_Tool::splitString(aPath, '/');
-  if(vs.size() == 1) 
-    aFatherPath = "/";
-  else {
-    for(int i = 0, len = vs.size()-1; i<len; i++) { 
-      aFatherPath += "/";
-      aFatherPath += vs[i];
-    }
-  }
-
-  try { 
-    anObject = _study->FindObjectByPath(aFatherPath); //Check if the father directory exists
-  }
-  catch(...) { ; }
-  if(!anObject) {
-    _errorCode = "StudyInvalidDirectory";
-    return false; 
-  }
-
-  SALOMEDSImpl_SObject aNewObject = NewObject(anObject);
-  aLabel = aNewObject.GetLabel();
-  if(aLabel.IsNull()) {
-    _errorCode = "StudyInvalidComponent";
-    return false;
-  }
-
-  SALOMEDSImpl_AttributeName::Set(aLabel, vs.back());
-
-  //Set LocalID attribute to identify the directory object
-  SALOMEDSImpl_AttributeLocalID::Set(aLabel, DIRECTORYID);
-  
-  _doc->SetModified(true); 
-  
-  return true;
-}
-
-
 //============================================================================
 /*! Function : SetGUID
  *  Purpose  : 
index 86623d607a5df2f9e4470696360e2b1d62e2f29f..48209bcf7bc6758e551d1c2c9c3af30e39da8760 100644 (file)
@@ -64,9 +64,6 @@ public:
   virtual SALOMEDSImpl_SObject NewObjectToTag(const SALOMEDSImpl_SObject& theFatherObject, 
     const int theTag);
 
-  //! The methods adds a new subdirectory, the path can be absolute or relative (then the current context is used)
-  virtual bool AddDirectory(const std::string& thePath);
-
   virtual bool LoadWith(const SALOMEDSImpl_SComponent& sco, SALOMEDSImpl_Driver* Engine);
   virtual bool Load(const SALOMEDSImpl_SObject& sco);
 
diff --git a/src/SALOMEDSImpl/SALOMEDSImpl_StudyManager.cxx b/src/SALOMEDSImpl/SALOMEDSImpl_StudyManager.cxx
deleted file mode 100644 (file)
index 5dd1158..0000000
+++ /dev/null
@@ -1,1572 +0,0 @@
-// Copyright (C) 2007-2016  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, or (at your option) any later version.
-//
-// 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
-//
-
-//  File   : SALOMEDSImpl_StudyManager.cxx
-//  Author : Sergey RUIN
-//  Module : SALOME
-//
-#include "SALOMEDSImpl_StudyManager.hxx"
-
-#include "DF_ChildIterator.hxx"
-#include "HDFexplorer.hxx"
-#include "Basics_Utils.hxx"
-
-//Warning undef of Ascii Winwows define
-#ifdef WIN32
-# undef GetUserName
-#endif
-
-#include "SALOMEDSImpl_Attributes.hxx"
-#include "SALOMEDSImpl_Tool.hxx"
-#include "SALOMEDSImpl_SComponent.hxx"
-#include "SALOMEDSImpl_GenericAttribute.hxx"
-#include "SALOMEDSImpl_ScalarVariable.hxx"
-#include "SALOMEDSImpl_IParameters.hxx"
-#include <map>
-
-#include "HDFOI.hxx"
-#include <iostream>
-#include <stdlib.h>
-#include <string.h>
-
-#define USE_CASE_LABEL_ID                       "0:2"
-
-static void SaveAttributes(const SALOMEDSImpl_SObject& SO, HDFgroup *hdf_group_sobject);
-static void ReadAttributes(SALOMEDSImpl_Study*, const SALOMEDSImpl_SObject&, HDFdataset* );
-static void BuildTree (SALOMEDSImpl_Study*, HDFgroup*);
-static void Translate_IOR_to_persistentID (const SALOMEDSImpl_SObject&,
-                                           SALOMEDSImpl_Driver*, bool isMultiFile, bool isASCII);
-static void ReadNoteBookVariables(SALOMEDSImpl_Study* theStudy, HDFgroup* theGroup);
-
-namespace {
-  class StudyUnlocker
-  {
-  public:
-    StudyUnlocker( SALOMEDSImpl_Study* study ): myStudy( study ), myLocked( false )
-    {
-      myPrevLocked = myStudy->GetProperties()->IsLocked();
-      resume();
-    }
-    ~StudyUnlocker()
-    {
-      suspend();
-    }
-    void suspend()
-    {
-      if (myLocked) {
-        myStudy->GetProperties()->SetLocked(true);
-        myPrevLocked = myLocked;
-        myLocked = false;
-      }
-    }
-    void resume()
-    {
-      if (myPrevLocked) { 
-        myStudy->GetProperties()->SetLocked(false);
-        myLocked = myPrevLocked;
-        myPrevLocked = false;
-      }
-    }
-  private:
-    SALOMEDSImpl_Study* myStudy;
-    bool myLocked;
-    bool myPrevLocked;
-  };
-}
-
-//============================================================================
-/*! Function : SALOMEDSImpl_StudyManager
- *  Purpose  : SALOMEDSImpl_StudyManager constructor
- */
-//============================================================================
-SALOMEDSImpl_StudyManager::SALOMEDSImpl_StudyManager()
-{
-  _errorCode = "";
-  _appli = new DF_Application();
-  _IDcounter = 0;
-  _clipboard = _appli->NewDocument("SALOME_STUDY");
-}
-
-//============================================================================
-/*! Function : ~SALOMEDSImpl_StudyManager
- *  Purpose  : SALOMEDSImpl_StudyManager destructor
- */
-//============================================================================
-SALOMEDSImpl_StudyManager::~SALOMEDSImpl_StudyManager()
-{
-  _appli->Close(_clipboard);
-  // Destroy application
-  delete _appli;    
-}
-
-
-//============================================================================
-/*! Function : NewStudy
- *  Purpose  : Create a New Study of name study_name
- */
-//==================================================T==========================
-SALOMEDSImpl_Study* SALOMEDSImpl_StudyManager::NewStudy(const std::string& study_name)
-{
-  _errorCode = "";
-
-  DF_Document* Doc = _appli->NewDocument("SALOME_STUDY");
-
-  SALOMEDSImpl_Study* Study = new SALOMEDSImpl_Study(Doc, study_name);
-
-  _IDcounter++;
-  Study->StudyId( _IDcounter );
-
-  // set Study properties
-  SALOMEDSImpl_AttributeStudyProperties* aProp = Study->GetProperties();
-  
-  int month=0,day=0,year=0,hh=0,mn=0,ss=0;
-  SALOMEDSImpl_Tool::GetSystemDate(year, month, day, hh, mn, ss);
-  aProp->SetModification(SALOMEDSImpl_Tool::GetUserName(),
-                         mn, hh, day, month, year);
-  aProp->SetCreationMode(1);  //"from scratch"
-
-  return Study;
-}
-
-//============================================================================
-/*! Function : Open
- *  Purpose  : Open a Study from it's persistent reference
- */
-//============================================================================
-SALOMEDSImpl_Study* SALOMEDSImpl_StudyManager::Open(const std::string& aUrl)
-{
-  // Set "C" locale temporarily to avoid possible localization problems
-  Kernel_Utils::Localizer loc;
-
-  _errorCode = "";
-
-  // open the HDFFile
-  HDFfile *hdf_file =0;
-  HDFgroup *hdf_group_study_structure =0;
-  HDFgroup *hdf_notebook_vars = 0; 
-
-  char* aC_HDFUrl;
-  std::string aHDFUrl;
-  bool isASCII = false;
-  if (HDFascii::isASCII(aUrl.c_str())) {
-    isASCII = true;
-    char* aResultPath = HDFascii::ConvertFromASCIIToHDF(aUrl.c_str());
-    if ( !aResultPath )
-      return NULL;
-    aC_HDFUrl = new char[strlen(aResultPath) + 19];
-    sprintf(aC_HDFUrl, "%shdf_from_ascii.hdf", aResultPath);
-    delete [] (aResultPath);
-    aHDFUrl = aC_HDFUrl;
-    delete [] aC_HDFUrl;
-  } else {
-    aHDFUrl = aUrl;
-  }
-
-  
-  hdf_file = new HDFfile((char*)aHDFUrl.c_str());
-  try {
-    hdf_file->OpenOnDisk(HDF_RDONLY);// mpv: was RDWR, but opened file can be write-protected too
-  }
-  catch (HDFexception)
-  {
-    char *eStr;
-    eStr = new char[strlen(aUrl.c_str())+17];
-    sprintf(eStr,"Can't open file %s",aUrl.c_str());
-    delete [] eStr;
-    _errorCode = std::string(eStr);
-    return NULL;
-  }
-  
-  // Temporary aStudyUrl in place of study name
-  DF_Document* Doc = _appli->NewDocument("SALOME_STUDY");
-
-  SALOMEDSImpl_Study* Study = new SALOMEDSImpl_Study(Doc, aUrl);
-
-  _IDcounter++;
-  Study->StudyId( _IDcounter );
-
-  // Assign the value of the URL in the study object
-  Study->URL (aUrl);
-
-  SALOMEDSImpl_AttributePersistentRef::Set(Doc->Main(), aUrl);
-
-  if (!hdf_file->ExistInternalObject("STUDY_STRUCTURE")) {
-     _errorCode = "Study is empty";
-    return Study;
-  }
-
-  //Create  the Structure of the Document
-  hdf_group_study_structure = new HDFgroup("STUDY_STRUCTURE",hdf_file);
-
-  try {
-    BuildTree (Study, hdf_group_study_structure);
-  }
-  catch (HDFexception)
-  {
-    char *eStr = new char [strlen(aUrl.c_str())+17];
-    sprintf(eStr,"Can't open file %s", aUrl.c_str());
-    _errorCode = std::string(eStr);
-    return NULL;
-  }
-  
-  //Read and create notebook variables 
-  if(hdf_file->ExistInternalObject("NOTEBOOK_VARIABLES")) {
-    hdf_notebook_vars  = new HDFgroup("NOTEBOOK_VARIABLES",hdf_file);
-    ReadNoteBookVariables(Study,hdf_notebook_vars);
-    hdf_notebook_vars =0; //will be deleted by hdf_sco_group destructor
-  }
-
-  hdf_file->CloseOnDisk();
-  hdf_group_study_structure = new HDFgroup("STUDY_STRUCTURE",hdf_file);
-  
-  if (isASCII) {
-    std::vector<std::string> aFilesToRemove;
-    aFilesToRemove.push_back("hdf_from_ascii.hdf");
-    SALOMEDSImpl_Tool::RemoveTemporaryFiles(SALOMEDSImpl_Tool::GetDirFromPath(aHDFUrl), aFilesToRemove, true);
-  }
-
-  delete hdf_file; // all related hdf objects will be deleted
-
-  // unlock study if it is locked, to set components versions
-  StudyUnlocker unlock(Study);
-
-  //For old studies we have to add "unknown" version tag for all stored components
-  SALOMEDSImpl_SComponentIterator itcomponent = Study->NewComponentIterator();
-  for (; itcomponent.More(); itcomponent.Next())
-  {
-    SALOMEDSImpl_SComponent sco = itcomponent.Value();
-    std::string aCompType = sco.GetComment();
-    if ( aCompType == SALOMEDSImpl_IParameters::getDefaultVisualComponent() ) continue;
-    if ( Study->GetProperties()->GetComponentVersions( aCompType ).empty() )
-      Study->GetProperties()->SetComponentVersion( aCompType, "" ); // empty version means "unknown"
-  }
-
-  return Study;
-}
-
-
-
-//============================================================================
-/*! Function : Close
- *  Purpose  : Close a study.
- *             If the study hasn't been saved, ask the user to confirm the
- *             close action without saving
- */
-
-//============================================================================
-void  SALOMEDSImpl_StudyManager::Close(SALOMEDSImpl_Study* aStudy)
-{
-  _errorCode = "";
-
-  if(!aStudy) {
-    _errorCode = "Study is null";
-    return;
-  }
-
-  aStudy->Close();
-  DF_Document* doc=aStudy->GetDocument();
-  _appli->Close(doc);
-}
-
-//============================================================================
-/*! Function : Save
- *  Purpose  : Save a Study to it's persistent reference
- */
-//============================================================================
-bool SALOMEDSImpl_StudyManager::Save(SALOMEDSImpl_Study* aStudy,
-                                     SALOMEDSImpl_DriverFactory* aFactory,
-                                     bool theMultiFile)
-{
-  _errorCode = "";
-
-  std::string url = aStudy->URL();
-  if (url.empty()) {
-    _errorCode = "No path specified to save the study. Nothing done";
-    return false;
-  }
-  else {
-    return Impl_SaveAs(url,aStudy, aFactory, theMultiFile, false);
-  }
-
-  return false;
-}
-
-bool SALOMEDSImpl_StudyManager::SaveASCII(SALOMEDSImpl_Study* aStudy,
-                                          SALOMEDSImpl_DriverFactory* aFactory,
-                                          bool theMultiFile)
-{
-  _errorCode = "";
-
-  std::string url = aStudy->URL();
-  if (url.empty()) {
-    _errorCode = "No path specified to save the study. Nothing done";
-    return false;
-  }
-  else {
-    return Impl_SaveAs(url,aStudy, aFactory, theMultiFile, true);
-  }
-
-  return false;
-}
-
-//=============================================================================
-/*! Function : SaveAs
- *  Purpose  : Save a study to the persistent reference aUrl
- */
-//============================================================================
-bool SALOMEDSImpl_StudyManager::SaveAs(const std::string& aUrl,
-                                       SALOMEDSImpl_Study* aStudy,
-                                       SALOMEDSImpl_DriverFactory* aFactory,
-                                       bool theMultiFile)
-{
-  _errorCode = "";
-  return Impl_SaveAs(aUrl,aStudy, aFactory, theMultiFile, false);
-}
-
-bool SALOMEDSImpl_StudyManager::SaveAsASCII(const std::string& aUrl,
-                                            SALOMEDSImpl_Study* aStudy,
-                                            SALOMEDSImpl_DriverFactory* aFactory,
-                                            bool theMultiFile)
-{
-  _errorCode = "";
-  return Impl_SaveAs(aUrl,aStudy, aFactory, theMultiFile, true);
-}
-
-//============================================================================
-/*! Function : GetOpenStudies
- *  Purpose  : Get name list of open studies in the session
- */
-//============================================================================
-std::vector<SALOMEDSImpl_Study*> SALOMEDSImpl_StudyManager::GetOpenStudies()
-{
-  _errorCode = "";
-  std::vector<SALOMEDSImpl_Study*> aList;
-
-  int nbDocs = _appli->NbDocuments();
-
-  if(nbDocs == 0) {
-    _errorCode = "No active study in this session";
-    return aList;
-  }
-  else {
-    SALOMEDSImpl_Study* aStudy;
-    std::vector<int> ids = _appli->GetDocumentIDs();
-    for (int i = 0, len = ids.size(); i<len; i++) {
-      DF_Document* D = _appli->GetDocument(ids[i]);
-      if(D == _clipboard) continue;
-      aStudy = SALOMEDSImpl_Study::GetStudy(D->Main());
-      if(!aStudy) continue;
-      aList.push_back(aStudy);
-    }
-  }
-
-  return aList;
-}
-
-//============================================================================
-/*! Function : GetStudyByName
- *  Purpose  : Get a study from its name
- */
-//============================================================================
-SALOMEDSImpl_Study* SALOMEDSImpl_StudyManager::GetStudyByName
-                                   (const std::string& aStudyName)
-{
-  _errorCode = "";
-  int nbDocs = _appli->NbDocuments();
-
-  if (nbDocs == 0) {
-    _errorCode = "No active study in this session";
-    return NULL;
-  }
-  else {
-    std::vector<SALOMEDSImpl_Study*> studies = GetOpenStudies();
-    for (int i = 0, len = studies.size(); i<len; i++) {
-      if (studies[i]->Name() == aStudyName) return studies[i];
-    }
-  }
-
-  _errorCode = std::string("Found no study with the name ") + aStudyName;
-  return NULL;
-}
-
-//============================================================================
-/*! Function : GetStudyByID
- *  Purpose  : Get a study from its ID
- */
-//============================================================================
-SALOMEDSImpl_Study* SALOMEDSImpl_StudyManager::GetStudyByID(int aStudyID)
-{
-  _errorCode = "";
-  int nbDocs = _appli->NbDocuments();
-
-  if (nbDocs == 0) {
-    _errorCode = "No active study in this session";
-    return NULL;
-  }
-  else {
-    std::vector<SALOMEDSImpl_Study*> studies = GetOpenStudies();
-    for (int i = 0, len = studies.size(); i<len; i++) {
-      if (studies[i]->StudyId() == aStudyID) return studies[i];
-    }
-  }
-
-  _errorCode = "Found no study with the given ID";
-  return NULL;
-}
-
-//=============================================================================
-/*! Function : _SaveProperties
- *  Purpose  : save the study properties in HDF file
- */
-//============================================================================
-bool SALOMEDSImpl_StudyManager::Impl_SaveProperties(SALOMEDSImpl_Study* aStudy,
-                                                    HDFgroup *hdf_group)
-{
-  _errorCode = "";
-
-  HDFdataset *hdf_dataset = 0;
-  hdf_size size[1];
-  hdf_int32 name_len;
-
-  // add modifications list (user and date of save)
-  SALOMEDSImpl_AttributeStudyProperties* aProp = aStudy->GetProperties();
-
-  // unlock study if it is locked, to set modification date
-  StudyUnlocker unlock(aStudy);
-  
-  int month=0,day=0,year=0,hh=0,mn=0,ss=0;
-  SALOMEDSImpl_Tool::GetSystemDate(year, month, day, hh, mn, ss);
-  aProp->SetModification(SALOMEDSImpl_Tool::GetUserName(),
-                         mn, hh, day, month, year);
-  
-  // lock study back if it was locked initially, to write correct value of Locked flag
-  unlock.suspend();
-
-  std::vector<std::string> aNames;
-  std::vector<int> aMinutes, aHours, aDays, aMonths, aYears;
-
-  aProp->GetModifications(aNames, aMinutes, aHours, aDays, aMonths, aYears);
-
-  std::string units = aProp->GetUnits();
-  std::string comment = aProp->GetComment();
-
-  std::map< std::string, std::vector<std::string> > allVersions = aProp->GetComponentsVersions();
-  std::map<std::string, std::string> versions;
-
-  int aLength = 0, aLength1 = 0, anIndex, i, unitsSize = 0, commentSize = 0;
-
-  for(i=1; i<=aNames.size(); i++)
-    aLength += aNames[i-1].size() + 1;
-
-  std::map< std::string, std::vector<std::string> >::const_iterator it;
-  for (it = allVersions.begin(); it != allVersions.end(); ++it ) {
-    std::string vlist = "";
-    std::vector<std::string> vl = it->second;
-    std::vector<std::string>::const_iterator vlit;
-    for ( vlit = vl.begin(); vlit != vl.end(); ++vlit ) {
-      if ( vlist != "" ) vlist += ";";
-      vlist += *vlit;
-    }
-    versions[ it->first ] = vlist;
-    aLength1 += it->first.size() + vlist.size() + 2;
-  }
-
-  unitsSize = units.size();
-  commentSize = comment.size();
-
-  //string format:
-  //locked flag, modified flag,
-  //minutes, hours, day, months, year, user name, char(1), 
-  //minutes, hours, day, months, year, user name, char(1),
-  //.....................................................,
-  //.....................................................,
-  //.....................................................,
-  //minutes, hours, day, months, year, user name, char(1), char(30) <- !!!! used to define end of section with modifications !!!!
-  //units, char(1), comment, char(30) <- !!!! used to define start of section with components' versions !!!!
-  //component=versions, char(1), 
-  //component=versions, char(1), 
-  //...........................,
-  //component=versions, char(1), char(0)
-
-  //string length: 1 byte = locked flag, 1 byte = modified flag, (12 + name length + 1) for each name and date, 1 byte (char(30) section delimiter)
-  // unit length + 1, comment length, "zero" byte
-  
-  char* aProperty = new char[3 + aLength + 12 * aNames.size() + 1 + unitsSize + 1 + commentSize + 1 + aLength1 ];
-
-  sprintf(aProperty,"%c%c", (char)aProp->GetCreationMode(),  (aProp->IsLocked())?'l':'u');
-
-  aLength = aNames.size();
-  int a = 2;
-  for(anIndex = 0; anIndex<aLength; anIndex++) {
-    sprintf(&(aProperty[a]),"%2d%2d%2d%2d%4d%s",
-            (int)(aMinutes[anIndex]),
-            (int)(aHours[anIndex]),
-            (int)(aDays[anIndex]),
-            (int)(aMonths[anIndex]),
-            (int)(aYears[anIndex]),
-            aNames[anIndex].c_str());
-    a = strlen(aProperty);
-    aProperty[a++] = 1;
-  }
-
-  //Write delimiter of the section to define end of the modifications section
-  aProperty[a++] = 30;
-
-  //Write units if need
-  if(units.size() > 0) {
-    sprintf(&(aProperty[a]),"%s",units.c_str());
-    a = strlen(aProperty);
-  }
-
-  aProperty[a++] = 1;
-
-  //Write comments if need
-  if(comment.size() > 0) {
-    sprintf(&(aProperty[a]),"%s",comment.c_str());
-    a = strlen(aProperty);
-  }
-  
-  aProperty[a++] = 30; //delimiter of the component versions
-
-  std::map<std::string, std::string>::const_iterator versionsIt;
-  for ( versionsIt = versions.begin(); versionsIt != versions.end(); ++versionsIt ) {
-    sprintf(&(aProperty[a]),"%s=%s",
-            (char*)(versionsIt->first.c_str()),
-            (char*)(versionsIt->second.c_str()));
-    a = a + versionsIt->first.size() + versionsIt->second.size() + 1;
-    aProperty[a++] = 1;
-  }
-
-  aProperty[a] = 0;
-
-  name_len = (hdf_int32) a;
-  size[0] = name_len + 1 ;
-  hdf_dataset = new HDFdataset("AttributeStudyProperties",hdf_group,HDF_STRING,size,1);
-  hdf_dataset->CreateOnDisk();
-  hdf_dataset->WriteOnDisk(aProperty);
-  hdf_dataset->CloseOnDisk();
-  hdf_dataset=0; //will be deleted by hdf_sco_group destructor
-  delete [] aProperty;
-  
-  aProp->SetModified(0);
-  return true;
-}
-
-//=============================================================================
-/*! Function : _SaveAs
- *  Purpose  : save the study in HDF file
- */
-//============================================================================
-bool SALOMEDSImpl_StudyManager::Impl_SaveAs(const std::string& aStudyUrl,
-                                            SALOMEDSImpl_Study* aStudy,
-                                            SALOMEDSImpl_DriverFactory* aFactory,
-                                            bool theMultiFile,
-                                            bool theASCII)
-{
-  // Set "C" locale temporarily to avoid possible localization problems
-  Kernel_Utils::Localizer loc;
-
-  // HDF File will be composed of different part :
-  // * For each ComponentDataType, all data created by the component
-  //   Information in data group hdf_group_datacomponent
-  // * Study Structure -> Exactly what is contained in Document
-  //   Information in data group hdf_group_study_structure
-
-  _errorCode = "";
-
-  HDFfile *hdf_file=0;
-  HDFgroup *hdf_group_study_structure =0;
-  HDFgroup *hdf_sco_group =0;
-  HDFgroup *hdf_sco_group2 =0;
-  HDFgroup *hdf_notebook_vars =0; 
-  HDFgroup *hdf_notebook_var  = 0;
-
-  HDFgroup *hdf_group_datacomponent =0;
-  HDFdataset *hdf_dataset =0;
-  hdf_size size[1];
-  hdf_int32 name_len = 0;
-  std::string component_name;
-
-  if(!aStudy) {
-    _errorCode = "Study is null";
-    return false;
-  }
-
-  // Store previous URL
-  std::string anOldName = aStudy->Name();
-
-  // Map to store components' versions
-  std::map<std::string, std::string> componentVersions;
-
-  //Create a temporary url to which the study is saved 
-  std::string aUrl = SALOMEDSImpl_Tool::GetTmpDir() + SALOMEDSImpl_Tool::GetNameFromPath(aStudyUrl);
-
-  // unlock study if it is locked, as some attributes need to be modified
-  StudyUnlocker unlock(aStudy);
-
-  SALOMEDSImpl_StudyBuilder* SB= aStudy->NewBuilder();
-  std::map<std::string, SALOMEDSImpl_Driver*> aMapTypeDriver;
-
-  try
-    {
-      // mpv 15.12.2003: for saving components we have to load all data from all modules
-      SALOMEDSImpl_SComponentIterator itcomponent = aStudy->NewComponentIterator();
-      for (; itcomponent.More(); itcomponent.Next())
-        {
-          SALOMEDSImpl_SComponent sco = itcomponent.Value();
-          // if there is an associated Engine call its method for saving
-          std::string IOREngine;
-          try {
-            SALOMEDSImpl_Driver* aDriver = NULL;
-            std::string aCompType = sco.GetComment();
-            if (!sco.ComponentIOR(IOREngine)) {
-              if (!aCompType.empty()) {
-
-                aDriver = aFactory->GetDriverByType(aCompType);
-
-                if (aDriver != NULL) {
-                  if(!SB->LoadWith(sco, aDriver)) {
-                    _errorCode = SB->GetErrorCode();
-                    return false;
-                  }
-                }
-              }
-            }
-            else {
-              aDriver = aFactory->GetDriverByIOR(IOREngine);
-            }
-            aMapTypeDriver[aCompType] = aDriver;
-          } catch(...) {
-            _errorCode = "Can not restore information to resave it";
-            return false;
-          }
-        }
-
-      // VSR: set URL to new file name
-      // VSR: remember to set previous name if save operation fails
-      aStudy->URL(aStudyUrl);
-
-      // To change for Save
-      // Do not have to do a new file but just a Open??? Rewrite all information after erasing everything??
-      hdf_file = new HDFfile((char*)aUrl.c_str());
-      hdf_file->CreateOnDisk();
-
-      //-----------------------------------------------------------------------
-      // 1 - Create a groupe for each SComponent and Update the PersistanceRef
-      //-----------------------------------------------------------------------
-      hdf_group_datacomponent = new HDFgroup("DATACOMPONENT",hdf_file);
-      hdf_group_datacomponent->CreateOnDisk();
-
-      for (itcomponent.Init(); itcomponent.More(); itcomponent.Next())
-        {
-          SALOMEDSImpl_SComponent sco = itcomponent.Value();
-
-          std::string scoid = sco.GetID();
-          hdf_sco_group = new HDFgroup((char*)scoid.c_str(), hdf_group_datacomponent);
-          hdf_sco_group->CreateOnDisk();
-
-          std::string componentDataType = sco.ComponentDataType();
-          std::string IOREngine;
-          if (sco.ComponentIOR(IOREngine))
-            {
-              // Engine should be already in the map as it was to added before
-              SALOMEDSImpl_Driver* Engine = aMapTypeDriver[componentDataType];
-              if (Engine != NULL)
-                {
-                  SALOMEDSImpl_TMPFile* aStream = NULL;
-                  long length = 0;
-
-                  componentVersions[ componentDataType ] = Engine->Version();
-
-                  if (theASCII) aStream = Engine->SaveASCII(sco,
-                                                            SALOMEDSImpl_Tool::GetDirFromPath(aUrl),
-                                                            length,
-                                                            theMultiFile);
-                  else aStream = Engine->Save(sco,
-                                              SALOMEDSImpl_Tool::GetDirFromPath(aUrl),
-                                              length,
-                                              theMultiFile);
-                  HDFdataset *hdf_dataset;
-                  hdf_size aHDFSize[1]; 
-                  if(length > 0) {  //The component saved some auxiliary files, then put them into HDF file
-
-                    aHDFSize[0] = length;
-
-                    HDFdataset *hdf_dataset = new HDFdataset("FILE_STREAM", hdf_sco_group, HDF_STRING, aHDFSize, 1);
-                    hdf_dataset->CreateOnDisk();
-                    hdf_dataset->WriteOnDisk(aStream->Data());  //Save the stream in the HDF file
-                    hdf_dataset->CloseOnDisk();
-                  }
-
-                  if(aStream) delete aStream;
-
-                  // store multifile state
-                  aHDFSize[0] = 2;
-                  hdf_dataset = new HDFdataset("MULTIFILE_STATE", hdf_sco_group, HDF_STRING, aHDFSize, 1);
-                  hdf_dataset->CreateOnDisk();
-                  hdf_dataset->WriteOnDisk((void*)(theMultiFile?"M":"S")); // save: multi or single
-                  hdf_dataset->CloseOnDisk();
-                  hdf_dataset=0; //will be deleted by hdf_sco_AuxFiles destructor
-                  // store ASCII state
-                  aHDFSize[0] = 2;
-                  hdf_dataset = new HDFdataset("ASCII_STATE", hdf_sco_group, HDF_STRING, aHDFSize, 1);
-                  hdf_dataset->CreateOnDisk();
-                  hdf_dataset->WriteOnDisk((void*)(theASCII?"A":"B")); // save: ASCII or BINARY
-                  hdf_dataset->CloseOnDisk();
-                  hdf_dataset=0; //will be deleted by hdf_sco_AuxFiles destructor
-                  // Creation of the persistence reference  attribute
-                  Translate_IOR_to_persistentID (sco, Engine, theMultiFile, theASCII);
-                }
-            }
-          hdf_sco_group->CloseOnDisk();
-          hdf_sco_group=0; // will be deleted by hdf_group_datacomponent destructor
-        }
-      hdf_group_datacomponent->CloseOnDisk();
-      hdf_group_datacomponent =0;  // will be deleted by hdf_file destructor
-
-      //-----------------------------------------------------------------------
-      //3 - Write the Study Structure
-      //-----------------------------------------------------------------------
-      hdf_group_study_structure = new HDFgroup("STUDY_STRUCTURE",hdf_file);
-      hdf_group_study_structure->CreateOnDisk();
-      // save component attributes
-      for (itcomponent.Init(); itcomponent.More(); itcomponent.Next())
-        {
-          SALOMEDSImpl_SComponent SC = itcomponent.Value();
-          std::string scid = SC.GetID();
-          hdf_sco_group2 = new HDFgroup((char*)scid.c_str(), hdf_group_study_structure);
-          hdf_sco_group2->CreateOnDisk();
-          SaveAttributes(SC, hdf_sco_group2);
-          // ComponentDataType treatment
-          component_name = SC.ComponentDataType();
-          name_len = (hdf_int32)component_name.length();
-          size[0] = name_len +1 ;
-          hdf_dataset = new HDFdataset("COMPONENTDATATYPE",hdf_sco_group2,HDF_STRING,size,1);
-          hdf_dataset->CreateOnDisk();
-          hdf_dataset->WriteOnDisk((char*)component_name.c_str());
-          hdf_dataset->CloseOnDisk();
-          hdf_dataset=0; //will be deleted by hdf_sco_group destructor
-          Impl_SaveObject(SC, hdf_sco_group2);
-          hdf_sco_group2->CloseOnDisk();
-          hdf_sco_group2=0; // will be deleted by hdf_group_study_structure destructor
-        }
-      //-----------------------------------------------------------------------
-      //4 - Write the Study UseCases Structure
-      //-----------------------------------------------------------------------
-      SALOMEDSImpl_SObject aSO = aStudy->FindObjectID(USE_CASE_LABEL_ID);
-      if (aSO) {
-        HDFgroup *hdf_soo_group = new HDFgroup(USE_CASE_LABEL_ID,hdf_group_study_structure);
-        hdf_soo_group->CreateOnDisk();
-        SaveAttributes(aSO, hdf_soo_group);
-        Impl_SaveObject(aSO, hdf_soo_group);
-        hdf_soo_group->CloseOnDisk();
-        hdf_soo_group=0; // will be deleted by hdf_group_study_structure destructor
-      }
-      //-----------------------------------------------------------------------
-      //5 - Write the NoteBook Variables
-      //-----------------------------------------------------------------------
-
-      //5.1 Create group to store all note book variables
-      hdf_notebook_vars = new HDFgroup("NOTEBOOK_VARIABLES",hdf_file);
-      hdf_notebook_vars->CreateOnDisk();
-      
-      std::string varValue;
-      std::string varType;
-      std::string varIndex;
-
-      for(int i=0 ;i < aStudy->myNoteBookVars.size(); i++ ){
-        // For each variable create HDF group
-        hdf_notebook_var = new HDFgroup((char*)aStudy->myNoteBookVars[i]->Name().c_str(),hdf_notebook_vars);
-        hdf_notebook_var->CreateOnDisk();
-
-        // Save Variable type
-        varType = aStudy->myNoteBookVars[i]->SaveType();
-        name_len = (hdf_int32) varType.length();
-        size[0] = name_len +1 ;
-        hdf_dataset = new HDFdataset("VARIABLE_TYPE",hdf_notebook_var,HDF_STRING,size,1);
-        hdf_dataset->CreateOnDisk();
-        hdf_dataset->WriteOnDisk((char*)varType.c_str());
-        hdf_dataset->CloseOnDisk();
-        hdf_dataset=0; //will be deleted by hdf_sco_group destructor
-        
-        char buffer[256];
-        sprintf(buffer,"%d",i);
-        varIndex= std::string(buffer);
-        name_len = (hdf_int32) varIndex.length();
-        size[0] = name_len +1 ;
-        hdf_dataset = new HDFdataset("VARIABLE_INDEX",hdf_notebook_var,HDF_STRING,size,1);
-        hdf_dataset->CreateOnDisk();
-        hdf_dataset->WriteOnDisk((char*)varIndex.c_str());
-        hdf_dataset->CloseOnDisk();
-        hdf_dataset=0; //will be deleted by hdf_sco_group destructor
-        
-        
-        // Save Variable value
-        varValue = aStudy->myNoteBookVars[i]->Save();
-        name_len = (hdf_int32) varValue.length();
-        size[0] = name_len +1 ;
-        hdf_dataset = new HDFdataset("VARIABLE_VALUE",hdf_notebook_var,HDF_STRING,size,1);
-        hdf_dataset->CreateOnDisk();
-        hdf_dataset->WriteOnDisk((char*)varValue.c_str());
-        hdf_dataset->CloseOnDisk();
-        hdf_dataset=0; //will be deleted by hdf_sco_group destructor
-        hdf_notebook_var->CloseOnDisk();
-        hdf_notebook_var = 0; //will be deleted by hdf_sco_group destructor
-      }
-      hdf_notebook_vars->CloseOnDisk();
-      hdf_notebook_vars = 0; //will be deleted by hdf_sco_group destructor
-
-      // record component versions
-      std::map<std::string, std::string>::const_iterator itVersions;
-      for ( itVersions = componentVersions.begin(); itVersions != componentVersions.end(); ++itVersions )
-        aStudy->GetProperties()->SetComponentVersion( itVersions->first, itVersions->second );
-      
-      // lock study back if it was locked initially, to write correct value of Locked flag
-      unlock.suspend();
-
-      //-----------------------------------------------------------------------
-      //6 - Write the Study Properties
-      //-----------------------------------------------------------------------
-      std::string study_name = aStudy->Name();
-      name_len = (hdf_int32) study_name.size();
-      size[0] = name_len +1 ;
-      hdf_dataset = new HDFdataset("STUDY_NAME",hdf_group_study_structure,HDF_STRING,size,1);
-      hdf_dataset->CreateOnDisk();
-      hdf_dataset->WriteOnDisk((char*)study_name.c_str());
-      hdf_dataset->CloseOnDisk();
-      hdf_dataset=0; // will be deleted by hdf_group_study_structure destructor
-
-      Impl_SaveProperties(aStudy, hdf_group_study_structure);
-      hdf_group_study_structure->CloseOnDisk();
-      hdf_file->CloseOnDisk();
-
-      hdf_group_study_structure =0; // will be deleted by hdf_file destructor
-      delete hdf_file; // recursively deletes all hdf objects...
-    }
-  catch (HDFexception)
-    {
-      _errorCode = "HDFexception ! ";
-      aStudy->URL( anOldName ); // VSR: restore previous url if operation is failed
-      return false;
-    }
-  catch(std::exception& exc)
-    {
-      _errorCode = const_cast<char*>(exc.what());
-      aStudy->URL( anOldName ); // VSR: restore previous url if operation is failed
-      return false;
-    }
-  catch(...)
-    {
-      _errorCode = "Unknown exception ! ";
-      aStudy->URL( anOldName ); // VSR: restore previous url if operation is failed
-      return false;
-    }
-  if (theASCII) { // save file in ASCII format
-    HDFascii::ConvertFromHDFToASCII(aUrl.c_str(), true);
-  }
-  
-  //Now it's necessary to copy files from the temporary directory to the user defined directory.
-
-  //      The easiest way to get a list of file in the temporary directory
-
-  std::string aCmd, aTmpFileDir = SALOMEDSImpl_Tool::GetTmpDir();
-  std::string aTmpFile = aTmpFileDir +"files";
-  std::string aStudyTmpDir = SALOMEDSImpl_Tool::GetDirFromPath(aUrl);
-
-#ifdef WIN32
-  aCmd = "dir /B \"" + aStudyTmpDir +"\" > " + aTmpFile;
-#else
-  aCmd ="ls -1 \"" + aStudyTmpDir +"\" > " + aTmpFile;
-#endif
-  system(aCmd.c_str());
-
-  //       Iterate and move files in the temporary directory
-  FILE* fp = fopen(aTmpFile.c_str(), "rb");
-  if(!fp) {
-    aStudy->URL( anOldName ); // VSR: restore previous url if operation is failed
-    return false;
-  }
-  char* buffer = new char[2047];
-  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);
-#ifdef WIN32
-    aCmd = "move /Y \"" + aStudyTmpDir + std::string(buffer) + "\" \"" + SALOMEDSImpl_Tool::GetDirFromPath(aStudyUrl) +"\"";
-#else
-    aCmd = "mv -f \"" + aStudyTmpDir + std::string(buffer) + "\" \"" + SALOMEDSImpl_Tool::GetDirFromPath(aStudyUrl)+"\"";
-#endif
-    errors = system(aCmd.c_str());
-  }
-
-  delete []buffer;
-  fclose(fp);
-
-  //       Perform cleanup
-#ifdef WIN32
-  DeleteFileA(aTmpFile.c_str());
-#else
-  unlink(aTmpFile.c_str());
-#endif
-
-#ifdef WIN32
-  RemoveDirectoryA(aTmpFileDir.c_str());
-  RemoveDirectoryA(aStudyTmpDir.c_str());
-#else
-  rmdir(aTmpFileDir.c_str());
-  rmdir(aStudyTmpDir.c_str());
-#endif
-
-  if ( !errors ) {
-    // VSR: finally, if all is done without errors, mark study as Saved
-    aStudy->IsSaved(true);
-  }
-
-  std::map<std::string, SALOMEDSImpl_Driver*>::iterator n2dr = aMapTypeDriver.begin();
-  for ( ; n2dr != aMapTypeDriver.end(); ++n2dr )
-    delete n2dr->second;
-
-  return !errors;
-}
-
-//============================================================================
-/*! Function : Impl_SaveObject
- *  Purpose  :
- */
-//============================================================================
-bool SALOMEDSImpl_StudyManager::Impl_SaveObject(const SALOMEDSImpl_SObject& SC,
-                                                HDFgroup *hdf_group_datatype)
-{
-  _errorCode = "";
-
-  // Write in group hdf_group_datatype all information of SObject SC
-  // Iterative function to parse all SObjects under a SComponent
-
-  HDFgroup *hdf_group_sobject = 0;
-
-  DF_ChildIterator itchild(SC.GetLabel());
-  for (; itchild.More(); itchild.Next())
-    {
-
-      // mpv: don't save empty labels
-      std::vector<DF_Attribute*> attr = itchild.Value().GetAttributes();
-      if (attr.size() == 0) {  //No attributes on the label
-        DF_ChildIterator subchild(itchild.Value());
-        if (!subchild.More()) {
-          continue;
-        }
-        subchild.Init(itchild.Value(), true);
-        bool anEmpty = true;
-        for (; subchild.More() && anEmpty; subchild.Next()) {
-          std::vector<DF_Attribute*> attr2 = subchild.Value().GetAttributes();
-          if (attr2.size()) {
-            anEmpty = false;  //There are attributes on the child label
-            break;
-          }
-        }
-        if (anEmpty) continue;
-      }
-
-      SALOMEDSImpl_SObject SO = SALOMEDSImpl_Study::SObject(itchild.Value());
-
-      std::string scoid = SO.GetID();
-      hdf_group_sobject = new HDFgroup(scoid.c_str(), hdf_group_datatype);
-      hdf_group_sobject->CreateOnDisk();
-      SaveAttributes(SO, hdf_group_sobject);
-      Impl_SaveObject(SO, hdf_group_sobject);
-      hdf_group_sobject->CloseOnDisk();
-      hdf_group_sobject =0; // will be deleted by father hdf object destructor
-    }
-
-  return true;
-}
-
-//============================================================================
-/*! Function : Impl_SubstituteSlash
- *  Purpose  :
- */
-//============================================================================
-std::string SALOMEDSImpl_StudyManager::Impl_SubstituteSlash(const std::string& aUrl)
-{
-  _errorCode = "";
-
-  std::string theUrl(aUrl);
-  for(int i = 0; i<theUrl.size(); i++)
-    if(theUrl[i] == '/') theUrl[i] = ':';
-  return theUrl;
-}
-
-//============================================================================
-/*! Function : GetDocumentOfStudy
- *  Purpose  :
- */
-//============================================================================
-DF_Document* SALOMEDSImpl_StudyManager::GetDocumentOfStudy(SALOMEDSImpl_Study* theStudy)
-{
-  _errorCode = "";
-  return theStudy->_doc;
-}
-
-//============================================================================
-/*! Function : CanCopy
- *  Purpose  :
- */
-//============================================================================
-bool SALOMEDSImpl_StudyManager::CanCopy(const SALOMEDSImpl_SObject& theObject,
-                                        SALOMEDSImpl_Driver* theEngine)
-{
-  _errorCode = "";
-  SALOMEDSImpl_SComponent aComponent = theObject.GetFatherComponent();
-  if (!aComponent) return false;
-  if (aComponent.GetLabel() == theObject.GetLabel()) return false;
-  std::string IOREngine;
-  if (!aComponent.ComponentIOR(IOREngine)) return false;
-  if (theEngine == NULL) return false;
-  return theEngine->CanCopy(theObject);
-}
-
-//============================================================================
-/*! Function : CopyLabel
- *  Purpose  :
- */
-//============================================================================
-bool SALOMEDSImpl_StudyManager::CopyLabel(SALOMEDSImpl_Study* theSourceStudy,
-                                          SALOMEDSImpl_Driver* theEngine,
-                                          const int theSourceStartDepth,
-                                          const DF_Label& theSource,
-                                          const DF_Label& theDestinationMain)
-{
-  _errorCode = "";
-
-  int a;
-  DF_Label aTargetLabel = theDestinationMain;
-  DF_Label aAuxTargetLabel = theDestinationMain.Father().FindChild(2);
-  for(a = theSource.Depth() - theSourceStartDepth; a > 0 ; a--) {
-    DF_Label aSourceLabel = theSource;
-    for(int aNbFather = 1; aNbFather < a; aNbFather++) aSourceLabel = aSourceLabel.Father();
-    aTargetLabel = aTargetLabel.FindChild(aSourceLabel.Tag());
-    aAuxTargetLabel = aAuxTargetLabel.FindChild(aSourceLabel.Tag());
-  }
-  // iterate attributes
-  std::vector<DF_Attribute*> attrList = theSource.GetAttributes();
-  for(int i = 0, len = attrList.size(); i<len; i++) {
-    DF_Attribute* anAttr = attrList[i];
-    std::string type = SALOMEDSImpl_GenericAttribute::Impl_GetType(anAttr);
-    if (type.substr(0, 17) == std::string("AttributeTreeNode")) continue; // never copy tree node attribute
-    if (type == std::string("AttributeTarget")) continue; // and target attribute
-
-    if (type == std::string("AttributeReference")) { // reference copied as Comment in aux tree
-      DF_Label aReferenced = dynamic_cast<SALOMEDSImpl_AttributeReference*>(anAttr)->Get();
-      std::string anEntry = aReferenced.Entry();
-      // store the value of name attribute of referenced label
-      SALOMEDSImpl_AttributeName* aNameAttribute;
-      if ((aNameAttribute=(SALOMEDSImpl_AttributeName*)aReferenced.FindAttribute(SALOMEDSImpl_AttributeName::GetID()))) {
-        anEntry += " ";
-        anEntry += aNameAttribute->Value();
-      }
-      SALOMEDSImpl_AttributeComment::Set(aAuxTargetLabel, anEntry);
-      continue;
-    }
-
-    if (type == std::string("AttributeIOR")) { // IOR => ID and TMPFile of Engine
-      std::string anEntry = theSource.Entry();
-      SALOMEDSImpl_SObject aSO = theSourceStudy->FindObjectID(anEntry);
-      int anObjID;
-      long aLen;
-      SALOMEDSImpl_TMPFile* aStream = theEngine->CopyFrom(aSO, anObjID, aLen);
-      std::string aResStr("");
-      for(a = 0; a < aLen; a++) {
-        aResStr += (char)(aStream->Get(a));
-      }
-
-      if(aStream) delete aStream;
-
-      SALOMEDSImpl_AttributeInteger::Set(aAuxTargetLabel, anObjID);
-      SALOMEDSImpl_AttributeName::Set(aAuxTargetLabel, aResStr);
-      continue;
-    }
-    DF_Attribute* aNewAttribute = anAttr->NewEmpty();
-    aTargetLabel.AddAttribute(aNewAttribute);
-    anAttr->Paste(aNewAttribute);
-  }
-
-  return true;
-}
-
-//============================================================================
-/*! Function : Copy
- *  Purpose  :
- */
-//============================================================================
-bool SALOMEDSImpl_StudyManager::Copy(const SALOMEDSImpl_SObject& theObject,
-                                     SALOMEDSImpl_Driver* theEngine)
-{
-  _errorCode = "";
-
-  // adoptation for alliances datamodel copy: without IOR attributes !!!
-  bool aStructureOnly; // copy only SObjects and attributes without component help
-  aStructureOnly = !theObject.GetLabel().IsAttribute(SALOMEDSImpl_AttributeIOR::GetID());
-
-  // get component-engine
-  SALOMEDSImpl_Study* aStudy = theObject.GetStudy();
-
-  // CAF document of current study usage
-  DF_Document* aDocument = GetDocumentOfStudy(aStudy);
-  if (!aDocument) {
-    _errorCode = "Document is null";
-    return false;
-  }
-
-  //Clear the clipboard
-  _clipboard->Main().Root().ForgetAllAttributes(true);
-  _appli->Close(_clipboard);
-  _clipboard = _appli->NewDocument("SALOME_STUDY");
-
-  // set component data type to the name attribute of root label
-  if (!aStructureOnly) {
-    SALOMEDSImpl_AttributeComment::Set(_clipboard->Main().Root(),
-                                       theEngine->ComponentDataType());
-  }
-  // set to the Root label integer attribute: study id
-  SALOMEDSImpl_AttributeInteger::Set(_clipboard->Main().Root(), aStudy->StudyId());
-  // iterate all theObject's label children
-  DF_Label aStartLabel = theObject.GetLabel();
-  int aSourceStartDepth = aStartLabel.Depth();
-
-  // copy main source label
-  CopyLabel(aStudy, theEngine, aSourceStartDepth, aStartLabel, _clipboard->Main());
-
-  // copy all subchildren of the main source label (all levels)
-  DF_ChildIterator anIterator(aStartLabel, true);
-  for(; anIterator.More(); anIterator.Next()) {
-    CopyLabel(aStudy, theEngine, aSourceStartDepth, anIterator.Value(), _clipboard->Main());
-  }
-
-  return true;
-}
-//============================================================================
-/*! Function : CanPaste
- *  Purpose  :
- */
-//============================================================================
-bool SALOMEDSImpl_StudyManager::CanPaste(const SALOMEDSImpl_SObject& theObject,
-                                         SALOMEDSImpl_Driver* theEngine)
-{
-  _errorCode = "";
-
-  if (!_clipboard) {
-    _errorCode = "Clipboard is null";
-    return false;
-  }
-
-  SALOMEDSImpl_AttributeComment* aCompName = NULL;
-  if (!(aCompName=(SALOMEDSImpl_AttributeComment*)_clipboard->Main().Root().FindAttribute(SALOMEDSImpl_AttributeComment::GetID()))) {
-    _errorCode = "Clipboard has no component type";
-    return false;
-  }
-  SALOMEDSImpl_AttributeInteger* anObjID;
-  if (!(anObjID=(SALOMEDSImpl_AttributeInteger*)_clipboard->Main().Father().FindChild(2).FindAttribute(SALOMEDSImpl_AttributeInteger::GetID()))) {
-    _errorCode = "Clipboard has no object id";
-    return false;
-  }
-  SALOMEDSImpl_SComponent aComponent = theObject.GetFatherComponent();
-  if (!aComponent) {
-    _errorCode = "Object doesn't belong to component";
-    return false;
-  }
-
-  std::string IOREngine;
-  if (!aComponent.ComponentIOR(IOREngine)) {
-    _errorCode = "component has no IOR";
-    return false;
-  }
-  return theEngine->CanPaste(aCompName->Value(), anObjID->Value());
-}
-
-//============================================================================
-/*! Function : PasteLabel
- *  Purpose  :
- */
-//============================================================================
-DF_Label SALOMEDSImpl_StudyManager::PasteLabel(SALOMEDSImpl_Study* theDestinationStudy,
-                                               SALOMEDSImpl_Driver* theEngine,
-                                               const DF_Label& theSource,
-                                               const DF_Label& theDestinationStart,
-                                               const int theCopiedStudyID,
-                                               const bool isFirstElement)
-{
-  _errorCode = "";
-
-  // get corresponding source, target and auxiliary labels
-  DF_Label aTargetLabel = theDestinationStart;
-
-  DF_Label aAuxSourceLabel = theSource.Root().FindChild(2);
-  int a;
-  if (!isFirstElement) {
-    for(a = theSource.Depth() - 1; a > 0 ; a--) {
-      DF_Label aSourceLabel = theSource;
-      for(int aNbFather = 1; aNbFather < a; aNbFather++) aSourceLabel = aSourceLabel.Father();
-      aTargetLabel = aTargetLabel.FindChild(aSourceLabel.Tag());
-      aAuxSourceLabel = aAuxSourceLabel.FindChild(aSourceLabel.Tag());
-    }
-    SALOMEDSImpl_SObject so = theDestinationStudy->GetSObject(aTargetLabel);
-    theDestinationStudy->addSO_Notification(so);
-  }
-
-  // check auxiliary label for TMPFile => IOR
-  SALOMEDSImpl_AttributeName* aNameAttribute = NULL;
-  if ((aNameAttribute=(SALOMEDSImpl_AttributeName*)aAuxSourceLabel.FindAttribute(SALOMEDSImpl_AttributeName::GetID()))) {
-    SALOMEDSImpl_AttributeInteger* anObjID = (SALOMEDSImpl_AttributeInteger*)aAuxSourceLabel.FindAttribute(SALOMEDSImpl_AttributeInteger::GetID());
-    SALOMEDSImpl_AttributeComment* aComponentName = (SALOMEDSImpl_AttributeComment*)theSource.Root().FindAttribute(SALOMEDSImpl_AttributeComment::GetID());
-    std::string aCompName = aComponentName->Value();
-
-    if (theEngine->CanPaste(aCompName, anObjID->Value())) {
-      std::string aTMPStr = aNameAttribute->Value();
-      int aLen = aTMPStr.size();
-      unsigned char* aStream = NULL;
-      if(aLen > 0) {
-        aStream = new unsigned char[aLen+10];
-        for(a = 0; a < aLen; a++) {
-          aStream[a] = aTMPStr[a];
-        }
-      }
-
-      std::string anEntry = aTargetLabel.Entry();
-      SALOMEDSImpl_SObject aPastedSO = theDestinationStudy->FindObjectID(anEntry);
-
-      if (isFirstElement) {
-        std::string aDestEntry = theEngine->PasteInto(aStream,
-                                                 aLen,
-                                                 anObjID->Value(),
-                                                 aPastedSO.GetFatherComponent());
-        aTargetLabel = DF_Label::Label(theDestinationStart, aDestEntry);
-      } else
-        theEngine->PasteInto(aStream, aLen, anObjID->Value(), aPastedSO);
-
-      if(aStream != NULL) delete []aStream;
-    }
-  }
-
-  // iterate attributes
-  std::vector<DF_Attribute*> attrList = theSource.GetAttributes();
-  for(int i = 0, len = attrList.size(); i<len; i++) {
-    DF_Attribute* anAttr = attrList[i];
-    if (aTargetLabel.FindAttribute(anAttr->ID())) {
-      aTargetLabel.ForgetAttribute(anAttr->ID());
-    }
-    DF_Attribute* aNewAttribute = anAttr->NewEmpty();
-    aTargetLabel.AddAttribute(aNewAttribute);
-    anAttr->Paste(aNewAttribute);
-  }
-
-  // check auxiliary label for Comment => reference or name attribute of the referenced object
-  SALOMEDSImpl_AttributeComment* aCommentAttribute = NULL;
-  if ((aCommentAttribute=(SALOMEDSImpl_AttributeComment*)aAuxSourceLabel.FindAttribute(SALOMEDSImpl_AttributeComment::GetID()))) {
-    char * anEntry = new char[aCommentAttribute->Value().size() + 1];
-    strcpy(anEntry, std::string(aCommentAttribute->Value()).c_str());
-    char* aNameStart = strchr(anEntry, ' ');
-    if (aNameStart) {
-      *aNameStart = '\0';
-      aNameStart++;
-    }
-    if (theCopiedStudyID == theDestinationStudy->StudyId()) { // if copy to the same study, reanimate reference
-      DF_Label aRefLabel = DF_Label::Label(aTargetLabel, anEntry);
-      SALOMEDSImpl_AttributeReference::Set(aTargetLabel, aRefLabel);
-      // target attributes structure support
-      SALOMEDSImpl_AttributeTarget::Set(aRefLabel)->Add(SALOMEDSImpl_Study::SObject(aTargetLabel));
-    } else {
-      if (aNameStart) SALOMEDSImpl_AttributeName::Set(aTargetLabel, aNameStart);
-      else SALOMEDSImpl_AttributeName::Set(aTargetLabel, std::string("Reference to:")+anEntry);
-    }
-    delete [] anEntry;
-  }
-
-  return aTargetLabel;
-}
-
-//============================================================================
-/*! Function : Paste
- *  Purpose  :
- */
-//============================================================================
-SALOMEDSImpl_SObject SALOMEDSImpl_StudyManager::Paste(const SALOMEDSImpl_SObject& theObject,
-                                               SALOMEDSImpl_Driver* theEngine)
-{
-  _errorCode = "";
-
-  SALOMEDSImpl_SObject so;
-  SALOMEDSImpl_Study* aStudy = theObject.GetStudy();
-
-  // if study is locked, then paste can't be done
-  if (aStudy->GetProperties()->IsLocked()) {
-    _errorCode = "LockProtection";
-    throw LockProtection("LockProtection");
-  }
-
-  // if there is no component name, then paste only SObjects and attributes: without component help
-  SALOMEDSImpl_AttributeComment* aComponentName = NULL;
-  bool aStructureOnly = !(aComponentName=(SALOMEDSImpl_AttributeComment*)_clipboard->Main().Root().FindAttribute(SALOMEDSImpl_AttributeComment::GetID()));
-
-  // get copied study ID
-  SALOMEDSImpl_AttributeInteger* aStudyIDAttribute = NULL;
-  if (!(aStudyIDAttribute=(SALOMEDSImpl_AttributeInteger*)_clipboard->Main().Root().FindAttribute(SALOMEDSImpl_AttributeInteger::GetID()))) {
-    _errorCode = "No study ID was found";
-    return so;
-  }
-  int aCStudyID = aStudyIDAttribute->Value();
-
-  // CAF document of current study usage
-  DF_Document* aDocument = GetDocumentOfStudy(aStudy);
-  if (!aDocument) {
-    _errorCode = "Document is null";
-    return so;
-  }
-
-  SALOMEDSImpl_SComponent aComponent = theObject.GetFatherComponent();
-
-  // fill root inserted SObject
-  DF_Label aStartLabel;
-  if (aStructureOnly) {
-    DF_Label anObjectLabel = DF_Label::Label(aDocument->Main(), theObject.GetID());
-    aStartLabel = PasteLabel(aStudy, theEngine, _clipboard->Main(), anObjectLabel, aCStudyID, false);
-  } else {
-    DF_Label aComponentLabel = DF_Label::Label(aDocument->Main(), aComponent.GetID());
-    aStartLabel = PasteLabel(aStudy, theEngine, _clipboard->Main(), aComponentLabel, aCStudyID, true);
-  }
-
-  // paste all sublebels
-  DF_ChildIterator anIterator(_clipboard->Main(), true);
-  for(; anIterator.More(); anIterator.Next()) {
-    PasteLabel(aStudy, theEngine, anIterator.Value(), aStartLabel, aCStudyID, false);
-  }
-
-  return SALOMEDSImpl_Study::SObject(aStartLabel);
-}
-
-//#######################################################################################################
-//#                                     STATIC PRIVATE FUNCTIONS
-//#######################################################################################################
-
-//============================================================================
-/*! Function : SaveAttributes
- *  Purpose  : Save attributes for object
- */
-//============================================================================
-static void SaveAttributes(const SALOMEDSImpl_SObject& aSO, HDFgroup *hdf_group_sobject)
-{
-  hdf_size size[1];
-  std::vector<DF_Attribute*> attrList = aSO.GetLabel().GetAttributes();
-  DF_Attribute* anAttr = NULL;
-  for(int i = 0, len = attrList.size(); i<len; i++) {
-    anAttr = attrList[i];
-    //The following attributes are not supposed to be written to the file
-    std::string type = SALOMEDSImpl_GenericAttribute::Impl_GetType(anAttr);
-    if(type == std::string("AttributeIOR")) continue; //IOR attribute is not saved
-    std::string aSaveStr =anAttr->Save();
-    //cout << "Saving: " << aSO.GetID() << " type: "<< type<<"|" << endl;
-    size[0] = (hdf_int32) strlen(aSaveStr.c_str()) + 1;
-    HDFdataset *hdf_dataset = new HDFdataset((char*)type.c_str(), hdf_group_sobject, HDF_STRING,size, 1);
-    hdf_dataset->CreateOnDisk();
-    hdf_dataset->WriteOnDisk((char*)aSaveStr.c_str());
-    hdf_dataset->CloseOnDisk();
-    hdf_dataset=0; //will be deleted by hdf_sco_group destructor
-  }
-}
-
-//===========================================================================
-//Function : ReadAttributes
-//===========================================================================
-static void ReadAttributes(SALOMEDSImpl_Study* theStudy,
-                           const SALOMEDSImpl_SObject& aSO,
-                           HDFdataset* hdf_dataset)
-{
-  hdf_dataset->OpenOnDisk();
-
-  DF_Attribute* anAttr = NULL;
-  char* current_string = new char[hdf_dataset->GetSize()+1];
-  hdf_dataset->ReadFromDisk(current_string);
-  //cout << "Reading attr type = " << hdf_dataset->GetName() << "  SO = " << aSO.GetID() << endl;
-  if (!strcmp(hdf_dataset->GetName(),"COMPONENTDATATYPE")) {
-    anAttr = theStudy->NewBuilder()->FindOrCreateAttribute(aSO, "AttributeComment");
-  } else if (!strcmp(hdf_dataset->GetName(),"AttributeReference") ||
-             !strcmp(hdf_dataset->GetName(),"Reference")) { // Old format maintenance
-    theStudy->NewBuilder()->Addreference(aSO, theStudy->CreateObjectID(current_string));
-    delete [] (current_string);
-    hdf_dataset->CloseOnDisk();
-    return;
-  } else {
-    anAttr = theStudy->NewBuilder()->FindOrCreateAttribute(aSO, hdf_dataset->GetName());
-  }
-  
-  if (anAttr) {
-    anAttr->Load(current_string);
-  }
-  
-  delete [] (current_string);
-  hdf_dataset->CloseOnDisk();
-}
-
-//============================================================================
-//Function : BuildlTree
-//============================================================================
-static void BuildTree (SALOMEDSImpl_Study* theStudy, HDFgroup* hdf_current_group)
-{
-  hdf_current_group->OpenOnDisk();
-  SALOMEDSImpl_SObject aSO;
-  char* Entry = hdf_current_group->GetName();
-  if (strcmp(Entry,"STUDY_STRUCTURE") == 0) {
-    aSO = theStudy->CreateObjectID("0:1");
-  }
-  else {
-    aSO = theStudy->CreateObjectID(Entry);
-  }
-
-  char name[HDF_NAME_MAX_LEN+1];
-  int nbsons = hdf_current_group->nInternalObjects();
-  for (int i=0; i<nbsons; i++) {
-    hdf_current_group->InternalObjectIndentify(i,name);
-    if (strncmp(name, "INTERNAL_COMPLEX",16) == 0) continue;
-    hdf_object_type type = hdf_current_group->InternalObjectType(name);
-
-    if  (type == HDF_DATASET) {
-      HDFdataset* new_dataset = new HDFdataset(name,hdf_current_group);
-      ReadAttributes(theStudy,aSO,new_dataset);
-      new_dataset = 0; // will be deleted by father destructor
-
-    }
-    else if (type == HDF_GROUP)   {
-      HDFgroup* new_group = new HDFgroup(name,hdf_current_group);
-      BuildTree (theStudy, new_group);
-      new_group = 0; // will be deleted by father destructor
-    }
-  }
-  hdf_current_group->CloseOnDisk();
-}
-
-
-//============================================================================
-//Function : Translate_IOR_to_persistentID
-//============================================================================
-static void Translate_IOR_to_persistentID (const SALOMEDSImpl_SObject& so,
-                                           SALOMEDSImpl_Driver*                engine,
-                                           bool                                isMultiFile,
-                                           bool                                isASCII)
-{
-  DF_ChildIterator itchild(so.GetLabel());
-  std::string ior_string,  persistent_string, curid;
-
-  for (; itchild.More(); itchild.Next()) {
-    SALOMEDSImpl_SObject current = SALOMEDSImpl_Study::SObject(itchild.Value());
-    SALOMEDSImpl_AttributeIOR* IOR = NULL;
-    if ((IOR=(SALOMEDSImpl_AttributeIOR*)current.GetLabel().FindAttribute(SALOMEDSImpl_AttributeIOR::GetID()))) {
-      ior_string = IOR->Value();
-
-      persistent_string = engine->IORToLocalPersistentID (current, ior_string, isMultiFile, isASCII);
-      SALOMEDSImpl_AttributePersistentRef::Set(current.GetLabel(), persistent_string);
-    }
-    Translate_IOR_to_persistentID (current, engine, isMultiFile, isASCII);
-  }
-}
-
-void ReadNoteBookVariables(SALOMEDSImpl_Study* theStudy, HDFgroup* theGroup)
-{
-  if(!theGroup)
-    return;
-
-  HDFgroup* new_group =0;
-  HDFdataset* new_dataset =0;
-  
-  char aVarName[HDF_NAME_MAX_LEN+1];
-  char *currentVarType = 0;
-  char *currentVarValue = 0;
-  char *currentVarIndex = 0;
-  int order = 0;
-  //Open HDF group with notebook variables
-  theGroup->OpenOnDisk();
-
-  //Get Nb of variables
-  int aNbVars = theGroup->nInternalObjects();
-
-  std::map<int,SALOMEDSImpl_GenericVariable*> aVarsMap;
-
-  for( int iVar=0;iVar < aNbVars;iVar++ ) {
-    theGroup->InternalObjectIndentify(iVar,aVarName);
-    hdf_object_type type = theGroup->InternalObjectType(aVarName);
-    if(type == HDF_GROUP) {
-
-      //Read Variable
-      new_group = new HDFgroup(aVarName,theGroup);
-      new_group->OpenOnDisk();
-
-      //Read Type
-      new_dataset = new HDFdataset("VARIABLE_TYPE",new_group);
-      new_dataset->OpenOnDisk();
-      currentVarType = new char[new_dataset->GetSize()+1];
-      new_dataset->ReadFromDisk(currentVarType);
-      new_dataset->CloseOnDisk();
-      new_dataset = 0; //will be deleted by hdf_sco_group destructor
-
-      //Read Order
-      if(new_group->ExistInternalObject("VARIABLE_INDEX")) {
-        new_dataset = new HDFdataset("VARIABLE_INDEX",new_group);
-        new_dataset->OpenOnDisk();
-        currentVarIndex = new char[new_dataset->GetSize()+1];
-        new_dataset->ReadFromDisk(currentVarIndex);
-        new_dataset->CloseOnDisk();
-        new_dataset = 0; //will be deleted by hdf_sco_group destructor
-        order = atoi(currentVarIndex);
-        delete [] currentVarIndex;
-      }
-      else
-        order = iVar;
-      
-      //Read Value
-      new_dataset = new HDFdataset("VARIABLE_VALUE",new_group);
-      new_dataset->OpenOnDisk();
-      currentVarValue = new char[new_dataset->GetSize()+1];
-      new_dataset->ReadFromDisk(currentVarValue);
-      new_dataset->CloseOnDisk();
-      new_dataset = 0; //will be deleted by hdf_sco_group destructor
-
-      new_group->CloseOnDisk();
-      new_group = 0;  //will be deleted by hdf_sco_group destructor
-      
-      SALOMEDSImpl_GenericVariable::VariableTypes aVarType =
-        SALOMEDSImpl_GenericVariable::String2VariableType(std::string(currentVarType));
-      delete [] currentVarType;
-
-      //Create variable and add it in the study
-      SALOMEDSImpl_GenericVariable* aVariable = 
-        new SALOMEDSImpl_ScalarVariable(aVarType,std::string(aVarName));
-      aVariable->Load(std::string(currentVarValue));
-      aVarsMap.insert(std::make_pair(order,aVariable));
-      delete [] currentVarValue;
-    }
-  }
-  
-  std::map<int,SALOMEDSImpl_GenericVariable*>::const_iterator it= aVarsMap.begin();
-  for(;it!=aVarsMap.end();it++)
-    theStudy->AddVariable((*it).second);
-  
-  theGroup->CloseOnDisk();
-}
diff --git a/src/SALOMEDSImpl/SALOMEDSImpl_StudyManager.hxx b/src/SALOMEDSImpl/SALOMEDSImpl_StudyManager.hxx
deleted file mode 100644 (file)
index c111e0b..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright (C) 2007-2016  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, or (at your option) any later version.
-//
-// 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
-//
-
-//  File   : SALOMEDSImpl_StudyManager.hxx
-//  Author : Sergey RUIN
-//  Module : SALOME
-//
-#ifndef __SALOMEDSImpl_STUDYMANAGER_I_H__
-#define __SALOMEDSImpl_STUDYMANAGER_I_H__
-
-#include "SALOMEDSImpl_Defines.hxx"
-
-// std C++ headers
-#include <sstream>
-#include <string>
-#include <vector>
-
-#include "DF_Application.hxx"
-#include "SALOMEDSImpl_Study.hxx"
-#include "SALOMEDSImpl_SObject.hxx"
-#include "SALOMEDSImpl_Driver.hxx"
-#include "DF_Attribute.hxx"
-#include "DF_Label.hxx"
-#include "DF_Document.hxx"
-
-class HDFgroup;
-
-class SALOMEDSIMPL_EXPORT SALOMEDSImpl_StudyManager
-{
-
-private:
-
-  DF_Application*   _appli;  
-  int               _IDcounter;
-  DF_Document*      _clipboard;
-  std::string       _errorCode;
-
-public:
-
-  //! standard constructor
-  SALOMEDSImpl_StudyManager();
-
-  //! standard destructor
-  virtual  ~SALOMEDSImpl_StudyManager(); 
-
-  //! method to Create a New Study of name study_name
-  virtual SALOMEDSImpl_Study* NewStudy(const std::string& study_name);
-
-  //! method to Open a Study from it's persistent reference
-  virtual SALOMEDSImpl_Study* Open(const std::string& aStudyUrl);
-
-  //! method to close a Study 
-  virtual void Close(SALOMEDSImpl_Study* aStudy);
-
-  //! method to save a Study 
-  virtual bool Save(SALOMEDSImpl_Study* aStudy, SALOMEDSImpl_DriverFactory* aFactory, bool theMultiFile);
-
-  virtual bool SaveASCII(SALOMEDSImpl_Study* aStudy, 
-    SALOMEDSImpl_DriverFactory* aFactory, 
-    bool theMultiFile);
-
-  //! method to save a Study to the persistent reference aUrl
-  virtual bool SaveAs(const std::string& aUrl,  
-    SALOMEDSImpl_Study* aStudy, 
-    SALOMEDSImpl_DriverFactory* aFactory,
-    bool theMultiFile);
-
-  virtual bool SaveAsASCII(const std::string& aUrl, 
-    SALOMEDSImpl_Study* aStudy, 
-    SALOMEDSImpl_DriverFactory* aFactory,
-    bool theMultiFile);
-
-  //! method to Get name list of open studies in the session
-  virtual std::vector<SALOMEDSImpl_Study*> GetOpenStudies();
-
-  //! method to get a Study from it's name
-  virtual SALOMEDSImpl_Study* GetStudyByName(const std::string& aStudyName) ;
-
-  //! method to get a Study from it's ID
-  virtual SALOMEDSImpl_Study* GetStudyByID(int aStudyID) ;
-
-
-  DF_Document* GetDocumentOfStudy(SALOMEDSImpl_Study* theStudy);
-
-  DF_Document* GetClipboard() { return _clipboard; }
-
-  bool CopyLabel(SALOMEDSImpl_Study* theSourceStudy, 
-    SALOMEDSImpl_Driver* theEngine,
-    const int theSourceStartDepth,
-    const DF_Label& theSource,
-    const DF_Label& theDestinationMain);
-
-  DF_Label PasteLabel(SALOMEDSImpl_Study* theDestinationStudy,
-    SALOMEDSImpl_Driver* theEngine,
-    const DF_Label& theSource,
-    const DF_Label& theDestinationStart,
-    const int theCopiedStudyID,
-    const bool isFirstElement);
-
-  virtual bool CanCopy(const SALOMEDSImpl_SObject& theObject, SALOMEDSImpl_Driver* Engine);
-  virtual bool Copy(const SALOMEDSImpl_SObject& theObject, SALOMEDSImpl_Driver* Engine);
-  virtual bool CanPaste(const SALOMEDSImpl_SObject& theObject, SALOMEDSImpl_Driver* Engine);
-  virtual SALOMEDSImpl_SObject Paste(const SALOMEDSImpl_SObject& theObject, SALOMEDSImpl_Driver* Engine);
-
-  // _SaveAs private function called by Save and SaveAs
-  virtual bool Impl_SaveAs(const std::string& aUrl,
-    SALOMEDSImpl_Study* aStudy,
-    SALOMEDSImpl_DriverFactory* aFactory,
-    bool theMultiFile,
-    bool theASCII);
-
-  // _SaveObject private function called by _SaveAs
-  virtual bool Impl_SaveObject(const SALOMEDSImpl_SObject& SC, HDFgroup *hdf_group_datatype);
-
-  // _SubstituteSlash function called by Open and GetStudyByName
-  virtual std::string Impl_SubstituteSlash(const std::string& aUrl);
-
-  virtual bool Impl_SaveProperties(SALOMEDSImpl_Study* aStudy, HDFgroup *hdf_group);
-
-  std::string GetErrorCode() { return _errorCode; }
-  virtual bool IsError() { return _errorCode != ""; }
-
-};
-
-#endif 
index 893f9c64722807137db1dfef0ca176730973c053..e9b39a1ae954cf329c05eddc6c2f13a964e3abcd 100644 (file)
@@ -133,7 +133,7 @@ bool SALOMEDSImpl_UseCaseBuilder::Append(const SALOMEDSImpl_SObject& theObject)
   aCurrentNode->Append(aNode);
 
   // Mantis issue 0020136: Drag&Drop in OB
-  theObject.GetStudy()->addSO_Notification(theObject);
+  SALOMEDSImpl_Study::GetStudyImpl(theObject.GetLabel())->addSO_Notification(theObject);
 
   return true;
 }
@@ -208,7 +208,7 @@ bool SALOMEDSImpl_UseCaseBuilder::AppendTo(const SALOMEDSImpl_SObject& theFather
   bool ret = aFather->Append(aNode);
 
   // Mantis issue 0020136: Drag&Drop in OB
-  theObject.GetStudy()->addSO_Notification(theObject);
+  SALOMEDSImpl_Study::GetStudyImpl(theObject.GetLabel())->addSO_Notification(theObject);
 
   return ret;
 }
@@ -244,7 +244,7 @@ bool SALOMEDSImpl_UseCaseBuilder::InsertBefore(const SALOMEDSImpl_SObject& theFi
   bool ret = aNode->InsertBefore(aFirstNode);
 
   // Mantis issue 0020136: Drag&Drop in OB
-  theFirst.GetStudy()->addSO_Notification(theFirst);
+  SALOMEDSImpl_Study::GetStudyImpl(theFirst.GetLabel())->addSO_Notification(theFirst);
 
   return ret;
 }
index 1ae14790cbd5a7ee558db5444f092100a9283ea8..bd943823d3ac9e262bf659cf2400cafd2d394a65 100644 (file)
@@ -30,7 +30,6 @@
 #include "utilities.h"
 
 #include "SALOMEDSImpl_AttributeParameter.hxx"
-#include "SALOMEDSImpl_StudyManager.hxx"
 #include "SALOMEDSImpl_Study.hxx"
 #include "SALOMEDSImpl_StudyBuilder.hxx"
 #include "SALOMEDSImpl_GenericAttribute.hxx"
@@ -64,8 +63,7 @@ SALOMEDSImplTest::tearDown()
 // ============================================================================
 void SALOMEDSImplTest::testAttributeParameter()
 {
-  SALOMEDSImpl_StudyManager* sm = new SALOMEDSImpl_StudyManager();
-  SALOMEDSImpl_Study* study = sm->NewStudy("Test");
+  SALOMEDSImpl_Study* study = new SALOMEDSImpl_Study();
   SALOMEDSImpl_AttributeParameter* _ap = study->GetCommonParameters("TestComp", 0);
 
   CPPUNIT_ASSERT(_ap);
index df3697b5be490b47abc57426fa8fe6aca9471f15..0b0daf2bd3fb1abdb09dac4e0f2992c95d9398b4 100644 (file)
@@ -21,7 +21,7 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-import sys, os,signal,string,commands
+import sys, os,signal,string,subprocess
 import subprocess
 import runSalome
 import orbmodule
index 026dcaf016473b04034319b154ecfa7a8b3d537f..86772ced9cd8f880a2dff9150dad39fd77aa5e1f 100644 (file)
@@ -34,7 +34,6 @@
 #include "DF_ChildIterator.hxx"
 
 #include "SALOMEDSImpl_Attributes.hxx"
-#include "SALOMEDSImpl_StudyManager.hxx"
 #include "SALOMEDSImpl_Study.hxx"
 #include "SALOMEDSImpl_StudyBuilder.hxx"
 #include "SALOMEDSImpl_SObject.hxx"
@@ -49,10 +48,8 @@ int main (int argc, char * argv[])
 {
   std::cout << "Test started " << std::endl;
 
-  SALOMEDSImpl_StudyManager* aSM = new SALOMEDSImpl_StudyManager();
-  std::cout << "Manager is created " << std::endl;
-  SALOMEDSImpl_Study* aStudy = aSM->NewStudy("SRN");
-  std::cout << "Study with id = " << aStudy->StudyId() << " is created " << std::endl; 
+  SALOMEDSImpl_Study* aStudy = new SALOMEDSImpl_Study();
+  std::cout << "Study is created" << std::endl;
 
   std::cout << "Check the study lock, locking"   << std::endl;
   aStudy->SetStudyLock("SRN");
index 436af9931b5d18378a379a25b9462e747bef0be7..3c621ee5be14fe4332fdf84001a1b2a2712130bd 100644 (file)
@@ -21,7 +21,7 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-import sys, signal,string,commands
+import sys, signal,string,subprocess
 import subprocess
 import runSalome
 import setenv
index d3bc1061908993f07094b4c669c4868563d91803..9d8a641fc149c96af4f21d679795f5f9eef3514c 100644 (file)
@@ -21,7 +21,7 @@
 
 # dict,list,tuple,int,float,str
 import SALOME
-import cPickle
+import pickle
 
 class List(object):
     def __init__(self,varPtr,isTemporaryVar=False):
@@ -37,7 +37,7 @@ class List(object):
         pass
 
     def assign(self,elt):
-        st=cPickle.dumps(elt,cPickle.HIGHEST_PROTOCOL)
+        st=pickle.dumps(elt,pickle.HIGHEST_PROTOCOL)
         self._var_ptr.setSerializedContent(st)
         pass
 
@@ -60,7 +60,7 @@ class List(object):
         return self.local_copy().__repr__()
 
     def local_copy(self):
-        return cPickle.loads(self._var_ptr.fetchSerializedContent())
+        return pickle.loads(self._var_ptr.fetchSerializedContent())
 
     def __reduce__(self):
         return (list,(self.local_copy(),))
@@ -81,7 +81,7 @@ class Tuple(object):
         pass
 
     def assign(self,elt):
-        st=cPickle.dumps(elt,cPickle.HIGHEST_PROTOCOL)
+        st=pickle.dumps(elt,pickle.HIGHEST_PROTOCOL)
         self._var_ptr.setSerializedContent(st)
         pass
 
@@ -100,7 +100,7 @@ class Tuple(object):
         return self.local_copy().__repr__()
 
     def local_copy(self):
-        return cPickle.loads(self._var_ptr.fetchSerializedContent())
+        return pickle.loads(self._var_ptr.fetchSerializedContent())
 
     def __reduce__(self):
         return (tuple,(self.local_copy(),))
@@ -130,7 +130,7 @@ class Int(object):
         return ret(*args)
 
     def assign(self,elt):
-        st=cPickle.dumps(elt,cPickle.HIGHEST_PROTOCOL)
+        st=pickle.dumps(elt,pickle.HIGHEST_PROTOCOL)
         self._var_ptr.setSerializedContent(st)
         pass
 
@@ -141,7 +141,7 @@ class Int(object):
         return self.local_copy().__repr__()
 
     def local_copy(self):
-        return cPickle.loads(self._var_ptr.fetchSerializedContent())
+        return pickle.loads(self._var_ptr.fetchSerializedContent())
 
     def __reduce__(self):
         return (int,(self.local_copy(),))
@@ -162,7 +162,7 @@ class Dict(object):
         pass
 
     def assign(self,elt):
-        st=cPickle.dumps(elt,cPickle.HIGHEST_PROTOCOL)
+        st=pickle.dumps(elt,pickle.HIGHEST_PROTOCOL)
         self._var_ptr.setSerializedContent(st)
         pass
 
@@ -184,7 +184,7 @@ class Dict(object):
         return self.local_copy().__repr__()
 
     def local_copy(self):
-        return cPickle.loads(self._var_ptr.fetchSerializedContent())
+        return pickle.loads(self._var_ptr.fetchSerializedContent())
 
     def __reduce__(self):
         return (dict,(self.local_copy(),))
@@ -199,14 +199,14 @@ class Caller:
         pass
 
     def __call__(self,*args):
-        ret=self._var_ptr.invokePythonMethodOn(self._meth,cPickle.dumps(args,cPickle.HIGHEST_PROTOCOL))
+        ret=self._var_ptr.invokePythonMethodOn(self._meth,pickle.dumps(args,pickle.HIGHEST_PROTOCOL))
         return GetHandlerFromRef(ret,True)
     pass
 
 PyHandlerTypeMap={int:Int,list:List,tuple:Tuple,dict:Dict}
 
 def GetHandlerFromRef(objCorba,isTempVar=False):
-    v=cPickle.loads(objCorba.fetchSerializedContent())
+    v=pickle.loads(objCorba.fetchSerializedContent())
     if v is None:
         return None
     return PyHandlerTypeMap[v.__class__](objCorba,isTempVar)
index b15bf94e2e188f24f4e94a38dd44078e75e43b44..969b720ef53bf6ed83b6e0768254b3c418c763c5 100644 (file)
@@ -46,6 +46,19 @@ using namespace SALOMESDS;
 
 std::size_t DataScopeServerBase::COUNTER=0;
 
+#if PY_VERSION_HEX < 0x03050000
+static char*
+Py_EncodeLocale(const wchar_t *arg, size_t *size)
+{
+       return _Py_wchar2char(arg, size);
+}
+static wchar_t*
+Py_DecodeLocale(const char *arg, size_t *size)
+{
+       return _Py_char2wchar(arg, size);
+}
+#endif
+
 void DataScopeKiller::shutdown()
 {
   Py_Finalize();
@@ -267,7 +280,10 @@ void DataScopeServerBase::initializePython(int argc, char *argv[])
 {
   Py_Initialize();
   PyEval_InitThreads();
-  PySys_SetArgv(argc,argv);
+  wchar_t **changed_argv = new wchar_t*[argc]; // Setting arguments
+  for (int i = 0; i < argc; i++)
+    changed_argv[i] = Py_DecodeLocale(argv[i], NULL);
+  PySys_SetArgv(argc, changed_argv);
   PyObject *mainmod(PyImport_AddModule("__main__"));
   _globals=PyModule_GetDict(mainmod);
   if(PyDict_GetItemString(_globals, "__builtins__") == NULL)
@@ -279,7 +295,7 @@ void DataScopeServerBase::initializePython(int argc, char *argv[])
     }
   _locals=PyDict_New();
   PyObject *tmp(PyList_New(0));
-  _pickler=PyImport_ImportModuleLevel(const_cast<char *>("cPickle"),_globals,_locals,tmp,-1);
+  _pickler=PyImport_ImportModuleLevel(const_cast<char *>("pickle"),_globals,_locals,tmp,0);
 }
 
 void DataScopeServerBase::registerToSalomePiDict() const
@@ -291,8 +307,8 @@ void DataScopeServerBase::registerToSalomePiDict() const
   if(!meth)
     { Py_XDECREF(mod); return ; }
   PyObject *args(PyTuple_New(2));
-  PyTuple_SetItem(args,0,PyInt_FromLong(getpid()));
-  PyTuple_SetItem(args,1,PyString_FromString("SALOME_DataScopeServerBase"));
+  PyTuple_SetItem(args,0,PyLong_FromLong(getpid()));
+  PyTuple_SetItem(args,1,PyUnicode_FromString("SALOME_DataScopeServerBase"));
   PyObject *res(PyObject_CallObject(meth,args));
   Py_XDECREF(args);
   Py_XDECREF(res);
@@ -644,24 +660,27 @@ void DataScopeServerTransaction::addWaitKey(KeyWaiter *kw)
 
 void DataScopeServerTransaction::pingKey(PyObject *keyObj)
 {
-  PyObject *cmpObj(getPyCmpFunc());
-  if(!keyObj)
-    throw Exception("ataScopeServerTransaction::pingKey : Key Object is NULL !");
-  PyObject *args(PyTuple_New(2));
-  PyTuple_SetItem(args,0,keyObj); Py_XINCREF(keyObj);
   std::size_t ii(0);
   // this part does nothing except to be sure that in notify key all will be OK.
+  PyObject *args(PyTuple_New(1));
+  PyTuple_SetItem(args,0,keyObj); Py_XINCREF(keyObj);
   for(std::list< KeyWaiter *>::iterator it=_waiting_keys.begin();it!=_waiting_keys.end();it++,ii++)
     {
       PyObject *waitKey((*it)->getKeyPyObj());
-      PyTuple_SetItem(args,1,waitKey); Py_XINCREF(waitKey);
-      PyObject *res(PyObject_CallObject(cmpObj,args));
+      PyObject *meth(PyObject_GetAttrString(keyObj,"__eq__"));
+      if(!meth)
+      {
+         std::ostringstream oss; oss << "DataScopeServerTransaction::pingKey : for object id #" << ii << " no __eq__ in pyobj !";
+         throw Exception(oss.str());
+      }
+      PyObject *res(PyObject_CallObject(meth,args));
+      Py_XDECREF(meth);
       if(res==NULL)
         {
           std::ostringstream oss; oss << "DataScopeServerTransaction::pingKey : for object id #" << ii << " error during cmp(k,wk[i]) !";
           throw Exception(oss.str());
         }
-      PyInt_AsLong(res);
+      PyBool_Check(res);
       if(PyErr_Occurred())
         {
           std::ostringstream oss; oss << "DataScopeServerTransaction::pingKey : for object id #" << ii << " error during interpretation of cmp(k,wk[i]) !";
@@ -669,16 +688,14 @@ void DataScopeServerTransaction::pingKey(PyObject *keyObj)
         }
       Py_XDECREF(res);
     }
+  Py_XDECREF(args);
 }
 
 void DataScopeServerTransaction::notifyKey(const std::string& varName, PyObject *keyObj, PyObject *valueObj)
 {
-  PyObject *cmpObj(getPyCmpFunc());
-  if(!keyObj)
-    throw Exception("DataScopeServerTransaction::notifyKey : MAIN INTERNAL ERROR ! Key Object is NULL !");
-  PyObject *args(PyTuple_New(2));
-  PyTuple_SetItem(args,0,keyObj); Py_XINCREF(keyObj);
   std::size_t ii(0);
+  PyObject *args(PyTuple_New(1));
+  PyTuple_SetItem(args,0,keyObj); Py_XINCREF(keyObj);
   std::list< KeyWaiter *> newList,listOfEltToWakeUp;
   for(std::list< KeyWaiter *>::iterator it=_waiting_keys.begin();it!=_waiting_keys.end();it++,ii++)
     {
@@ -688,25 +705,31 @@ void DataScopeServerTransaction::notifyKey(const std::string& varName, PyObject
           continue;
         }
       PyObject *waitKey((*it)->getKeyPyObj());
-      PyTuple_SetItem(args,1,waitKey); Py_XINCREF(waitKey);
-      PyObject *res(PyObject_CallObject(cmpObj,args));
-      if(res==NULL)
-        {
-          std::ostringstream oss; oss << "DataScopeServerTransaction::notifyKey : MAIN INTERNAL ERROR ! for object id #" << ii << " error during cmp(k,wk[i]) !";
-          throw Exception(oss.str());
-        }
-      long resCpp(PyInt_AsLong(res));
+      PyObject *meth(PyObject_GetAttrString(keyObj,"__eq__"));
+      if(!meth)
+      {
+         std::ostringstream oss; oss << "DataScopeServerTransaction::pingKey : for object id #" << ii << " no __eq__ in pyobj !";
+         throw Exception(oss.str());
+      }
+      PyObject *res(PyObject_CallObject(meth,args));
+      Py_XDECREF(meth);
+      if(!PyBool_Check(res))
+      {
+         std::ostringstream oss; oss << "DataScopeServerTransaction::pingKey : for object id #" << ii << " no __eq__ in pyobj !";
+         throw Exception(oss.str());
+      }
       if(PyErr_Occurred())
         {
           std::ostringstream oss; oss << "DataScopeServerTransaction::notifyKey : MAIN INTERNAL ERROR ! for object id #" << ii << " error during interpretation of cmp(k,wk[i]) !";
           throw Exception(oss.str());
         }
-      Py_XDECREF(res);
-      if(resCpp==0)
+      if(res==Py_True)
         listOfEltToWakeUp.push_back(*it);
       else
         newList.push_back(*it);
+      Py_XDECREF(res);
     }
+  Py_XDECREF(args);
   for(std::list< KeyWaiter *>::iterator it=listOfEltToWakeUp.begin();it!=listOfEltToWakeUp.end();it++)
     (*it)->valueJustCome(valueObj);
   for(std::list< KeyWaiter *>::iterator it=listOfEltToWakeUp.begin();it!=listOfEltToWakeUp.end();it++)
@@ -866,23 +889,6 @@ void DataScopeServerTransaction::atomicApply(const SALOME::ListOfTransaction& tr
     transactionsCpp[i]->notify();
 }
 
-/*!
- * Returns borrowed reference.
- */
-PyObject *DataScopeServerTransaction::getPyCmpFunc()
-{
-  PyObject *builtins(PyDict_GetItemString(_globals,"__builtins__"));//borrowed
-  if(builtins==NULL)
-    throw Exception("Fail to find reference to builtins !");
-  PyObject *builtins2(PyModule_GetDict(builtins));//borrowed
-  if(builtins2==NULL)
-    throw Exception("Fail to invoke __dict__ on builtins !");
-  PyObject *cmpObj(PyDict_GetItemString(builtins2,"cmp"));
-  if(cmpObj==NULL)
-    throw Exception("Fail to find cmp in __builtins__ !");
-  return cmpObj;
-}
-
 DataScopeServerTransaction::~DataScopeServerTransaction()
 {
 }
index c12add197c20b9ccb78dd8b0a87c7b1e4d7b284f..fed46259265c0983f14143c090e71f8ace199328 100644 (file)
@@ -168,8 +168,6 @@ namespace SALOMESDS
     SALOME::KeyWaiter_ptr waitForKeyInVarAndKillIt(const char *varName, const SALOME::ByteVec& keyVal, SALOME::Transaction_out transac);
     void atomicApply(const SALOME::ListOfTransaction& transactions);
     SALOME::RequestSwitcher_ptr getRequestSwitcher();
-  private:
-    PyObject *getPyCmpFunc();
   private:
     PortableServer::POA_var _poa_for_key_waiter;
     std::list< KeyWaiter * > _waiting_keys;
index 6116b2b89504d885da0472f0731f0f9aeaf83cd5..11b1ea9ff48551fe3239c0edc04531339d8ab9fd 100644 (file)
@@ -82,7 +82,7 @@ void PickelizedPyObjRdExtServer::checkRdExtnessOf(const std::string& methodName,
       Py_XDECREF(argsPy);
       throw Exception("PickelizedPyObjRdExtServer::checkRdExtnessOf : self is NULL !");
     }
-  if(PyTuple_Check(_self)==1 || PyString_Check(_self)==1 || PyInt_Check(_self)==1 || PyBool_Check(_self)==1 || PyFloat_Check(_self)==1)
+  if(PyTuple_Check(_self)==1 || PyBytes_Check(_self)==1 || PyLong_Check(_self)==1 || PyBool_Check(_self)==1 || PyFloat_Check(_self)==1)
     return ;//_self is tuple, str, int or float -> immutable in python. So no method can break the RdExtness of _self.
   if(PyList_Check(_self)==1)
     checkListRdExtnessOf(methodName,argsPy);
index 9efb00b44238c6b6c1fb4c8f229315613c08e1ef..0a041d09a66db15923f5f32eb84e8519176166da 100644 (file)
@@ -80,20 +80,20 @@ SALOME::PickelizedPyObjRdWrServer_ptr PickelizedPyObjRdWrServer::invokePythonMet
       if(errTyp)
         {
           PyObject *ob(PyObject_Str(errTyp));
-          oss2 << " type : \"" << (const char *)PyString_AsString(ob) << "\"";
+          oss2 << " type : \"" << (const char *)PyUnicode_AsUTF8(ob) << "\"";
           Py_XDECREF(ob); Py_XDECREF(errTyp);
         }
       if(errValue)
         {
           PyObject *ob(PyObject_Str(errValue));
-          oss2 << " value : \"" << (const char *)PyString_AsString(ob) << "\"";
+          oss2 << " value : \"" << (const char *)PyUnicode_AsUTF8(ob) << "\"";
           Py_XDECREF(ob); Py_XDECREF(errValue);
         }
       oss2 << " )";
       if(errTB)
         {
           PyObject *ob(PyObject_Str(errTB));
-          oss2 << "( traceback : \"" << (const char *)PyString_AsString(ob) << "\"";
+          oss2 << "( traceback : \"" << (const char *)PyUnicode_AsUTF8(ob) << "\"";
           Py_XDECREF(ob); Py_XDECREF(errTB);
         }
       oss2 << " )";
index 84c38bc87c34ee10d0daef3829cda5b5575eebac..6257bbaacf94e693530f4f3fb3939e80aa55b3e2 100644 (file)
@@ -111,8 +111,8 @@ SALOME::ByteVec *PickelizedPyObjServer::FromCppToByteSeq(const std::string& strT
 PyObject *PickelizedPyObjServer::GetPyObjFromPickled(const std::string& pickledData, DataScopeServerBase *dsb)
 {
   std::size_t sz(pickledData.size());
-  PyObject *pickledDataPy(PyString_FromStringAndSize(NULL,sz));// agy : do not use PyString_FromString because std::string hides a vector of byte.
-  char *buf(PyString_AsString(pickledDataPy));// this buf can be used thanks to python documentation.
+  PyObject *pickledDataPy(PyBytes_FromStringAndSize(NULL,sz));// agy : do not use PyUnicode_FromString because std::string hides a vector of byte.
+  char *buf(PyBytes_AS_STRING(pickledDataPy));// this buf can be used thanks to python documentation.
   const char *inBuf(pickledData.c_str());
   std::copy(inBuf,inBuf+sz,buf);
   PyObject *selfMeth(PyObject_GetAttrString(dsb->getPickler(),"loads"));
@@ -133,8 +133,8 @@ PyObject *PickelizedPyObjServer::getPyObjFromPickled(const std::string& pickledD
 PyObject *PickelizedPyObjServer::GetPyObjFromPickled(const std::vector<unsigned char>& pickledData, DataScopeServerBase *dsb)
 {
   std::size_t sz(pickledData.size());
-  PyObject *pickledDataPy(PyString_FromStringAndSize(NULL,sz));// agy : do not use PyString_FromString because std::string hides a vector of byte.
-  char *buf(PyString_AsString(pickledDataPy));// this buf can be used thanks to python documentation.
+  PyObject *pickledDataPy(PyBytes_FromStringAndSize(NULL,sz));// agy : do not use PyUnicode_FromString because std::string hides a vector of byte.
+  char *buf(PyBytes_AS_STRING(pickledDataPy));// this buf can be used thanks to python documentation.
   const unsigned char *inBuf(&pickledData[0]);
   std::copy(inBuf,inBuf+sz,buf);
   PyObject *selfMeth(PyObject_GetAttrString(dsb->getPickler(),"loads"));
@@ -156,14 +156,14 @@ std::string PickelizedPyObjServer::Pickelize(PyObject *obj, DataScopeServerBase
 {
   PyObject *args(PyTuple_New(2));
   PyTuple_SetItem(args,0,obj);
-  PyTuple_SetItem(args,1,PyInt_FromLong(2));// because "assert(cPickle.HIGHEST_PROTOCOL is 2)"
+  PyTuple_SetItem(args,1,PyLong_FromLong(3));// because "assert(pickle.HIGHEST_PROTOCOL is 3)"
   PyObject *selfMeth(PyObject_GetAttrString(dsb->getPickler(),"dumps"));
   PyObject *retPy(PyObject_CallObject(selfMeth,args));
   Py_XDECREF(selfMeth);
   Py_XDECREF(args);
-  std::size_t sz(PyString_Size(retPy));
+  std::size_t sz(PyBytes_Size(retPy));
   std::string ret(sz,'\0');
-  const char *buf(PyString_AsString(retPy));
+  const char *buf(PyBytes_AS_STRING(retPy));
   char *inBuf(const_cast<char *>(ret.c_str()));
   for(std::size_t i=0;i<sz;i++)
     inBuf[i]=buf[i];
@@ -184,6 +184,8 @@ void PickelizedPyObjServer::setNewPyObj(PyObject *obj)
     throw Exception("PickelizedPyObjServer::setNewPyObj : trying to assign a NULL pyobject in this !");
   if(obj==_self)
     return ;
+  if(PyList_Check(obj)==0 && PyDict_Check(obj)==0 && PyTuple_Check(obj)==0 && PyBytes_Check(obj)==0 && PyLong_Check(obj)==0 && PyBool_Check(obj)==0 && PyFloat_Check(obj)==0 && obj!=Py_None)
+    throw Exception("PickelizedPyObjServer::setNewPyObj : Supported python types are [list,tuple,dict,bytes,int,bool,float,None] !");
   if(_self)
     {
       PyObject *selfType(PyObject_Type(_self));
index 79b12a2b24d7cf622248de89b034e3ccaeddbfdd..59de4a48305a5fe1ad9d2cc7af3dbd6f655ffff7 100644 (file)
@@ -25,9 +25,8 @@ import abc
 def _raiseNow(strCont):
     raise Exception("The method %s has been called whereas it is an interface !"%strCont)
 
-class WrappedType(object):
+class WrappedType(object, metaclass=abc.ABCMeta):
     """ Here definition of an interface in python."""
-    __metaclass__=abc.ABCMeta
     @abc.abstractmethod
     def ptr(self):
         _raiseNow("ptr")
index 9971211de54c5c88997d3e9f534940a07fa11813..c20c5b9366eb3973af5cf1289fc40a61c2b59378 100644 (file)
@@ -20,7 +20,7 @@
 # Author : Anthony Geay
 
 import SALOME
-import cPickle
+import pickle
 import SALOMEWrappedStdType
 
 class InvokatorStyle(object):
@@ -77,7 +77,7 @@ class WrappedType(SALOMEWrappedStdType.WrappedType):
         return self._var_ptr.ptr()
 
     def local_copy(self):
-        return cPickle.loads(self._var_ptr.ptr().fetchSerializedContent())
+        return pickle.loads(self._var_ptr.ptr().fetchSerializedContent())
 
     def __str__(self):
         return self.local_copy().__str__()
@@ -91,7 +91,7 @@ class WrappedType(SALOMEWrappedStdType.WrappedType):
     def assign(self,elt):
         ptrCorba=self._var_ptr.ptr()
         assert(isinstance(ptrCorba,SALOME._objref_PickelizedPyObjRdWrServer))
-        st=cPickle.dumps(elt,cPickle.HIGHEST_PROTOCOL)
+        st=pickle.dumps(elt,pickle.HIGHEST_PROTOCOL)
         ptrCorba.setSerializedContent(st)
         pass
 
@@ -263,8 +263,11 @@ class Float(WrappedType,SALOMEWrappedStdType.Float):
     def __imul__(self,*args):
         return self.local_copy().__mul__(*args)
 
-    def __idiv__(self,*args):
-        return self.local_copy().__div__(*args)
+    def __itruediv__(self,*args):
+        return self.local_copy().__truediv__(*args)
+
+    def __ifloordiv__(self,*args):
+        return self.local_copy().__floordiv__(*args)
 
     def __add__(self,*args):
         return self.local_copy().__add__(*args)
@@ -275,8 +278,11 @@ class Float(WrappedType,SALOMEWrappedStdType.Float):
     def __mul__(self,*args):
         return self.local_copy().__mul__(*args)
 
-    def __div__(self,*args):
-        return self.local_copy().__div__(*args)
+    def __floordiv__(self,*args):
+        return self.local_copy().__floordiv__(*args)
+
+    def __truediv__(self,*args):
+        return self.local_copy().__truediv__(*args)
     
     def __pow__(self,*args):
         return self.local_copy().__pow__(*args)
@@ -321,8 +327,11 @@ class Int(WrappedType,SALOMEWrappedStdType.Int):
     def __imod__(self,*args):
         return self.local_copy().__mod__(*args)
     
-    def __idiv__(self,*args):
-        return self.local_copy().__div__(*args)
+    def __itruediv__(self,*args):
+        return self.local_copy().__truediv__(*args)
+    
+    def __ifloordiv__(self,*args):
+        return self.local_copy().__floordiv__(*args)
 
     def __add__(self,*args):
         return self.local_copy().__add__(*args)
@@ -336,9 +345,12 @@ class Int(WrappedType,SALOMEWrappedStdType.Int):
     def __mod__(self,*args):
         return self.local_copy().__mod__(*args)
 
-    def __div__(self,*args):
-        return self.local_copy().__div__(*args)
-    
+    def __truediv__(self,*args):
+        return self.local_copy().__truediv__(*args)
+
+    def __floordiv__(self,*args):
+        return self.local_copy().__floordiv__(*args)
+
     def __pow__(self,*args):
         return self.local_copy().__pow__(*args)
 
@@ -501,7 +513,7 @@ class Caller:
         pass
 
     def __call__(self,*args):
-        ret=self._var_ptr.invokePythonMethodOn(self._meth,cPickle.dumps(args,cPickle.HIGHEST_PROTOCOL))
+        ret=self._var_ptr.invokePythonMethodOn(self._meth,pickle.dumps(args,pickle.HIGHEST_PROTOCOL))
         return GetHandlerFromRef(ret,True)
     pass
 
@@ -511,7 +523,7 @@ def GetHandlerFromRef(objCorba,isTempVar=False):
     """ Returns a client that allows to handle a remote corba ref of a global var easily.
     """
     assert(isinstance(objCorba,SALOME._objref_PickelizedPyObjServer))
-    v=cPickle.loads(objCorba.fetchSerializedContent())
+    v=pickle.loads(objCorba.fetchSerializedContent())
     if v is None:
         objCorba.UnRegister()
         return None
@@ -523,14 +535,14 @@ def CreateRdOnlyGlobalVar(value,varName,scopeName):
     salome.salome_init()
     dsm=salome.naming_service.Resolve("/DataServerManager")
     d2s,isCreated=dsm.giveADataScopeCalled(scopeName)
-    return GetHandlerFromRef(d2s.createRdOnlyVar(varName,cPickle.dumps(value,cPickle.HIGHEST_PROTOCOL)),False)
+    return GetHandlerFromRef(d2s.createRdOnlyVar(varName,pickle.dumps(value,pickle.HIGHEST_PROTOCOL)),False)
     
 def CreateRdExtGlobalVar(value,varName,scopeName):
     import salome
     salome.salome_init()
     dsm=salome.naming_service.Resolve("/DataServerManager")
     d2s,isCreated=dsm.giveADataScopeCalled(scopeName)
-    return GetHandlerFromRef(d2s.createRdExtVar(varName,cPickle.dumps(value,cPickle.HIGHEST_PROTOCOL)),False)
+    return GetHandlerFromRef(d2s.createRdExtVar(varName,pickle.dumps(value,pickle.HIGHEST_PROTOCOL)),False)
 
 def GetHandlerFromName(varName,scopeName):
     import salome
index b5f1aa0b8892bbe65b12921ae15dd54e65f7dae1..155085b4772fc565d220972f6ae63512ced3f3e5 100644 (file)
@@ -23,7 +23,7 @@ import SalomeSDSClt
 import SALOME
 import salome
 import unittest
-import cPickle
+import pickle
 import gc
 import time
 from datetime import datetime
@@ -32,9 +32,9 @@ import multiprocessing as mp
 nbOfSecWait=1.
 
 def obj2Str(obj):
-  return cPickle.dumps(obj,cPickle.HIGHEST_PROTOCOL)
+  return pickle.dumps(obj,pickle.HIGHEST_PROTOCOL)
 def str2Obj(strr):
-  return cPickle.loads(strr)
+  return pickle.loads(strr)
 def generateKey(varName,scopeName):
   dsm=salome.naming_service.Resolve("/DataServerManager")
   dss,isCreated=dsm.giveADataScopeTransactionCalled(scopeName)
@@ -51,11 +51,13 @@ def work(t):
     import TestSalomeSDSHelper0
     import os,subprocess
     fname=os.path.splitext(TestSalomeSDSHelper0.__file__)[0]+".py"
-    proc=subprocess.Popen(["python",fname],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
+    proc = subprocess.Popen(["python3", fname], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     out,err=proc.communicate()
     if proc.returncode!=0:
-      print out
-      print err
+      print("-------------- work -----------")
+      print(out)
+      print(err)
+      print("~~~~~~~~~~~~~~ work ~~~~~~~~~~~")
     return proc.returncode
   
 def func_test7(scopeName,cv,cv2,cv3,sharedNum):
@@ -164,7 +166,8 @@ class SalomeSDSTest(unittest.TestCase):
     #
     nbProc=8
     pool=mp.Pool(processes=nbProc)
-    asyncResult=pool.map_async(work,[(i,varName,scopeName) for i in xrange(nbProc)])
+    asyncResult=pool.map_async(work,[(i,varName,scopeName) for i in range(nbProc)])
+    print("asyncResult=", asyncResult)
     self.assertEqual(asyncResult.get(),nbProc*[0]) # <- the big test is here !
     dsm.removeDataScope(scopeName)
 
@@ -270,7 +273,7 @@ class SalomeSDSTest(unittest.TestCase):
     wk.waitFor()
     self.assertEqual(str2Obj(dss.waitForMonoThrRev(wk)),[7,8,9,10])
     keys=[str2Obj(elt) for elt in dss.getAllKeysOfVarWithTypeDict(varName)]
-    self.assertEqual(keys,['ab','cd'])
+    self.assertEqual(set(keys),set(['ab','cd']))
 
   def testTransaction6(self):
     """ Test to test RdWr global vars with transaction"""
index ab2adb67666f8fbd4fe5e02234474c1d4c3bb9e1..c0bc4fb61c6fc90af73f0a8d7542488c6b9d1dac 100644 (file)
@@ -21,7 +21,7 @@
 
 import salome
 import SALOME
-import cPickle
+import pickle
 import gc
 import SalomeSDSClt
 
@@ -36,10 +36,10 @@ assert(isinstance(d2s,SALOME._objref_DataScopeServer))
 a=d2s.createRdWrVar("str","c")
 assert(a.getVarName()=="c")
 #
-a.setSerializedContent(cPickle.dumps(st,cPickle.HIGHEST_PROTOCOL))
-assert(cPickle.loads(a.fetchSerializedContent())==st)
-assert(cPickle.loads(a.fetchSerializedContent())==st)
-assert(cPickle.loads(d2s.retrieveVar("c").fetchSerializedContent())==st)
+a.setSerializedContent(pickle.dumps(st,pickle.HIGHEST_PROTOCOL))
+assert(pickle.loads(a.fetchSerializedContent())==st)
+assert(pickle.loads(a.fetchSerializedContent())==st)
+assert(pickle.loads(d2s.retrieveVar("c").fetchSerializedContent())==st)
 assert(isinstance(d2s.retrieveVar("c"),SALOME._objref_PickelizedPyObjRdWrServer))
 assert(dsm.listScopes()==['Default','tonyy'])
 dsm.createDataScope("S2")
@@ -53,17 +53,17 @@ a=dsm.retriveDataScope("S2").createRdWrVar("int","a")
 #
 sname="S7"
 dsm=salome.naming_service.Resolve("/DataServerManager")
-st=cPickle.dumps([],cPickle.HIGHEST_PROTOCOL)
+st=pickle.dumps([],pickle.HIGHEST_PROTOCOL)
 a=dsm.giveADataScopeCalled(sname)[0].createRdWrVar("list","a")
 dsm.giveADataScopeCalled(sname)
-a.setSerializedContent(cPickle.dumps([0,],cPickle.HIGHEST_PROTOCOL))
-assert(cPickle.loads(a.fetchSerializedContent())==[0,])
+a.setSerializedContent(pickle.dumps([0,],pickle.HIGHEST_PROTOCOL))
+assert(pickle.loads(a.fetchSerializedContent())==[0,])
 a.setSerializedContent(st)
-assert(cPickle.loads(a.fetchSerializedContent())==[])
-tmp=a.invokePythonMethodOn("append",cPickle.dumps((0,),cPickle.HIGHEST_PROTOCOL))
-assert(cPickle.loads(a.fetchSerializedContent())==[0])
-for i in xrange(0,1000):
-    tmp=a.invokePythonMethodOn("append",cPickle.dumps((i,),cPickle.HIGHEST_PROTOCOL))
+assert(pickle.loads(a.fetchSerializedContent())==[])
+tmp=a.invokePythonMethodOn("append",pickle.dumps((0,),pickle.HIGHEST_PROTOCOL))
+assert(pickle.loads(a.fetchSerializedContent())==[0])
+for i in range(0,1000):
+    tmp=a.invokePythonMethodOn("append",pickle.dumps((i,),pickle.HIGHEST_PROTOCOL))
     pass
 dsm.removeDataScope(sname)
 #
@@ -72,7 +72,7 @@ d2s,_=dsm.giveADataScopeCalled(sname)
 d2s.createRdWrVar("list","a")
 a=SalomeSDSClt.GetHandlerFromRef(dsm.retriveDataScope(sname).retrieveVar("a"))
 a.append(1)
-for i in xrange(1000):
+for i in range(1000):
     a.append(i)
     pass
 assert(sum(a.local_copy())==499501)
index dd0c66ac5ecbff5764a66b7633010ca9cb7088f8..7e447a8c4107edae883ce2f286e194cce6244040 100644 (file)
@@ -1,5 +1,5 @@
 import SALOME
-import cPickle
+import pickle
 import salome
 import sys
 
@@ -9,10 +9,10 @@ scopeName="Scope1"
 varName="a"
 
 def obj2Str(obj):
-    return cPickle.dumps(obj,cPickle.HIGHEST_PROTOCOL)
+    return pickle.dumps(obj,pickle.HIGHEST_PROTOCOL)
 
 def str2Obj(strr):
-    return cPickle.loads(strr)
+    return pickle.loads(strr)
 
 def waitKey():
     dsm=salome.naming_service.Resolve("/DataServerManager")
@@ -23,4 +23,4 @@ def waitKey():
     return str2Obj(dss.waitForMonoThrRev(wk))==[11,14,100]
 
 if __name__=="__main__":
-    sys.exit(not int(waitKey()))
+    sys.exit(not waitKey())
index 9237e1995de17601a2c0d13e8f58040acdeb4d92..f703a9271fb0b3c38e6133d3afde3dbd602e2e6f 100644 (file)
@@ -21,7 +21,7 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-import sys, os,signal,string,commands
+import sys, os,signal,string,subprocess
 import subprocess
 import runSalome
 import orbmodule
index de7b58c6adb5239e2b89d03c532d4f8e258f8b1d..6fffff1fe6aba67810fe0475aa3d748e59827191 100644 (file)
@@ -44,7 +44,6 @@
 
 #include <iostream> 
 #include <fstream>
-#include <stdlib.h>
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SALOMEDS_Attributes)
@@ -132,12 +131,12 @@ std::string SALOMEDS_Tool::GetTmpDir()
 // purpose  : Removes files listed in theFileList
 //============================================================================
 void SALOMEDS_Tool::RemoveTemporaryFiles(const std::string& theDirectory, 
-                                         const SALOMEDS::ListOfFileNames& theFiles,
+                                         const ListOfFiles& theFiles,
                                          const bool IsDirDeleted)
 {
   std::string aDirName = theDirectory;
 
-  int i, aLength = theFiles.length();
+  int i, aLength = theFiles.size();
   for(i=1; i<=aLength; i++) {
     std::string aFile(aDirName);
     aFile += theFiles[i-1];
@@ -170,11 +169,11 @@ namespace
 {
   SALOMEDS::TMPFile* 
   PutFilesToStream(const std::string& theFromDirectory,
-                   const SALOMEDS::ListOfFileNames& theFiles,
-                   const SALOMEDS::ListOfFileNames& theFileNames,
+                   const std::vector<std::string>& theFiles,
+                   const std::vector<std::string>& theFileNames,
                    const int theNamesOnly)
   {
-    int i, aLength = theFiles.length();
+    int i, aLength = theFiles.size();
     if(aLength == 0)
       return (new SALOMEDS::TMPFile);
     
@@ -195,7 +194,7 @@ namespace
       //Check if the file exists
       
       if (!theNamesOnly) { // mpv 15.01.2003: if only file names must be stroed, then size of files is zero
-        std::string aFullPath = aTmpDir + const_cast<char*>(theFiles[i].in());   
+        std::string aFullPath = aTmpDir + theFiles[i];
         if(!Exists(aFullPath)) continue;
 #ifdef WIN32
         std::ifstream aFile(aFullPath.c_str(), std::ios::binary);
@@ -206,7 +205,7 @@ namespace
         aFileSize[i] = aFile.tellg();
         aBufferSize += aFileSize[i];              //Add a space to store the file
       }
-      aFileNameSize[i] = strlen(theFileNames[i])+1;
+      aFileNameSize[i] = theFileNames[i].length()+1;
       aBufferSize += aFileNameSize[i];          //Add a space to store the file name
       aBufferSize += (theNamesOnly)?4:12;       //Add 4 bytes: a length of the file name,
       //    8 bytes: length of the file itself
@@ -230,7 +229,7 @@ namespace
     for(i=0; i<aLength; i++) {
       std::ifstream *aFile;
       if (!theNamesOnly) { // mpv 15.01.2003: we don't open any file if theNamesOnly = true
-        std::string aFullPath = aTmpDir + const_cast<char*>(theFiles[i].in());
+        std::string aFullPath = aTmpDir + theFiles[i];
         if(!Exists(aFullPath)) continue;
 #ifdef WIN32
         aFile = new std::ifstream(aFullPath.c_str(), std::ios::binary);
@@ -245,7 +244,7 @@ namespace
       aCurrentPos += 4;
       
       //Copy the file name to the buffer
-      memcpy((aBuffer + aCurrentPos), theFileNames[i], aFileNameSize[i]);
+      memcpy((aBuffer + aCurrentPos), theFileNames[i].c_str(), aFileNameSize[i]);
       aCurrentPos += aFileNameSize[i];
       
       if (!theNamesOnly) { // mpv 15.01.2003: we don't copy file content to the buffer if !theNamesOnly
@@ -277,17 +276,17 @@ namespace
 
 SALOMEDS::TMPFile* 
 SALOMEDS_Tool::PutFilesToStream(const std::string& theFromDirectory,
-                                const SALOMEDS::ListOfFileNames& theFiles,
+                                const ListOfFiles& theFiles,
                                 const int theNamesOnly)
 {
-  SALOMEDS::ListOfFileNames aFileNames(theFiles);
+  ListOfFiles aFileNames(theFiles);
   return ::PutFilesToStream(theFromDirectory,theFiles,aFileNames,theNamesOnly);
 }
 
 
 SALOMEDS::TMPFile* 
-SALOMEDS_Tool::PutFilesToStream(const SALOMEDS::ListOfFileNames& theFiles,
-                                const SALOMEDS::ListOfFileNames& theFileNames)
+SALOMEDS_Tool::PutFilesToStream(const ListOfFiles& theFiles,
+                                const ListOfFiles& theFileNames)
 {
   return ::PutFilesToStream("",theFiles,theFileNames,0);
 }
@@ -296,12 +295,12 @@ SALOMEDS_Tool::PutFilesToStream(const SALOMEDS::ListOfFileNames& theFiles,
 // function : PutStreamToFile
 // purpose  : converts the stream "theStream" to the files
 //============================================================================
-SALOMEDS::ListOfFileNames_var 
+SALOMEDS_Tool::ListOfFiles
 SALOMEDS_Tool::PutStreamToFiles(const SALOMEDS::TMPFile& theStream,
                                 const std::string& theToDirectory,
                                 const int theNamesOnly)
 {
-  SALOMEDS::ListOfFileNames_var aFiles = new SALOMEDS::ListOfFileNames;
+  ListOfFiles aFiles;
 
   if(theStream.length() == 0)
     return aFiles;
@@ -320,7 +319,7 @@ SALOMEDS_Tool::PutStreamToFiles(const SALOMEDS::TMPFile& theStream,
   //Copy the number of files in the stream
   memcpy(&aNbFiles, aBuffer, sizeof(int)); 
 
-  aFiles->length(aNbFiles);
+  aFiles.reserve(aNbFiles);
 
   for(i=0; i<aNbFiles; i++) {
 
@@ -355,7 +354,7 @@ SALOMEDS_Tool::PutStreamToFiles(const SALOMEDS::TMPFile& theStream,
       aFile.close();  
       aCurrentPos += aFileSize;
     }
-    aFiles[i] = CORBA::string_dup(aFileName);
+    aFiles.push_back(CORBA::string_dup(aFileName));
     delete[] aFileName;
   }
 
@@ -515,4 +514,3 @@ void SALOMEDS_Tool::GetAllChildren( SALOMEDS::Study_var               theStudy,
 }
 
 
-
index eefbe6e0558884e07c99a5ad39cac6e5816b4568..a8ee8b581a8f952bf572cdf7c0cacffcec9347bc 100644 (file)
@@ -31,6 +31,8 @@
 
 #include <string>
 #include <list> 
+#include <vector>
+#include <stdlib.h>
 
 
 // IDL headers
@@ -50,6 +52,8 @@
 class TOOLSDS_EXPORT SALOMEDS_Tool                                
 {
 public:
+
+  typedef std::vector<std::string> ListOfFiles;
  
   // Returns the unique temporary directory, that is defined in SALOME_TMP_DIR if this variable is set
   // otherwise return /tmp/something/ for Unix or c:\something\ for WIN32
@@ -59,22 +63,22 @@ public:
   // Removes files which are in <theDirectory>, the files for deletion are listed in <theFiles>
   // if <IsDirDeleted> is true <theDirectory> is also deleted if it is empty
   static void RemoveTemporaryFiles(const std::string& theDirectory,
-                                   const SALOMEDS::ListOfFileNames& theFiles,
+                                   const ListOfFiles& theFiles,
                                    const bool IsDirDeleted);
 
   // Converts files listed in <theFiles> which are in <theFromDirectory> into a byte sequence TMPFile
   static SALOMEDS::TMPFile* PutFilesToStream(const std::string& theFromDirectory, 
-                                             const SALOMEDS::ListOfFileNames& theFiles,
+                                             const ListOfFiles& theFiles,
                                              const int theNamesOnly = 0);
 
   // Converts files listed in <theFiles> which will be named as pointed in the <theFileNames> into a byte sequence TMPFile
-  static SALOMEDS::TMPFile* PutFilesToStream(const SALOMEDS::ListOfFileNames& theFiles,
-                                             const SALOMEDS::ListOfFileNames& theFileNames);
+  static SALOMEDS::TMPFile* PutFilesToStream(const ListOfFiles& theFiles,
+                                             const ListOfFiles& theFileNames);
 
   // Converts a byte sequence <theStream> to files and places them in <theToDirectory>
-  static SALOMEDS::ListOfFileNames_var PutStreamToFiles(const SALOMEDS::TMPFile& theStream,
-                                                        const std::string& theToDirectory,
-                                                        const int theNamesOnly = 0);
+  static ListOfFiles PutStreamToFiles(const SALOMEDS::TMPFile& theStream,
+                                                 const std::string& theToDirectory,
+                                                 const int theNamesOnly = 0);
 
   // Returns the name by the path
   // for an example: if thePath = "/tmp/aaa/doc1.hdf" the function returns "doc1"
index 6025fbcec29f84ee95c5a00509c8804c7543cf98..df64656928cae9b21b8277f35cac8337b581bb97 100755 (executable)
@@ -37,13 +37,13 @@ from SALOME_ComponentPy import *
 class SALOME_TestComponentPy( Engines__POA.TestComponent, SALOME_ComponentPy_i):
 
     def Coucou(self, val):
-        print "SALOME_TestComponentPy Coucou ", val
-        result = "result from SALOME_TestComponentPy Coucou " + `val`
+        print("SALOME_TestComponentPy Coucou ", val)
+        result = "result from SALOME_TestComponentPy Coucou " + repr(val)
         return result
     
     def __init__(self, orb, poa, contID, containerName, instanceName, interfaceName):
         notif = False
         SALOME_ComponentPy_i.__init__(self, orb, poa, contID, containerName,
                                       instanceName, interfaceName, notif)
-        print "SALOME_TestComponentPy::__init__"
+        print("SALOME_TestComponentPy::__init__")
 
index 569fb0fd94df067c68fd620d02441b0af059742d..4ed27c7a358e67d1175f5992cd9865cb8b2706c2 100755 (executable)
@@ -44,7 +44,7 @@ obj = orb.resolve_initial_references("NameService")
 rootContext = obj._narrow(CosNaming.NamingContext)
 
 if rootContext is None:
-    print "Name Service Reference is invalid"
+    print("Name Service Reference is invalid")
     sys.exit(1)
 
 #resolve the name /Containers.dir/FactoryServerPy.object
@@ -56,16 +56,16 @@ name = [CosNaming.NameComponent("Containers","dir"),
 
 try:
     obj = rootContext.resolve(name)
-except CosNaming.NamingContext.NotFound, ex:
-    print  containerName , " not found in Naming Service"
+except CosNaming.NamingContext.NotFound as ex:
+    print(containerName , " not found in Naming Service")
     sys.exit(1)
 
 container = obj._narrow(Engines.Container)
-print container.getHostName()
+print(container.getHostName())
 comp = container.load_impl("SalomeTestComponent","SalomeTestComponent")
-print comp._get_instanceName()
+print(comp._get_instanceName())
 comp.ping()
 comptest = comp._narrow(Engines.TestComponent)
 if comptest is None:
-    print "probleme cast"
-print comptest.Coucou(1)
+    print("probleme cast")
+print(comptest.Coucou(1))
index 4deb36b376072e9dd7a79ff12b1d201e53844a78..c31f160925dd23baaeea44914644a3202e6035e5 100644 (file)
@@ -72,7 +72,7 @@ Engines::TestComponent_ptr create_instance(Engines::Container_ptr iGenFact,
   iGenFact->load_component_Library(componenttName.c_str(),reason);
 #endif
   CORBA::string_free(reason);
-  CORBA::Object_var obj = iGenFact->create_component_instance(componenttName.c_str(), 0);
+  CORBA::Object_var obj = iGenFact->create_component_instance(componenttName.c_str());
   Engines::TestComponent_var anInstance = Engines::TestComponent::_narrow(obj);
   MESSAGE("create anInstance");
   SCRUTE(anInstance->instanceName());
index 3cfc5385a80648229baa373dfd21d3efbebb473b..20bb6f49a3db547d572157d38661fc921db5362e 100644 (file)
@@ -21,7 +21,7 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-import sys, os,signal,string,commands
+import sys, os,signal,string,subprocess
 import subprocess
 import runSalome
 import setenv
index 2d554ef642e65c8e4010ece402f28062ea7d63c1..95397b91b1636e15dc2206669d47f45ffe95bd5c 100755 (executable)
@@ -29,9 +29,9 @@ class TestEnvironment:
     salome_path = os.getenv("ROOT_SALOME", "")
     salome_context_file = os.path.join(salome_path, "salome_context.cfg")
     if not os.path.isfile(salome_context_file):
-      print "File salome_context.cfg not found."
-      print "Search path:" + salome_path
-      print "This test needs ROOT_SALOME environment variable in order to run"
+      print("File salome_context.cfg not found.")
+      print("Search path:" + salome_path)
+      print("This test needs ROOT_SALOME environment variable in order to run")
       exit(0)
     
     config_appli_text = '''<application>
@@ -40,7 +40,7 @@ class TestEnvironment:
    <module name="KERNEL" path="'''
     kernel_path = os.getenv("KERNEL_ROOT_DIR", "")
     if not os.path.isdir(kernel_path) :
-      print "KERNEL_ROOT_DIR not defined"
+      print("KERNEL_ROOT_DIR not defined")
       exit(0)
       pass
     
@@ -74,7 +74,7 @@ class TestEnvironment:
     self.salome_module = imp.load_source("SALOME", os.path.join(appli_dir, "salome"))
     try:
       self.salome_module.main(["start", "-t"])
-    except SystemExit, e:
+    except SystemExit as e:
       # There is an exit() call in salome.main. Just ignore it.
       pass
     
@@ -82,7 +82,7 @@ class TestEnvironment:
     ret = 0
     try:
       ret = self.salome_module.main(["shell", script])
-    except SystemExit, e:
+    except SystemExit as e:
       # return exit value
       ret = e.code
     return ret
@@ -90,7 +90,7 @@ class TestEnvironment:
   def tearDown(self):
     try:
       self.salome_module.main(["killall"])
-    except SystemExit, e:
+    except SystemExit as e:
       pass
     pass
   pass #class TestEnvironment
index 28ee924ce1fe70f3081aee1934488d9e56e58f85..ec38d52d2005b15263099187dcb2a4317f14e6bc 100755 (executable)
@@ -46,7 +46,7 @@ IF(NOT SALOME_LIGHT_ONLY)
     Utils_ExceptHandlers.cxx
     Utils_Mutex.cxx
   )
-  FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx")
+  FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx" )
   
 ELSE()
 
@@ -79,3 +79,4 @@ ADD_LIBRARY(OpUtil ${OpUtil_SOURCES})
 TARGET_LINK_LIBRARIES(OpUtil ${COMMON_LIBS})
 INSTALL(TARGETS OpUtil EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS})
 INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${SALOME_INSTALL_HEADERS})
+INSTALL(FILES capsulethunk.h DESTINATION ${SALOME_INSTALL_HEADERS})
index 1d51ec6699896bf6d9b6b90d1a772a443ad8637c..bae1275b62c2acca6d9d31421df9c44c882ada9e 100644 (file)
@@ -21,7 +21,7 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-import sys, os,signal,string,commands
+import sys, os,signal,string,subprocess
 import subprocess
 import runSalome
 import orbmodule
index 627d1b9d2c824d8fe745a73635070bcf1aaca1bf..8565a5dfaad7d635927e6ab530853178ba9395a8 100644 (file)
@@ -49,7 +49,8 @@ def getShortHostName():
     socket.gethostname() gives short or complete Hostname, depending on
     defined aliases.
     """
-    return string.split(socket.gethostname(),'.')[0]
+    hostname = socket.gethostname()
+    return hostname.split('.')[0]
 
 class Identity:
     def __init__(self,name):
diff --git a/src/Utils/capsulethunk.h b/src/Utils/capsulethunk.h
new file mode 100644 (file)
index 0000000..6b20564
--- /dev/null
@@ -0,0 +1,134 @@
+#ifndef __CAPSULETHUNK_H
+#define __CAPSULETHUNK_H
+
+#if (    (PY_VERSION_HEX <  0x02070000) \
+     || ((PY_VERSION_HEX >= 0x03000000) \
+      && (PY_VERSION_HEX <  0x03010000)) )
+
+#define __PyCapsule_GetField(capsule, field, default_value) \
+    ( PyCapsule_CheckExact(capsule) \
+        ? (((PyCObject *)capsule)->field) \
+        : (default_value) \
+    ) \
+
+#define __PyCapsule_SetField(capsule, field, value) \
+    ( PyCapsule_CheckExact(capsule) \
+        ? (((PyCObject *)capsule)->field = value), 1 \
+        : 0 \
+    ) \
+
+
+#define PyCapsule_Type PyCObject_Type
+
+#define PyCapsule_CheckExact(capsule) (PyCObject_Check(capsule))
+#define PyCapsule_IsValid(capsule, name) (PyCObject_Check(capsule))
+
+
+#define PyCapsule_New(pointer, name, destructor) \
+    (PyCObject_FromVoidPtr(pointer, destructor))
+
+
+#define PyCapsule_GetPointer(capsule, name) \
+    (PyCObject_AsVoidPtr(capsule))
+
+/* Don't call PyCObject_SetPointer here, it fails if there's a destructor */
+#define PyCapsule_SetPointer(capsule, pointer) \
+    __PyCapsule_SetField(capsule, cobject, pointer)
+
+
+#define PyCapsule_GetDestructor(capsule) \
+    __PyCapsule_GetField(capsule, destructor)
+
+#define PyCapsule_SetDestructor(capsule, dtor) \
+    __PyCapsule_SetField(capsule, destructor, dtor)
+
+
+/*
+ * Sorry, there's simply no place
+ * to store a Capsule "name" in a CObject.
+ */
+#define PyCapsule_GetName(capsule) NULL
+
+static int
+PyCapsule_SetName(PyObject *capsule, const char *unused)
+{
+    unused = unused;
+    PyErr_SetString(PyExc_NotImplementedError,
+        "can't use PyCapsule_SetName with CObjects");
+    return 1;
+}
+
+
+
+#define PyCapsule_GetContext(capsule) \
+    __PyCapsule_GetField(capsule, descr)
+
+#define PyCapsule_SetContext(capsule, context) \
+    __PyCapsule_SetField(capsule, descr, context)
+
+
+static void *
+PyCapsule_Import(const char *name, int no_block)
+{
+    PyObject *object = NULL;
+    void *return_value = NULL;
+    char *trace;
+    size_t name_length = (strlen(name) + 1) * sizeof(char);
+    char *name_dup = (char *)PyMem_MALLOC(name_length);
+
+    if (!name_dup) {
+        return NULL;
+    }
+
+    memcpy(name_dup, name, name_length);
+
+    trace = name_dup;
+    while (trace) {
+        char *dot = strchr(trace, '.');
+        if (dot) {
+            *dot++ = '\0';
+        }
+
+        if (object == NULL) {
+            if (no_block) {
+                object = PyImport_ImportModuleNoBlock(trace);
+            } else {
+                object = PyImport_ImportModule(trace);
+                if (!object) {
+                    PyErr_Format(PyExc_ImportError,
+                        "PyCapsule_Import could not "
+                        "import module \"%s\"", trace);
+                }
+            }
+        } else {
+            PyObject *object2 = PyObject_GetAttrString(object, trace);
+            Py_DECREF(object);
+            object = object2;
+        }
+        if (!object) {
+            goto EXIT;
+        }
+
+        trace = dot;
+    }
+
+    if (PyCObject_Check(object)) {
+        PyCObject *cobject = (PyCObject *)object;
+        return_value = cobject->cobject;
+    } else {
+        PyErr_Format(PyExc_AttributeError,
+            "PyCapsule_Import \"%s\" is not valid",
+            name);
+    }
+
+EXIT:
+    Py_XDECREF(object);
+    if (name_dup) {
+        PyMem_FREE(name_dup);
+    }
+    return return_value;
+}
+
+#endif /* #if PY_VERSION_HEX < 0x02070000 */
+
+#endif /* __CAPSULETHUNK_H */