1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2017 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) :
38 def testeUneValeur(self,valeurentree):
40 valeur,validite=self.node.item.evalValeur(valeurentree)
42 commentaire = "impossible d'evaluer : %s " %repr(valeurentree)
43 return valeur,validite,commentaire
44 if self.node.item.waitTxm() and not( type(valeur) == str) : valeur=str(valeur)
46 testtype,commentaire = self.node.item.object.verifType(valeur)
48 return valeur,0,commentaire
50 valide=self.node.item.valideItem(valeur)
51 if type(valide) == tuple:
52 validite,commentaire=valide
57 if not validite and commentaire is None:
58 commentaire = "impossible d'evaluer : %s " %repr(valeurentree)
59 #print ('ds testeUneValeur', valeur, validite, commentaire)
60 return valeur, validite, commentaire
62 # ----------------------------------------------------------------------------------------
63 # Methodes utilisees pour la manipulation des items en notation scientifique
65 # ----------------------------------------------------------------------------------------
66 def setValeurTexte(self,texteValeur) :
68 if "R" in self.node.item.object.definition.type:
69 if texteValeur[0] != "'":
70 clef=eval(texteValeur)
71 if str(clef) != str(texteValeur) :
72 self.node.item.object.initModif()
73 clefobj=self.node.item.object.getNomConcept()
74 if not clefobj in self.parent.appliEficas.dict_reels:
75 self.parent.appliEficas.dict_reels[clefobj] = {}
76 self.parent.appliEficas.dict_reels[clefobj][clef]=texteValeur
77 self.parent.appliEficas.dict_reels[clefobj]
79 if not self.node.item.object.etape in self.parent.appliEficas.dict_reels :
80 self.parent.appliEficas.dict_reels[self.node.item.object.etape] = {}
81 self.parent.appliEficas.dict_reels[self.node.item.object.etape][clef]=texteValeur
82 self.node.item.object.finModif()
86 def getValeurTexte(self,valeur) :
88 if valeur == None : return valeur
89 from decimal import Decimal
90 if isinstance(valeur,Decimal) :
91 if self.node.waitTxm() and not self.isParam(valeur) : return "'"+str(valeur)+"'"
93 if "R" in self.node.item.object.definition.type:
94 clefobj=self.node.item.object.getNomConcept()
95 if clefobj in self.parent.appliEficas.dict_reels:
96 if valeur in self.parent.appliEficas.dict_reels[clefobj] :
97 valeurTexte=self.parent.appliEficas.dict_reels[clefobj][valeur]
99 if str(valeur).find('.') == -1 and str(valeur).find('e') == -1 and str(valeur).find('E'):
100 # aucun '.' n'a ete trouve dans valeur --> on en rajoute un a la fin
101 if (self.isParam(valeur)):
105 val2=eval(str(valeur)+'.')
110 def isParam(self,valeur) :
111 for param in self.node.item.jdc.params:
112 if ((repr(param) == repr(valeur)) or (str(param)==str(valeur))):
116 def ajoutDsDictReel(self,texteValeur):
117 # le try except est necessaire pour saisir les parametres
118 # on enleve l erreur de saisie 00 pour 0
119 if str(texteValeur)== '00' : return
121 if "R" in self.node.item.object.definition.type:
122 if str(texteValeur)[0] != "'":
123 clef=eval(texteValeur)
124 if str(clef) != str(texteValeur) :
125 clefobj=self.node.item.object.getNomConcept()
126 if not clefobj in self.parent.appliEficas :
127 self.parent.appliEficas.dict_reels[clefobj] = {}
128 self.parent.appliEficas.dict_reels[clefobj][clef]=texteValeur
130 if not self.node.item.object.etape in self.parent.appliEficas.dict_reels :
131 self.parent.appliEficas.dict_reels[self.node.item.object.etape] = {}
132 self.parent.appliEficas.dict_reels[self.node.item.object.etape][clef]=texteValeur
137 def ajoutDsDictReelEtape(self):
139 if self.node.item.object in self.parent.appliEficas.dict_reels:
140 self.parent.appliEficas.dict_reels[self.node.item.sdnom]=self.parent.appliEficas.dict_reels[self.node.item.object]
141 del self.parent.appliEficas.dict_reels[self.node.item.object]
146 #------------------------------------
147 class PolitiqueUnique(Validation) :
148 #------------------------------------
150 classe servant pour les entrees ne demandant qu un mot clef
152 def __init__(self,node,parent):
153 Validation.__init__(self,node,parent)
155 def recordValeur(self,valeurentree):
156 if self.parent.modified == 'n' : self.parent.initModif()
157 ancienneVal = self.node.item.getValeur()
158 valeur,validite,commentaire =self.testeUneValeur(valeurentree)
159 if validite and ('R' in self.node.item.object.definition.type) and not(isinstance(valeur,PARAMETRE)) :
161 if (s.find('.')== -1 and s.find('e')== -1 and s.find('E')==-1) : s=s+'.'
162 valeur,validite,commentaire =self.testeUneValeur(s)
164 validite=self.node.item.setValeur(valeur)
165 if self.node.item.isValid():
166 commentaire = tr("Valeur du mot-cle enregistree")
167 #commentaire = "Valeur du mot-cle enregistree"
168 self.setValeurTexte(str(valeurentree))
170 cr = self.node.item.getCr()
171 commentaire = tr("Valeur du mot-cle non autorisee ")+cr.getMessFatal()
172 self.node.item.setValeur(ancienneVal)
173 return validite, commentaire
176 #--------------------------------------
177 class PolitiquePlusieurs(Validation):
178 #--------------------------------------
180 classe servant pour les entrees ne demandant qu un mot clef
182 def __init__(self,node,parent) :
183 #print "ds PolitiquePlusieurs"
190 def ajoutValeurs(self,listevaleur,index,listecourante):
192 commentaire="Nouvelle valeur acceptee"
195 if listevaleur==None: return
196 if listevaleur=="": return
197 if not( type(listevaleur) in (list,tuple)) :
198 listevaleur=tuple(listevaleur)
199 # on verifie que la cardinalite max n a pas ete atteinte
200 min,max = self.node.item.getMinMax()
201 if len(listecourante) + len(listevaleur) > max :
202 commentaire="La liste atteint le nombre maximum d'elements : "+ str(max) +" ,ajout refuse"
203 return False,commentaire,commentaire2,listeRetour
205 for valeur in listevaleur :
206 # On teste le type de la valeur
207 valeurScientifique=valeur
208 valide=self.node.item.valideItem(valeur)
211 valeur,valide=self.node.item.evalValeur(valeur)
212 valide,commentaire2 = self.node.item.object.verifType(valeur)
214 #return testtype,commentaire,"",listeRetour
217 if commentaire.find("On attend un chaine") > 1 :
218 commentaire="Valeur "+str(valeur)+ " incorrecte : ajout a la liste refuse: On attend une chaine de caracteres < 8"
220 commentaire="Valeur "+str(valeur)+ " incorrecte : ajout a la liste refuse"
221 if commentaire2== "" :commentaire2=self.node.item.infoErreurItem()
222 return valide,commentaire,commentaire2,listeRetour
224 # On valide la liste obtenue
225 encorevalide=self.node.item.valideListePartielle(valeur,listecourante)
226 if not encorevalide :
227 commentaire2=self.node.item.infoErreurListe()
228 # On traite le cas ou la liste n est pas valide pour un pb de cardinalite
229 min,max = self.node.item.getMinMax()
230 if len(listecourante) + 1 >= max :
231 commentaire="La liste atteint le nombre maximum d'elements : "+ str(max) +" ,ajout refuse"
232 return valide,commentaire,commentaire2,listeRetour
233 if len(listecourante) + 1 > min :
235 return valide,commentaire,commentaire2,listeRetour
236 # On ajoute la valeur testee a la liste courante et a la liste acceptee
237 self.ajoutDsDictReel(valeurScientifique)
238 listecourante.insert(index,valeur)
240 listeRetour.append(valeur)
242 return valide,commentaire,commentaire2,listeRetour
244 def ajoutTuple(self,valeurTuple,listecourante):
246 commentaire="Nouvelle valeur acceptee"
249 if valeurTuple==None: return
250 if valeurTuple==['']: return
251 # On teste le type de la valeur
252 valide=self.node.item.valideItem(valeurTuple)
255 valeur,valide=self.node.item.evalValeur(valeurTuple)
256 valide = self.node.item.valideItem(valeur)
260 commentaire="Valeur "+str(valeurTuple)+ " incorrecte : ajout a la liste refuse"
261 commentaire2=self.node.item.infoErreurItem()
262 return valide,commentaire,commentaire2,listeRetour
264 # On valide la liste obtenue
265 encorevalide=self.node.item.valideListePartielle(valeurTuple,listecourante)
266 if not encorevalide :
267 commentaire2=self.node.item.infoErreurListe()
268 return valide,commentaire,commentaire2,listeRetour
269 listeRetour.append(valeurTuple)
270 return valide,commentaire,commentaire2,listeRetour
272 def ajoutNTuple(self,liste):
274 commentaire="Nouvelles valeurs acceptee"
276 print (self.node.item.valideListePartielle)
277 valide=self.node.item.valideListePartielle(None,liste)
279 commentaire2=self.node.item.infoErreurListe()
280 return valide,commentaire,commentaire2,listeRetour
282 def recordValeur(self,liste,dejaValide=True):
283 ancienneVal = self.node.item.getValeur()
284 validite=self.node.item.setValeur(liste)
285 if validite : self.node.item.initModif()
286 if self.node.item.isValid():
287 commentaire = tr("Valeur du mot-cle enregistree")
289 cr = self.node.item.getCr()
290 commentaire = tr("Valeur du mot-cle non autorisee ")+cr.getMessFatal()
291 self.node.item.setValeur(ancienneVal)
292 return validite, commentaire