1 #@ MODIF N_MCLIST Noyau DATE 03/09/2002 AUTEUR GNICOLAS G.NICOLAS
2 # CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
20 # ======================================================================
22 Ce module contient la classe MCList qui sert à controler la valeur
23 d'une liste de mots-clés facteur par rapport à sa définition portée par un objet
30 class MCList(UserList.UserList):
31 """ Liste semblable a la liste Python
32 mais avec quelques methodes en plus
36 def init(self,nom,parent):
37 self.definition = None
41 self.jdc = self.parent.jdc
42 self.niveau = self.parent.niveau
43 self.etape = self.parent.etape
45 # Le mot cle a été créé sans parent
52 Retourne la "valeur" d'un objet MCList. Sert à construire
53 un contexte d'évaluation pour une expression Python.
54 On retourne l'objet lui-meme.
60 Une autre méthode qui retourne une "autre" valeur d'une MCList
61 Elle est utilisée par la méthode get_mocle
67 Méthode qui supprime toutes les références arrières afin que l'objet puisse
68 etre correctement détruit par le garbage collector
74 for child in self.data :
77 def get_child(self,name):
79 Retourne le fils de nom name s'il est contenu dans self
80 Par défaut retourne le fils du premier de la liste
83 # Phase 1 : on cherche dans les fils directs de obj
84 for child in obj.mc_liste :
85 if child.nom == name: return child
86 # Phase 2 : on cherche dans les blocs de self
87 for child in obj.mc_liste:
89 resu = child.get_child(name)
90 if resu != None : return resu
91 # Phase 3 : on cherche dans les entites possibles pour les défauts
92 for k,v in obj.definition.entites.items():
93 #if k == name: return v.defaut
95 if v.defaut != None : return v(None,k,None)
96 # si on passe ici, c'est que l'on demande un fils qui n'est pas possible --> erreur
97 #print "Erreur : %s ne peut etre un descendant de %s" %(name,self.nom)
102 Indique si l'objet est de type BLOC
106 def accept(self,visitor):
108 Cette methode permet de parcourir l'arborescence des objets
109 en utilisant le pattern VISITEUR
111 visitor.visitMCList(self)
113 def get_sd_utilisees(self):
115 Retourne la liste des concepts qui sont utilisés à l'intérieur de self
116 ( comme valorisation d'un MCS)
119 for child in self.data:
120 l.extend(child.get_sd_utilisees())
125 Réalise la copie d'une MCList
127 liste = self.data[0].definition.list_instance()
128 # FR -->Il faut spécifier un parent pour la méthode init qui attend 2 arguments ...
129 liste.init(self.nom,self.parent)
131 new_obj = objet.copy()
132 # Pour etre coherent avec le constructeur de mots cles facteurs N_FACT.__call__
133 # dans lequel le parent de l'element d'une MCList est le parent de la MCList
134 new_obj.reparent(self.parent)
135 liste.append(new_obj)
138 def reparent(self,parent):
140 Cette methode sert a reinitialiser la parente de l'objet
144 self.etape=parent.etape
145 for mcfact in self.data:
146 mcfact.reparent(parent)