1 # -*- coding: iso-8859-1 -*-
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 Ce module contient la classe mixin MCSIMP qui porte les méthodes
23 nécessaires pour réaliser la validation d'un objet de type MCSIMP
26 Une classe mixin porte principalement des traitements et est
27 utilisée par héritage multiple pour composer les traitements.
33 from Noyau import N_CR
34 from Noyau.N_Exception import AsException
35 from Noyau.N_VALIDATOR import ValError,TypeProtocol,CardProtocol,IntoProtocol
36 from Noyau.N_VALIDATOR import listProto
37 from Noyau.strfunc import ufmt
42 Cette classe est quasiment identique à la classe originale d'EFICAS
43 a part quelques changements cosmétiques et des chagements pour la
44 faire fonctionner de facon plus autonome par rapport à l'environnement
47 A mon avis, il faudrait aller plus loin et réduire les dépendances
48 amont au strict nécessaire.
50 - Est il indispensable de faire l'évaluation de la valeur dans le contexte
51 du jdc dans cette classe.
53 - Ne pourrait on pas doter les objets en présence des méthodes suffisantes
54 pour éviter les tests un peu particuliers sur GEOM, PARAMETRE et autres. J'ai
55 d'ailleurs modifié la classe pour éviter l'import de GEOM
61 self.state='undetermined'
62 self.typeProto=TypeProtocol("type",typ=self.definition.type)
63 self.intoProto=IntoProtocol("into",into=self.definition.into,val_min=self.definition.val_min,val_max=self.definition.val_max)
64 self.cardProto=CardProtocol("card",min=self.definition.min,max=self.definition.max)
67 if hasattr(self,'valid'):
73 def set_valid(self,valid):
74 old_valid=self.get_valid()
76 self.state = 'unchanged'
77 if not old_valid or old_valid != self.valid :
80 def isvalid(self,cr='non'):
82 Cette méthode retourne un indicateur de validité de l'objet de type MCSIMP
84 - 0 si l'objet est invalide
85 - 1 si l'objet est valide
87 Le paramètre cr permet de paramétrer le traitement. Si cr == 'oui'
88 la méthode construit également un comte-rendu de validation
89 dans self.cr qui doit avoir été créé préalablement.
91 if self.state == 'unchanged':
96 # verification presence
97 if self.isoblig() and v == None :
99 self.cr.fatal(_(u"Mot-clé : %s obligatoire non valorisé"), self.nom)
102 lval=listProto.adapt(v)
103 #Pour tenir compte des Tuples
104 if hasattr(self.definition.type[0],'ntuple') :
106 if not (type(lval[0]) is tuple) : lval=(lval,)
112 self.cr.fatal(_(u"None n'est pas une valeur autorisée"))
115 #typeProto=TypeProtocol("type",typ=self.definition.type)
116 #intoProto=IntoProtocol("into",into=self.definition.into,val_min=self.definition.val_min,val_max=self.definition.val_max)
117 #cardProto=CardProtocol("card",min=self.definition.min,max=self.definition.max)
118 #typeProto=self.definition.typeProto
119 #intoProto=self.definition.intoProto
120 #cardProto=self.definition.cardProto
121 typeProto=self.typeProto
122 intoProto=self.intoProto
123 cardProto=self.cardProto
125 #un cr est demandé : on collecte tous les types d'erreur
138 #self.cr.fatal(unicode(e))
140 cardProto.adapt(lval)
144 #self.cr.fatal(unicode(e))
146 # On verifie les validateurs s'il y en a et si necessaire (valid == 1)
148 if valid and self.definition.validators:
150 self.definition.validators.convert(lval)
152 self.cr.fatal(_(u"Mot-clé %s invalide : %s\nCritère de validité: %s"),
153 self.nom, str(e), self.definition.validators.info())
156 #si pas de cr demande, on sort a la toute premiere erreur
161 cardProto.adapt(lval)
162 if self.definition.validators:
163 if hasattr(self.definition.validators,'set_MCSimp'):
164 self.definition.validators.set_MCSimp(self)
165 self.definition.validators.convert(lval)
169 self.set_valid(valid)
173 """ indique si le mot-clé est obligatoire
175 return self.definition.statut=='o'
177 def init_modif_up(self):
179 Propage l'état modifié au parent s'il existe et n'est l'objet
182 if self.parent and self.parent != self :
183 self.parent.state = 'modified'
186 """ génère le rapport de validation de self """
188 self.cr.debut = u"Mot-clé simple : "+self.nom
189 self.cr.fin = u"Fin Mot-clé simple : "+self.nom
190 self.state = 'modified'
192 self.isvalid(cr='oui')
193 except AsException,e:
194 if CONTEXT.debug : traceback.print_exc()
195 self.cr.fatal(_(u"Mot-clé simple : %s %s"), self.nom, e)