Salome HOME
modif pour MT
[tools/eficas.git] / InterfaceQT4 / politiquesValidation.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 # Modules Python
21 from __future__ import absolute_import
22 try :
23    from builtins import range
24 except : pass
25
26 import types
27 from Accas import PARAMETRE
28 from Extensions.i18n import tr
29
30
31 #------------------
32 class Validation(object)  :
33 #------------------
34   def __init__(self,node,parent) :
35          self.node=node
36          self.parent=parent
37
38   def testeUneValeur(self,valeurentree):
39          commentaire = None
40          valeur,validite=self.node.item.evalValeur(valeurentree)
41          if not validite :
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) 
45
46          testtype,commentaire = self.node.item.object.verifType(valeur)
47          if not testtype :
48                   return valeur,0,commentaire
49
50          valide=self.node.item.valideItem(valeur)
51          if type(valide) == tuple:
52                  validite,commentaire=valide
53          else :
54                  validite=valide
55                  commentaire=" "
56
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
61
62 # ----------------------------------------------------------------------------------------
63 #   Methodes utilisees pour la manipulation des items en notation scientifique
64 #   a mettre au point
65 # ----------------------------------------------------------------------------------------
66   def setValeurTexte(self,texteValeur) :
67          try :
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]
78                            if 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()
83          except:
84             pass
85
86   def getValeurTexte(self,valeur) :
87          valeurTexte=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)+"'"
92              else : return(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]
98                   else :
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)):
102                            return valeur
103                         else:
104                           try :
105                             val2=eval(str(valeur)+'.')
106                           except :
107                             pass
108          return valeurTexte
109
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))):
113              return 1
114       return 0
115
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
120          try :
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
129                       if clefobj=="" : 
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
133                           
134          except:
135           pass
136
137   def ajoutDsDictReelEtape(self):
138       try:
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]
142       except :
143          pass
144
145
146 #------------------------------------
147 class PolitiqueUnique(Validation) :
148 #------------------------------------
149   """
150   classe servant pour les entrees ne demandant qu un mot clef
151   """
152   def __init__(self,node,parent):
153         Validation.__init__(self,node,parent)
154
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)) :
160             s=valeurentree
161             if (s.find('.')== -1 and s.find('e')== -1 and s.find('E')==-1) : s=s+'.'
162             valeur,validite,commentaire =self.testeUneValeur(s)
163          if validite :
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))
169             else:
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 
174
175  
176 #--------------------------------------
177 class PolitiquePlusieurs(Validation):
178 #--------------------------------------
179   """
180   classe servant pour les entrees ne demandant qu un mot clef
181   """
182   def __init__(self,node,parent) :
183          #print "ds PolitiquePlusieurs"
184          self.node=node
185          self.parent=parent
186          #print self.node
187          #print self.parent
188
189
190   def ajoutValeurs(self,listevaleur,index,listecourante):
191          listeRetour=[]
192          commentaire="Nouvelle valeur acceptee"
193          commentaire2=""
194          valide=1
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
204
205          for valeur in listevaleur :
206              # On teste le type de la valeur
207              valeurScientifique=valeur
208              valide=self.node.item.valideItem(valeur)
209              if not valide :
210                 try :
211                    valeur,valide=self.node.item.evalValeur(valeur)
212                    valide,commentaire2 = self.node.item.object.verifType(valeur)
213                 except :
214                    #return testtype,commentaire,"",listeRetour
215                    pass
216              if not valide:
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"
219                 else :
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
223
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 :
234                    commentaire=""
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)
239              index=index+1
240              listeRetour.append(valeur)
241
242          return valide,commentaire,commentaire2,listeRetour
243
244   def ajoutTuple(self,valeurTuple,listecourante):
245          listeRetour=[]
246          commentaire="Nouvelle valeur acceptee"
247          commentaire2=""
248          valide=1
249          if valeurTuple==None: return
250          if valeurTuple==['']: return
251          # On teste le type de la valeur
252          valide=self.node.item.valideItem(valeurTuple)
253          if not valide :
254             try :
255                 valeur,valide=self.node.item.evalValeur(valeurTuple)
256                 valide = self.node.item.valideItem(valeur)
257             except :
258                 pass
259          if not valide:
260             commentaire="Valeur "+str(valeurTuple)+ " incorrecte : ajout a la liste refuse"
261             commentaire2=self.node.item.infoErreurItem()
262             return valide,commentaire,commentaire2,listeRetour
263
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
271
272   def ajoutNTuple(self,liste):
273          listeRetour=[]
274          commentaire="Nouvelles valeurs acceptee"
275          commentaire2=""
276          print (self.node.item.valideListePartielle)
277          valide=self.node.item.valideListePartielle(None,liste)
278          if not valide :
279             commentaire2=self.node.item.infoErreurListe()
280          return valide,commentaire,commentaire2,listeRetour
281
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")
288          else:
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 
293
294