Salome HOME
CCAR: correction d'un probleme de mise a jour de contexte lors d'une insertion
[tools/eficas.git] / Noyau / N_ETAPE.py
index d2bd6f21e23c1b5c405b12c3986d5ed95f6c25fc..377ce7523aa6d5cd963dc8a2e40fb194ea7f5837 100644 (file)
@@ -1,4 +1,5 @@
-#@ MODIF N_ETAPE Noyau  DATE 03/09/2002   AUTEUR GNICOLAS G.NICOLAS 
+#@ MODIF N_ETAPE Noyau  DATE 22/02/2005   AUTEUR DURAND C.DURAND 
+# -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18,6 +19,8 @@
 #                                                                       
 #                                                                       
 # ======================================================================
+
+
 """ 
     Ce module contient la classe ETAPE qui sert à vérifier et à exécuter
     une commande
@@ -129,16 +132,10 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
                # On ne nomme le concept que dans le cas de non reutilisation 
                # d un concept
                sd.nom=nom
-         if self.jdc and self.jdc.par_lot == "NON" :
-            self.Execute()
-         return sd
       except AsException,e:
          raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
                               'fichier : ',self.appel[1],e)
       except EOFError:
-         # XXX Normalement le contexte courant doit etre le parent.
-         # Il n'y a pas de raison de remettre le contexte au parent
-         #self.reset_current_step()
          raise
       except :
          l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
@@ -146,11 +143,14 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
                            'fichier : ',self.appel[1]+'\n',
                             string.join(l))
 
+      self.Execute()
+      return sd
+
    def Execute(self):
       """
-         Cette methode est prevue pour faire une execution dans le cas
-         ou par_lot == 'NON'
-         Par defaut, elle ne fait rien
+         Cette methode est un point d'entree prevu pour realiser une execution immediatement
+         apres avoir construit les mots cles et le concept produit.
+         Par defaut, elle ne fait rien. Elle doit etre surchargee dans une autre partie du programme.
       """
       return
 
@@ -183,19 +183,23 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
       else:
         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:
-        # 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")
+      if self.definition.reentrant != 'n' and self.reuse:
+        # Le concept produit est specifie reutilise (reuse=xxx). C'est une erreur mais non fatale.
+        # Elle sera traitee ulterieurement.
         self.sd=self.reuse
       else:
         self.sd= sd_prod(etape=self)
-        # 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
+        # Si l'operateur est obligatoirement reentrant et reuse n'a pas ete specifie, c'est une erreur. 
+        # On ne fait rien ici. L'erreur sera traiter par la suite.
       return self.sd
 
    def get_type_produit(self):
+      try:
+          return self.get_type_produit_brut()
+      except:
+          return None
+
+   def get_type_produit_brut(self):
       """
           Retourne le type du concept résultat de l'étape
           Deux cas :
@@ -208,11 +212,7 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
       """
       if type(self.definition.sd_prod) == types.FunctionType:
         d=self.cree_dict_valeurs(self.mc_liste)
-        try:
-          sd_prod= apply(self.definition.sd_prod,(),d)
-        except:
-          #traceback.print_exc()
-          return None
+        sd_prod= apply(self.definition.sd_prod,(),d)
       else:
         sd_prod=self.definition.sd_prod
       return sd_prod
@@ -347,16 +347,6 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
       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
@@ -366,3 +356,40 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
      self.etape=self
      for mocle in self.mc_liste:
         mocle.reparent(self)
+
+   def get_cmd(self,nomcmd):
+      """
+          Méthode pour recuperer la definition d'une commande
+          donnee par son nom dans les catalogues declares
+          au niveau du jdc
+          Appele par un ops d'une macro en Python
+      """
+      return self.jdc.get_cmd(nomcmd)
+
+   def copy_intern(self,etape):
+      """
+          Méthode permettant lors du processus de recopie de copier
+          les elements internes d'une etape dans une autre
+      """
+      return
+
+   def full_copy(self,parent=None):
+       """
+          Méthode permettant d'effectuer une copie complète
+          d'une étape (y compris concept produit, éléments internes)
+          Si l'argument parent est fourni, la nouvelle étape
+          aura cet objet comme parent.
+       """
+       new_etape = self.copy()
+       new_etape.copy_reuse(self)
+       new_etape.copy_sdnom(self)
+       if parent: new_etape.reparent(parent)
+       if self.sd :
+          new_sd = self.sd.__class__(etape=new_etape)
+          new_etape.sd = new_sd
+          if self.reuse == None :
+             new_etape.parent.NommerSdprod(new_sd,self.sd.nom)
+          else :
+             new_sd.nom = self.sd.nom
+       new_etape.copy_intern(self)
+       return new_etape