-#@ MODIF N_MCCOMPO Noyau DATE 04/02/2004 AUTEUR CAMBIER S.CAMBIER
+#@ MODIF N_MCCOMPO Noyau DATE 21/03/2005 AUTEUR DURAND C.DURAND
+# -*- coding: iso-8859-1 -*-
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
#
#
# ======================================================================
+
+
"""
Ce module contient la classe MCCOMPO qui sert à factoriser les comportements
des OBJECT composites
# On construit les sous entites presentes ou obligatoires
# 1- les entites présentes dans les arguments et dans la définition
# 2- les entités non présentes dans les arguments, présentes dans la définition avec un défaut
+ # Phase 1.1 : on traite d'abord les SIMP pour enregistrer les mots cles globaux
for k,v in self.definition.entites.items():
+ if v.label != 'SIMP':continue
if args.has_key(k) or v.statut=='o' :
#
# Creation par appel de la methode __call__ de la definition de la sous entite k de self
if args.has_key(k):
del args[k]
+ # Phase 1.2 : on traite les autres entites que SIMP
+ for k,v in self.definition.entites.items():
+ if v.label == 'SIMP':continue
+ if args.has_key(k) or v.statut=='o' :
+ #
+ # Creation par appel de la methode __call__ de la definition de la sous entite k de self
+ # si une valeur existe dans args ou est obligatoire (generique si toutes les
+ # entites ont l attribut statut )
+ #
+ objet=self.definition.entites[k](val=args.get(k,None),nom=k,parent=self)
+ mc_liste.append(objet)
+ if args.has_key(k):
+ del args[k]
+
# Phase 2:
# On construit les objets (en général, blocs) conditionnés par les mots-clés précédemment créés.
# A ce stade, mc_liste ne contient que les fils de l'objet courant
etape = self.get_etape()
if etape :
dict_mc_globaux_fac = self.recherche_mc_globaux_facultatifs()
- dict_mc_globaux_fac.update(etape.mc_globaux)
- if self.jdc : dict_mc_globaux_fac.update(self.jdc.mc_globaux)
+ for k,v in etape.mc_globaux.items():
+ dict_mc_globaux_fac[k]=v.get_valeur()
+ if self.jdc :
+ for k,v in self.jdc.mc_globaux.items():
+ dict_mc_globaux_fac[k]=v.get_valeur()
return dict_mc_globaux_fac
else :
return {}
if v.position != 'global' : continue
if v.statut == 'o':continue
obj = v(val=None,nom=k,parent=etape)
- dico[k]=obj
+ dico[k]=obj.get_valeur()
return dico
def supprime(self):
for child in self.mc_liste:
l.extend(child.get_sd_utilisees())
return l
+
+ def get_sd_mcs_utilisees(self):
+ """
+ Retourne la ou les SD utilisée par self sous forme d'un dictionnaire :
+ . Si aucune sd n'est utilisée, le dictionnaire est vide.
+ . Sinon, les clés du dictionnaire sont les mots-clés derrière lesquels on
+ trouve des sd ; la valeur est la liste des sd attenante.
+ Exemple : { 'VALE_F': [ <Cata.cata.para_sensi instance at 0x9419854>,
+ <Cata.cata.para_sensi instance at 0x941a204> ],
+ 'MODELE': [<Cata.cata.modele instance at 0x941550c>] }
+ """
+ dico = {}
+ for child in self.mc_liste:
+ daux = child.get_sd_mcs_utilisees()
+ for cle in daux.keys():
+ dico[cle] = daux[cle]
+ return dico
+
+ def get_mcs_with_co(self,co):
+ """
+ Cette methode retourne l'objet MCSIMP fils de self
+ qui a le concept co comme valeur.
+ En principe, elle ne doit etre utilisee que pour les concepts
+ instances de la classe CO
+ """
+ l=[]
+ for child in self.mc_liste:
+ l.extend(child.get_mcs_with_co(co))
+ return l
+
+ def get_all_co(self):
+ """
+ Cette methode retourne tous les concepts instances de CO
+ """
+ l=[]
+ for child in self.mc_liste:
+ l.extend(child.get_all_co())
+ return l