1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2021 EDF R&D
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.
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.
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
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 from __future__ import absolute_import
23 from builtins import range
27 from Accas import PARAMETRE
28 from Extensions.i18n import tr
32 class Validation(object) :
34 def __init__(self,node,parent) :
39 def testeUneValeur(self,valeurentree):
42 #traceback.print_stack()
43 valeur,validite=self.node.item.evalValeur(valeurentree)
45 commentaire = "impossible d'evaluer : %s " %repr(valeurentree)
46 return valeur,validite,commentaire
47 if self.node.item.waitTxm() and not( type(valeur) == str) : valeur=str(valeur)
49 testtype,commentaire = self.node.item.object.verifType(valeur)
51 return valeur,0,commentaire
53 valide=self.node.item.valideItem(valeur)
54 if type(valide) == tuple:
55 validite,commentaire=valide
60 if not validite and commentaire is None:
61 commentaire = "impossible d'evaluer : %s " %repr(valeurentree)
62 #print ('ds testeUneValeur', valeur, validite, commentaire)
63 return valeur, validite, commentaire
65 # ----------------------------------------------------------------------------------------
66 # Methodes utilisees pour la manipulation des items en notation scientifique
68 # ----------------------------------------------------------------------------------------
69 def setValeurTexte(self,texteValeur) :
71 if "R" in self.node.item.object.definition.type:
72 if texteValeur[0] != "'":
73 clef=eval(texteValeur)
74 if str(clef) != str(texteValeur) :
75 self.node.item.object.initModif()
76 clefobj=self.node.item.object.getNomConcept()
77 if not clefobj in self.parent.appliEficas.dict_reels:
78 self.parent.appliEficas.dict_reels[clefobj] = {}
79 self.parent.appliEficas.dict_reels[clefobj][clef]=texteValeur
80 self.parent.appliEficas.dict_reels[clefobj]
82 if not self.node.item.object.etape in self.parent.appliEficas.dict_reels :
83 self.parent.appliEficas.dict_reels[self.node.item.object.etape] = {}
84 self.parent.appliEficas.dict_reels[self.node.item.object.etape][clef]=texteValeur
85 self.node.item.object.finModif()
89 def getValeurTexte(self,valeur) :
91 if valeur == None : return valeur
92 from decimal import Decimal
93 if isinstance(valeur,Decimal) :
94 if self.node.waitTxm() and not self.isParam(valeur) : return "'"+str(valeur)+"'"
96 if "R" in self.node.item.object.definition.type:
97 clefobj=self.node.item.object.getNomConcept()
98 if clefobj in self.parent.appliEficas.dict_reels:
99 if valeur in self.parent.appliEficas.dict_reels[clefobj] :
100 valeurTexte=self.parent.appliEficas.dict_reels[clefobj][valeur]
102 if str(valeur).find('.') == -1 and str(valeur).find('e') == -1 and str(valeur).find('E'):
103 # aucun '.' n'a ete trouve dans valeur --> on en rajoute un a la fin
104 if (self.isParam(valeur)):
108 val2=eval(str(valeur)+'.')
113 def isParam(self,valeur) :
114 for param in self.node.item.jdc.params:
115 if ((repr(param) == repr(valeur)) or (str(param)==str(valeur))):
119 def ajoutDsDictReel(self,texteValeur):
120 # le try except est necessaire pour saisir les parametres
121 # on enleve l erreur de saisie 00 pour 0
122 if str(texteValeur)== '00' : return
124 if "R" in self.node.item.object.definition.type:
125 if str(texteValeur)[0] != "'":
126 clef=eval(texteValeur)
127 if str(clef) != str(texteValeur) :
128 clefobj=self.node.item.object.getNomConcept()
129 if not clefobj in self.parent.appliEficas :
130 self.parent.appliEficas.dict_reels[clefobj] = {}
131 self.parent.appliEficas.dict_reels[clefobj][clef]=texteValeur
133 if not self.node.item.object.etape in self.parent.appliEficas.dict_reels :
134 self.parent.appliEficas.dict_reels[self.node.item.object.etape] = {}
135 self.parent.appliEficas.dict_reels[self.node.item.object.etape][clef]=texteValeur
140 def ajoutDsDictReelEtape(self):
142 if self.node.item.object in self.parent.appliEficas.dict_reels:
143 self.parent.appliEficas.dict_reels[self.node.item.sdnom]=self.parent.appliEficas.dict_reels[self.node.item.object]
144 del self.parent.appliEficas.dict_reels[self.node.item.object]
149 #------------------------------------
150 class PolitiqueUnique(Validation) :
151 #------------------------------------
153 classe servant pour les entrees ne demandant qu un mot clef
155 def __init__(self,node,parent):
156 Validation.__init__(self,node,parent)
158 def recordValeur(self,valeurentree):
159 if self.parent.modified == 'n' : self.parent.initModif()
160 ancienneVal = self.node.item.getValeur()
161 valeur,validite,commentaire =self.testeUneValeur(valeurentree)
162 if validite and ('R' in self.node.item.object.definition.type) and not(isinstance(valeur,PARAMETRE)) :
164 if (s.find('.')== -1 and s.find('e')== -1 and s.find('E')==-1) : s=s+'.'
165 valeur,validite,commentaire =self.testeUneValeur(s)
167 validite=self.node.item.setValeur(valeur)
168 if self.node.item.isValid():
169 commentaire = tr("Valeur du mot-cle enregistree")
170 #commentaire = "Valeur du mot-cle enregistree"
171 self.setValeurTexte(str(valeurentree))
173 cr = self.node.item.getCr()
174 commentaire = tr("Valeur du mot-cle non autorisee ")+cr.getMessFatal()
175 self.node.item.setValeur(ancienneVal)
176 return validite, commentaire
179 #--------------------------------------
180 class PolitiquePlusieurs(Validation):
181 #--------------------------------------
183 classe servant pour les entrees ne demandant qu un mot clef
185 def __init__(self,node,parent) :
186 #print "ds PolitiquePlusieurs"
193 def ajoutValeurs(self,listevaleur,index,listecourante):
195 commentaire="Nouvelle valeur acceptee"
198 if listevaleur==None: return
199 if listevaleur=="": return
200 if not( type(listevaleur) in (list,tuple)) :
201 listevaleur=tuple(listevaleur)
202 # on verifie que la cardinalite max n a pas ete atteinte
203 min,max = self.node.item.getMinMax()
204 if len(listecourante) + len(listevaleur) > max :
205 commentaire="La liste atteint le nombre maximum d'elements : "+ str(max) +" ,ajout refuse"
206 return False,commentaire,commentaire2,listeRetour
208 for valeur in listevaleur :
209 # On teste le type de la valeur
210 valeurScientifique=valeur
211 valide=self.node.item.valideItem(valeur)
214 valeur,valide=self.node.item.evalValeur(valeur)
215 valide,commentaire2 = self.node.item.object.verifType(valeur)
217 #return testtype,commentaire,"",listeRetour
220 if commentaire.find("On attend un chaine") > 1 :
221 commentaire="Valeur "+str(valeur)+ " incorrecte : ajout a la liste refuse: On attend une chaine de caracteres < 8"
223 commentaire="Valeur "+str(valeur)+ " incorrecte : ajout a la liste refuse"
224 if commentaire2== "" :commentaire2=self.node.item.infoErreurItem()
225 return valide,commentaire,commentaire2,listeRetour
227 # On valide la liste obtenue
228 encorevalide=self.node.item.valideListePartielle(valeur,listecourante)
229 if not encorevalide :
230 commentaire2=self.node.item.infoErreurListe()
231 # On traite le cas ou la liste n est pas valide pour un pb de cardinalite
232 min,max = self.node.item.getMinMax()
233 if len(listecourante) + 1 >= max :
234 commentaire="La liste atteint le nombre maximum d'elements : "+ str(max) +" ,ajout refuse"
235 return valide,commentaire,commentaire2,listeRetour
236 if len(listecourante) + 1 > min :
238 return valide,commentaire,commentaire2,listeRetour
239 # On ajoute la valeur testee a la liste courante et a la liste acceptee
240 self.ajoutDsDictReel(valeurScientifique)
241 listecourante.insert(index,valeur)
243 listeRetour.append(valeur)
245 return valide,commentaire,commentaire2,listeRetour
247 def ajoutTuple(self,valeurTuple,listecourante):
249 commentaire="Nouvelle valeur acceptee"
252 if valeurTuple==None: return
253 if valeurTuple==['']: return
254 # On teste le type de la valeur
255 valide=self.node.item.valideItem(valeurTuple)
258 valeur,valide=self.node.item.evalValeur(valeurTuple)
259 valide = self.node.item.valideItem(valeur)
263 commentaire="Valeur "+str(valeurTuple)+ " incorrecte : ajout a la liste refuse"
264 commentaire2=self.node.item.infoErreurItem()
265 return valide,commentaire,commentaire2,listeRetour
267 # On valide la liste obtenue
268 encorevalide=self.node.item.valideListePartielle(valeurTuple,listecourante)
269 if not encorevalide :
270 commentaire2=self.node.item.infoErreurListe()
271 return valide,commentaire,commentaire2,listeRetour
272 listeRetour.append(valeurTuple)
273 return valide,commentaire,commentaire2,listeRetour
275 def ajoutNTuple(self,liste):
276 commentaire="Nouvelles valeurs acceptee"
278 valide=self.node.item.valideListePartielle(None,liste)
279 print ('uuuuuuuuuuu',valide)
281 commentaire2=self.node.item.infoErreurListe()
282 return valide,commentaire,commentaire2
284 def recordValeur(self,liste,dejaValide=True):
285 ancienneVal = self.node.item.getValeur()
286 validite=self.node.item.setValeur(liste)
287 if validite : self.node.item.initModif()
288 if self.node.item.isValid():
289 commentaire = tr("Valeur du mot-cle enregistree")
291 cr = self.node.item.getCr()
292 commentaire = tr("Valeur du mot-cle non autorisee ")+cr.getMessFatal()
293 self.node.item.setValeur(ancienneVal)
294 return validite, commentaire