]> SALOME platform Git repositories - tools/eficas.git/blob - Validation/V_MCSIMP.py
Salome HOME
*** empty log message ***
[tools/eficas.git] / Validation / V_MCSIMP.py
1 #@ MODIF V_MCSIMP Validation  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
2 # -*- coding: iso-8859-1 -*-
3 # RESPONSABLE COURTOIS M.COURTOIS
4 #            CONFIGURATION MANAGEMENT OF EDF VERSION
5 # ======================================================================
6 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
7 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
8 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
9 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
10 # (AT YOUR OPTION) ANY LATER VERSION.                                 
11 #
12 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
13 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
14 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
15 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
16 #
17 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
18 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
19 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
20 #                                                                       
21 #                                                                       
22 # ======================================================================
23
24 """
25    Ce module contient la classe mixin MCSIMP qui porte les méthodes
26    nécessaires pour réaliser la validation d'un objet de type MCSIMP
27    dérivé de OBJECT.
28
29    Une classe mixin porte principalement des traitements et est
30    utilisée par héritage multiple pour composer les traitements.
31 """
32 # Modules Python
33 import string,types
34 import traceback
35
36 # Modules EFICAS
37 from Noyau import N_CR
38 from Noyau.N_Exception import AsException
39 from Noyau.N_VALIDATOR import ValError,TypeProtocol,CardProtocol,IntoProtocol
40 from Noyau.N_VALIDATOR import listProto
41
42 class MCSIMP:
43    """
44       COMMENTAIRE CCAR:
45       Cette classe est quasiment identique à la classe originale d'EFICAS
46       a part quelques changements cosmétiques et des chagements pour la
47       faire fonctionner de facon plus autonome par rapport à l'environnement
48       EFICAS
49  
50       A mon avis, il faudrait aller plus loin et réduire les dépendances
51       amont au strict nécessaire.
52
53           - Est il indispensable de faire l'évaluation de la valeur dans le contexte
54             du jdc dans cette classe.
55
56           - Ne pourrait on pas doter les objets en présence des méthodes suffisantes
57             pour éviter les tests un peu particuliers sur GEOM, PARAMETRE et autres. J'ai
58             d'ailleurs modifié la classe pour éviter l'import de GEOM
59    """
60
61    CR=N_CR.CR
62    
63    def __init__(self):
64       self.state='undetermined'
65       self.typeProto=TypeProtocol("type",typ=self.definition.type)
66       self.intoProto=IntoProtocol("into",into=self.definition.into,val_min=self.definition.val_min,val_max=self.definition.val_max)
67       self.cardProto=CardProtocol("card",min=self.definition.min,max=self.definition.max)
68
69    def get_valid(self):
70        if hasattr(self,'valid'):
71           return self.valid
72        else:
73           self.valid=None
74           return None
75
76    def set_valid(self,valid):
77        old_valid=self.get_valid()
78        self.valid = valid
79        self.state = 'unchanged'
80        if not old_valid or old_valid != self.valid :
81            self.init_modif_up()
82
83    def isvalid(self,cr='non'):
84       """
85          Cette méthode retourne un indicateur de validité de l'objet de type MCSIMP
86
87            - 0 si l'objet est invalide
88            - 1 si l'objet est valide
89
90          Le paramètre cr permet de paramétrer le traitement. Si cr == 'oui'
91          la méthode construit également un comte-rendu de validation
92          dans self.cr qui doit avoir été créé préalablement.
93       """
94       if self.state == 'unchanged':
95         return self.valid
96       else:
97         valid = 1
98         v=self.valeur
99         #  verification presence
100         if self.isoblig() and v == None :
101           if cr == 'oui' :
102             self.cr.fatal(string.join(("Mot-clé : ",self.nom," obligatoire non valorisé")))
103           valid = 0
104
105         lval=listProto.adapt(v)
106         if lval is None:
107            valid=0
108            if cr == 'oui' :
109               self.cr.fatal("None n'est pas une valeur autorisée")
110         else:
111            # type,into ...
112            #typeProto=TypeProtocol("type",typ=self.definition.type)
113            #intoProto=IntoProtocol("into",into=self.definition.into,val_min=self.definition.val_min,val_max=self.definition.val_max)
114            #cardProto=CardProtocol("card",min=self.definition.min,max=self.definition.max)
115            #typeProto=self.definition.typeProto
116            #intoProto=self.definition.intoProto
117            #cardProto=self.definition.cardProto
118            typeProto=self.typeProto
119            intoProto=self.intoProto
120            cardProto=self.cardProto
121            if cr == 'oui' :
122                #un cr est demandé : on collecte tous les types d'erreur
123                try:
124                    for val in lval:
125                        typeProto.adapt(val)
126                except ValError,e:
127                    valid=0
128                    self.cr.fatal(str(e))
129                try:
130                    for val in lval:
131                        intoProto.adapt(val)
132                except ValError,e:
133                    valid=0
134                    self.cr.fatal(str(e))
135                try:
136                    cardProto.adapt(lval)
137                except ValError,e:
138                    valid=0
139                    self.cr.fatal(str(e))
140                #
141                # On verifie les validateurs s'il y en a et si necessaire (valid == 1)
142                #
143                if valid and self.definition.validators:
144                    try:
145                        self.definition.validators.convert(lval)
146                    except ValError,e:
147                        self.cr.fatal(string.join(("Mot-clé",self.nom,"invalide :",str(e),"\nCritere de validite:",self.definition.validators.info())))
148                        valid=0
149            else:
150                #si pas de cr demande, on sort a la toute premiere erreur 
151                try:
152                    for val in lval:
153                        typeProto.adapt(val)
154                        intoProto.adapt(val)
155                    cardProto.adapt(lval)
156                    if self.definition.validators:
157                        if hasattr(self.definition.validators,'set_MCSimp'):
158                           self.definition.validators.set_MCSimp(self)
159                        self.definition.validators.convert(lval)
160                except ValError,e:
161                    valid=0
162
163         self.set_valid(valid)
164         return self.valid
165
166    def isoblig(self):
167       """ indique si le mot-clé est obligatoire
168       """
169       return self.definition.statut=='o'
170
171    def init_modif_up(self):
172       """
173          Propage l'état modifié au parent s'il existe et n'est l'objet 
174          lui-meme
175       """
176       if self.parent and self.parent != self :
177         self.parent.state = 'modified'
178
179    def report(self):
180       """ génère le rapport de validation de self """
181       self.cr=self.CR()
182       self.cr.debut = "Mot-clé simple : "+self.nom
183       self.cr.fin = "Fin Mot-clé simple : "+self.nom
184       self.state = 'modified'
185       try:
186         self.isvalid(cr='oui')
187       except AsException,e:
188         if CONTEXT.debug : traceback.print_exc()
189         self.cr.fatal(string.join(("Mot-clé simple : ",self.nom,str(e))))
190       return self.cr
191
192
193
194
195
196