Salome HOME
*** empty log message ***
[tools/eficas.git] / Validation / V_MCCOMPO.py
1 #@ MODIF V_MCCOMPO 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 """
26    Ce module contient la classe  de base MCCOMPO qui sert à factoriser
27    les traitements des objets composites de type OBJECT
28 """
29 # Modules Python
30 import string,types
31 import traceback
32
33 # Modules EFICAS
34 from Noyau import N_CR
35 from Noyau.N_Exception import AsException
36
37 class MCCOMPO:
38    """
39        L'attribut mc_liste a été créé par une classe dérivée de la 
40        classe MCCOMPO du Noyau
41    """
42
43    CR=N_CR.CR
44
45    def __init__(self):
46       self.state='undetermined'
47
48    def init_modif_up(self):
49       """
50          Propage l'état modifié au parent s'il existe et n'est pas l'objet
51          lui-meme
52       """
53       if self.parent and self.parent != self :
54         self.parent.state = 'modified'
55
56    def report(self):
57       """ 
58           Génère le rapport de validation de self 
59       """
60       self.cr=self.CR()
61       self.cr.debut = self.txt_nat+self.nom
62       self.cr.fin = "Fin "+self.txt_nat+self.nom
63       for child in self.mc_liste:
64         self.cr.add(child.report())
65       self.state = 'modified'
66       try:
67         self.isvalid(cr='oui')
68       except AsException,e:
69         if CONTEXT.debug : traceback.print_exc()
70         self.cr.fatal(string.join((self.txt_nat,self.nom,str(e))))
71       return self.cr
72
73    def verif_regles(self):
74       """ 
75          A partir du dictionnaire des mots-clés présents, vérifie si les règles 
76          de self sont valides ou non.
77
78          Retourne une string et un booléen :
79
80            - texte = la string contient le message d'erreur de la (les) règle(s) violée(s) ('' si aucune)
81
82            - testglob = booléen 1 si toutes les règles OK, 0 sinon 
83       """
84       #dictionnaire=self.dict_mc_presents(restreint='oui')
85       dictionnaire=self.dict_mc_presents(restreint='non') # On verifie les regles avec les defauts affectés
86       texte=''
87       testglob = 1
88       for r in self.definition.regles:
89         erreurs,test=r.verif(dictionnaire)
90         testglob = testglob*test
91         if erreurs != '':
92           if len(texte) > 1 :
93             texte=texte+'\n'+erreurs
94           else :
95             texte = texte + erreurs
96       return texte,testglob
97
98    def dict_mc_presents(self,restreint='non'):
99       """ 
100           Retourne le dictionnaire {mocle : objet} construit à partir de self.mc_liste
101           Si restreint == 'non' : on ajoute tous les mots-clés simples du catalogue qui ont
102           une valeur par défaut
103           Si restreint == 'oui' : on ne prend que les mots-clés effectivement entrés par
104           l'utilisateur (cas de la vérification des règles)
105       """
106       dico={}
107       # on ajoute les couples {nom mot-clé:objet mot-clé} effectivement présents
108       for v in self.mc_liste:
109         if v == None : continue
110         k=v.nom
111         dico[k]=v
112       if restreint == 'oui' : return dico
113       # Si restreint != 'oui',
114       # on ajoute les couples {nom mot-clé:objet mot-clé} des mots-clés simples
115       # possibles pour peu qu'ils aient une valeur par défaut
116       for k,v in self.definition.entites.items():
117         if v.label != 'SIMP' : continue
118         if not v.defaut : continue
119         if not dico.has_key(k):
120           dico[k]=v(nom=k,val=None,parent=self)
121       #on ajoute l'objet detenteur de regles pour des validations plus sophistiquees (a manipuler avec precaution)
122       dico["self"]=self
123       return dico
124
125
126