Salome HOME
CCAR : remplacement separateur New24.gif par Sep.gif
[tools/eficas.git] / Noyau / N_ETAPE.py
index b441d41e2b878f4242d1315548979558cedef05e..d2bd6f21e23c1b5c405b12c3986d5ed95f6c25fc 100644 (file)
@@ -1,3 +1,23 @@
+#@ MODIF N_ETAPE Noyau  DATE 03/09/2002   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM 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    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+#                                                                       
+#                                                                       
+# ======================================================================
 """ 
     Ce module contient la classe ETAPE qui sert à vérifier et à exécuter
     une commande
@@ -7,6 +27,7 @@
 import types,sys,string,os
 import linecache
 import traceback
+from copy import copy
 
 # Modules EFICAS
 import N_MCCOMPO
@@ -94,6 +115,7 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
 
       """
       if not self.isactif():return
+      self.sdnom=nom
       try:
          if self.parent:
             sd= self.parent.create_sdprod(self,nom)
@@ -162,13 +184,15 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
         sd_prod=self.definition.sd_prod
       # on teste maintenant si la SD est réutilisée ou s'il faut la créer
       if self.reuse:
-        if AsType(self.reuse) != sd_prod:
-          raise AsException("type de concept reutilise incompatible avec type produit")
+        # Il est preferable de traiter cette erreur ultérieurement : ce n'est pas une erreur fatale
+        #if AsType(self.reuse) != sd_prod:
+        #  raise AsException("type de concept reutilise incompatible avec type produit")
         self.sd=self.reuse
       else:
         self.sd= sd_prod(etape=self)
-        if self.definition.reentrant == 'o':
-          self.reuse = self.sd
+        # Si reuse n'a pas ete donné, c'est une erreur. Ne pas corriger afin de la detecter ensuite
+        #if self.definition.reentrant == 'o':
+        #  self.reuse = self.sd
       return self.sd
 
    def get_type_produit(self):
@@ -205,7 +229,7 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
    def supprime(self):
       """
          Méthode qui supprime toutes les références arrières afin que l'objet puisse
-         être correctement détruit par le garbage collector
+         etre correctement détruit par le garbage collector
       """
       N_MCCOMPO.MCCOMPO.supprime(self)
       self.jdc=None
@@ -294,6 +318,51 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
       if self.sd:
         d[self.sd.nom]=self.sd
 
+   def copy(self):
+      """ Méthode qui retourne une copie de self non enregistrée auprès du JDC
+          et sans sd 
+      """
+      etape = copy(self)
+      etape.sd = None
+      etape.state = 'modified'
+      etape.reuse = None
+      etape.sdnom = None
+      etape.etape=etape
+      etape.mc_liste=[]
+      for objet in self.mc_liste:
+        new_obj = objet.copy()
+        new_obj.reparent(etape)
+        etape.mc_liste.append(new_obj)
+      return etape
+
+   def copy_reuse(self,old_etape):
+      """ Méthode qui copie le reuse d'une autre étape. 
+      """
+      if hasattr(old_etape,"reuse") :
+        self.reuse = old_etape.reuse
 
+   def copy_sdnom(self,old_etape):
+      """ Méthode qui copie le sdnom d'une autre étape. 
+      """
+      if hasattr(old_etape,"sdnom") :
+        self.sdnom = old_etape.sdnom
 
-
+   def get_sd_utilisees(self):
+      """ 
+          Retourne la liste des concepts qui sont utilisés à l'intérieur d'une commande
+          ( comme valorisation d'un MCS) 
+      """
+      l=[]
+      for child in self.mc_liste:
+        l.extend(child.get_sd_utilisees())
+      return l
+
+   def reparent(self,parent):
+     """
+         Cette methode sert a reinitialiser la parente de l'objet
+     """
+     self.parent=parent
+     self.jdc=parent.get_jdc_root()
+     self.etape=self
+     for mocle in self.mc_liste:
+        mocle.reparent(self)