1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013 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
22 from Accas import PARAMETRE
23 from Extensions.i18n import tr
29 def __init__(self,node,parent) :
33 def TesteUneValeur(self,valeurentree):
35 valeur,validite=self.node.item.eval_valeur(valeurentree)
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)
41 testtype,commentaire = self.node.item.object.verif_type(valeur)
43 return valeur,0,commentaire
45 valide=self.node.item.valide_item(valeur)
46 if type(valide) == types.TupleType:
47 validite,commentaire=valide
52 if not validite and commentaire is None:
53 commentaire = "impossible d'evaluer : %s " %`valeurentree`
54 return valeur, validite, commentaire
56 # ----------------------------------------------------------------------------------------
57 # Methodes utilisees pour la manipulation des items en notation scientifique
59 # ----------------------------------------------------------------------------------------
60 def SetValeurTexte(self,texteValeur) :
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]
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()
80 def GetValeurTexte(self,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)+"'"
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]
93 if string.find(str(valeur),'.') == -1 and string.find(str(valeur),'e') == -1 and string.find(str(valeur),'E'):
94 # aucun '.' n'a ete trouve dans valeur --> on en rajoute un a la fin
95 if (self.is_param(valeur)):
98 val2=eval(str(valeur)+'.')
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))):
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
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
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
128 def AjoutDsDictReelEtape(self):
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]
137 #------------------------------------
138 class PolitiqueUnique(Validation) :
139 #------------------------------------
141 classe servant pour les entrees ne demandant qu un mot clef
143 def __init__(self,node,parent):
144 Validation.__init__(self,node,parent)
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)) :
152 if (s.find('.')== -1 and s.find('e')== -1 and s.find('E')==-1) : s=s+'.'
153 valeur,validite,commentaire =self.TesteUneValeur(s)
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))
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
167 #--------------------------------------
168 class PolitiquePlusieurs(Validation):
169 #--------------------------------------
171 classe servant pour les entrees ne demandant qu un mot clef
173 def __init__(self,node,parent) :
174 #print "ds PolitiquePlusieurs"
181 def AjoutValeurs(self,listevaleur,index,listecourante):
183 commentaire="Nouvelle valeur acceptee"
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
196 for valeur in listevaleur :
197 # On teste le type de la valeur
198 valeurScientifique=valeur
199 valide=self.node.item.valide_item(valeur)
202 valeur,valide=self.node.item.eval_valeur(valeur)
203 valide,commentaire2 = self.node.item.object.verif_type(valeur)
205 #return testtype,commentaire,"",listeRetour
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"
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
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 :
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)
231 listeRetour.append(valeur)
233 return valide,commentaire,commentaire2,listeRetour
235 def AjoutTuple(self,valeurTuple,listecourante):
237 commentaire="Nouvelle valeur acceptee"
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)
246 valeur,valide=self.node.item.eval_valeur(valeurTuple)
247 valide = self.node.item.valide_item(valeur)
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
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