Salome HOME
CCAR: correction d'un probleme de mise a jour de contexte lors d'une insertion
[tools/eficas.git] / Noyau / N_JDC.py
index e7ea93b127c2681e424b9bc827ca9c40b62ffb8e..4068fee866baadd32aa7005fed2653b04be91b00 100644 (file)
@@ -1,4 +1,5 @@
-#@ MODIF N_JDC Noyau  DATE 23/10/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF N_JDC 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 JDC qui sert à interpréter un jeu de commandes
 """
@@ -100,6 +103,7 @@ NONE = None
       self.condition_context={}
       self.index_etape_courante=0
       self.UserError="UserError"
+      self.alea = None
 
    def compile(self):
       """
@@ -109,8 +113,7 @@ NONE = None
       """
       try:
         if self.appli != None : 
-           self.appli.affiche_infos('Compilation du fichier de commandes \
-                                     en cours ...')
+           self.appli.affiche_infos('Compilation du fichier de commandes en cours ...')
         self.proc_compile=compile(self.procedure,self.nom,'exec')
       except SyntaxError,e:
         if CONTEXT.debug : traceback.print_exc()
@@ -152,8 +155,7 @@ NONE = None
                if isinstance(sd,ASSD):self.sds_dict[sdnom]=sd
 
          if self.appli != None : 
-            self.appli.affiche_infos('Interprétation du fichier de \
-                                      commandes en cours ...')
+            self.appli.affiche_infos('Interprétation du fichier de commandes en cours ...')
          # On sauve le contexte pour garder la memoire des constantes
          # En mode edition (EFICAS) ou lors des verifications le contexte 
          # est recalculé
@@ -169,6 +171,7 @@ NONE = None
         # de commandes avant la fin
         # Fonctionnement normal, ne doit pas etre considere comme une erreur
         CONTEXT.unset_current_step()
+        self.traiter_fin_exec('commande')
 
       except AsException,e:
         # une erreur a ete identifiee
@@ -190,6 +193,7 @@ NONE = None
       except self.UserError,exc_val:
         self.traiter_user_exception(exc_val)
         CONTEXT.unset_current_step()
+        self.traiter_fin_exec('commande')
     
       except :
         # erreur inattendue
@@ -204,6 +208,15 @@ NONE = None
         del exc_typ,exc_val,exc_fr
         CONTEXT.unset_current_step()
 
+   def traiter_fin_exec(self,mode,etape=None):
+       """
+          Cette methode realise un traitement final apres l'execution de toutes
+          les commandes en mode commande par commande ou par lot
+          Par defaut il n'y a pas de traitement. Elle doit etre surchargee
+          pour en introduire un
+       """
+       print "FIN D'EXECUTION",mode,etape
+
    def traiter_user_exception(self,exc_val):
        """Cette methode realise un traitement sur les exceptions utilisateur    
           Par defaut il n'y a pas de traitement. La méthode doit etre 
@@ -312,7 +325,7 @@ NONE = None
       """
       if self.appli :
          # Si le JDC est relié à une application maitre, on délègue la recherche
-         file= self.appli.get_file(unite,fic_origine)
+         file,text= self.appli.get_file(unite,fic_origine)
       else:
          file = None
          if unite != None:
@@ -323,9 +336,11 @@ NONE = None
                                " a l unite %s" % unite)
          if not os.path.exists(file):
             raise AsException("%s n'est pas un fichier existant" % unite)
-      fproc=open(file,'r')
-      text=string.replace(fproc.read(),'\r\n','\n')
-      fproc.close()
+         fproc=open(file,'r')
+         text=fproc.read()
+         fproc.close()
+      if file == None : return None,None
+      text=string.replace(text,'\r\n','\n')
       linecache.cache[file]=0,0,string.split(text,'\n'),file
       return file,text
 
@@ -394,9 +409,12 @@ NONE = None
       if index_etape >= self.index_etape_courante:
          # On calcule le contexte en partant du contexte existant
          d=self.current_context
+         if self.index_etape_courante==0 and self.context_ini:
+            d.update(self.context_ini)
          liste_etapes=self.etapes[self.index_etape_courante:index_etape]
       else:
          d=self.current_context={}
+         if self.context_ini:d.update(self.context_ini)
          liste_etapes=self.etapes
 
       for e in liste_etapes:
@@ -409,3 +427,14 @@ NONE = None
 
    def get_global_contexte(self):
       return self.g_context.copy()
+
+   def get_cmd(self,nomcmd):
+      """
+          Méthode pour recuperer la definition d'une commande
+          donnee par son nom dans les catalogues declares
+          au niveau du jdc
+      """
+      for cata in self.cata:
+          if hasattr(cata,nomcmd):
+             return getattr(cata,nomcmd)
+