]> SALOME platform Git repositories - tools/eficas.git/blob - Noyau/N_FACT.py
Salome HOME
c8797c0c8b4ab1793b0a5d1b792ca6ce843d6b17
[tools/eficas.git] / Noyau / N_FACT.py
1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2013   EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20
21
22 """ Ce module contient la classe de definition FACT
23     qui permet de spécifier les caractéristiques des mots clés facteurs
24 """
25
26 import types
27
28 import N_ENTITE
29 import N_MCFACT
30 import N_MCLIST
31 from N__F import _F
32 from N_types import is_sequence
33 from strfunc import ufmt
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             - ang :
63             - statut :
64             - defaut :
65             - regles
66             - min
67             - max
68             - position
69             - docu
70       """
71       N_ENTITE.ENTITE.__init__(self,validators)
72       # Initialisation des attributs
73       self.fr=fr
74       self.ang=ang
75       self.docu = docu
76       if type(regles)== types.TupleType:
77           self.regles=regles
78       else:
79           self.regles=(regles,)
80       self.statut=statut
81       self.defaut=defaut
82       self.min=min
83       self.max=max
84       self.entites=args
85       self.position=None
86       self.affecter_parente()
87
88    def __call__(self,val,nom,parent):
89       """
90           Construit la structure de donnee pour un mot cle facteur a partir
91           de sa definition (self) de sa valeur (val), de son nom (nom) et de
92           son parent dans l arboresence (parent)
93
94           Suivant le type de la valeur on retournera soit un objet de type
95           MCFACT soit une liste de type MCLIST.
96
97           La creation d un mot cle facteur depend de son statut
98             - Si statut ='o'   il est obligatoire
99             - Si statut == 'd' il est facultatif mais ses sous mots cles avec
100               defaut sont visibles
101             - Si statut == 'f' il est facultatif et ses sous mots avec defaut ne
102               sont pas visibles
103             - Si statut == 'c' il est cache ???
104             - Si defaut != None, on utilise cette valeur pour calculer la valeur
105               par defaut du mot cle facteur
106       """
107       if val is None:
108         if self.defaut == None:
109           val={}
110         elif type(self.defaut) == types.TupleType:
111           val=self.defaut
112               # Est ce utile ? Le défaut pourrait etre uniquement un dict
113         elif type(self.defaut) == types.DictType or isinstance(self.defaut,_F):
114           val=self.defaut
115         else:
116           # On ne devrait jamais passer par la
117           print "On ne devrait jamais passer par la"
118           return None
119       elif is_sequence(val) and len(val) == 0 and self.statut == 'o':
120           # On est dans le cas où le mcfact est présent mais est une liste/tuple
121           # vide. Il est obligatoire donc on l'initialise. Les règles, mots-clés
122           # obligatoires diront si un mcfact vide est accepté.
123           val = {}
124
125       # On cree toujours une liste de mcfact
126       l=self.list_instance()
127       l.init(nom = nom,parent=parent)
128       if type(val) in (types.TupleType, types.ListType, self.list_instance) :
129          for v in val:
130             if type(v) == types.DictType or isinstance(v, _F):
131                objet=self.class_instance(nom=nom,definition=self,val=v,parent=parent)
132                l.append(objet)
133             elif isinstance(v, self.class_instance):
134                l.append(v)
135             else:
136                l.append(N_OBJECT.ErrorObj(self,v,parent,nom))
137       elif type(val) == types.DictType or isinstance(val, _F):
138          objet=self.class_instance(nom=nom,definition=self,val=val,parent=parent)
139          l.append(objet)
140       elif isinstance(val, self.class_instance):
141          l.append(val)
142       else:
143          l.append(N_OBJECT.ErrorObj(self,val,parent,nom))
144
145       return l
146
147    def verif_cata(self):
148       self.check_min_max()
149       self.check_fr()
150       self.check_regles()
151       self.check_statut()
152       self.check_docu()
153       self.check_validators()
154       self.verif_cata_regles()