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 Extensions.i18n import tr
28 def __init__(self,node,parent) :
32 def TesteUneValeur(self,valeurentree):
34 valeur,validite=self.node.item.eval_valeur(valeurentree)
36 commentaire = "impossible d'evaluer : %s " %`valeurentree`
37 return valeur,validite,commentaire
39 testtype,commentaire = self.node.item.object.verif_type(valeur)
41 return valeur,0,commentaire
43 valide=self.node.item.valide_item(valeur)
44 if type(valide) == types.TupleType:
45 validite,commentaire=valide
50 if not validite and commentaire is None:
51 commentaire = "impossible d'évaluer : %s " %`valeurentree`
52 return valeur, validite, commentaire
54 # ----------------------------------------------------------------------------------------
55 # Methodes utilisees pour la manipulation des items en notation scientifique
57 # ----------------------------------------------------------------------------------------
58 def SetValeurTexte(self,texteValeur) :
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]
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()
78 def GetValeurTexte(self,valeur) :
80 from decimal import Decimal
81 if isinstance(valeur,Decimal) :
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]
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)):
96 val2=eval(str(valeur)+'.')
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))):
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
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
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
126 def AjoutDsDictReelEtape(self):
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]
135 #------------------------------------
136 class PolitiqueUnique(Validation) :
137 #------------------------------------
139 classe servant pour les entrees ne demandant qu un mot clef
141 def __init__(self,node,parent):
142 Validation.__init__(self,node,parent)
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)
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))
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
161 #--------------------------------------
162 class PolitiquePlusieurs(Validation):
163 #--------------------------------------
165 classe servant pour les entrees ne demandant qu un mot clef
167 def __init__(self,node,parent) :
168 print "ds PolitiquePlusieurs"
175 def AjoutValeurs(self,listevaleur,index,listecourante):
177 commentaire="Nouvelle valeur acceptée"
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
190 for valeur in listevaleur :
191 # On teste le type de la valeur
192 valeurScientifique=valeur
193 valide=self.node.item.valide_item(valeur)
196 valeur,valide=self.node.item.eval_valeur(valeur)
197 valide,commentaire2 = self.node.item.object.verif_type(valeur)
199 #return testtype,commentaire,"",listeRetour
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"
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
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 :
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)
225 listeRetour.append(valeur)
227 return valide,commentaire,commentaire2,listeRetour
229 def AjoutTuple(self,valeurTuple,index,listecourante):
231 commentaire="Nouvelle valeur acceptee"
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)
240 valeur,valide=self.node.item.eval_valeur(valeurTuple)
241 valide = self.node.item.valide_item(valeur)
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
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"
258 # return valide,commentaire,commentaire2,listeRetour
259 listeRetour.append(valeurTuple)
260 return valide,commentaire,commentaire2,listeRetour