Salome HOME
PN pb avec les copier/coller
[tools/eficas.git] / Validation / V_MCCOMPO.py
1 #@ MODIF V_MCCOMPO Validation  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
2 #            CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
8 # (AT YOUR OPTION) ANY LATER VERSION.                                 
9 #
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
14 #
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
17 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
18 #                                                                       
19 #                                                                       
20 # ======================================================================
21 """
22    Ce module contient la classe  de base MCCOMPO qui sert à factoriser
23    les traitements des objets composites de type OBJECT
24 """
25 # Modules Python
26 import string,types
27 import traceback
28
29 # Modules EFICAS
30 from Noyau import N_CR
31 from Noyau.N_Exception import AsException
32
33 class MCCOMPO:
34    """
35        L'attribut mc_liste a été créé par une classe dérivée de la 
36        classe MCCOMPO du Noyau
37    """
38
39    CR=N_CR.CR
40
41    def __init__(self):
42       self.state='undetermined'
43
44    def init_modif_up(self):
45       """
46          Propage l'état modifié au parent s'il existe et n'est pas l'objet
47          lui-meme
48       """
49       if self.parent and self.parent != self :
50         self.parent.state = 'modified'
51
52    def report(self):
53       """ 
54           Génère le rapport de validation de self 
55       """
56       self.cr=self.CR()
57       self.cr.debut = self.txt_nat+self.nom
58       self.cr.fin = "Fin "+self.txt_nat+self.nom
59       for child in self.mc_liste:
60         self.cr.add(child.report())
61       self.state = 'modified'
62       try:
63         self.isvalid(cr='oui')
64       except AsException,e:
65         if CONTEXT.debug : traceback.print_exc()
66         self.cr.fatal(string.join((self.txt_nat,self.nom,str(e))))
67       return self.cr
68
69    def verif_regles(self):
70       """ 
71          A partir du dictionnaire des mots-clés présents, vérifie si les règles 
72          de self sont valides ou non.
73
74          Retourne une string et un booléen :
75
76            - texte = la string contient le message d'erreur de la (les) règle(s) violée(s) ('' si aucune)
77
78            - testglob = booléen 1 si toutes les règles OK, 0 sinon 
79       """
80       #dictionnaire=self.dict_mc_presents(restreint='oui')
81       dictionnaire=self.dict_mc_presents(restreint='non') # On verifie les regles avec les defauts affectés
82       texte=''
83       testglob = 1
84       for r in self.definition.regles:
85         erreurs,test=r.verif(dictionnaire)
86         testglob = testglob*test
87         if erreurs != '':
88           if len(texte) > 1 :
89             texte=texte+'\n'+erreurs
90           else :
91             texte = texte + erreurs
92       return texte,testglob
93
94    def dict_mc_presents(self,restreint='non'):
95       """ 
96           Retourne le dictionnaire {mocle : objet} construit à partir de self.mc_liste
97           Si restreint == 'non' : on ajoute tous les mots-clés simples du catalogue qui ont
98           une valeur par défaut
99           Si restreint == 'oui' : on ne prend que les mots-clés effectivement entrés par
100           l'utilisateur (cas de la vérification des règles)
101       """
102       dico={}
103       # on ajoute les couples {nom mot-clé:objet mot-clé} effectivement présents
104       for v in self.mc_liste:
105         if v == None : continue
106         k=v.nom
107         dico[k]=v
108       if restreint == 'oui' : return dico
109       # Si restreint != 'oui',
110       # on ajoute les couples {nom mot-clé:objet mot-clé} des mots-clés simples
111       # possibles pour peu qu'ils aient une valeur par défaut
112       for k,v in self.definition.entites.items():
113         if v.label != 'SIMP' : continue
114         if not v.defaut : continue
115         if not dico.has_key(k):
116           dico[k]=v(nom=k,val=None,parent=self)
117       return dico
118
119
120