Salome HOME
PN : changement version Aster
[tools/eficas.git] / Extensions / jdc_include.py
1 # -*- coding: utf-8 -*-
2 #            CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
9 #
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
14 #
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
18 #
19 #
20 # ======================================================================
21
22 """
23    Ce module contient la classe JDC_INCLUDE qui sert a inclure
24    dans un jeu de commandes une partie de jeu de commandes
25    au moyen de la fonctionnalite INCLUDE ou INCLUDE_MATERIAU
26    Quand l'utilisateur veut inclure un fichier il faut versifier
27    que le jeu de commandes inclus est valide et compatible
28    avec le contexte avant et apres l'insertion
29 """
30 from Accas import JDC,ASSD,AsException,JDC_CATA
31
32
33 class JDC_POURSUITE(JDC):
34    def __init__(self,definition=None,procedure=None,cata=None,
35                      cata_ord_dico=None,parent=None,
36                      nom='SansNom',appli=None,context_ini=None,
37                      jdc_pere=None,etape_include=None,prefix_include=None,
38                      recorded_units=None,old_recorded_units=None,**args):
39
40       JDC.__init__(self, definition=definition,
41                          procedure=procedure,
42                          cata=cata,
43                          cata_ord_dico=cata_ord_dico,
44                          parent=parent,
45                          nom=nom,
46                          appli=appli,
47                          context_ini=context_ini,
48                          **args
49                          )
50       self.jdc_pere=jdc_pere
51       self.etape_include=etape_include
52       self.prefix_include=prefix_include
53       if recorded_units is not None:self.recorded_units=recorded_units
54       if old_recorded_units is not None:self.old_recorded_units=old_recorded_units
55
56    def NommerSdprod(self,sd,sdnom,restrict='non'):
57       """
58           Nomme la SD apres avoir verifie que le nommage est possible : nom
59           non utilise
60           Ajoute un prefixe s'il est specifie (INCLUDE_MATERIAU)
61           Si le nom est deja utilise, leve une exception
62           Met le concept créé dans le contexe global g_context
63       """
64       if self.prefix_include:
65           if sdnom != self.prefix_include:sdnom=self.prefix_include+sdnom
66       o=self.sds_dict.get(sdnom,None)
67       if isinstance(o,ASSD):
68          raise AsException("Nom de concept deja defini : %s" % sdnom)
69
70       # On pourrait verifier que le jdc_pere apres l'etape etape_include
71       # ne contient pas deja un concept de ce nom
72       #if self.jdc_pere.get_sd_apres_etape_avec_detruire(sdnom,etape=self.etape_include):
73          # Il existe un concept apres self => impossible d'inserer
74       #   raise AsException("Nom de concept deja defini : %s" % sdnom)
75       # On a choisi de ne pas faire ce test ici mais de le faire en bloc
76       # si necessaire apres en appelant la methode verif_contexte
77
78       # ATTENTION : Il ne faut pas ajouter sd dans sds car il s y trouve deja.
79       # Ajoute a la creation (appel de reg_sd).
80       self.sds_dict[sdnom]=sd
81       sd.nom=sdnom
82
83       # En plus si restrict vaut 'non', on insere le concept dans le contexte du JDC
84       if restrict == 'non':
85          self.g_context[sdnom]=sd
86
87    def get_verif_contexte(self):
88       j_context=self.get_contexte_avant(None)
89       self.verif_contexte(j_context)
90       return j_context
91
92    def verif_contexte(self,context):
93       """
94          Cette methode verifie si le contexte passé en argument (context)
95          peut etre inséré dans le jdc pere de l'include.
96          Elle verifie que les concepts contenus dans ce contexte n'entrent
97          pas en conflit avec les concepts produits dans le jdc pere
98          apres l'include.
99          Si le contexte ne peut pas etre inséré, la méthode leve une
100          exception sinon elle retourne le contexte inchangé
101       """
102       for nom_sd,sd in context.items():
103         if not isinstance(sd,ASSD):continue
104         if self.jdc_pere.get_sd_apres_etape_avec_detruire(nom_sd,sd,
105                                                        etape=self.etape_include):
106            # Il existe un concept produit par une etape apres self 
107            # => impossible d'inserer
108            raise Exception("Impossible d'inclure le fichier. Un concept de nom " +
109                            "%s existe déjà dans le jeu de commandes." % nom_sd)
110
111       return context
112
113
114 class JDC_INCLUDE(JDC_POURSUITE):
115    def active_etapes(self):
116       for e in self.etapes:
117          e.active()
118
119 class JDC_CATA_INCLUDE(JDC_CATA):
120    class_instance=JDC_INCLUDE
121
122 class JDC_CATA_POURSUITE(JDC_CATA):
123    class_instance=JDC_POURSUITE
124
125 from Accas import AU_MOINS_UN,A_CLASSER
126
127 JdC_include=JDC_CATA_INCLUDE(code='ASTER', execmodul=None)
128
129 JdC_poursuite=JDC_CATA_POURSUITE(code='ASTER', execmodul=None,
130                                  regles = (AU_MOINS_UN('DEBUT','POURSUITE'),
131                                            AU_MOINS_UN('FIN'),
132                                            A_CLASSER(('DEBUT','POURSUITE'),'FIN')
133                                           )
134                                )
135
136