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 # ======================================================================
22 Ce module contient le plugin generateur de fichier au format
27 import types,string,re
29 from Noyau import N_CR
30 from Noyau.N_utils import repr_float
31 from Accas import ETAPE,PROC_ETAPE,MACRO_ETAPE,ETAPE_NIVEAU,JDC,FORM_ETAPE
32 from Accas import MCSIMP,MCFACT,MCBLOC,MCList,EVAL
33 from Accas import GEOM,ASSD,MCNUPLET
34 from Accas import COMMENTAIRE,PARAMETRE, PARAMETRE_EVAL,COMMANDE_COMM
38 Retourne les informations nécessaires pour le chargeur de plugins
40 Ces informations sont retournées dans un dictionnaire
45 # La factory pour créer une instance du plugin
46 'factory' : AplatGenerator,
52 Ce generateur parcourt un objet de type JDC et produit
53 un fichier au format aplat
55 L'acquisition et le parcours sont réalisés par la méthode
56 generator.gener(objet_jdc,format)
58 L'écriture du fichier au format ini par appel de la méthode
59 generator.writefile(nom_fichier)
61 Ses caractéristiques principales sont exposées dans des attributs
63 - extensions : qui donne une liste d'extensions de fichier préconisées
66 # Les extensions de fichier préconisées
69 def __init__(self,cr=None):
70 # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
74 self.cr=N_CR.CR(debut='CR generateur format aplat pour eficas',
75 fin='fin CR format aplat pour eficas')
77 # Le séparateur utiisé
79 # Le texte au format aplat est stocké dans l'attribut text
82 def writefile(self,filename):
87 def gener(self,obj,format='brut'):
89 Retourne une représentation du JDC obj sous une forme qui est paramétrée par format.
90 Si format vaut 'brut', 'standard' ou 'beautifie', retourne le texte issu de generator
92 liste= self.generator(obj)
95 elif format == 'standard':
97 elif format == 'beautifie':
100 raise "Format pas implémenté : "+format
103 def generator(self,obj):
105 Cette methode joue un role d'aiguillage en fonction du type de obj
106 On pourrait utiliser les méthodes accept et visitxxx à la
107 place (dépend des gouts !!!)
109 # ATTENTION a l'ordre des tests : il peut avoir de l'importance (héritage)
110 if isinstance(obj,PROC_ETAPE):
111 return self.generPROC_ETAPE(obj)
112 elif isinstance(obj,MACRO_ETAPE):
113 return self.generMACRO_ETAPE(obj)
114 elif isinstance(obj,FORM_ETAPE):
115 return self.generFORM_ETAPE(obj)
116 elif isinstance(obj,ETAPE):
117 return self.generETAPE(obj)
118 elif isinstance(obj,MCFACT):
119 return self.generMCFACT(obj)
120 elif isinstance(obj,MCList):
121 return self.generMCList(obj)
122 elif isinstance(obj,MCBLOC):
123 return self.generMCBLOC(obj)
124 elif isinstance(obj,MCSIMP):
125 return self.generMCSIMP(obj)
126 elif isinstance(obj,ASSD):
127 return self.generASSD(obj)
128 elif isinstance(obj,ETAPE_NIVEAU):
129 return self.generETAPE_NIVEAU(obj)
130 elif isinstance(obj,COMMENTAIRE):
131 return self.generCOMMENTAIRE(obj)
132 # Attention doit etre placé avant PARAMETRE (raison : héritage)
133 elif isinstance(obj,PARAMETRE_EVAL):
134 return self.generPARAMETRE_EVAL(obj)
135 elif isinstance(obj,PARAMETRE):
136 return self.generPARAMETRE(obj)
137 elif isinstance(obj,EVAL):
138 return self.generEVAL(obj)
139 elif isinstance(obj,COMMANDE_COMM):
140 return self.generCOMMANDE_COMM(obj)
141 elif isinstance(obj,JDC):
142 return self.generJDC(obj)
143 elif isinstance(obj,MCNUPLET):
144 return self.generMCNUPLET(obj)
146 raise "Type d'objet non prévu",obj
148 def generJDC(self,obj):
150 Cette méthode convertit un objet JDC en une chaine de
151 caractères à la syntaxe aplat
154 if obj.definition.l_niveaux == ():
155 # Il n'y a pas de niveaux
156 for etape in obj.etapes:
157 text=text+self.generator(etape)+'\n'
160 for etape_niveau in obj.etapes_niveaux:
161 text=text+self.generator(etape_niveau)+'\n'
164 def generCOMMANDE_COMM(self,obj):
166 Cette méthode convertit un COMMANDE_COMM
167 en une chaine de caractères à la syntaxe aplat
169 l_lignes = string.split(obj.valeur,'\n')
171 for ligne in l_lignes:
172 txt = txt + '##'+ligne+'\n'
175 def generEVAL(self,obj):
177 Cette méthode convertit un EVAL
178 en une chaine de caractères à la syntaxe aplat
180 return 'EVAL("""'+ obj.valeur +'""")'
182 def generCOMMENTAIRE(self,obj):
184 Cette méthode convertit un COMMENTAIRE
185 en une chaine de caractères à la syntaxe aplat
187 l_lignes = string.split(obj.valeur,'\n')
189 for ligne in l_lignes:
190 txt = txt + '#'+ligne+'\n'
193 def generPARAMETRE_EVAL(self,obj):
195 Cette méthode convertit un PARAMETRE_EVAL
196 en une chaine de caractères à la syntaxe aplat
198 if obj.valeur == None:
199 return obj.nom + ' = None ;\n'
201 return obj.nom + ' = '+ self.generator(obj.valeur) +';\n'
203 def generPARAMETRE(self,obj):
205 Cette méthode convertit un PARAMETRE
206 en une chaine de caractères à la syntaxe aplat
208 if type(obj.valeur) == types.StringType:
209 # PN pour corriger le bug a='3+4' au lieu de a= 3+4
210 #return obj.nom + " = '" + obj.valeur + "';\n"
211 return obj.nom + " = " + obj.valeur + ";\n"
213 return obj.nom + ' = ' + str(obj.valeur) + ';\n'
215 def generETAPE_NIVEAU(self,obj):
217 Cette méthode convertit une étape niveau
218 en une chaine de caractères à la syntaxe aplat
221 if obj.etapes_niveaux == []:
222 for etape in obj.etapes:
223 text=text+self.generator(etape)+'\n'
225 for etape_niveau in obj.etapes_niveaux:
226 text=text+self.generator(etape_niveau)+'\n'
229 def gener_etape(self,obj):
231 Cette méthode est utilisé pour convertir les objets etape
232 en une chaine de caractères à la syntaxe aplat
235 for v in obj.mc_liste:
236 text=text + self.generator(v)
238 return self.init+'\n'
242 def generETAPE(self,obj):
244 Cette méthode convertit une étape
245 en une chaine de caractères à la syntaxe aplat
248 sdname= self.generator(obj.sd)
251 self.init = sdname + self.sep + obj.nom
252 return self.gener_etape(obj)
254 def generMACRO_ETAPE(self,obj):
256 Cette méthode convertit une macro-étape
257 en une chaine de caractères à la syntaxe aplat
263 sdname= self.generator(obj.sd)
264 self.init = sdname + self.sep + obj.nom
266 self.init = 'sansnom' + self.sep + obj.nom
268 return self.gener_etape(obj)
270 generPROC_ETAPE = generMACRO_ETAPE
272 generFORM_ETAPE = generMACRO_ETAPE
274 def generASSD(self,obj):
276 Convertit un objet dérivé d'ASSD en une chaine de caractères à la
279 return obj.get_name()
281 def generMCList(self,obj):
283 Convertit un objet MCList en une chaine de caractères à la
288 init = self.init + self.sep + obj.nom
290 for data in obj.data :
292 self.init = init + self.sep + "occurrence n°"+`i`
293 text = text + self.generator(data)
297 def generMCSIMP(self,obj) :
299 Convertit un objet MCSIMP en une chaine de caractères à la
302 if type(obj.valeur) in (types.TupleType,types.ListType) :
303 # On est en présence d'une liste de valeur
305 for val in obj.valeur:
306 if type(val) == types.InstanceType :
307 rep = rep + self.generator(val) +','
309 rep = rep + `val`+','
311 elif type(obj.valeur) == types.InstanceType :
312 # On est en présence d'une valeur unique de type instance
313 rep = self.generator(obj.valeur)
315 # On est en présence d'une valeur unique
317 return self.init + self.sep + obj.nom + ' :' + rep + '\n'
319 def generMCCOMPO(self,obj):
321 Convertit un objet MCCOMPO en une chaine de caractères à la
326 self.init = self.init + self.sep + obj.nom
327 for mocle in obj.mc_liste :
328 text = text + self.generator(mocle)
332 generMCFACT=generMCCOMPO
334 generMCBLOC=generMCCOMPO
336 generMCNUPLET=generMCCOMPO