Salome HOME
*** empty log message ***
[tools/eficas.git] / Extensions / mcnuplet.py
1 # -*- coding: utf-8 -*-
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 """
23 # Modules Python
24 import string
25
26 # Modules Eficas
27 from Noyau import N_MCCOMPO
28 from Validation import V_MCCOMPO
29
30 class MCNUPLET(V_MCCOMPO.MCCOMPO,N_MCCOMPO.MCCOMPO):
31    """
32    """
33    nature = "MCNUPLET"
34    txt_nat="Nuplet : "
35
36    def __init__(self,val,definition,nom,parent):
37       # val contient la valeur initial du nuplet
38       self.val = val
39       if val == None: self.val=()
40       self.definition=definition
41       self.nom=nom
42       self.parent = parent
43       # GETVAL affecte la valeur par defaut si necessaire
44       self.valeur=self.GETVAL(self.val)
45       if parent :
46          self.jdc = self.parent.jdc
47          self.niveau = self.parent.niveau
48          self.etape = self.parent.etape
49       else:
50          # Le mot cle a été créé sans parent
51          self.jdc = None
52          self.niveau = None
53          self.etape = None
54       self.state = 'undetermined'
55       self.actif=1
56       self.mc_liste=self.build_mc()
57
58    def build_mc(self):
59       """ 
60           Construit la liste des sous-entites de MCNUPLET
61           à partir de la liste des arguments (valeur)
62       """
63       args = self.valeur
64       if args ==None : args =()
65       mc_liste=[]
66
67       # on crée les sous entites du NUPLET a partir des valeurs initiales
68       k=0
69       for v in self.definition.entites:
70         if k < len(args):
71           val=args[k]
72         else:
73           val=None
74         objet=v(val=val,nom=`k`,parent=self)
75         if hasattr(objet.definition,'position'):
76           if objet.definition.position == 'global' :
77             self.append_mc_global(objet)
78           #XXX et global_jdc ??
79         mc_liste.append(objet)
80         k=k+1
81       # Un nuplet n'a pas de mots inconnus
82       self.reste_val={}
83       return mc_liste
84
85    def isvalid(self,cr='non'):
86       """
87           Indique si self (MCNUPLET) est un objet valide ou non : retourne 1 si oui, 0 sinon
88       """
89       if self.state == 'unchanged' :
90         return self.valid
91       else:
92         valid = 1
93         if hasattr(self,'valid'):
94           old_valid = self.valid
95         else:
96           old_valid = None
97         for child in self.mc_liste :
98           if not child.isvalid():
99             valid = 0
100             break
101         if len(self.mc_liste) != len(self.definition.entites):
102           valid=0
103           if cr == 'oui' :
104             self.cr.fatal(string.join(("Nuplet : ",self.nom," Longueur incorrecte")))
105         self.valid = valid
106         self.state = 'unchanged'
107         if old_valid:
108           if old_valid != self.valid : self.init_modif_up()
109         return self.valid
110
111    def __getitem__(self,key):
112       """
113           Retourne le key ème élément du nuplet
114       """
115       # Un nuplet est toujours une liste de mots cles simples
116       # On retourne donc la valeur
117       return self.mc_liste[key].valeur
118
119    def __str__(self):
120       """
121            Retourne une représentation du nuplet sous forme de chaine
122            de caractères
123       """
124       s='('
125       for e in self.mc_liste:
126         s=s + str(e.valeur) + ','
127       return s + ')'
128
129    def __repr__(self):
130       """
131            Retourne une représentation du nuplet sous forme de chaine
132            de caractères
133       """
134       s='('
135       for e in self.mc_liste:
136         s=s + str(e.valeur) + ','
137       return s + ')'
138
139    def get_regles(self):
140       """
141          Retourne la liste des règles attachées au nuplet
142       """
143       return []
144
145    def verif_condition_bloc(self):
146       """
147           Vérifie s'il y a des blocs sous le nuplet et retourne 
148           les blocs en question
149       """
150       # Il n y a pas de BLOCs sous un NUPLET
151       return [],[]
152
153    def isrepetable(self):
154       """ 
155           Indique si le NUPLET peut etre répété.
156           Retourne 1 si c'est le cas.
157           Retourne 0 dans le cas contraire.
158           L'information est donnée par le catalogue, cad la définition de self
159       """
160       if self.definition.min != self.definition.max :
161         return 1
162       else :
163         return 0
164
165    def makeobjet(self):
166       return self.definition(val = None, nom = self.nom,parent = self.parent)
167
168    def get_valeur(self):
169       """
170           Cette méthode doit retourner la valeur de l'objet. Elle est utilisée par 
171           cree_dict_valeurs pour construire un dictionnaire contenant les mots clés 
172           d'une étape.
173           Dans le cas d'un nuplet, on retournera comme valeur une liste des valeurs
174           des mots clé simples contenus.
175       """
176       l=[]
177       for v in self.mc_liste:
178          l.append(v.valeur)
179       return l
180
181    def get_val(self):
182       """
183           Une autre méthode qui retourne une "autre" valeur du mot clé facteur.
184           Elle est utilisée par la méthode get_mocle
185       """
186       l=[]
187       for v in self.mc_liste:
188          l.append(v.valeur)
189       return l
190
191    def isoblig(self):
192       return self.definition.statut=='o'
193
194    def get_fr(self):
195      """
196         Retourne le texte d'aide dans la langue choisie
197      """
198      try :
199         return getattr(self.definition,prefs.lang)
200      except:
201         return ''
202
203
204