Salome HOME
merge de la branche BR_dev_mars_06 (tag V1_10b5) dans la branche principale
[tools/eficas.git] / Noyau / N_FACT.py
1 #@ MODIF N_FACT Noyau  DATE 16/05/2006   AUTEUR DURAND C.DURAND 
2 # -*- coding: iso-8859-1 -*-
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
24 """ Ce module contient la classe de definition FACT
25     qui permet de spécifier les caractéristiques des mots clés facteurs
26 """
27
28 import types
29
30 import N_ENTITE
31 import N_MCFACT
32 import N_MCLIST
33 from N__F import _F
34
35 import N_OBJECT 
36
37 class FACT(N_ENTITE.ENTITE):
38    """
39     Classe pour definir un mot cle facteur
40
41     Cette classe a trois attributs de classe 
42
43     - class_instance qui indique la classe qui devra etre utilisée 
44             pour créer l'objet qui servira à controler la conformité d'un 
45             mot-clé facteur avec sa définition
46
47     - list_instance
48
49     - label qui indique la nature de l'objet de définition (ici, FACT)
50    """
51    class_instance = N_MCFACT.MCFACT
52    list_instance = N_MCLIST.MCList
53    label = 'FACT'
54
55    def __init__(self,fr="",ang="",docu="",regles=(),statut='f',defaut=None,
56                      min=0,max=1,validators=None,**args):
57      
58       """
59           Un mot-clé facteur est caractérisé par les attributs suivants :
60
61           - fr   :
62
63           - ang :
64
65           - statut :
66
67           - defaut :
68
69           - regles
70
71           - min
72
73           - max
74
75           - position
76
77           - docu
78       """
79       N_ENTITE.ENTITE.__init__(self,validators)
80       # Initialisation des attributs
81       self.fr=fr
82       self.ang=ang
83       self.docu = docu
84       if type(regles)== types.TupleType:
85           self.regles=regles
86       else:
87           self.regles=(regles,)
88       self.statut=statut
89       self.defaut=defaut
90       self.min=min
91       self.max=max
92       self.entites=args
93       self.position=None
94       self.affecter_parente()
95
96    def __call__(self,val,nom,parent):
97       """
98           Construit la structure de donnee pour un mot cle facteur a partir 
99           de sa definition (self) de sa valeur (val), de son nom (nom) et de 
100           son parent dans l arboresence (parent)
101           
102           Suivant le type de la valeur on retournera soit un objet de type 
103           MCFACT soit une liste de type MCLIST.
104
105           La creation d un mot cle facteur depend de son statut
106           Si statut ='o'   il est obligatoire
107           Si statut == 'd' il est facultatif mais ses sous mots cles avec 
108                            defaut sont visibles
109           Si statut == 'f' il est facultatif et ses sous mots avec defaut ne 
110                            sont pas visibles
111           Si statut == 'c' il est cache ???
112           Si defaut != None, on utilise cette valeur pour calculer la valeur 
113                              par defaut du mot cle facteur
114       """
115       if val == None:
116         if self.defaut == None:
117           val={}
118         elif type(self.defaut) == types.TupleType:
119           val=self.defaut
120               # Est ce utile ? Le défaut pourrait etre uniquement un dict
121         elif type(self.defaut) == types.DictType or isinstance(self.defaut,_F):
122           val=self.defaut
123         else:
124           # On ne devrait jamais passer par la
125           print "On ne devrait jamais passer par la"
126           return None
127
128       # On cree toujours une liste de mcfact
129       l=self.list_instance()
130       l.init(nom = nom,parent=parent)
131       if type(val) in (types.TupleType,types.ListType) :
132          for v in val:
133             if type(v) == types.DictType or isinstance(v, _F):
134                objet=self.class_instance(nom=nom,definition=self,val=v,parent=parent)
135                l.append(objet)
136             else:
137                l.append(N_OBJECT.ErrorObj(self,v,parent,nom))
138       elif type(val) == types.DictType or isinstance(val, _F):
139          objet=self.class_instance(nom=nom,definition=self,val=val,parent=parent)
140          l.append(objet)
141       else:
142          l.append(N_OBJECT.ErrorObj(self,val,parent,nom))
143
144       return l
145
146    def verif_cata(self):
147       if type(self.min) != types.IntType :
148          if self.min != '**':
149             self.cr.fatal("L'attribut 'min' doit etre un entier : %s" %`self.min`)
150       if type(self.max) != types.IntType :
151          if self.max != '**':
152             self.cr.fatal("L'attribut 'max' doit etre un entier : %s" %`self.max`)
153       if self.min > self.max :
154          self.cr.fatal("Nombres d'occurrence min et max invalides : %s %s" %(`self.min`,`self.max`))
155       if type(self.fr) != types.StringType :
156          self.cr.fatal("L'attribut 'fr' doit etre une chaine de caractères : %s" %`self.fr`)
157       if type(self.regles) != types.TupleType :
158          self.cr.fatal("L'attribut 'regles' doit etre un tuple : %s" %`self.regles`)
159       if self.statut not in ['f','o','c','d'] :
160          self.cr.fatal("L'attribut 'statut' doit valoir 'o','f','c' ou 'd' : %s" %`self.statut`)
161       if type(self.docu) != types.StringType :
162          self.cr.fatal("L'attribut 'docu' doit etre une chaine de caractères : %s" %`self.docu`)
163       if self.validators and not self.validators.verif_cata():
164          self.cr.fatal("Un des validateurs est incorrect. Raison : "+self.validators.cata_info)
165       self.verif_cata_regles()
166