Salome HOME
mse a jour du 07/03/2016 pour sauvegarde
[tools/eficas.git] / InterfaceQT4 / politiquesValidation.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013   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 import types, string
22 from Accas import PARAMETRE
23 from Extensions.i18n import tr
24
25
26 #------------------
27 class Validation  :
28 #------------------
29   def __init__(self,node,parent) :
30          self.node=node
31          self.parent=parent
32
33   def TesteUneValeur(self,valeurentree):
34          commentaire = None
35          valeur,validite=self.node.item.eval_valeur(valeurentree)
36          if not validite :
37                   commentaire = "impossible d'evaluer : %s " %`valeurentree`
38                   return valeur,validite,commentaire
39          if self.node.item.wait_TXM() and type(valeur) not in types.StringTypes : valeur=str(valeur) 
40
41          testtype,commentaire = self.node.item.object.verif_type(valeur)
42          if not testtype :
43                   return valeur,0,commentaire
44
45          valide=self.node.item.valide_item(valeur)
46          if type(valide) == types.TupleType:
47                  validite,commentaire=valide
48          else :
49                  validite=valide
50                  commentaire=" "
51
52          if not validite and commentaire is None:
53                   commentaire = "impossible d'évaluer : %s " %`valeurentree`
54          return valeur, validite, commentaire
55
56 # ----------------------------------------------------------------------------------------
57 #   Methodes utilisees pour la manipulation des items en notation scientifique
58 #   a mettre au point
59 # ----------------------------------------------------------------------------------------
60   def SetValeurTexte(self,texteValeur) :
61          try :
62                   if "R" in self.node.item.object.definition.type:
63                      if texteValeur[0] != "'":
64                         clef=eval(texteValeur)
65                         if str(clef) != str(texteValeur) :
66                            self.node.item.object.init_modif()
67                            clefobj=self.node.item.object.GetNomConcept()
68                            if not self.parent.appliEficas.dict_reels.has_key(clefobj):
69                               self.parent.appliEficas.dict_reels[clefobj] = {}
70                            self.parent.appliEficas.dict_reels[clefobj][clef]=texteValeur
71                            self.parent.appliEficas.dict_reels[clefobj]
72                            if clefobj=="" : 
73                               if not self.parent.appliEficas.dict_reels.has_key(self.node.item.object.etape) :
74                                  self.parent.appliEficas.dict_reels[self.node.item.object.etape] = {}
75                               self.parent.appliEficas.dict_reels[self.node.item.object.etape][clef]=texteValeur
76                            self.node.item.object.fin_modif()
77          except:
78             pass
79
80   def GetValeurTexte(self,valeur) :
81          valeurTexte=valeur
82          if valeur == None : return valeur
83          from decimal import Decimal
84          if  isinstance(valeur,Decimal) :
85              if self.node.wait_TXM() and not self.is_param(valeur) : return "'"+str(valeur)+"'"
86              else : return(valeur)
87          if "R" in self.node.item.object.definition.type:
88                   clefobj=self.node.item.object.GetNomConcept()
89                   if self.parent.appliEficas.dict_reels.has_key(clefobj):
90                      if self.parent.appliEficas.dict_reels[clefobj].has_key(valeur):
91                         valeurTexte=self.parent.appliEficas.dict_reels[clefobj][valeur]
92                   else :
93                      if string.find(str(valeur),'.') == -1 and string.find(str(valeur),'e') == -1 and string.find(str(valeur),'E'):
94                      # aucun '.' n'a été trouvé dans valeur --> on en rajoute un a la fin
95                         if (self.is_param(valeur)):
96                            return valeur
97                         else:
98                           val2=eval(str(valeur)+'.')
99          return valeurTexte
100
101   def is_param(self,valeur) :
102       for param in self.node.item.jdc.params:
103           if ((repr(param) == repr(valeur)) or (str(param)==str(valeur))):
104              return 1
105       return 0
106
107   def AjoutDsDictReel(self,texteValeur):
108          # le try except est necessaire pour saisir les parametres
109          # on enleve l erreur de saisie 00 pour 0
110          if str(texteValeur)== '00' : return
111          try :
112             if "R" in self.node.item.object.definition.type:
113                 if str(texteValeur)[0] != "'":
114                    clef=eval(texteValeur)
115                    if str(clef) != str(texteValeur) :
116                       clefobj=self.node.item.object.GetNomConcept()
117                       if not self.parent.appliEficas.dict_reels.has_key(clefobj):
118                           self.parent.appliEficas.dict_reels[clefobj] = {}
119                       self.parent.appliEficas.dict_reels[clefobj][clef]=texteValeur
120                       if clefobj=="" : 
121                          if not self.parent.appliEficas.dict_reels.has_key(self.node.item.object.etape) :
122                             self.parent.appliEficas.dict_reels[self.node.item.object.etape] = {}
123                          self.parent.appliEficas.dict_reels[self.node.item.object.etape][clef]=texteValeur
124                           
125          except:
126           pass
127
128   def AjoutDsDictReelEtape(self):
129       try:
130          if self.parent.appliEficas.dict_reels.has_key(self.node.item.object) :
131             self.parent.appliEficas.dict_reels[self.node.item.sdnom]=self.parent.appliEficas.dict_reels[self.node.item.object]
132             del self.parent.appliEficas.dict_reels[self.node.item.object]
133       except :
134          pass
135
136
137 #------------------------------------
138 class PolitiqueUnique(Validation) :
139 #------------------------------------
140   """
141   classe servant pour les entrees ne demandant qu un mot clef
142   """
143   def __init__(self,node,parent):
144         Validation.__init__(self,node,parent)
145
146   def RecordValeur(self,valeurentree):
147          if self.parent.modified == 'n' : self.parent.init_modif()
148          ancienne_val = self.node.item.get_valeur()
149          valeur,validite,commentaire =self.TesteUneValeur(valeurentree)
150          if validite and ('R' in self.node.item.object.definition.type) and not(isinstance(valeur,PARAMETRE)) :
151             s=valeurentree
152             if (s.find('.')== -1 and s.find('e')== -1 and s.find('E')==-1) : s=s+'.'
153             valeur,validite,commentaire =self.TesteUneValeur(s)
154          if validite :
155             validite=self.node.item.set_valeur(valeur)
156             if self.node.item.isvalid():
157                   commentaire = tr("Valeur du mot-cle enregistree")
158                   #commentaire = "Valeur du mot-cle enregistree"
159                   self.SetValeurTexte(str(valeurentree))
160             else:
161                   cr = self.node.item.get_cr()
162                   commentaire =  tr("Valeur du mot-cle non autorisee ")+cr.get_mess_fatal()
163                   self.node.item.set_valeur(ancienne_val)
164          return validite, commentaire 
165
166  
167 #--------------------------------------
168 class PolitiquePlusieurs(Validation):
169 #--------------------------------------
170   """
171   classe servant pour les entrees ne demandant qu un mot clef
172   """
173   def __init__(self,node,parent) :
174          #print "ds PolitiquePlusieurs"
175          self.node=node
176          self.parent=parent
177          #print self.node
178          #print self.parent
179
180
181   def AjoutValeurs(self,listevaleur,index,listecourante):
182          listeRetour=[]
183          commentaire="Nouvelle valeur acceptée"
184          commentaire2=""
185          valide=1
186          if listevaleur==None: return
187          if listevaleur=="": return
188          if not( type(listevaleur)  in (types.ListType,types.TupleType)) :
189             listevaleur=tuple(listevaleur)
190          # on verifie que la cardinalite max n a pas ete atteinte
191          min,max = self.node.item.GetMinMax()
192          if len(listecourante) + len(listevaleur) > max :
193             commentaire="La liste atteint le nombre maximum d'elements : "+ str(max) +" ,ajout refuse"
194             return False,commentaire,commentaire2,listeRetour
195
196          for valeur in listevaleur :
197              # On teste le type de la valeur
198              valeurScientifique=valeur
199              valide=self.node.item.valide_item(valeur)
200              if not valide :
201                 try :
202                    valeur,valide=self.node.item.eval_valeur(valeur)
203                    valide,commentaire2 = self.node.item.object.verif_type(valeur)
204                 except :
205                    #return testtype,commentaire,"",listeRetour
206                    pass
207              if not valide:
208                 if commentaire.find("On attend un chaine") > 1 :
209                    commentaire="Valeur "+str(valeur)+ " incorrecte : ajout a la liste refuse: On attend une chaine de caracteres < 8"
210                 else :
211                    commentaire="Valeur "+str(valeur)+ " incorrecte : ajout a la liste refuse"
212                 if commentaire2== "" :commentaire2=self.node.item.info_erreur_item()
213                 return valide,commentaire,commentaire2,listeRetour
214
215              # On valide la liste obtenue
216              encorevalide=self.node.item.valide_liste_partielle(valeur,listecourante)
217              if not encorevalide :
218                 commentaire2=self.node.item.info_erreur_liste()
219                 # On traite le cas ou la liste n est pas valide pour un pb de cardinalite
220                 min,max = self.node.item.GetMinMax()
221                 if len(listecourante) + 1 >= max :
222                    commentaire="La liste atteint le nombre maximum d'elements : "+ str(max) +" ,ajout refuse"
223                    return valide,commentaire,commentaire2,listeRetour
224                 if len(listecourante) + 1 > min :
225                    commentaire=""
226                    return valide,commentaire,commentaire2,listeRetour
227              # On ajoute la valeur testee a la liste courante et a la liste acceptee
228              self.AjoutDsDictReel(valeurScientifique)
229              listecourante.insert(index,valeur)
230              index=index+1
231              listeRetour.append(valeur)
232
233          return valide,commentaire,commentaire2,listeRetour
234
235   def AjoutTuple(self,valeurTuple,listecourante):
236          listeRetour=[]
237          commentaire="Nouvelle valeur acceptee"
238          commentaire2=""
239          valide=1
240          if valeurTuple==None: return
241          if valeurTuple==['']: return
242          # On teste le type de la valeur
243          valide=self.node.item.valide_item(valeurTuple)
244          if not valide :
245             try :
246                 valeur,valide=self.node.item.eval_valeur(valeurTuple)
247                 valide = self.node.item.valide_item(valeur)
248             except :
249                 pass
250          if not valide:
251             commentaire="Valeur "+str(valeurTuple)+ " incorrecte : ajout a la liste refuse"
252             commentaire2=self.node.item.info_erreur_item()
253             return valide,commentaire,commentaire2,listeRetour
254
255          # On valide la liste obtenue
256          encorevalide=self.node.item.valide_liste_partielle(valeurTuple,listecourante)
257          if not encorevalide :
258             commentaire2=self.node.item.info_erreur_liste()
259             return valide,commentaire,commentaire2,listeRetour
260          listeRetour.append(valeurTuple)
261          return valide,commentaire,commentaire2,listeRetour