Salome HOME
F.R: -modifs procédure d'installation et suppression de code_aster.gif
[tools/eficas.git] / Noyau / N_ENTITE.py
1 """ 
2     Ce module contient la classe ENTITE qui est la classe de base
3     de toutes les classes de definition d'EFICAS.
4 """
5
6 import N_CR
7
8 class ENTITE:
9    """
10       Classe de base pour tous les objets de definition : mots cles et commandes
11       Cette classe ne contient que des methodes utilitaires
12       Elle ne peut etre instanciee et doit d abord etre specialisee
13    """
14    CR=N_CR.CR
15
16    def __init__(self):
17       """
18          Initialise les deux attributs regles et entites d'une classe dérivée
19          à : pas de règles et pas de sous-entités.
20         
21          L'attribut regles doit contenir la liste des regles qui s'appliquent 
22          sur ses sous-entités
23
24          L'attribut entités doit contenir le dictionnaires des sous-entités 
25          (clé = nom, valeur=objet)
26       """
27       self.regles=()
28       self.entites={}
29
30    def affecter_parente(self):
31       """
32           Cette methode a pour fonction de donner un nom et un pere aux
33           sous entités qui n'ont aucun moyen pour atteindre leur parent 
34           directement
35           Il s'agit principalement des mots cles 
36       """
37       for k,v in self.entites.items():
38         v.pere = self
39         v.nom = k
40
41    def verif_cata(self):
42       """
43           Cette methode sert à valider les attributs de l'objet de définition
44       """
45       raise "La méthode verif_cata de la classe %s doit etre implémentée" % self.__class__.__name__
46
47    def __call__(self):
48       """
49           Cette methode doit retourner un objet dérivé de la classe OBJECT
50       """
51       raise "La méthode __call__ de la classe %s doit etre implémentée" % self.__class__.__name__
52
53    def report(self):
54       """
55          Cette méthode construit pour tous les objets dérivés de ENTITE un 
56          rapport de validation de la définition portée par cet objet
57       """
58       self.cr = self.CR()
59       self.verif_cata()
60       for k,v in self.entites.items() :
61          try :
62             cr = v.report()
63             cr.debut = "Début "+v.__class__.__name__+ ' : ' + k
64             cr.fin = "Fin "+v.__class__.__name__+ ' : ' + k
65             self.cr.add(cr)
66          except:
67             self.cr.fatal("Impossible d'obtenir le rapport de %s %s" %(k,`v`))
68             print "Impossible d'obtenir le rapport de %s %s" %(k,`v`)
69             print "père =",self
70       return self.cr
71
72    def verif_cata_regles(self):
73       """
74          Cette méthode vérifie pour tous les objets dérivés de ENTITE que 
75          les objets REGLES associés ne portent que sur des sous-entités 
76          existantes
77       """
78       for regle in self.regles :
79         l=[]
80         for mc in regle.mcs :
81           if not self.entites.has_key(mc) :
82             l.append(mc)
83         if l != [] :
84           txt = str(regle)
85           self.cr.fatal("Argument(s) non permis : %s pour la règle : %s" %(`l`,txt))
86
87