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