Salome HOME
ajout pour accepter les accents sous python 2.3
[tools/eficas.git] / Noyau / N_MCBLOC.py
1 # -*- coding: utf-8 -*-
2 #@ MODIF N_MCBLOC 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 MCBLOC qui sert à controler la valeur
24     d'un bloc de mots-clés par rapport à sa définition portée par un objet
25     de type ENTITE
26 """
27
28 import types
29
30 import N_MCCOMPO
31
32 class MCBLOC(N_MCCOMPO.MCCOMPO):
33    """
34       Classe support d'un bloc de mots-clés.
35   
36    """
37
38    nature = "MCBLOC"
39    def __init__(self,val,definition,nom,parent):
40       """
41          Attributs :
42
43           - val : valeur du bloc (dictionnaire dont les clés sont des noms de mots-clés et les valeurs
44                   les valeurs des mots-clés)
45
46           - definition : objet de définition de type BLOC associé au bloc (porte les attributs de définition)
47
48           - nom : nom du bloc. Ce nom lui est donné par celui qui crée le bloc de mot-clé
49
50           - parent : le créateur du bloc. Ce peut etre un mot-clé facteur ou un autre objet composite de type
51                      OBJECT. Si parent vaut None, le bloc ne possède pas de contexte englobant.
52
53           - mc_liste : liste des sous-objets du bloc construite par appel à la méthode build_mc
54
55       """
56       self.definition=definition
57       self.nom=nom
58       self.val = val
59       self.parent = parent
60       self.valeur = val
61       if parent :
62          self.jdc = self.parent.jdc
63          self.niveau = self.parent.niveau
64          self.etape = self.parent.etape
65       else:
66          # Le mot cle a été créé sans parent
67          self.jdc = None
68          self.niveau = None
69          self.etape = None
70       self.mc_liste=self.build_mc()
71          
72    def get_valeur(self):
73       """
74          Retourne la "valeur" de l'objet bloc. Il s'agit d'un dictionnaire dont
75          les clés seront les noms des objets de self.mc_liste et les valeurs
76          les valeurs des objets de self.mc_liste obtenues par application de 
77          la méthode get_valeur.
78
79          Dans le cas particulier d'un objet bloc les éléments du dictionnaire
80          obtenu par appel de la méthode get_valeur sont intégrés au niveau
81          supérieur.
82           
83       """
84       dico={}
85       for mocle in self.mc_liste:
86         if mocle.isBLOC():
87            # Si mocle est un BLOC, on inclut ses items dans le dictionnaire
88            # représentatif de la valeur de self. Les mots-clés fils de blocs sont
89            # donc remontés au niveau supérieur.
90            dico.update(mocle.get_valeur())
91         else:
92            dico[mocle.nom]=mocle.get_valeur()
93
94       # On rajoute tous les autres mots-clés locaux possibles avec la valeur
95       # par défaut ou None
96       # Pour les mots-clés facteurs, on ne traite que ceux avec statut défaut ('d')
97       # et caché ('c')
98       # On n'ajoute aucune information sur les blocs. Ils n'ont pas de défaut seulement
99       # une condition.
100       for k,v in self.definition.entites.items():
101         if not dico.has_key(k):
102            if v.label == 'SIMP':
103               # Mot clé simple
104               dico[k]=v.defaut
105            elif v.label == 'FACT':
106                 if v.statut in ('c','d') :
107                    # Mot clé facteur avec défaut ou caché provisoire
108                    dico[k]=v(val=None,nom=k,parent=self)
109                    # On demande la suppression des pointeurs arrieres
110                    # pour briser les eventuels cycles
111                    dico[k].supprime()
112                 else:
113                    dico[k]=None
114
115       return dico
116
117    def isBLOC(self):
118       """
119           Indique si l'objet est un BLOC
120       """
121       return 1
122
123    def accept(self,visitor):
124       """
125          Cette methode permet de parcourir l'arborescence des objets
126          en utilisant le pattern VISITEUR
127       """
128       visitor.visitMCBLOC(self)
129
130    def makeobjet(self):
131       return self.definition(val = None,  nom = self.nom,parent = self.parent)