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