1 #@ MODIF N_ENTITE Noyau DATE 30/08/2011 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 - 2011 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.
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.
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.
22 # ======================================================================
26 Ce module contient la classe ENTITE qui est la classe de base
27 de toutes les classes de definition d'EFICAS.
36 Classe de base pour tous les objets de definition : mots cles et commandes
37 Cette classe ne contient que des methodes utilitaires
38 Elle ne peut etre instanciee et doit d abord etre specialisee
41 factories={'validator':N_VALIDATOR.validatorFactory}
43 def __init__(self,validators=None):
45 Initialise les deux attributs regles et entites d'une classe derivee
46 : pas de regles et pas de sous-entites.
48 L'attribut regles doit contenir la liste des regles qui s'appliquent
51 L'attribut entites doit contenir le dictionnaires des sous-entites
52 (cle = nom, valeur=objet)
57 self.validators=self.factories['validator'](validators)
59 self.validators=validators
61 def affecter_parente(self):
63 Cette methode a pour fonction de donner un nom et un pere aux
64 sous entites qui n'ont aucun moyen pour atteindre leur parent
66 Il s'agit principalement des mots cles
68 for k,v in self.entites.items():
74 Cette methode sert a valider les attributs de l'objet de definition
76 raise "La methode verif_cata de la classe %s doit etre implementee" % self.__class__.__name__
80 Cette methode doit retourner un objet derive de la classe OBJECT
82 raise "La methode __call__ de la classe %s doit etre implementee" % self.__class__.__name__
86 Cette methode construit pour tous les objets derives de ENTITE un
87 rapport de validation de la definition portee par cet objet
91 for k,v in self.entites.items() :
94 cr.debut = "Debut "+v.__class__.__name__+ ' : ' + k
95 cr.fin = "Fin "+v.__class__.__name__+ ' : ' + k
98 self.cr.fatal("Impossible d'obtenir le rapport de %s %s" %(k,`v`))
99 print "Impossible d'obtenir le rapport de %s %s" %(k,`v`)
103 def verif_cata_regles(self):
105 Cette methode verifie pour tous les objets derives de ENTITE que
106 les objets REGLES associes ne portent que sur des sous-entites
109 for regle in self.regles :
111 for mc in regle.mcs :
112 if not self.entites.has_key(mc) :
116 self.cr.fatal("Argument(s) non permis : %s pour la regle : %s" %(`l`,txt))
118 def check_definition(self, parent):
119 """Verifie la definition d'un objet composite (commande, fact, bloc)."""
120 args = self.entites.copy()
122 for nom, val in args.items():
123 if val.label == 'SIMP':
126 #if val.max != 1 and val.type == 'TXM':
127 #print "#CMD", parent, nom
128 elif val.label == 'FACT':
129 val.check_definition(parent)
132 #assert self.label != 'FACT', \
133 # 'Commande %s : Mot-clef facteur present sous un mot-clef facteur : interdit !' \
138 # seuls les blocs peuvent entrer en conflit avec les mcs du plus haut niveau
139 for nom, val in args.items():
140 if val.label == 'BLOC':
141 mcbloc = val.check_definition(parent)
143 #print "#BLOC", parent, re.sub('\s+', ' ', val.condition)
144 #assert mcs.isdisjoint(mcbloc), "Commande %s : Mot(s)-clef(s) vu(s) plusieurs fois : %s" \
145 # % (parent, tuple(mcs.intersection(mcbloc)))