Salome HOME
43f267f0bd76138491ba138353fbff53d5d8a876
[tools/eficas.git] / Noyau / N_MCLIST.py
1 """ 
2     Ce module contient la classe MCList qui sert à controler la valeur
3     d'une liste de mots-clés facteur par rapport à sa définition portée par un objet
4     de type ENTITE
5 """
6
7 import UserList
8
9 class MCList(UserList.UserList):
10    """ Liste semblable a la liste Python
11        mais avec quelques methodes en plus
12        = liste de MCFACT
13    """
14    nature = 'MCList'
15    def init(self,nom,parent):
16       self.definition = None
17       self.nom = nom
18       self.parent=parent
19       if parent :
20          self.jdc = self.parent.jdc
21          self.niveau = self.parent.niveau
22          self.etape = self.parent.etape
23       else:
24          # Le mot cle a été créé sans parent
25          self.jdc = None
26          self.niveau = None
27          self.etape = None
28
29    def get_valeur(self):
30       """
31          Retourne la "valeur" d'un objet MCList. Sert à construire
32          un contexte d'évaluation pour une expression Python.
33          On retourne l'objet lui-meme.
34       """
35       return self
36
37    def get_val(self):
38       """
39           Une autre méthode qui retourne une "autre" valeur d'une MCList
40           Elle est utilisée par la méthode get_mocle
41       """
42       return self
43
44    def supprime(self):
45       """ 
46          Méthode qui supprime toutes les références arrières afin que l'objet puisse
47          être correctement détruit par le garbage collector 
48       """
49       self.parent = None
50       self.etape = None
51       self.jdc = None
52       self.niveau = None
53       for child in self.data :
54          child.supprime()
55
56    def get_child(self,name):
57       """ 
58           Retourne le fils de nom name s'il est contenu dans self
59           Par défaut retourne le fils du premier de la liste 
60       """
61       obj = self.data[0]
62       # Phase 1 : on cherche dans les fils directs de obj
63       for child in obj.mc_liste :
64         if child.nom == name: return child
65       # Phase 2 : on cherche dans les blocs de self
66       for child in obj.mc_liste:
67         if child.isBLOC() :
68           resu = child.get_child(name)
69           if resu != None : return resu
70       # Phase 3 : on cherche dans les entites possibles pour les défauts
71       for k,v in obj.definition.entites.items():
72         #if k == name: return v.defaut
73         if k == name:
74           if v.defaut != None : return v(None,k,None)
75       # si on passe ici, c'est que l'on demande un fils qui n'est pas possible --> erreur
76       #print "Erreur : %s ne peut être un descendant de %s" %(name,self.nom)
77       return None
78
79    def isBLOC(self):
80       """
81            Indique si l'objet est de type BLOC
82       """
83       return 0
84
85    def accept(self,visitor):
86       """
87          Cette methode permet de parcourir l'arborescence des objets
88          en utilisant le pattern VISITEUR
89       """
90       visitor.visitMCList(self)
91