Salome HOME
PN bug notation scientifique
[tools/eficas.git] / Extensions / jdc_include.py
index b24069378fe51bfc2170cce5a4c86226365a6340..65c3bf1050eae25c1c0f5100a3dec1e74a11f955 100644 (file)
@@ -1,3 +1,24 @@
+# -*- coding: utf-8 -*-
+#            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 JDC_INCLUDE qui sert a inclure
    dans un jeu de commandes une partie de jeu de commandes
@@ -13,7 +34,8 @@ class JDC_POURSUITE(JDC):
    def __init__(self,definition=None,procedure=None,cata=None,
                      cata_ord_dico=None,parent=None,
                      nom='SansNom',appli=None,context_ini=None,
-                     jdc_pere=None,etape_include=None,prefix_include=None,**args):
+                     jdc_pere=None,etape_include=None,prefix_include=None,
+                     recorded_units=None,old_recorded_units=None,**args):
 
       JDC.__init__(self, definition=definition,
                          procedure=procedure,
@@ -28,6 +50,8 @@ class JDC_POURSUITE(JDC):
       self.jdc_pere=jdc_pere
       self.etape_include=etape_include
       self.prefix_include=prefix_include
+      if recorded_units is not None:self.recorded_units=recorded_units
+      if old_recorded_units is not None:self.old_recorded_units=old_recorded_units
 
    def NommerSdprod(self,sd,sdnom,restrict='non'):
       """
@@ -35,21 +59,21 @@ class JDC_POURSUITE(JDC):
           non utilise
           Ajoute un prefixe s'il est specifie (INCLUDE_MATERIAU)
           Si le nom est deja utilise, leve une exception
-          Met le concept créé dans le concept global g_context
+          Met le concept créé dans le contexe global g_context
       """
       if self.prefix_include:
           if sdnom != self.prefix_include:sdnom=self.prefix_include+sdnom
       o=self.sds_dict.get(sdnom,None)
       if isinstance(o,ASSD):
          raise AsException("Nom de concept deja defini : %s" % sdnom)
-      # Il faut verifier en plus que le jdc_pere apres l'etape etape_include
-      # ne contient pas deja un concept de ce nom
 
-      mysd= self.jdc_pere.get_sd_apres_etape(sdnom,etape=self.etape_include)
-      if mysd:
-      #if self.jdc_pere.get_sd_apres_etape(sdnom,etape=self.etape_include):
+      # On pourrait verifier que le jdc_pere apres l'etape etape_include
+      # ne contient pas deja un concept de ce nom
+      #if self.jdc_pere.get_sd_apres_etape_avec_detruire(sdnom,etape=self.etape_include):
          # Il existe un concept apres self => impossible d'inserer
-         raise AsException("Nom de concept deja defini : %s" % sdnom)
+      #   raise AsException("Nom de concept deja defini : %s" % sdnom)
+      # On a choisi de ne pas faire ce test ici mais de le faire en bloc
+      # si necessaire apres en appelant la methode verif_contexte
 
       # ATTENTION : Il ne faut pas ajouter sd dans sds car il s y trouve deja.
       # Ajoute a la creation (appel de reg_sd).
@@ -60,6 +84,33 @@ class JDC_POURSUITE(JDC):
       if restrict == 'non':
          self.g_context[sdnom]=sd
 
+   def get_verif_contexte(self):
+      j_context=self.get_contexte_avant(None)
+      self.verif_contexte(j_context)
+      return j_context
+
+   def verif_contexte(self,context):
+      """
+         Cette methode verifie si le contexte passé en argument (context)
+         peut etre inséré dans le jdc pere de l'include.
+         Elle verifie que les concepts contenus dans ce contexte n'entrent
+         pas en conflit avec les concepts produits dans le jdc pere
+         apres l'include.
+         Si le contexte ne peut pas etre inséré, la méthode leve une
+         exception sinon elle retourne le contexte inchangé
+      """
+      for nom_sd,sd in context.items():
+        if not isinstance(sd,ASSD):continue
+        if self.jdc_pere.get_sd_apres_etape_avec_detruire(nom_sd,sd,
+                                                       etape=self.etape_include):
+           # Il existe un concept produit par une etape apres self 
+           # => impossible d'inserer
+           raise Exception("Impossible d'inclure le fichier. Un concept de nom " +
+                           "%s existe déjà dans le jeu de commandes." % nom_sd)
+
+      return context
+
+
 class JDC_INCLUDE(JDC_POURSUITE):
    def active_etapes(self):
       for e in self.etapes: