Salome HOME
correction pour acception de concept liste
[tools/eficas.git] / Noyau / N_MCBLOC.py
index 9792b2c7cdcd07a1023b800b97d723dfbb6162c4..e750c01205050babc756cc4d934a9b9518fda296 100644 (file)
@@ -1,3 +1,26 @@
+#@ 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
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+#                                                                       
+#                                                                       
+# ======================================================================
+
+
 """ 
     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
@@ -61,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
@@ -83,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)