Salome HOME
This commit was generated by cvs2git to track changes on a CVS vendor
[tools/eficas.git] / Noyau / N_MCLIST.py
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.                                 
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 from copy import copy
28 import UserList
29
30 class MCList(UserList.UserList):
31    """ Liste semblable a la liste Python
32        mais avec quelques methodes en plus
33        = liste de MCFACT
34    """
35    nature = 'MCList'
36    def init(self,nom,parent):
37       self.definition = None
38       self.nom = nom
39       self.parent=parent
40       if parent :
41          self.jdc = self.parent.jdc
42          self.niveau = self.parent.niveau
43          self.etape = self.parent.etape
44       else:
45          # Le mot cle a été créé sans parent
46          self.jdc = None
47          self.niveau = None
48          self.etape = None
49
50    def get_valeur(self):
51       """
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.
55       """
56       return self
57
58    def get_val(self):
59       """
60           Une autre méthode qui retourne une "autre" valeur d'une MCList
61           Elle est utilisée par la méthode get_mocle
62       """
63       return self
64
65    def supprime(self):
66       """ 
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 
69       """
70       self.parent = None
71       self.etape = None
72       self.jdc = None
73       self.niveau = None
74       for child in self.data :
75          child.supprime()
76
77    def get_child(self,name):
78       """ 
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 
81       """
82       obj = self.data[0]
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:
88         if child.isBLOC() :
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
94         if k == name:
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)
98       return None
99
100    def isBLOC(self):
101       """
102            Indique si l'objet est de type BLOC
103       """
104       return 0
105
106    def accept(self,visitor):
107       """
108          Cette methode permet de parcourir l'arborescence des objets
109          en utilisant le pattern VISITEUR
110       """
111       visitor.visitMCList(self)
112
113    def get_sd_utilisees(self):
114       """ 
115         Retourne la liste des concepts qui sont utilisés à l'intérieur de self
116         ( comme valorisation d'un MCS) 
117       """
118       l=[]
119       for child in self.data:
120         l.extend(child.get_sd_utilisees())
121       return l
122
123    def copy(self):
124       """
125         Réalise la copie d'une MCList
126       """
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)
130       for objet in self:
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)
136       return liste
137
138    def reparent(self,parent):
139       """
140          Cette methode sert a reinitialiser la parente de l'objet
141       """
142       self.parent=parent
143       self.jdc=parent.jdc
144       self.etape=parent.etape
145       for mcfact in self.data:
146         mcfact.reparent(parent)