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