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 4f6952906d9642fe36cb65b2b19c8ed7fa63b551..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 
@@ -237,17 +250,17 @@ NONE = None
 
    def create_sdprod(self,etape,nomsd):
       """ 
-                  Intention : Cette methode doit fabriquer le concept produit retourne
+          Intention : Cette methode doit fabriquer le concept produit retourne
                   par l'etape etape et le nommer.
                   Elle est appelée à l'initiative de l'etape
                   pendant le processus de construction de cette etape : 
-                    methode __call__ de la classe CMD (OPER ou MACRO)
+                    methode __call__ de la classe CMD (OPER ou MACRO)
                   Ce travail est réalisé par le contexte supérieur 
                   (etape.parent) car dans certains cas, le concept ne doit 
                   pas etre fabriqué mais l'etape doit simplement utiliser 
                   un concept préexistant.
-                      1.  etape.reuse != None : le concept est réutilisé
-                      2.  l'étape appartient à une macro qui a déclaré un 
+                  Cas 1 : etape.reuse != None : le concept est réutilisé
+                  Cas 2 : l'étape appartient à une macro qui a déclaré un 
                           concept de sortie qui doit etre produit par cette 
                           etape.
                   Dans le cas du JDC, le deuxième cas ne peut pas se produire.
@@ -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)
+