Salome HOME
CCAR: Modification principale : ajout de la possibilité d'afficher les noms de
[tools/eficas.git] / Noyau / N_MCLIST.py
1 #@ MODIF N_MCLIST Noyau  DATE 27/03/2002   AUTEUR DURAND C.DURAND 
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.                                 
9 #
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.                            
14 #
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.      
18 #                                                                       
19 #                                                                       
20 # ======================================================================
21 """ 
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
24     de type ENTITE
25 """
26
27 import UserList
28
29 class MCList(UserList.UserList):
30    """ Liste semblable a la liste Python
31        mais avec quelques methodes en plus
32        = liste de MCFACT
33    """
34    nature = 'MCList'
35    def init(self,nom,parent):
36       self.definition = None
37       self.nom = nom
38       self.parent=parent
39       if parent :
40          self.jdc = self.parent.jdc
41          self.niveau = self.parent.niveau
42          self.etape = self.parent.etape
43       else:
44          # Le mot cle a été créé sans parent
45          self.jdc = None
46          self.niveau = None
47          self.etape = None
48
49    def get_valeur(self):
50       """
51          Retourne la "valeur" d'un objet MCList. Sert à construire
52          un contexte d'évaluation pour une expression Python.
53          On retourne l'objet lui-meme.
54       """
55       return self
56
57    def get_val(self):
58       """
59           Une autre méthode qui retourne une "autre" valeur d'une MCList
60           Elle est utilisée par la méthode get_mocle
61       """
62       return self
63
64    def supprime(self):
65       """ 
66          Méthode qui supprime toutes les références arrières afin que l'objet puisse
67          etre correctement détruit par le garbage collector 
68       """
69       self.parent = None
70       self.etape = None
71       self.jdc = None
72       self.niveau = None
73       for child in self.data :
74          child.supprime()
75
76    def get_child(self,name):
77       """ 
78           Retourne le fils de nom name s'il est contenu dans self
79           Par défaut retourne le fils du premier de la liste 
80       """
81       obj = self.data[0]
82       # Phase 1 : on cherche dans les fils directs de obj
83       for child in obj.mc_liste :
84         if child.nom == name: return child
85       # Phase 2 : on cherche dans les blocs de self
86       for child in obj.mc_liste:
87         if child.isBLOC() :
88           resu = child.get_child(name)
89           if resu != None : return resu
90       # Phase 3 : on cherche dans les entites possibles pour les défauts
91       for k,v in obj.definition.entites.items():
92         #if k == name: return v.defaut
93         if k == name:
94           if v.defaut != None : return v(None,k,None)
95       # si on passe ici, c'est que l'on demande un fils qui n'est pas possible --> erreur
96       #print "Erreur : %s ne peut etre un descendant de %s" %(name,self.nom)
97       return None
98
99    def isBLOC(self):
100       """
101            Indique si l'objet est de type BLOC
102       """
103       return 0
104
105    def accept(self,visitor):
106       """
107          Cette methode permet de parcourir l'arborescence des objets
108          en utilisant le pattern VISITEUR
109       """
110       visitor.visitMCList(self)
111