Salome HOME
Modif V6_4_°
[tools/eficas.git] / InterfaceQT4 / politiquesValidation.py
1 # -*- coding: utf-8 -*-
2 #            CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
9 #
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
14 #
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
18 #
19 #
20 # ======================================================================
21 # Modules Python
22 import types
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'évaluer : %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 #   Méthodes utilisées 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          if "R" in self.node.item.object.definition.type:
81                   clefobj=self.node.item.object.GetNomConcept()
82                   if self.parent.appliEficas.dict_reels.has_key(clefobj):
83                      if self.parent.appliEficas.dict_reels[clefobj].has_key(valeur):
84                         valeurTexte=self.parent.appliEficas.dict_reels[clefobj][valeur]
85          return valeurTexte
86
87   def AjoutDsDictReel(self,texteValeur):
88          # le try except est nécessaire pour saisir les paramétres
89          try :
90             if "R" in self.node.item.object.definition.type:
91                 if str(texteValeur)[0] != "'":
92                    clef=eval(texteValeur)
93                    if str(clef) != str(texteValeur) :
94                       clefobj=self.node.item.object.GetNomConcept()
95                       if not self.parent.appliEficas.dict_reels.has_key(clefobj):
96                           self.parent.appliEficas.dict_reels[clefobj] = {}
97                       self.parent.appliEficas.dict_reels[clefobj][clef]=texteValeur
98                       if clefobj=="" : 
99                          if not self.parent.appliEficas.dict_reels.has_key(self.node.item.object.etape) :
100                             self.parent.appliEficas.dict_reels[self.node.item.object.etape] = {}
101                          self.parent.appliEficas.dict_reels[self.node.item.object.etape][clef]=texteValeur
102                           
103          except:
104           pass
105
106   def AjoutDsDictReelEtape(self):
107       try:
108          if self.parent.appliEficas.dict_reels.has_key(self.node.item.object) :
109             self.parent.appliEficas.dict_reels[self.node.item.sdnom]=self.parent.appliEficas.dict_reels[self.node.item.object]
110             del self.parent.appliEficas.dict_reels[self.node.item.object]
111       except :
112          pass
113
114
115 #------------------------------------
116 class PolitiqueUnique(Validation) :
117 #------------------------------------
118   """
119   classe servant pour les entrees ne demandant qu un mot clef
120   """
121   def __init__(self,node,parent):
122         Validation.__init__(self,node,parent)
123
124   def RecordValeur(self,valeurentree):
125          if self.parent.modified == 'n' : self.parent.init_modif()
126          ancienne_val = self.node.item.get_valeur()
127          valeur,validite,commentaire =self.TesteUneValeur(valeurentree)
128          if validite :
129             validite=self.node.item.set_valeur(valeur)
130             if self.node.item.isvalid():
131                   commentaire = "Valeur du mot-clé enregistrée"
132                   self.SetValeurTexte(str(valeurentree))
133             else:
134                   cr = self.node.item.get_cr()
135                   commentaire =  "Valeur du mot-clé non autorisée "+cr.get_mess_fatal()
136                   self.node.item.set_valeur(ancienne_val)
137          return validite, commentaire 
138
139  
140 #--------------------------------------
141 class PolitiquePlusieurs(Validation):
142 #--------------------------------------
143   """
144   classe servant pour les entrees ne demandant qu un mot clef
145   """
146   def __init__(self,node,parent) :
147          self.node=node
148          self.parent=parent
149
150
151   def AjoutValeurs(self,listevaleur,index,listecourante):
152          listeRetour=[]
153          commentaire="Nouvelle valeur acceptée"
154          commentaire2=""
155          valide=1
156          if listevaleur==None: return
157          if listevaleur=="": return
158          if not( type(listevaleur)  in (types.ListType,types.TupleType)) :
159             listevaleur=tuple(listevaleur)
160          for valeur in listevaleur :
161              # On teste le type de la valeur
162              valeurScientifique=valeur
163              valide=self.node.item.valide_item(valeur)
164              if not valide :
165                 try :
166                    valeur,valide=self.node.item.eval_valeur(valeur)
167                    valide,commentaire = self.node.item.object.verif_type(valeur)
168                 except :
169                    #return testtype,commentaire,"",listeRetour
170                    pass
171              if not valide:
172                 commentaire="Valeur "+str(valeur)+ " incorrecte : ajout à la liste refusé"
173                 commentaire2=self.node.item.info_erreur_item()
174                 return valide,commentaire,commentaire2,listeRetour
175
176              # On valide la liste obtenue
177              encorevalide=self.node.item.valide_liste_partielle(valeur,listecourante)
178              if not encorevalide :
179                 commentaire2=self.node.item.info_erreur_liste()
180                 # On traite le cas ou la liste n est pas valide pour un pb de cardinalite
181                 min,max = self.node.item.GetMinMax()
182                 if len(listecourante) + 1 >= max :
183                    commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
184                    return valide,commentaire,commentaire2,listeRetour
185                 if len(listecourante) + 1 > min :
186                    commentaire=""
187                    return valide,commentaire,commentaire2,listeRetour
188              # On ajoute la valeur testee a la liste courante et a la liste acceptee
189              self.AjoutDsDictReel(valeurScientifique)
190              listecourante.insert(index,valeur)
191              index=index+1
192              listeRetour.append(valeur)
193
194          return valide,commentaire,commentaire2,listeRetour
195
196   def AjoutTuple(self,valeurTuple,index,listecourante):
197          listeRetour=[]
198          commentaire="Nouvelle valeur acceptée"
199          commentaire2=""
200          valide=1
201          if valeurTuple==None: return
202          if valeurTuple==['']: return
203          # On teste le type de la valeur
204          valide=self.node.item.valide_item(valeurTuple)
205          if not valide :
206             try :
207                 valeur,valide=self.node.item.eval_valeur(valeurTuple)
208                 valide = self.node.item.valide_item(valeur)
209             except :
210                 pass
211          if not valide:
212             commentaire="Valeur "+str(valeurTuple)+ " incorrecte : ajout à la liste refusé"
213             commentaire2=self.node.item.info_erreur_item()
214             return valide,commentaire,commentaire2,listeRetour
215
216          # On valide la liste obtenue
217          encorevalide=self.node.item.valide_liste_partielle(valeurTuple,listecourante)
218          if not encorevalide :
219             commentaire2=self.node.item.info_erreur_liste()
220             # On traite le cas ou la liste n est pas valide pour un pb de cardinalite
221             min,max = self.node.item.GetMinMax()
222             if len(listecourante) + 1 >= max :
223                commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
224                return valide,commentaire,commentaire2,listeRetour
225          listeRetour.append(valeurTuple)
226          return valide,commentaire,commentaire2,listeRetour