Salome HOME
*** empty log message ***
[tools/eficas.git] / Extensions / jdc_include.py
index d43b442d2c4c481fccd0232e3b2aed0ea4b0e0b2..2e2778d5fbacf5bf7014cd71602a023a4441869e 100644 (file)
 """
 from Accas import JDC,ASSD,AsException,JDC_CATA
 
+class NOTIFIER:
+   def __init__(self):
+      self.subscribers=[]
 
-class JDC_POURSUITE(JDC):
+   def subscribe(self,obj):
+      if not obj in self.subscribers:
+         self.subscribers.append(obj)
+
+   def notify(self):
+      for obj in self.subscribers:
+         obj.notify(self)
+
+class JDC_POURSUITE(JDC,NOTIFIER):
    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,
                      recorded_units=None,old_recorded_units=None,**args):
 
+      NOTIFIER.__init__(self)
       JDC.__init__(self, definition=definition,
                          procedure=procedure,
                          cata=cata,
@@ -59,7 +71,7 @@ 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
@@ -67,11 +79,13 @@ class JDC_POURSUITE(JDC):
       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
+      # 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(sdnom,etape=self.etape_include):
+      #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)
+      # 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).
@@ -82,6 +96,75 @@ 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
+
+   def get_liste_cmd(self):
+      """
+          Retourne la liste des commandes du catalogue
+      """
+      return self.jdc_pere.get_liste_cmd()
+
+   def get_groups(self):
+      """
+          Retourne la liste des commandes du catalogue par groupes
+      """
+      return self.jdc_pere.get_groups()
+
+   def init_modif(self):
+      """
+         Met l'état de l'étape à : modifié
+         Propage la modification au parent
+
+         Attention : init_modif doit etre appelé avant de réaliser une modification
+         La validité devra etre recalculée apres cette modification
+         mais par un appel à fin_modif pour préserver l'état modified
+         de tous les objets entre temps
+      """
+      print "init_modif",self,self.etape_include
+      self.state = 'modified'
+      self.etape_include.init_modif()
+
+   def fin_modif(self):
+      """
+          Méthode appelée une fois qu'une modification a été faite afin de
+          déclencher d'éventuels traitements post-modification
+          ex : INCLUDE et POURSUITE
+      """
+      print "fin_modif",self,self.etape_include
+      self.etape_include.fin_modif()
+      self.notify()
+
+   def supprime(self):
+      """
+          On ne supprime rien pour un jdc auxiliaire d'include ou de poursuite
+      """
+      pass
+
+
 class JDC_INCLUDE(JDC_POURSUITE):
    def active_etapes(self):
       for e in self.etapes: