]> SALOME platform Git repositories - tools/eficas.git/blob - Noyau/N_MCSIMP.py
Salome HOME
ba769bbd7d34c7af02e106a037a9596914b5e727
[tools/eficas.git] / Noyau / N_MCSIMP.py
1 #@ MODIF N_MCSIMP Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
2 # -*- coding: iso-8859-1 -*-
3 # RESPONSABLE COURTOIS M.COURTOIS
4 #            CONFIGURATION MANAGEMENT OF EDF VERSION
5 # ======================================================================
6 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
7 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
8 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
9 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
10 # (AT YOUR OPTION) ANY LATER VERSION.                                 
11 #
12 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
13 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
14 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
15 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
16 #
17 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
18 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
19 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
20 #                                                                       
21 #                                                                       
22 # ======================================================================
23
24
25 """ 
26     Ce module contient la classe MCSIMP qui sert à controler la valeur
27     d'un mot-clé simple par rapport à sa définition portée par un objet
28     de type ENTITE
29 """
30
31 from copy import copy
32
33 from Noyau.N_ASSD import ASSD,assd
34 from Noyau.N_CO import CO
35 import N_OBJECT
36 from N_CONVERT import ConversionFactory
37
38 class MCSIMP(N_OBJECT.OBJECT):
39    """
40    """
41    nature = 'MCSIMP'
42    def __init__(self,val,definition,nom,parent):
43       """
44          Attributs :
45
46           - val : valeur du mot clé simple
47
48           - definition
49
50           - nom
51
52           - parent
53
54         Autres attributs :
55
56           - valeur : valeur du mot-clé simple en tenant compte de la valeur par défaut
57
58       """
59       self.definition=definition
60       self.nom=nom
61       self.val = val
62       self.parent = parent
63       self.convProto = ConversionFactory('type', typ=self.definition.type)
64       self.valeur = self.GETVAL(self.val)
65       if parent :
66          self.jdc = self.parent.jdc
67          self.niveau = self.parent.niveau
68          self.etape = self.parent.etape
69       else:
70          # Le mot cle simple a été créé sans parent
71          self.jdc = None
72          self.niveau = None
73          self.etape = None
74
75    def GETVAL(self,val):
76       """ 
77           Retourne la valeur effective du mot-clé en fonction
78           de la valeur donnée. Defaut si val == None
79       """
80       if (val is None and hasattr(self.definition,'defaut')) :
81          val = self.definition.defaut
82       if self.convProto:
83          val = self.convProto.convert(val)
84       return val
85
86    def get_valeur(self):
87       """
88           Retourne la "valeur" d'un mot-clé simple.
89           Cette valeur est utilisée lors de la création d'un contexte 
90           d'évaluation d'expressions à l'aide d'un interpréteur Python
91       """
92       v = self.valeur
93       # Singleton : on retourne l'element
94       # Permet aussi d'ignorer l'erreur : concept=COMMANDE(),
95       # ou 'concept' est un tuple de longueur 1 a cause de la virgule.
96       if type(v) in (list, tuple) and len(v) == 1:
97          v = v[0]
98       return v
99
100    def get_val(self):
101       """
102           Une autre méthode qui retourne une "autre" valeur du mot clé simple.
103           Elle est utilisée par la méthode get_mocle
104       """
105       return self.valeur
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.visitMCSIMP(self)
113
114    def copy(self):
115       """ Retourne une copie de self """
116       objet = self.makeobjet()
117       # il faut copier les listes et les tuples mais pas les autres valeurs
118       # possibles (réel,SD,...)
119       if type(self.valeur) in (list, tuple):
120          objet.valeur = copy(self.valeur)
121       else:
122          objet.valeur = self.valeur
123       objet.val = objet.valeur
124       return objet
125
126    def makeobjet(self):
127       return self.definition(val = None, nom = self.nom,parent = self.parent)
128
129    def reparent(self,parent):
130       """
131          Cette methode sert a reinitialiser la parente de l'objet
132       """
133       self.parent=parent
134       self.jdc=parent.jdc
135       self.etape=parent.etape
136
137    def get_sd_utilisees(self):
138       """ 
139           Retourne une liste qui contient la ou les SD utilisée par self si c'est le cas
140           ou alors une liste vide
141       """
142       l=[]
143       if isinstance(self.valeur, ASSD):
144          l.append(self.valeur)
145       elif type(self.valeur) in (list, tuple):
146         for val in self.valeur :
147            if isinstance(val, ASSD):
148               l.append(val)
149       return l
150
151    def get_sd_mcs_utilisees(self):
152       """ 
153           Retourne la ou les SD utilisée par self sous forme d'un dictionnaire :
154             - Si aucune sd n'est utilisée, le dictionnaire est vide.
155             - Sinon, la clé du dictionnaire est le mot-clé simple ; la valeur est
156               la liste des sd attenante.
157
158               Exemple ::
159                       { 'VALE_F': [ <Cata.cata.para_sensi instance at 0x9419854>,
160                                     <Cata.cata.para_sensi instance at 0x941a204> ] }
161       """
162       l=self.get_sd_utilisees()
163       dico = {}
164       if len(l) > 0 :
165         dico[self.nom] = l
166       return dico
167
168    def get_mcs_with_co(self,co):
169       """
170           Cette methode retourne l'objet MCSIMP self s'il a le concept co
171           comme valeur.
172       """
173       lval=self.valeur
174       if type(self.valeur) not in (list, tuple):
175         lval=(self.valeur,)
176       if co in lval:return [self,]
177       return []
178
179    def get_all_co(self):
180       """
181           Cette methode retourne la liste de tous les concepts co
182           associés au mot cle simple
183       """
184       lval=self.valeur
185       if type(self.valeur) not in (list, tuple):
186         lval=(self.valeur,)
187       l=[]
188       for c in lval:
189         if isinstance(c,CO) or hasattr(c,"_etape"):l.append(c)
190       return l