Salome HOME
CCAR: correction d'un probleme de mise a jour de contexte lors d'une insertion
[tools/eficas.git] / Noyau / N_MCCOMPO.py
index 739b73048ea2d4a4cef5550cb986d79481b61371..51ad79608815b8db1949ba43696ecc7cb1d2d2c2 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_MCCOMPO Noyau  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF N_MCCOMPO Noyau  DATE 21/03/2005   AUTEUR DURAND C.DURAND 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -57,7 +57,9 @@ class MCCOMPO(N_OBJECT.OBJECT):
       # 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
@@ -75,6 +77,20 @@ class MCCOMPO(N_OBJECT.OBJECT):
         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
@@ -206,8 +222,11 @@ class MCCOMPO(N_OBJECT.OBJECT):
       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 {}
@@ -225,7 +244,7 @@ class MCCOMPO(N_OBJECT.OBJECT):
          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):
@@ -375,3 +394,24 @@ class MCCOMPO(N_OBJECT.OBJECT):
       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