Salome HOME
merge de la branche BR_dev_mars_06 (tag V1_10b5) dans la branche principale
[tools/eficas.git] / generator / generator_ini.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     Ce module contient le plugin generateur de fichier
23     au format ini pour EFICAS.
24
25
26 """
27 import traceback
28 import types,string
29
30 from Noyau import N_CR
31 from Accas import MCSIMP,MCFACT
32
33 def entryPoint():
34    """
35        Retourne les informations nécessaires pour le chargeur de plugins
36        Ces informations sont retournées dans un dictionnaire
37    """
38    return {
39         # Le nom du plugin
40           'name' : 'ini',
41         # La factory pour créer une instance du plugin
42           'factory' : IniGenerator,
43           }
44
45
46 class IniGenerator:
47    """
48        Ce generateur parcourt un objet de type MCFACT et produit
49        un fichier au format ini 
50        L'acquisition et le parcours sont réalisés par le méthode
51        generator.gener(objet_mcfact)
52        L'écriture du fichier au format ini par appel de la méthode
53        generator.writefile(nom_fichier)
54
55        Ses caractéristiques principales sont exposées dans des attributs 
56        de classe :
57          - extensions : qui donne une liste d'extensions de fichier préconisées
58
59    """
60    # Les extensions de fichier préconisées
61    extensions=('.ini','.conf')
62
63    def __init__(self,cr=None):
64       # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
65       if cr :
66          self.cr=cr
67       else:
68          self.cr=N_CR.CR(debut='CR generateur format ini',
69                          fin='fin CR format ini')
70       # Le texte au format ini est stocké dans l'attribut text
71       self.text=''
72
73    def writefile(self,filename):
74       fp=open(filename,'w')
75       fp.write(self.text)
76       fp.close()
77
78    def gener(self,obj):
79       """
80          Tous les mots-clés simples du niveau haut sont mis dans la section DEFAUT
81          Tous les mots-clés facteurs sont convertis en sections
82          Un mot-clé facteur ne peut contenir que des mots-clés simples. Sinon => erreur
83       """
84       liste_mcfact=[]
85       sect_defaut=''
86       for mocle in obj.mc_liste:
87          if isinstance(mocle,MCFACT):
88             liste_mcfact.append(self.generMCFACT(mocle))
89          elif isinstance(mocle,MCSIMP):
90             sect_defaut=sect_defaut+self.generMCSIMP(mocle)
91          else:
92             self.cr.fatal("Entite inconnue ou interdite : "+`mocle`)
93       self.text=''
94       if sect_defaut != '':
95          self.text="[DEFAULT]\n"+sect_defaut
96       self.text=self.text + string.join(liste_mcfact,'\n')
97       return self.text
98
99    def generMCFACT(self,obj):
100       """
101          Cette méthode convertit un mot-clé facteur ne contenant que des mots-clés
102          simples en une chaine de caractères
103       """
104       sect_text='[%s]\n' % obj.nom
105       for mocle in obj.mc_liste:
106          if isinstance(mocle,MCSIMP):
107             sect_text=sect_text+self.generMCSIMP(mocle)
108          else:
109             self.cr.fatal("Entite inconnue ou interdite : "+`mocle`+" Elle est ignorée")
110       return sect_text
111
112    def generMCSIMP(self,obj):
113       """
114          Cette méthode convertit un mot-clé simple en une chaine de caractères
115          au format ini
116       """
117       s=''
118       if type(obj.valeur) == types.TupleType :
119          self.cr.fatal("Les tuples ne sont pas supportés pour le format ini : "+ obj.nom)
120          s="%s = %s\n" % (obj.nom,"ERREUR")
121       else :
122          try:
123             s="%s = %s\n" % (obj.nom,obj.valeur)
124          except Exception,e :
125             self.cr.fatal("Type de valeur non supporté par le format ini : "+ obj.nom + '\n'+str(e))
126             s="%s = %s\n" % (obj.nom,"ERREUR")
127       return s
128