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