Salome HOME
mise a jour du COPYRIGHT
[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       return mc_liste
81
82    def isvalid(self,cr='non'):
83       """
84           Indique si self (MCNUPLET) est un objet valide ou non : retourne 1 si oui, 0 sinon
85       """
86       if self.state == 'unchanged' :
87         return self.valid
88       else:
89         valid = 1
90         if hasattr(self,'valid'):
91           old_valid = self.valid
92         else:
93           old_valid = None
94         for child in self.mc_liste :
95           if not child.isvalid():
96             valid = 0
97             break
98         if len(self.mc_liste) != len(self.definition.entites):
99           valid=0
100           if cr == 'oui' :
101             self.cr.fatal(string.join(("Nuplet : ",self.nom," Longueur incorrecte")))
102         self.valid = valid
103         self.state = 'unchanged'
104         if old_valid:
105           if old_valid != self.valid : self.init_modif_up()
106         return self.valid
107
108    def __getitem__(self,key):
109       """
110           Retourne le key ème élément du nuplet
111       """
112       # Un nuplet est toujours une liste de mots cles simples
113       # On retourne donc la valeur
114       return self.mc_liste[key].valeur
115
116    def __str__(self):
117       """
118            Retourne une représentation du nuplet sous forme de chaine
119            de caractères
120       """
121       s='('
122       for e in self.mc_liste:
123         s=s + str(e.valeur) + ','
124       return s + ')'
125
126    def __repr__(self):
127       """
128            Retourne une représentation du nuplet sous forme de chaine
129            de caractères
130       """
131       s='('
132       for e in self.mc_liste:
133         s=s + str(e.valeur) + ','
134       return s + ')'
135
136    def get_regles(self):
137       """
138          Retourne la liste des règles attachées au nuplet
139       """
140       return []
141
142    def verif_condition_bloc(self):
143       """
144           Vérifie s'il y a des blocs sous le nuplet et retourne 
145           les blocs en question
146       """
147       # Il n y a pas de BLOCs sous un NUPLET
148       return [],[]
149
150    def isrepetable(self):
151       """ 
152           Indique si le NUPLET peut etre répété.
153           Retourne 1 si c'est le cas.
154           Retourne 0 dans le cas contraire.
155           L'information est donnée par le catalogue, cad la définition de self
156       """
157       if self.definition.min != self.definition.max :
158         return 1
159       else :
160         return 0
161
162    def makeobjet(self):
163       return self.definition(val = None, nom = self.nom,parent = self.parent)
164
165    def get_valeur(self):
166       """
167           Cette méthode doit retourner la valeur de l'objet. Elle est utilisée par 
168           cree_dict_valeurs pour construire un dictionnaire contenant les mots clés 
169           d'une étape.
170           Dans le cas d'un nuplet, on retournera comme valeur une liste des valeurs
171           des mots clé simples contenus.
172       """
173       l=[]
174       for v in self.mc_liste:
175          l.append(v.valeur)
176       return l
177
178    def get_val(self):
179       """
180           Une autre méthode qui retourne une "autre" valeur du mot clé facteur.
181           Elle est utilisée par la méthode get_mocle
182       """
183       l=[]
184       for v in self.mc_liste:
185          l.append(v.valeur)
186       return l
187
188    def isoblig(self):
189       return self.definition.statut=='o'
190
191
192