+#@ 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
import types,sys,string,os
import linecache
import traceback
+from copy import copy
# Modules EFICAS
import N_MCCOMPO
"""
if not self.isactif():return
+ self.sdnom=nom
try:
if self.parent:
sd= self.parent.create_sdprod(self,nom)
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):
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
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)