+#@ MODIF N_MCCOMPO 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 MCCOMPO qui sert à factoriser les comportements
des OBJECT composites
"""
import types
-
+from copy import copy
import N_OBJECT
class MCCOMPO(N_OBJECT.OBJECT):
dico_valeurs = self.cree_dict_valeurs(mc_liste)
for k,v in self.definition.entites.items():
if v.label != 'BLOC':continue
- if v.verif_presence(dico_valeurs):
+ # condition and a or b : Equivalent de l'expression : condition ? a : b du langage C
+ globs= self.jdc and self.jdc.condition_context or {}
+ if v.verif_presence(dico_valeurs,globs):
# Si le bloc existe :
# 1- on le construit
# 2- on l'ajoute à mc_liste
# Il nous reste à évaluer la présence des blocs en fonction du contexte qui a changé
for k,v in self.definition.entites.items():
if v.label != 'BLOC' : continue
- if v.verif_presence(dico):
- # le bloc k doit être présent : on crée temporairement l'objet MCBLOC correspondant
+ # condition and a or b : Equivalent de l'expression : condition ? a : b du langage C
+ globs= self.jdc and self.jdc.condition_context or {}
+ if v.verif_presence(dico,globs):
+ # le bloc k doit etre présent : on crée temporairement l'objet MCBLOC correspondant
# on lui passe un parent égal à None pour qu'il ne soit pas enregistré
bloc = v(nom=k,val=None,parent=None)
dico_bloc = bloc.cree_dict_valeurs()
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_OBJECT.OBJECT.supprime(self)
for child in self.mc_liste :
nom = mc.nom
self.jdc.mc_globaux[nom]=mc
+ def copy(self):
+ """ Retourne une copie de self """
+ objet = self.makeobjet()
+ # FR : attention !!! avec makeobjet, objet a le meme parent que self
+ # ce qui n'est pas du tout bon dans le cas d'une copie !!!!!!!
+ # FR : peut-on passer par là autrement que dans le cas d'une copie ???
+ # FR --> je suppose que non
+ # XXX CCAR : le pb c'est qu'on vérifie ensuite quel parent avait l'objet
+ # Il me semble preferable de changer le parent a la fin quand la copie est acceptee
+ objet.valeur = copy(self.valeur)
+ objet.val = copy(self.val)
+ objet.mc_liste=[]
+ for obj in self.mc_liste:
+ new_obj = obj.copy()
+ new_obj.reparent(objet)
+ objet.mc_liste.append(new_obj)
+ return objet
+ 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=parent.etape
+ for mocle in self.mc_liste:
+ mocle.reparent(self)
+ def get_sd_utilisees(self):
+ """
+ Retourne la liste des concepts qui sont utilisés à l'intérieur de self
+ ( comme valorisation d'un MCS)
+ """
+ l=[]
+ for child in self.mc_liste:
+ l.extend(child.get_sd_utilisees())
+ return l