Salome HOME
Modifications liees a MT
[tools/eficas.git] / Noyau / N_FACT.py
1 # coding=utf-8
2 # Copyright (C) 2007-2017   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                     objet = self.class_instance(
137                         nom=nom, definition=self, val=v, parent=parent,dicoPyxbDeConstruction=None)
138                         #nom=nom, definition=self, val=v, parent=parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction[indice])
139                     indice=indice+1
140                     l.append(objet)
141                 elif isinstance(v, self.class_instance):
142 # if faut gerer ici --> on passe la avec une liste de concept ? 
143 # PNPN --> si pyxb
144                     l.append(v)
145                 else:
146                     l.append(N_OBJECT.ErrorObj(self, v, parent, nom))
147         elif type(val) == dict or isinstance(val, _F):
148             objet = self.class_instance(
149                 nom=nom, definition=self, val=val, parent=parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction)
150             l.append(objet)
151         elif isinstance(val, self.class_instance):
152 # idem --> quand passe t on la 
153             l.append(val)
154         else:
155             l.append(N_OBJECT.ErrorObj(self, val, parent, nom))
156         l.cata=l.jdc.cata
157         #l.buildObjPyxb(l)
158         return l
159
160     def verifCata(self):
161         self.checkMinMax()
162         self.checkFr()
163         self.checkRegles()
164         self.checkStatut()
165         self.checkDocu()
166         self.checkValidators()
167         self.verifCataRegles()