Salome HOME
CMake build procedure improvements:
[modules/kernel.git] / src / KERNEL_PY / salome_study.py
index 6855fe7f6d0d9b7e8697157f950219886657b634..02dc26a432681a93db6e7e568accec13bc71ade8 100644 (file)
@@ -1,75 +1,82 @@
-#  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-#  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-# 
-#  This library is free software; you can redistribute it and/or 
-#  modify it under the terms of the GNU Lesser General Public 
-#  License as published by the Free Software Foundation; either 
-#  version 2.1 of the License. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
-# 
-#  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
 #
+# Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
 #
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
 #  File   : salome_study.py
 #  Author : Paul RASCLE, EDF
 #  Module : SALOME
 #  $Header$
-
+#
 import salome_kernel
 import SALOMEDS
 import salome_iapp
+from launchConfigureParser import verbose
 
 #--------------------------------------------------------------------------
 
-def DumpComponent(Study, SO, offset):
-    it = Study.NewChildIterator(SO)
-    Builder = Study.NewBuilder()
-    while it.More():
-        CSO = it.Value()
-        it.Next()
-        anAttr = Builder.FindOrCreateAttribute(CSO, "AttributeName")
-        AtName = anAttr._narrow(SALOMEDS.AttributeName)
-        t_name = AtName.Value()
-        if t_name[0] == 1:
-            ofs = 1
-            a = ""
-            while ofs <= offset:
-                a = a + "--"
-                ofs = ofs +1
-            MESSAGE( a + ">" + str(CSO.GetID()) + " " + str(t_name[1]) )
-        t_RefSO = CSO.ReferencedObject()
-        if t_RefSO[0] == 1:
-            RefSO = t_RefSO[1]
-            ofs = 1
-            a = ""
-            while ofs <= offset:
-                a = a + "  "
-                ofs = ofs +1
-            MESSAGE( a + ">" + str(RefSO.GetID()) )
-        DumpComponent(Study, CSO, offset+2)
+def DumpComponent(Study, SO, Builder,offset):
+  it = Study.NewChildIterator(SO)
+  while it.More():
+    CSO = it.Value()
+    a=offset*"--" + ">" + CSO.GetID()
+    find,AtName = Builder.FindAttribute(CSO, "AttributeName")
+    if find:
+      a=a+":"+AtName.Value()
+    find,AtIOR = Builder.FindAttribute(CSO, "AttributeIOR")
+    if find:
+      a=a+":"+AtIOR.Value()
+    find,RefSO = CSO.ReferencedObject()
+    if find:
+      a=a+":"+RefSO.GetID()
+    print a
+    DumpComponent(Study, CSO, Builder,offset+2)
+    it.Next()
 
-    #--------------------------------------------------------------------------
+#--------------------------------------------------------------------------
 
 def DumpStudy(Study):
+    """
+    Dump a study, given the ior
+    """
     itcomp = Study.NewComponentIterator()
+    Builder = Study.NewBuilder()
     while itcomp.More():
-        SC = itcomp.Value()
-        itcomp.Next()
-        name = SC.ComponentDataType()
-        MESSAGE( "-> ComponentDataType is " + name )
-        DumpComponent(Study, SC, 1)
-        
+      SC = itcomp.Value()
+      name = SC.ComponentDataType()
+      print "-> ComponentDataType is " + name
+      DumpComponent(Study, SC,Builder, 1)
+      itcomp.Next()
+
+def DumpStudies():
+  """
+    Dump all studies in a StudyManager
+  """
+  for name in myStudyManager.GetOpenStudies():
+    s=myStudyManager.GetStudyByName(name)
+    print "study:",name, s._get_StudyId()
+    DumpStudy(s)
 
-    #--------------------------------------------------------------------------
+
+#--------------------------------------------------------------------------
 
 def IDToObject(id):
     myObj = None
@@ -103,8 +110,8 @@ def IDToSObject(id):
     #--------------------------------------------------------------------------
 
 def generateName(prefix = None):
-    import whrandom;
-    int = whrandom.randint(1,1000);
+    import random;
+    int = random.randint(1,1000);
     if prefix is None:
         return "Study" + str(int)
     else :
@@ -220,6 +227,27 @@ def CheckCopyPaste(theSO, theInfo ,theComponentPaste):
     
     #--------------------------------------------------------------------------
 
+def GetComponentVersion(theComponent, all_versions = False):
+    # returns the document list tree (as list)
+    props = myStudy.GetProperties()
+    stored_components = props.GetStoredComponents()
+    version = "no component data" # vsr: better raise an exception in this case?
+    if theComponent in stored_components:
+      if all_versions:
+        version = props.GetComponentVersions(theComponent)
+        for i in range(len(version)):
+          if not version[i]: version[i] = "unknown"
+          pass
+        pass
+      else:
+        version = props.GetComponentVersion(theComponent)
+        if not version: version = "unknown"
+        pass
+      pass
+    return version
+    
+    #--------------------------------------------------------------------------
+
 def FindFileInDataDir(filename):
     import os
     datadir = os.getenv("DATA_DIR")
@@ -243,24 +271,59 @@ salome_study_ID = -1
 
 def getActiveStudy(theStudyId=0):
     global salome_study_ID
-    
-    print "getActiveStudy"
+
+    if verbose(): print "getActiveStudy"
     if salome_study_ID == -1:
         if salome_iapp.hasDesktop():
-            print "---in gui"
+            if verbose(): print "---in gui"
             salome_study_ID = salome_iapp.sg.getActiveStudyId()
         else:
-            print "---outside gui"
+            if verbose(): print "---outside gui"
             if theStudyId:
                 aStudy=myStudyManager.GetStudyByID(theStudyId)
                 if aStudy:
-                    print "connection to existing study ", theStudyId
+                    if verbose(): print "connection to existing study ", theStudyId
                     salome_study_ID = theStudyId
             if salome_study_ID == -1:
                 salome_study_ID = createNewStudy()
-            print"--- Study Id ", salome_study_ID
+            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
+    """
+    global myStudyId, myStudy, myStudyName
+    global salome_study_ID
+    myStudy=theStudy
+    myStudyId=theStudy._get_StudyId()
+    myStudyName=theStudy._get_Name()
+    return myStudyId, myStudy, myStudyName
+
+    #--------------------------------------------------------------------------
+
+def setCurrentStudyId(theStudyId=0):
+    """
+    Change current study : an existing or new one.
+    optional argument : theStudyId
+        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
+    global salome_study_ID
+    salome_study_ID = -1
+    myStudyId = getActiveStudy(theStudyId)
+    if verbose(): print "myStudyId",myStudyId
+    myStudy = myStudyManager.GetStudyByID(myStudyId)
+    myStudyName = myStudy._get_Name()
+
+    return myStudyId, myStudy, myStudyName
+
     #--------------------------------------------------------------------------
 
 def createNewStudy():
@@ -296,25 +359,25 @@ def salome_study_init(theStudyId=0):
         n (>0) : try connection to study with Id = n, or create a new one
                  if study not found.
     """
-    
+
     global salome_study_initial
     global myStudyManager, myStudyId, myStudy, myStudyName
     global orb, lcc, naming_service, cm
-    
+
     if salome_study_initial:
         salome_study_initial = 0
-        
+
         orb, lcc, naming_service, cm = salome_kernel.salome_kernel_init()
-        
+
         # get Study Manager reference
-        print "looking for studyManager ..."
+        if verbose(): print "looking for studyManager ..."
         obj = naming_service.Resolve('myStudyManager')
         myStudyManager = obj._narrow(SALOMEDS.StudyManager)
-        print "studyManager found"
+        if verbose(): print "studyManager found"
 
         # get active study Id, ref and name
         myStudyId = getActiveStudy(theStudyId)
-        print "myStudyId",myStudyId
+        if verbose(): print "myStudyId",myStudyId
         myStudy = myStudyManager.GetStudyByID(myStudyId)
         myStudyName = myStudy._get_Name()