Salome HOME
debug intempestif
[tools/eficas.git] / Noyau / N_FACT.py
1 # coding=utf-8
2 # Copyright (C) 2007-2021   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 """ Ce module contient la classe de definition FACT
22     qui permet de spécifier les caractéristiques des mots clés facteurs
23 """
24
25 from __future__ import absolute_import
26 from __future__ import print_function
27 import types
28
29 from . import N_ENTITE
30 from . import N_MCFACT
31 from . import N_MCLIST
32 from .N__F import _F
33 from .N_types import isSequence
34
35 from . import N_OBJECT
36
37
38 class FACT(N_ENTITE.ENTITE):
39
40     """
41      Classe pour definir un mot cle facteur
42
43      Cette classe a trois attributs de classe
44
45        - class_instance qui indique la classe qui devra etre utilisée
46          pour créer l'objet qui servira à controler la conformité d'un
47          mot-clé facteur avec sa définition
48
49        - list_instance
50
51        - label qui indique la nature de l'objet de définition (ici, FACT)
52     """
53     class_instance = N_MCFACT.MCFACT
54     list_instance = N_MCLIST.MCList
55     label = 'FACT'
56
57     def __init__(self, fr="", docu="", regles=(), statut='f', defaut=None,ang="",fenetreIhm=None,
58                  min=0, max=1, validators=None, **args):
59         """
60             Un mot-clé facteur est caractérisé par les attributs suivants :
61
62               - fr   :
63               - statut :
64               - defaut :
65               - regles
66               - min
67               - max
68               - position
69               - docu
70               - fenetreIhm
71         """
72         N_ENTITE.ENTITE.__init__(self, validators)
73         # Initialisation des attributs
74         self.fr = fr
75         self.ang=ang
76         self.docu = docu
77         if type(regles) == tuple:
78             self.regles = regles
79         else:
80             self.regles = (regles,)
81         self.statut = statut
82         self.defaut = defaut
83         self.min = min
84         self.max = max
85         if self.max == "**" : self.max=float('inf')
86         if self.min == "**" : self.min=float('-inf')
87         self.entites = args
88         self.position = None
89         self.affecter_parente()
90         self.fenetreIhm = fenetreIhm
91
92     def __call__(self, val, nom, parent, dicoPyxbDeConstruction = None):
93         """
94             Construit la structure de donnee pour un mot cle facteur a partir
95             de sa definition (self) de sa valeur (val), de son nom (nom) et de
96             son parent dans l arboresence (parent)
97
98             Suivant le type de la valeur on retournera soit un objet de type
99             MCFACT soit une liste de type MCLIST.
100
101             La creation d un mot cle facteur depend de son statut
102               - Si statut ='o'   il est obligatoire
103               - Si statut == 'd' il est facultatif mais ses sous mots cles avec
104                 defaut sont visibles
105               - Si statut == 'f' il est facultatif et ses sous mots avec defaut ne
106                 sont pas visibles
107               - Si statut == 'c' il est cache ???
108               - Si defaut != None, on utilise cette valeur pour calculer la valeur
109                 par defaut du mot cle facteur
110         """
111         if val is None:
112             if self.defaut == None:
113                 val = {}
114             elif type(self.defaut) == tuple:
115                 val = self.defaut
116                     # Est ce utile ? Le défaut pourrait etre uniquement un dict
117             elif type(self.defaut) == dict or isinstance(self.defaut, _F):
118                 val = self.defaut
119             else:
120                 # On ne devrait jamais passer par la
121                 print ("On ne devrait jamais passer par la")
122                 return None
123         elif isSequence(val) and len(val) == 0 and self.statut == 'o':
124                 # On est dans le cas où le mcfact est présent mais est une liste/tuple
125                 # vide. Il est obligatoire donc on l'initialise. Les règles, mots-clés
126                 # obligatoires diront si un mcfact vide est accepté.
127             val = {}
128
129         # On cree toujours une liste de mcfact
130         l = self.list_instance()
131         l.init(nom=nom, parent=parent)
132         if type(val) in (tuple, list, self.list_instance):
133             indice=0
134             for v in val:
135                 if type(v) == dict or isinstance(v, _F):
136                     if dicoPyxbDeConstruction :
137                         objet = self.class_instance(
138                            nom=nom, definition=self, val=v, parent=parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction[indice])
139                     else :
140                         objet = self.class_instance(
141                            nom=nom, definition=self, val=v, parent=parent,dicoPyxbDeConstruction=None)
142                     indice=indice+1
143                     l.append(objet)
144                 elif isinstance(v, self.class_instance):
145 # if faut gerer ici --> on passe la avec une liste de concept ?
146 # PNPN --> si pyxb
147                     l.append(v)
148                 else:
149                     l.append(N_OBJECT.ErrorObj(self, v, parent, nom))
150         elif type(val) == dict or isinstance(val, _F):
151             if dicoPyxbDeConstruction :
152                 objet = self.class_instance(
153                    nom=nom, definition=self, val=val, parent=parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction)
154             else :
155                 objet = self.class_instance(
156                 nom=nom, definition=self, val=val, parent=parent,dicoPyxbDeConstruction=None)
157             l.append(objet)
158         elif isinstance(val, self.class_instance):
159 # idem --> quand passe t on la
160             l.append(val)
161         else:
162             l.append(N_OBJECT.ErrorObj(self, val, parent, nom))
163         # pour tenir compte du validateFonction
164         if l.jdc :
165             l.cata=l.jdc.cata
166             l.buildObjPyxb(l)
167         return l
168
169     def verifCata(self):
170         self.checkMinMax()
171         self.checkFr()
172         self.checkRegles()
173         self.checkStatut()
174         self.checkDocu()
175         self.checkValidators()
176         self.verifCataRegles()