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.
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.
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.
20 # ======================================================================
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
30 from Accas import JDC,ASSD,AsException,JDC_CATA
36 def subscribe(self,obj):
37 if not obj in self.subscribers:
38 self.subscribers.append(obj)
41 for obj in self.subscribers:
44 class JDC_POURSUITE(JDC,NOTIFIER):
45 def __init__(self,definition=None,procedure=None,cata=None,
46 cata_ord_dico=None,parent=None,
47 nom='SansNom',appli=None,context_ini=None,
48 jdc_pere=None,etape_include=None,prefix_include=None,
49 recorded_units=None,old_recorded_units=None,**args):
51 NOTIFIER.__init__(self)
52 JDC.__init__(self, definition=definition,
55 cata_ord_dico=cata_ord_dico,
59 context_ini=context_ini,
62 self.jdc_pere=jdc_pere
63 self.etape_include=etape_include
64 self.prefix_include=prefix_include
65 if recorded_units is not None:self.recorded_units=recorded_units
66 if old_recorded_units is not None:self.old_recorded_units=old_recorded_units
68 def NommerSdprod(self,sd,sdnom,restrict='non'):
70 Nomme la SD apres avoir verifie que le nommage est possible : nom
72 Ajoute un prefixe s'il est specifie (INCLUDE_MATERIAU)
73 Si le nom est deja utilise, leve une exception
74 Met le concept créé dans le contexe global g_context
76 if self.prefix_include:
77 if sdnom != self.prefix_include:sdnom=self.prefix_include+sdnom
78 o=self.sds_dict.get(sdnom,None)
79 if isinstance(o,ASSD):
80 raise AsException("Nom de concept deja defini : %s" % sdnom)
82 # On pourrait verifier que le jdc_pere apres l'etape etape_include
83 # ne contient pas deja un concept de ce nom
84 #if self.jdc_pere.get_sd_apres_etape_avec_detruire(sdnom,etape=self.etape_include):
85 # Il existe un concept apres self => impossible d'inserer
86 # raise AsException("Nom de concept deja defini : %s" % sdnom)
87 # On a choisi de ne pas faire ce test ici mais de le faire en bloc
88 # si necessaire apres en appelant la methode verif_contexte
90 # ATTENTION : Il ne faut pas ajouter sd dans sds car il s y trouve deja.
91 # Ajoute a la creation (appel de reg_sd).
92 self.sds_dict[sdnom]=sd
95 # En plus si restrict vaut 'non', on insere le concept dans le contexte du JDC
97 self.g_context[sdnom]=sd
99 def get_verif_contexte(self):
100 j_context=self.get_contexte_avant(None)
101 self.verif_contexte(j_context)
104 def verif_contexte(self,context):
106 Cette methode verifie si le contexte passé en argument (context)
107 peut etre inséré dans le jdc pere de l'include.
108 Elle verifie que les concepts contenus dans ce contexte n'entrent
109 pas en conflit avec les concepts produits dans le jdc pere
111 Si le contexte ne peut pas etre inséré, la méthode leve une
112 exception sinon elle retourne le contexte inchangé
114 for nom_sd,sd in context.items():
115 if not isinstance(sd,ASSD):continue
116 if self.jdc_pere.get_sd_apres_etape_avec_detruire(nom_sd,sd,
117 etape=self.etape_include):
118 # Il existe un concept produit par une etape apres self
119 # => impossible d'inserer
120 raise Exception("Impossible d'inclure le fichier. Un concept de nom " +
121 "%s existe déjà dans le jeu de commandes." % nom_sd)
125 def get_liste_cmd(self):
127 Retourne la liste des commandes du catalogue
129 return self.jdc_pere.get_liste_cmd()
131 def get_groups(self):
133 Retourne la liste des commandes du catalogue par groupes
135 return self.jdc_pere.get_groups()
137 def init_modif(self):
139 Met l'état de l'étape à : modifié
140 Propage la modification au parent
142 Attention : init_modif doit etre appelé avant de réaliser une modification
143 La validité devra etre recalculée apres cette modification
144 mais par un appel à fin_modif pour préserver l'état modified
145 de tous les objets entre temps
147 print "init_modif",self,self.etape_include
148 self.state = 'modified'
149 self.etape_include.init_modif()
153 Méthode appelée une fois qu'une modification a été faite afin de
154 déclencher d'éventuels traitements post-modification
155 ex : INCLUDE et POURSUITE
157 print "fin_modif",self,self.etape_include
158 self.etape_include.fin_modif()
163 On ne supprime rien pour un jdc auxiliaire d'include ou de poursuite
168 class JDC_INCLUDE(JDC_POURSUITE):
169 def active_etapes(self):
170 for e in self.etapes:
173 class JDC_CATA_INCLUDE(JDC_CATA):
174 class_instance=JDC_INCLUDE
176 class JDC_CATA_POURSUITE(JDC_CATA):
177 class_instance=JDC_POURSUITE
179 from Accas import AU_MOINS_UN,A_CLASSER
181 JdC_include=JDC_CATA_INCLUDE(code='ASTER', execmodul=None)
183 JdC_poursuite=JDC_CATA_POURSUITE(code='ASTER', execmodul=None,
184 regles = (AU_MOINS_UN('DEBUT','POURSUITE'),
186 A_CLASSER(('DEBUT','POURSUITE'),'FIN')