1 # CONFIGURATION MANAGEMENT OF EDF VERSION
2 # ======================================================================
3 # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
4 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
5 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
6 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
7 # (AT YOUR OPTION) ANY LATER VERSION.
9 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
10 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
11 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
12 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
14 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
15 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
16 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
19 # ======================================================================
21 Ce module contient le plugin generateur de fichier au format
26 import types,string,re
28 from Noyau import N_CR
29 from Noyau.N_utils import repr_float
30 from Accas import ETAPE,PROC_ETAPE,MACRO_ETAPE,ETAPE_NIVEAU,JDC,FORM_ETAPE
31 from Accas import MCSIMP,MCFACT,MCBLOC,MCList,EVAL
32 from Accas import GEOM,ASSD,MCNUPLET
33 from Accas import COMMENTAIRE,PARAMETRE, PARAMETRE_EVAL,COMMANDE_COMM
37 Retourne les informations nécessaires pour le chargeur de plugins
39 Ces informations sont retournées dans un dictionnaire
44 # La factory pour créer une instance du plugin
45 'factory' : AplatGenerator,
51 Ce generateur parcourt un objet de type JDC et produit
52 un fichier au format aplat
54 L'acquisition et le parcours sont réalisés par la méthode
55 generator.gener(objet_jdc,format)
57 L'écriture du fichier au format ini par appel de la méthode
58 generator.writefile(nom_fichier)
60 Ses caractéristiques principales sont exposées dans des attributs
62 - extensions : qui donne une liste d'extensions de fichier préconisées
65 # Les extensions de fichier préconisées
68 def __init__(self,cr=None):
69 # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
73 self.cr=N_CR.CR(debut='CR generateur format aplat pour eficas',
74 fin='fin CR format aplat pour eficas')
76 # Le séparateur utiisé
78 # Le texte au format aplat est stocké dans l'attribut text
81 def writefile(self,filename):
86 def gener(self,obj,format='brut'):
88 Retourne une représentation du JDC obj sous une forme qui est paramétrée par format.
89 Si format vaut 'brut', 'standard' ou 'beautifie', retourne le texte issu de generator
91 liste= self.generator(obj)
94 elif format == 'standard':
96 elif format == 'beautifie':
99 raise "Format pas implémenté : "+format
102 def generator(self,obj):
104 Cette methode joue un role d'aiguillage en fonction du type de obj
105 On pourrait utiliser les méthodes accept et visitxxx à la
106 place (dépend des gouts !!!)
108 # ATTENTION a l'ordre des tests : il peut avoir de l'importance (héritage)
109 if isinstance(obj,PROC_ETAPE):
110 return self.generPROC_ETAPE(obj)
111 elif isinstance(obj,MACRO_ETAPE):
112 return self.generMACRO_ETAPE(obj)
113 elif isinstance(obj,FORM_ETAPE):
114 return self.generFORM_ETAPE(obj)
115 elif isinstance(obj,ETAPE):
116 return self.generETAPE(obj)
117 elif isinstance(obj,MCFACT):
118 return self.generMCFACT(obj)
119 elif isinstance(obj,MCList):
120 return self.generMCList(obj)
121 elif isinstance(obj,MCBLOC):
122 return self.generMCBLOC(obj)
123 elif isinstance(obj,MCSIMP):
124 return self.generMCSIMP(obj)
125 elif isinstance(obj,ASSD):
126 return self.generASSD(obj)
127 elif isinstance(obj,ETAPE_NIVEAU):
128 return self.generETAPE_NIVEAU(obj)
129 elif isinstance(obj,COMMENTAIRE):
130 return self.generCOMMENTAIRE(obj)
131 # Attention doit etre placé avant PARAMETRE (raison : héritage)
132 elif isinstance(obj,PARAMETRE_EVAL):
133 return self.generPARAMETRE_EVAL(obj)
134 elif isinstance(obj,PARAMETRE):
135 return self.generPARAMETRE(obj)
136 elif isinstance(obj,EVAL):
137 return self.generEVAL(obj)
138 elif isinstance(obj,COMMANDE_COMM):
139 return self.generCOMMANDE_COMM(obj)
140 elif isinstance(obj,JDC):
141 return self.generJDC(obj)
142 elif isinstance(obj,MCNUPLET):
143 return self.generMCNUPLET(obj)
145 raise "Type d'objet non prévu",obj
147 def generJDC(self,obj):
149 Cette méthode convertit un objet JDC en une chaine de
150 caractères à la syntaxe aplat
153 if obj.definition.l_niveaux == ():
154 # Il n'y a pas de niveaux
155 for etape in obj.etapes:
156 text=text+self.generator(etape)+'\n'
159 for etape_niveau in obj.etapes_niveaux:
160 text=text+self.generator(etape_niveau)+'\n'
163 def generCOMMANDE_COMM(self,obj):
165 Cette méthode convertit un COMMANDE_COMM
166 en une chaine de caractères à la syntaxe aplat
168 l_lignes = string.split(obj.valeur,'\n')
170 for ligne in l_lignes:
171 txt = txt + '##'+ligne+'\n'
174 def generEVAL(self,obj):
176 Cette méthode convertit un EVAL
177 en une chaine de caractères à la syntaxe aplat
179 return 'EVAL("""'+ obj.valeur +'""")'
181 def generCOMMENTAIRE(self,obj):
183 Cette méthode convertit un COMMENTAIRE
184 en une chaine de caractères à la syntaxe aplat
186 l_lignes = string.split(obj.valeur,'\n')
188 for ligne in l_lignes:
189 txt = txt + '#'+ligne+'\n'
192 def generPARAMETRE_EVAL(self,obj):
194 Cette méthode convertit un PARAMETRE_EVAL
195 en une chaine de caractères à la syntaxe aplat
197 if obj.valeur == None:
198 return obj.nom + ' = None ;\n'
200 return obj.nom + ' = '+ self.generator(obj.valeur) +';\n'
202 def generPARAMETRE(self,obj):
204 Cette méthode convertit un PARAMETRE
205 en une chaine de caractères à la syntaxe aplat
207 if type(obj.valeur) == types.StringType:
208 return obj.nom + " = '" + obj.valeur + "';\n"
210 return obj.nom + ' = ' + str(obj.valeur) + ';\n'
212 def generETAPE_NIVEAU(self,obj):
214 Cette méthode convertit une étape niveau
215 en une chaine de caractères à la syntaxe aplat
218 if obj.etapes_niveaux == []:
219 for etape in obj.etapes:
220 text=text+self.generator(etape)+'\n'
222 for etape_niveau in obj.etapes_niveaux:
223 text=text+self.generator(etape_niveau)+'\n'
226 def gener_etape(self,obj):
228 Cette méthode est utilisé pour convertir les objets etape
229 en une chaine de caractères à la syntaxe aplat
232 for v in obj.mc_liste:
233 text=text + self.generator(v)
235 return self.init+'\n'
239 def generETAPE(self,obj):
241 Cette méthode convertit une étape
242 en une chaine de caractères à la syntaxe aplat
245 sdname= self.generator(obj.sd)
248 self.init = sdname + self.sep + obj.nom
249 return self.gener_etape(obj)
251 def generMACRO_ETAPE(self,obj):
253 Cette méthode convertit une macro-étape
254 en une chaine de caractères à la syntaxe aplat
260 sdname= self.generator(obj.sd)
261 self.init = sdname + self.sep + obj.nom
263 self.init = 'sansnom' + self.sep + obj.nom
265 return self.gener_etape(obj)
267 generPROC_ETAPE = generMACRO_ETAPE
269 generFORM_ETAPE = generMACRO_ETAPE
271 def generASSD(self,obj):
273 Convertit un objet dérivé d'ASSD en une chaine de caractères à la
276 return obj.get_name()
278 def generMCList(self,obj):
280 Convertit un objet MCList en une chaine de caractères à la
285 init = self.init + self.sep + obj.nom
287 for data in obj.data :
289 self.init = init + self.sep + "occurrence n°"+`i`
290 text = text + self.generator(data)
294 def generMCSIMP(self,obj) :
296 Convertit un objet MCSIMP en une chaine de caractères à la
299 if type(obj.valeur) in (types.TupleType,types.ListType) :
300 # On est en présence d'une liste de valeur
302 for val in obj.valeur:
303 if type(val) == types.InstanceType :
304 rep = rep + self.generator(val) +','
306 rep = rep + `val`+','
308 elif type(obj.valeur) == types.InstanceType :
309 # On est en présence d'une valeur unique de type instance
310 rep = self.generator(obj.valeur)
312 # On est en présence d'une valeur unique
314 return self.init + self.sep + obj.nom + ' :' + rep + '\n'
316 def generMCCOMPO(self,obj):
318 Convertit un objet MCCOMPO en une chaine de caractères à la
323 self.init = self.init + self.sep + obj.nom
324 for mocle in obj.mc_liste :
325 text = text + self.generator(mocle)
329 generMCFACT=generMCCOMPO
331 generMCBLOC=generMCCOMPO
333 generMCNUPLET=generMCCOMPO