Salome HOME
CCAR: mise a jour proc distrib
[tools/eficas.git] / Extensions / mcnuplet.py
1 #            CONFIGURATION MANAGEMENT OF EDF VERSION
2 # ======================================================================
3 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
4 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
5 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
6 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
7 # (AT YOUR OPTION) ANY LATER VERSION.
8 #
9 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
10 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
11 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
12 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
13 #
14 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
15 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
16 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
17 #
18 #
19 # ======================================================================
20 """
21 """
22 # Modules Python
23 import string
24
25 # Modules Eficas
26 from Noyau import N_MCCOMPO
27 from Validation import V_MCCOMPO
28
29 class MCNUPLET(V_MCCOMPO.MCCOMPO,N_MCCOMPO.MCCOMPO):
30    """
31    """
32    nature = "MCNUPLET"
33    txt_nat="Nuplet : "
34
35    def __init__(self,val,definition,nom,parent):
36       # val contient la valeur initial du nuplet
37       self.val = val
38       if val == None: self.val=()
39       self.definition=definition
40       self.nom=nom
41       self.parent = parent
42       # GETVAL affecte la valeur par defaut si necessaire
43       self.valeur=self.GETVAL(self.val)
44       if parent :
45          self.jdc = self.parent.jdc
46          self.niveau = self.parent.niveau
47          self.etape = self.parent.etape
48       else:
49          # Le mot cle a été créé sans parent
50          self.jdc = None
51          self.niveau = None
52          self.etape = None
53       self.state = 'undetermined'
54       self.actif=1
55       self.mc_liste=self.build_mc()
56
57    def build_mc(self):
58       """ 
59           Construit la liste des sous-entites de MCNUPLET
60           à partir de la liste des arguments (valeur)
61       """
62       args = self.valeur
63       if args ==None : args =()
64       mc_liste=[]
65
66       # on crée les sous entites du NUPLET a partir des valeurs initiales
67       k=0
68       for v in self.definition.entites:
69         if k < len(args):
70           val=args[k]
71         else:
72           val=None
73         objet=v(val=val,nom=`k`,parent=self)
74         if hasattr(objet.definition,'position'):
75           if objet.definition.position == 'global' :
76             self.append_mc_global(objet)
77           #XXX et global_jdc ??
78         mc_liste.append(objet)
79         k=k+1
80       # Un nuplet n'a pas de mots inconnus
81       self.reste_val={}
82       return mc_liste
83
84    def isvalid(self,cr='non'):
85       """
86           Indique si self (MCNUPLET) est un objet valide ou non : retourne 1 si oui, 0 sinon
87       """
88       if self.state == 'unchanged' :
89         return self.valid
90       else:
91         valid = 1
92         if hasattr(self,'valid'):
93           old_valid = self.valid
94         else:
95           old_valid = None
96         for child in self.mc_liste :
97           if not child.isvalid():
98             valid = 0
99             break
100         if len(self.mc_liste) != len(self.definition.entites):
101           valid=0
102           if cr == 'oui' :
103             self.cr.fatal(string.join(("Nuplet : ",self.nom," Longueur incorrecte")))
104         self.valid = valid
105         self.state = 'unchanged'
106         if old_valid:
107           if old_valid != self.valid : self.init_modif_up()
108         return self.valid
109
110    def __getitem__(self,key):
111       """
112           Retourne le key ème élément du nuplet
113       """
114       # Un nuplet est toujours une liste de mots cles simples
115       # On retourne donc la valeur
116       return self.mc_liste[key].valeur
117
118    def __str__(self):
119       """
120            Retourne une représentation du nuplet sous forme de chaine
121            de caractères
122       """
123       s='('
124       for e in self.mc_liste:
125         s=s + str(e.valeur) + ','
126       return s + ')'
127
128    def __repr__(self):
129       """
130            Retourne une représentation du nuplet sous forme de chaine
131            de caractères
132       """
133       s='('
134       for e in self.mc_liste:
135         s=s + str(e.valeur) + ','
136       return s + ')'
137
138    def get_regles(self):
139       """
140          Retourne la liste des règles attachées au nuplet
141       """
142       return []
143
144    def verif_condition_bloc(self):
145       """
146           Vérifie s'il y a des blocs sous le nuplet et retourne 
147           les blocs en question
148       """
149       # Il n y a pas de BLOCs sous un NUPLET
150       return [],[]
151
152    def isrepetable(self):
153       """ 
154           Indique si le NUPLET peut etre répété.
155           Retourne 1 si c'est le cas.
156           Retourne 0 dans le cas contraire.
157           L'information est donnée par le catalogue, cad la définition de self
158       """
159       if self.definition.min != self.definition.max :
160         return 1
161       else :
162         return 0
163
164    def makeobjet(self):
165       return self.definition(val = None, nom = self.nom,parent = self.parent)
166
167    def get_valeur(self):
168       """
169           Cette méthode doit retourner la valeur de l'objet. Elle est utilisée par 
170           cree_dict_valeurs pour construire un dictionnaire contenant les mots clés 
171           d'une étape.
172           Dans le cas d'un nuplet, on retournera comme valeur une liste des valeurs
173           des mots clé simples contenus.
174       """
175       l=[]
176       for v in self.mc_liste:
177          l.append(v.valeur)
178       return l
179
180    def get_val(self):
181       """
182           Une autre méthode qui retourne une "autre" valeur du mot clé facteur.
183           Elle est utilisée par la méthode get_mocle
184       """
185       l=[]
186       for v in self.mc_liste:
187          l.append(v.valeur)
188       return l
189
190    def isoblig(self):
191       return self.definition.statut=='o'
192
193    def get_fr(self):
194      """
195         Retourne le texte d'aide dans la langue choisie
196      """
197      try :
198         return getattr(self.definition,prefs.lang)
199      except:
200         return ''
201
202
203