Salome HOME
CCAR : mise a jour avec la version 7.3.23 du Noyau superviseur Aster
[tools/eficas.git] / Noyau / N_MACRO_ETAPE.py
index 57807dd7862480a6269ca3b19347a818ae271a2f..57a4b8ef9e9f692c46366760cf5698fff35dd3f9 100644 (file)
@@ -1,4 +1,5 @@
-#@ MODIF N_MACRO_ETAPE Noyau  DATE 06/01/2003   AUTEUR ASSIRE A.ASSIRE 
+#@ MODIF N_MACRO_ETAPE Noyau  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+# -*- 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 MACRO_ETAPE qui sert à vérifier et à exécuter
     une commande
@@ -45,7 +48,7 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
 
           - definition : objet portant les attributs de définition d'une étape 
                          de type macro-commande. Il est initialisé par 
-                         l'argument oper.
+                          l'argument oper.
 
           - reuse : indique le concept d'entrée réutilisé. Il se trouvera donc
                     en sortie si les conditions d'exécution de l'opérateur 
@@ -99,11 +102,11 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
          Construit le concept produit de l'opérateur. Deux cas 
          peuvent se présenter :
         
-              - le parent n'est pas défini. Dans ce cas, l'étape prend en charge 
-                la création et le nommage du concept.
+         - le parent n'est pas défini. Dans ce cas, l'étape prend en charge 
+           la création et le nommage du concept.
 
-              - le parent est défini. Dans ce cas, l'étape demande au parent la 
-                création et le nommage du concept.
+         - le parent est défini. Dans ce cas, l'étape demande au parent la 
+           création et le nommage du concept.
 
       """
       if not self.isactif():return
@@ -146,15 +149,15 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
       """
         Retourne le concept résultat d'une macro étape
         La difference avec une etape ou une proc-etape tient a ce que
-        le concept produit peut exister ou pas
+         le concept produit peut exister ou pas
         Si sd_prod == None le concept produit n existe pas on retourne None
         Deux cas :
-               - sd_prod  n'est pas une fonction
+         cas 1 : sd_prod  n'est pas une fonction
                  il s'agit d'une sous classe de ASSD
                  on construit le sd à partir de cette classe
                  et on le retourne
-               - sd_prod est une fonction
-                 on l'évalue avec les mots-clés de l'étape (mc_liste)
+         cas 2 : sd_prod est une fonction
+                  on l'évalue avec les mots-clés de l'étape (mc_liste)
                  on construit le sd à partir de la classe obtenue
                  et on le retourne
       """
@@ -193,12 +196,12 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
    def get_type_produit(self,force=0):
       """
            Retourne le type du concept résultat de l'étape et eventuellement type
-           les concepts produits "à droite" du signe égal (en entrée)
+            les concepts produits "à droite" du signe égal (en entrée)
            Deux cas :
-                  - sd_prod de oper n'est pas une fonction
+            cas 1 : sd_prod de oper n'est pas une fonction
                     il s'agit d'une sous classe de ASSD
                     on retourne le nom de la classe
-                  - il s'agit d'une fonction
+            cas 2 : il s'agit d'une fonction
                     on l'évalue avec les mots-clés de l'étape (mc_liste)
                     et on retourne son résultat
       """
@@ -266,12 +269,11 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
    def type_sdprod(self,co,t):
       """
            Cette methode a pour fonction de typer le concept co avec le type t
-           dans les conditions suivantes
-            1. co est un concept produit de self
-            2. co est un concept libre : on le type et on l attribue à self
-
+            dans les conditions suivantes
+            1- co est un concept produit de self
+            2- co est un concept libre : on le type et on l attribue à self
            Elle enregistre egalement les concepts produits (on fait l hypothese
-           que la liste sdprods a été correctement initialisee, vide probablement)
+            que la liste sdprods a été correctement initialisee, vide probablement)
       """
       if not hasattr(co,'etape'):
          # Le concept vaut None probablement. On ignore l'appel
@@ -335,7 +337,7 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
 
    def create_sdprod(self,etape,nomsd):
       """ 
-                  Intention : Cette methode doit fabriquer le concept produit retourne
+          Intention : Cette methode doit fabriquer le concept produit retourne
                   par l'etape etape et le nommer.
                   Elle est appelée à l'initiative de l'etape
                   pendant le processus de construction de cette etape : methode __call__
@@ -343,9 +345,9 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
                   Ce travail est réalisé par le contexte supérieur (etape.parent)
                   car dans certains cas, le concept ne doit pas etre fabriqué mais
                   l'etape doit simplement utiliser un concept préexistant.
-                      - Cas 1 : etape.reuse != None : le concept est réutilisé
-                      - Cas 2 : l'étape appartient à une macro qui a déclaré un concept
-                        de sortie qui doit etre produit par cette etape.
+                  Cas 1 : etape.reuse != None : le concept est réutilisé
+                  Cas 2 : l'étape appartient à une macro qui a déclaré un concept
+                          de sortie qui doit etre produit par cette etape.
       """
       if self.Outputs.has_key(nomsd):
          # Il s'agit d'un concept de sortie de la macro. Il ne faut pas le créer
@@ -530,6 +532,37 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
       d.update(self.g_context)
       return d
 
+   def copy(self):
+      """ Méthode qui retourne une copie de self non enregistrée auprès du JDC
+          et sans sd
+          On surcharge la methode de ETAPE pour exprimer que les concepts crees
+          par la MACRO d'origine ne sont pas crees par la copie mais eventuellement
+          seulement utilises
+      """
+      etape=N_ETAPE.ETAPE.copy(self)
+      etape.sdprods=[]
+      return etape
+
+   def copy_intern(self,etape):
+      """ Cette méthode effectue la recopie des etapes internes d'une macro 
+          passée en argument (etape)
+      """
+      self.etapes=[]
+      for etp in etape.etapes:
+          new_etp=etp.copy()
+          new_etp.copy_reuse(etp)
+          new_etp.copy_sdnom(etp)
+          new_etp.reparent(self)
+          if etp.sd:
+             new_sd = etp.sd.__class__(etape=new_etp)
+             new_etp.sd = new_sd
+             if etp.reuse:
+                new_sd.nom = etp.sd.nom
+             else:
+                self.NommerSdprod(new_sd,etp.sd.nom)
+          new_etp.copy_intern(etp)
+          self.etapes.append(new_etp)
+