-#@ 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
#
#
# ======================================================================
+
+
"""
Ce module contient la classe MACRO_ETAPE qui sert à vérifier et à exécuter
une commande
- 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
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
"""
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
"""
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
"""
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
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__
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
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)
+