Salome HOME
correction pour acception de concept liste
[tools/eficas.git] / Noyau / N_MCBLOC.py
index 0b05c2ded83be1fdd79e57891875b6108bc7938e..e750c01205050babc756cc4d934a9b9518fda296 100644 (file)
@@ -1,4 +1,5 @@
-#@ MODIF N_MCBLOC Noyau  DATE 27/03/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF N_MCBLOC Noyau  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18,6 +19,8 @@
 #                                                                       
 #                                                                       
 # ======================================================================
+
+
 """ 
     Ce module contient la classe MCBLOC qui sert à controler la valeur
     d'un bloc de mots-clés par rapport à sa définition portée par un objet
@@ -81,15 +84,38 @@ class MCBLOC(N_MCCOMPO.MCCOMPO):
           
       """
       dico={}
-      for v in self.mc_liste:
-        val = v.get_valeur()
-        if type(val)==types.DictionaryType:
-          for i,w in val.items():
-            dico[i]=w
-        else :
-          dico[v.nom]=val
+      for mocle in self.mc_liste:
+        if mocle.isBLOC():
+           # Si mocle est un BLOC, on inclut ses items dans le dictionnaire
+           # représentatif de la valeur de self. Les mots-clés fils de blocs sont
+           # donc remontés au niveau supérieur.
+           dico.update(mocle.get_valeur())
+        else:
+           dico[mocle.nom]=mocle.get_valeur()
+
+      # On rajoute tous les autres mots-clés locaux possibles avec la valeur
+      # par défaut ou None
+      # Pour les mots-clés facteurs, on ne traite que ceux avec statut défaut ('d')
+      # et caché ('c')
+      # On n'ajoute aucune information sur les blocs. Ils n'ont pas de défaut seulement
+      # une condition.
+      for k,v in self.definition.entites.items():
+        if not dico.has_key(k):
+           if v.label == 'SIMP':
+              # Mot clé simple
+              dico[k]=v.defaut
+           elif v.label == 'FACT':
+                if v.statut in ('c','d') :
+                   # Mot clé facteur avec défaut ou caché provisoire
+                   dico[k]=v(val=None,nom=k,parent=self)
+                   # On demande la suppression des pointeurs arrieres
+                   # pour briser les eventuels cycles
+                   dico[k].supprime()
+                else:
+                   dico[k]=None
+
       return dico
-  
+
    def isBLOC(self):
       """
           Indique si l'objet est un BLOC
@@ -103,3 +129,5 @@ class MCBLOC(N_MCCOMPO.MCCOMPO):
       """
       visitor.visitMCBLOC(self)
 
+   def makeobjet(self):
+      return self.definition(val = None,  nom = self.nom,parent = self.parent)