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 # PN pour corriger le bug a='3+4' au lieu de a= 3+4
209 #return obj.nom + " = '" + obj.valeur + "';\n"
210 return obj.nom + " = " + obj.valeur + ";\n"
212 return obj.nom + ' = ' + str(obj.valeur) + ';\n'
214 def generETAPE_NIVEAU(self,obj):
216 Cette méthode convertit une étape niveau
217 en une chaine de caractères à la syntaxe aplat
220 if obj.etapes_niveaux == []:
221 for etape in obj.etapes:
222 text=text+self.generator(etape)+'\n'
224 for etape_niveau in obj.etapes_niveaux:
225 text=text+self.generator(etape_niveau)+'\n'
228 def gener_etape(self,obj):
230 Cette méthode est utilisé pour convertir les objets etape
231 en une chaine de caractères à la syntaxe aplat
234 for v in obj.mc_liste:
235 text=text + self.generator(v)
237 return self.init+'\n'
241 def generETAPE(self,obj):
243 Cette méthode convertit une étape
244 en une chaine de caractères à la syntaxe aplat
247 sdname= self.generator(obj.sd)
250 self.init = sdname + self.sep + obj.nom
251 return self.gener_etape(obj)
253 def generMACRO_ETAPE(self,obj):
255 Cette méthode convertit une macro-étape
256 en une chaine de caractères à la syntaxe aplat
262 sdname= self.generator(obj.sd)
263 self.init = sdname + self.sep + obj.nom
265 self.init = 'sansnom' + self.sep + obj.nom
267 return self.gener_etape(obj)
269 generPROC_ETAPE = generMACRO_ETAPE
271 generFORM_ETAPE = generMACRO_ETAPE
273 def generASSD(self,obj):
275 Convertit un objet dérivé d'ASSD en une chaine de caractères à la
278 return obj.get_name()
280 def generMCList(self,obj):
282 Convertit un objet MCList en une chaine de caractères à la
287 init = self.init + self.sep + obj.nom
289 for data in obj.data :
291 self.init = init + self.sep + "occurrence n°"+`i`
292 text = text + self.generator(data)
296 def generMCSIMP(self,obj) :
298 Convertit un objet MCSIMP en une chaine de caractères à la
301 if type(obj.valeur) in (types.TupleType,types.ListType) :
302 # On est en présence d'une liste de valeur
304 for val in obj.valeur:
305 if type(val) == types.InstanceType :
306 rep = rep + self.generator(val) +','
308 rep = rep + `val`+','
310 elif type(obj.valeur) == types.InstanceType :
311 # On est en présence d'une valeur unique de type instance
312 rep = self.generator(obj.valeur)
314 # On est en présence d'une valeur unique
316 return self.init + self.sep + obj.nom + ' :' + rep + '\n'
318 def generMCCOMPO(self,obj):
320 Convertit un objet MCCOMPO en une chaine de caractères à la
325 self.init = self.init + self.sep + obj.nom
326 for mocle in obj.mc_liste :
327 text = text + self.generator(mocle)
331 generMCFACT=generMCCOMPO
333 generMCBLOC=generMCCOMPO
335 generMCNUPLET=generMCCOMPO