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