]> SALOME platform Git repositories - tools/eficas.git/blob - Noyau/N_MCLIST.py
Salome HOME
ajout pour accepter les accents sous python 2.3
[tools/eficas.git] / Noyau / N_MCLIST.py
1 # -*- coding: utf-8 -*-
2 #@ MODIF N_MCLIST Noyau  DATE 04/02/2004   AUTEUR CAMBIER S.CAMBIER 
3 #            CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
9 # (AT YOUR OPTION) ANY LATER VERSION.                                 
10 #
11 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
12 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
13 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
14 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
15 #
16 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
17 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
18 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
19 #                                                                       
20 #                                                                       
21 # ======================================================================
22 """ 
23     Ce module contient la classe MCList qui sert à controler la valeur
24     d'une liste de mots-clés facteur par rapport à sa définition portée par un objet
25     de type ENTITE
26 """
27
28 from copy import copy
29 import UserList
30
31 class MCList(UserList.UserList):
32    """ Liste semblable a la liste Python
33        mais avec quelques methodes en plus
34        = liste de MCFACT
35    """
36    nature = 'MCList'
37    def init(self,nom,parent):
38       self.definition = None
39       self.nom = nom
40       self.parent=parent
41       if parent :
42          self.jdc = self.parent.jdc
43          self.niveau = self.parent.niveau
44          self.etape = self.parent.etape
45       else:
46          # Le mot cle a été créé sans parent
47          self.jdc = None
48          self.niveau = None
49          self.etape = None
50
51    def get_valeur(self):
52       """
53          Retourne la "valeur" d'un objet MCList. Sert à construire
54          un contexte d'évaluation pour une expression Python.
55          On retourne l'objet lui-meme.
56       """
57       return self
58
59    def get_val(self):
60       """
61           Une autre méthode qui retourne une "autre" valeur d'une MCList
62           Elle est utilisée par la méthode get_mocle
63       """
64       return self
65
66    def supprime(self):
67       """ 
68          Méthode qui supprime toutes les références arrières afin que l'objet puisse
69          etre correctement détruit par le garbage collector 
70       """
71       self.parent = None
72       self.etape = None
73       self.jdc = None
74       self.niveau = None
75       for child in self.data :
76          child.supprime()
77
78    def get_child(self,name):
79       """ 
80           Retourne le fils de nom name s'il est contenu dans self
81           Par défaut retourne le fils du premier de la liste 
82       """
83       obj = self.data[0]
84       # Phase 1 : on cherche dans les fils directs de obj
85       for child in obj.mc_liste :
86         if child.nom == name: return child
87       # Phase 2 : on cherche dans les blocs de self
88       for child in obj.mc_liste:
89         if child.isBLOC() :
90           resu = child.get_child(name)
91           if resu != None : return resu
92       # Phase 3 : on cherche dans les entites possibles pour les défauts
93       for k,v in obj.definition.entites.items():
94         #if k == name: return v.defaut
95         if k == name:
96           if v.defaut != None : return v(None,k,None)
97       # si on passe ici, c'est que l'on demande un fils qui n'est pas possible --> erreur
98       #print "Erreur : %s ne peut etre un descendant de %s" %(name,self.nom)
99       return None
100
101    def isBLOC(self):
102       """
103            Indique si l'objet est de type BLOC
104       """
105       return 0
106
107    def accept(self,visitor):
108       """
109          Cette methode permet de parcourir l'arborescence des objets
110          en utilisant le pattern VISITEUR
111       """
112       visitor.visitMCList(self)
113
114    def get_sd_utilisees(self):
115       """ 
116         Retourne la liste des concepts qui sont utilisés à l'intérieur de self
117         ( comme valorisation d'un MCS) 
118       """
119       l=[]
120       for child in self.data:
121         l.extend(child.get_sd_utilisees())
122       return l
123
124    def copy(self):
125       """
126         Réalise la copie d'une MCList
127       """
128       liste = self.data[0].definition.list_instance()
129       # FR -->Il faut spécifier un parent pour la méthode init qui attend 2 arguments ...
130       liste.init(self.nom,self.parent)
131       for objet in self:
132         new_obj = objet.copy()
133         # Pour etre coherent avec le constructeur de mots cles facteurs N_FACT.__call__
134         # dans lequel le parent de l'element d'une MCList est le parent de la MCList
135         new_obj.reparent(self.parent)
136         liste.append(new_obj)
137       return liste
138
139    def reparent(self,parent):
140       """
141          Cette methode sert a reinitialiser la parente de l'objet
142       """
143       self.parent=parent
144       self.jdc=parent.jdc
145       self.etape=parent.etape
146       for mcfact in self.data:
147         mcfact.reparent(parent)
148
149    def get_etape(self):
150       """
151          Retourne l'étape à laquelle appartient self
152          Un objet de la catégorie etape doit retourner self pour indiquer que
153          l'étape a été trouvée
154          XXX double emploi avec self.etape ???
155       """
156       if self.parent == None: return None
157       return self.parent.get_etape()
158